Просмотр исходного кода

收文登记 部门管理 全馆值班登记 预算批复管理 预算费用管理 后端

xieyn 2 лет назад
Родитель
Сommit
d50f12c578
51 измененных файлов с 3173 добавлено и 16 удалено
  1. 273 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/BudgetCostController.java
  2. 272 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/BudgetReplyController.java
  3. 275 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MuseumDutyController.java
  4. 263 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/ReceivedMainController.java
  5. 80 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetCost.java
  6. 102 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetCostDetail.java
  7. 84 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetReply.java
  8. 106 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetReplyDetail.java
  9. 84 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MuseumDuty.java
  10. 76 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MuseumDutyDetail.java
  11. 76 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/ReceivedDetail.java
  12. 92 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/ReceivedMain.java
  13. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetCostDetailMapper.java
  14. 21 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetCostMapper.java
  15. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetReplyDetailMapper.java
  16. 22 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetReplyMapper.java
  17. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MuseumDutyDetailMapper.java
  18. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MuseumDutyMapper.java
  19. 20 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/ReceivedDetailMapper.java
  20. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/ReceivedMainMapper.java
  21. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetCostDetailMapper.xml
  22. 9 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetCostMapper.xml
  23. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetReplyDetailMapper.xml
  24. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetReplyMapper.xml
  25. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MuseumDutyDetailMapper.xml
  26. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MuseumDutyMapper.xml
  27. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/ReceivedDetailMapper.xml
  28. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/ReceivedMainMapper.xml
  29. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetCostDetailService.java
  30. 48 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetCostService.java
  31. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetReplyDetailService.java
  32. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetReplyService.java
  33. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMuseumDutyDetailService.java
  34. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMuseumDutyService.java
  35. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IReceivedDetailService.java
  36. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IReceivedMainService.java
  37. 27 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetCostDetailServiceImpl.java
  38. 85 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetCostServiceImpl.java
  39. 27 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetReplyDetailServiceImpl.java
  40. 77 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetReplyServiceImpl.java
  41. 27 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MuseumDutyDetailServiceImpl.java
  42. 77 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MuseumDutyServiceImpl.java
  43. 27 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/ReceivedDetailServiceImpl.java
  44. 78 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/ReceivedMainServiceImpl.java
  45. 82 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetCostPage.java
  46. 113 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetCostPages.java
  47. 86 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetReplyPage.java
  48. 86 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/MuseumDutyPage.java
  49. 93 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/ReceivedMainPage.java
  50. 9 6
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
  51. 22 10
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java

+ 273 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/BudgetCostController.java

@@ -0,0 +1,273 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.modules.oa.vo.BudgetCostPages;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import org.jeecg.modules.oa.entity.BudgetCost;
+import org.jeecg.modules.oa.vo.BudgetCostPage;
+import org.jeecg.modules.oa.service.IBudgetCostService;
+import org.jeecg.modules.oa.service.IBudgetCostDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Api(tags="预算费用管理")
+@RestController
+@RequestMapping("/oa/budgetCost")
+@Slf4j
+public class BudgetCostController {
+	@Autowired
+	private IBudgetCostService budgetCostService;
+	@Autowired
+	private IBudgetCostDetailService budgetCostDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param budgetCostPages
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-分页列表查询")
+	@ApiOperation(value="预算费用管理-分页列表查询", notes="预算费用管理-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(BudgetCostPages budgetCostPages,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) throws ParseException {
+		Date budgetYear = budgetCostPages.getBudgetYear();
+		budgetCostPages.setBudgetYear(null);
+		int year=0;
+		QueryWrapper<org.jeecg.modules.oa.vo.BudgetCostPages> queryWrapper = QueryGenerator.initQueryWrapper(budgetCostPages, req.getParameterMap());
+		if(budgetYear!=null){
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			String format = sdf.format(budgetYear);
+			Date parse = sdf.parse(format);
+			Calendar c = Calendar.getInstance();
+			c.setTime(parse);
+			year = c.get(Calendar.YEAR);
+			queryWrapper.eq("YEAR(budget_year)",year);
+		}
+		Page<BudgetCostPages> page = new Page<BudgetCostPages>(pageNo, pageSize);
+		IPage<BudgetCostPages> pageList = budgetCostService.pages(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param budgetCostPage
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-添加")
+	@ApiOperation(value="预算费用管理-添加", notes="预算费用管理-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody BudgetCostPage budgetCostPage) {
+		BudgetCost budgetCost = new BudgetCost();
+		BeanUtils.copyProperties(budgetCostPage, budgetCost);
+		budgetCostService.saveMain(budgetCost, budgetCostPage.getBudgetCostDetailList());
+		return Result.ok("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param budgetCostPage
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-编辑")
+	@ApiOperation(value="预算费用管理-编辑", notes="预算费用管理-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody BudgetCostPage budgetCostPage) {
+		BudgetCost budgetCost = new BudgetCost();
+		BeanUtils.copyProperties(budgetCostPage, budgetCost);
+		BudgetCost budgetCostEntity = budgetCostService.getById(budgetCost.getId());
+		if(budgetCostEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		budgetCostService.updateMain(budgetCost, budgetCostPage.getBudgetCostDetailList());
+		return Result.ok("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-通过id删除")
+	@ApiOperation(value="预算费用管理-通过id删除", notes="预算费用管理-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		budgetCostService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-批量删除")
+	@ApiOperation(value="预算费用管理-批量删除", notes="预算费用管理-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.budgetCostService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理-通过id查询")
+	@ApiOperation(value="预算费用管理-通过id查询", notes="预算费用管理-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		BudgetCost budgetCost = budgetCostService.getById(id);
+		if(budgetCost==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(budgetCost);
+
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算费用管理子表集合-通过id查询")
+	@ApiOperation(value="预算费用管理子表集合-通过id查询", notes="预算费用管理子表-通过id查询")
+	@GetMapping(value = "/queryBudgetCostDetailByMainId")
+	public Result<?> queryBudgetCostDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<BudgetCostDetail> budgetCostDetailList = budgetCostDetailService.selectByMainId(id);
+		return Result.ok(budgetCostDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param budgetCost
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BudgetCost budgetCost) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<BudgetCost> queryWrapper = QueryGenerator.initQueryWrapper(budgetCost, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<BudgetCost> queryList = budgetCostService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<BudgetCost> budgetCostList = new ArrayList<BudgetCost>();
+      if(oConvertUtils.isEmpty(selections)) {
+          budgetCostList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          budgetCostList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<BudgetCostPage> pageList = new ArrayList<BudgetCostPage>();
+      for (BudgetCost main : budgetCostList) {
+          BudgetCostPage vo = new BudgetCostPage();
+          BeanUtils.copyProperties(main, vo);
+          List<BudgetCostDetail> budgetCostDetailList = budgetCostDetailService.selectByMainId(main.getId());
+          vo.setBudgetCostDetailList(budgetCostDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "预算费用管理列表");
+      mv.addObject(NormalExcelConstants.CLASS, BudgetCostPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("预算费用管理数据", "导出人:"+sysUser.getRealname(), "预算费用管理"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<BudgetCostPage> list = ExcelImportUtil.importExcel(file.getInputStream(), BudgetCostPage.class, params);
+              for (BudgetCostPage page : list) {
+                  BudgetCost po = new BudgetCost();
+                  BeanUtils.copyProperties(page, po);
+                  budgetCostService.saveMain(po, page.getBudgetCostDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 272 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/BudgetReplyController.java

@@ -0,0 +1,272 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import org.jeecg.modules.oa.entity.BudgetReply;
+import org.jeecg.modules.oa.vo.BudgetReplyPage;
+import org.jeecg.modules.oa.service.IBudgetReplyService;
+import org.jeecg.modules.oa.service.IBudgetReplyDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Api(tags="预算批复管理")
+@RestController
+@RequestMapping("/oa/budgetReply")
+@Slf4j
+public class BudgetReplyController {
+	@Autowired
+	private IBudgetReplyService budgetReplyService;
+	@Autowired
+	private IBudgetReplyDetailService budgetReplyDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param budgetReply
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-分页列表查询")
+	@ApiOperation(value="预算批复管理-分页列表查询", notes="预算批复管理-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(BudgetReply budgetReply,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) throws ParseException {
+		Date budgetYear = budgetReply.getBudgetYear();
+		budgetReply.setBudgetYear(null);
+		int year=0;
+		QueryWrapper<BudgetReply> queryWrapper = QueryGenerator.initQueryWrapper(budgetReply, req.getParameterMap());
+		if(budgetYear!=null){
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			String format = sdf.format(budgetYear);
+			Date parse = sdf.parse(format);
+			Calendar c = Calendar.getInstance();
+			c.setTime(parse);
+			year = c.get(Calendar.YEAR);
+			queryWrapper.eq("YEAR(budget_year)",year);
+		}
+		Page<BudgetReply> page = new Page<BudgetReply>(pageNo, pageSize);
+		IPage<BudgetReply> pageList = budgetReplyService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param budgetReplyPage
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-添加")
+	@ApiOperation(value="预算批复管理-添加", notes="预算批复管理-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody BudgetReplyPage budgetReplyPage) {
+		BudgetReply budgetReply = new BudgetReply();
+		BeanUtils.copyProperties(budgetReplyPage, budgetReply);
+		budgetReplyService.saveMain(budgetReply, budgetReplyPage.getBudgetReplyDetailList());
+		return Result.ok("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param budgetReplyPage
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-编辑")
+	@ApiOperation(value="预算批复管理-编辑", notes="预算批复管理-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody BudgetReplyPage budgetReplyPage) {
+		BudgetReply budgetReply = new BudgetReply();
+		BeanUtils.copyProperties(budgetReplyPage, budgetReply);
+		BudgetReply budgetReplyEntity = budgetReplyService.getById(budgetReply.getId());
+		if(budgetReplyEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		budgetReplyService.updateMain(budgetReply, budgetReplyPage.getBudgetReplyDetailList());
+		return Result.ok("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-通过id删除")
+	@ApiOperation(value="预算批复管理-通过id删除", notes="预算批复管理-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		budgetReplyService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-批量删除")
+	@ApiOperation(value="预算批复管理-批量删除", notes="预算批复管理-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.budgetReplyService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理-通过id查询")
+	@ApiOperation(value="预算批复管理-通过id查询", notes="预算批复管理-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		BudgetReply budgetReply = budgetReplyService.getById(id);
+		if(budgetReply==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(budgetReply);
+
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预算批复管理子表集合-通过id查询")
+	@ApiOperation(value="预算批复管理子表集合-通过id查询", notes="预算批复管理子表-通过id查询")
+	@GetMapping(value = "/queryBudgetReplyDetailByMainId")
+	public Result<?> queryBudgetReplyDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<BudgetReplyDetail> budgetReplyDetailList = budgetReplyDetailService.selectByMainId(id);
+		return Result.ok(budgetReplyDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param budgetReply
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BudgetReply budgetReply) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<BudgetReply> queryWrapper = QueryGenerator.initQueryWrapper(budgetReply, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<BudgetReply> queryList = budgetReplyService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<BudgetReply> budgetReplyList = new ArrayList<BudgetReply>();
+      if(oConvertUtils.isEmpty(selections)) {
+          budgetReplyList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          budgetReplyList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<BudgetReplyPage> pageList = new ArrayList<BudgetReplyPage>();
+      for (BudgetReply main : budgetReplyList) {
+          BudgetReplyPage vo = new BudgetReplyPage();
+          BeanUtils.copyProperties(main, vo);
+          List<BudgetReplyDetail> budgetReplyDetailList = budgetReplyDetailService.selectByMainId(main.getId());
+          vo.setBudgetReplyDetailList(budgetReplyDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "预算批复管理列表");
+      mv.addObject(NormalExcelConstants.CLASS, BudgetReplyPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("预算批复管理数据", "导出人:"+sysUser.getRealname(), "预算批复管理"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<BudgetReplyPage> list = ExcelImportUtil.importExcel(file.getInputStream(), BudgetReplyPage.class, params);
+              for (BudgetReplyPage page : list) {
+                  BudgetReply po = new BudgetReply();
+                  BeanUtils.copyProperties(page, po);
+                  budgetReplyService.saveMain(po, page.getBudgetReplyDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 275 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MuseumDutyController.java

@@ -0,0 +1,275 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import org.jeecg.modules.oa.entity.MuseumDuty;
+import org.jeecg.modules.oa.vo.MuseumDutyPage;
+import org.jeecg.modules.oa.service.IMuseumDutyService;
+import org.jeecg.modules.oa.service.IMuseumDutyDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Api(tags="全馆值班登记")
+@RestController
+@RequestMapping("/oa/museumDuty")
+@Slf4j
+public class MuseumDutyController {
+	@Autowired
+	private IMuseumDutyService museumDutyService;
+	@Autowired
+	private IMuseumDutyDetailService museumDutyDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param museumDuty
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-分页列表查询")
+	@ApiOperation(value="全馆值班登记-分页列表查询", notes="全馆值班登记-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(MuseumDuty museumDuty,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) throws ParseException {
+		Date dutyMonth = museumDuty.getDutyMonth();
+		museumDuty.setDutyMonth(null);
+		int year=0;
+		int month=0;
+		QueryWrapper<MuseumDuty> queryWrapper = QueryGenerator.initQueryWrapper(museumDuty, req.getParameterMap());
+		if(dutyMonth!=null){
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+			String format = sdf.format(dutyMonth);
+			Date parse = sdf.parse(format);
+			Calendar c = Calendar.getInstance();
+			c.setTime(parse);
+			year = c.get(Calendar.YEAR);
+			month = c.get(Calendar.MONTH)+1;
+			queryWrapper.eq("YEAR(duty_month)",year);
+			queryWrapper.eq("MONTH(duty_month)",month);
+		}
+		Page<MuseumDuty> page = new Page<MuseumDuty>(pageNo, pageSize);
+		IPage<MuseumDuty> pageList = museumDutyService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param museumDutyPage
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-添加")
+	@ApiOperation(value="全馆值班登记-添加", notes="全馆值班登记-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody MuseumDutyPage museumDutyPage) {
+		MuseumDuty museumDuty = new MuseumDuty();
+		BeanUtils.copyProperties(museumDutyPage, museumDuty);
+		museumDutyService.saveMain(museumDuty, museumDutyPage.getMuseumDutyDetailList());
+		return Result.ok("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param museumDutyPage
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-编辑")
+	@ApiOperation(value="全馆值班登记-编辑", notes="全馆值班登记-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody MuseumDutyPage museumDutyPage) {
+		MuseumDuty museumDuty = new MuseumDuty();
+		BeanUtils.copyProperties(museumDutyPage, museumDuty);
+		MuseumDuty museumDutyEntity = museumDutyService.getById(museumDuty.getId());
+		if(museumDutyEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		museumDutyService.updateMain(museumDuty, museumDutyPage.getMuseumDutyDetailList());
+		return Result.ok("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-通过id删除")
+	@ApiOperation(value="全馆值班登记-通过id删除", notes="全馆值班登记-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		museumDutyService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-批量删除")
+	@ApiOperation(value="全馆值班登记-批量删除", notes="全馆值班登记-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.museumDutyService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记-通过id查询")
+	@ApiOperation(value="全馆值班登记-通过id查询", notes="全馆值班登记-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		MuseumDuty museumDuty = museumDutyService.getById(id);
+		if(museumDuty==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(museumDuty);
+
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "全馆值班登记子表集合-通过id查询")
+	@ApiOperation(value="全馆值班登记子表集合-通过id查询", notes="全馆值班登记子表-通过id查询")
+	@GetMapping(value = "/queryMuseumDutyDetailByMainId")
+	public Result<?> queryMuseumDutyDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<MuseumDutyDetail> museumDutyDetailList = museumDutyDetailService.selectByMainId(id);
+		return Result.ok(museumDutyDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param museumDuty
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MuseumDuty museumDuty) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<MuseumDuty> queryWrapper = QueryGenerator.initQueryWrapper(museumDuty, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<MuseumDuty> queryList = museumDutyService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<MuseumDuty> museumDutyList = new ArrayList<MuseumDuty>();
+      if(oConvertUtils.isEmpty(selections)) {
+          museumDutyList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          museumDutyList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<MuseumDutyPage> pageList = new ArrayList<MuseumDutyPage>();
+      for (MuseumDuty main : museumDutyList) {
+          MuseumDutyPage vo = new MuseumDutyPage();
+          BeanUtils.copyProperties(main, vo);
+          List<MuseumDutyDetail> museumDutyDetailList = museumDutyDetailService.selectByMainId(main.getId());
+          vo.setMuseumDutyDetailList(museumDutyDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "全馆值班登记列表");
+      mv.addObject(NormalExcelConstants.CLASS, MuseumDutyPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("全馆值班登记数据", "导出人:"+sysUser.getRealname(), "全馆值班登记"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<MuseumDutyPage> list = ExcelImportUtil.importExcel(file.getInputStream(), MuseumDutyPage.class, params);
+              for (MuseumDutyPage page : list) {
+                  MuseumDuty po = new MuseumDuty();
+                  BeanUtils.copyProperties(page, po);
+                  museumDutyService.saveMain(po, page.getMuseumDutyDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 263 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/ReceivedMainController.java

@@ -0,0 +1,263 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.aspect.annotation.PermissionData;
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import org.jeecg.modules.oa.entity.ReceivedMain;
+import org.jeecg.modules.oa.service.IReceivedDetailService;
+import org.jeecg.modules.oa.service.IReceivedMainService;
+import org.jeecg.modules.oa.vo.ReceivedMainPage;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Api(tags="收文登记")
+@RestController
+@RequestMapping("/received/receivedMain")
+@Slf4j
+public class ReceivedMainController {
+	@Autowired
+	private IReceivedMainService receivedMainService;
+	@Autowired
+	private IReceivedDetailService receivedDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param receivedMain
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-分页列表查询")
+	@ApiOperation(value="收文登记-分页列表查询", notes="收文登记-分页列表查询")
+	@GetMapping(value = "/list")
+	@PermissionData(pageComponent="oa/ReceivedMainList")
+	public Result<?> queryPageList(ReceivedMain receivedMain,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ReceivedMain> queryWrapper = QueryGenerator.initQueryWrapper(receivedMain, req.getParameterMap());
+		Page<ReceivedMain> page = new Page<ReceivedMain>(pageNo, pageSize);
+		IPage<ReceivedMain> pageList = receivedMainService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param receivedMainPage
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-添加")
+	@ApiOperation(value="收文登记-添加", notes="收文登记-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody ReceivedMainPage receivedMainPage) {
+		ReceivedMain receivedMain = new ReceivedMain();
+		BeanUtils.copyProperties(receivedMainPage, receivedMain);
+		receivedMainService.saveMain(receivedMain, receivedMainPage.getReceivedDetailList());
+		return Result.ok("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param receivedMainPage
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-编辑")
+	@ApiOperation(value="收文登记-编辑", notes="收文登记-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody ReceivedMainPage receivedMainPage) {
+		ReceivedMain receivedMain = new ReceivedMain();
+		BeanUtils.copyProperties(receivedMainPage, receivedMain);
+		ReceivedMain receivedMainEntity = receivedMainService.getById(receivedMain.getId());
+		if(receivedMainEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		receivedMainService.updateMain(receivedMain, receivedMainPage.getReceivedDetailList());
+		return Result.ok("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-通过id删除")
+	@ApiOperation(value="收文登记-通过id删除", notes="收文登记-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		receivedMainService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-批量删除")
+	@ApiOperation(value="收文登记-批量删除", notes="收文登记-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.receivedMainService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "收文登记-通过id查询")
+	@ApiOperation(value="收文登记-通过id查询", notes="收文登记-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		ReceivedMain receivedMain = receivedMainService.getById(id);
+		if(receivedMain==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(receivedMain);
+
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "收文登记子表集合-通过id查询")
+	@ApiOperation(value="收文登记子表集合-通过id查询", notes="收文登记子表-通过id查询")
+	@GetMapping(value = "/queryReceivedDetailByMainId")
+	public Result<?> queryReceivedDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<ReceivedDetail> receivedDetailList = receivedDetailService.selectByMainId(id);
+		return Result.ok(receivedDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param receivedMain
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ReceivedMain receivedMain) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<ReceivedMain> queryWrapper = QueryGenerator.initQueryWrapper(receivedMain, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<ReceivedMain> queryList = receivedMainService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<ReceivedMain> receivedMainList = new ArrayList<ReceivedMain>();
+      if(oConvertUtils.isEmpty(selections)) {
+          receivedMainList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          receivedMainList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<ReceivedMainPage> pageList = new ArrayList<ReceivedMainPage>();
+      for (ReceivedMain main : receivedMainList) {
+          ReceivedMainPage vo = new ReceivedMainPage();
+          BeanUtils.copyProperties(main, vo);
+          List<ReceivedDetail> receivedDetailList = receivedDetailService.selectByMainId(main.getId());
+          vo.setReceivedDetailList(receivedDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "收文登记列表");
+      mv.addObject(NormalExcelConstants.CLASS, ReceivedMainPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("收文登记数据", "导出人:"+sysUser.getRealname(), "收文登记"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<ReceivedMainPage> list = ExcelImportUtil.importExcel(file.getInputStream(), ReceivedMainPage.class, params);
+              for (ReceivedMainPage page : list) {
+                  ReceivedMain po = new ReceivedMain();
+                  BeanUtils.copyProperties(page, po);
+                  receivedMainService.saveMain(po, page.getReceivedDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 80 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetCost.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@ApiModel(value="budget_cost对象", description="预算费用管理")
+@Data
+@TableName("budget_cost")
+public class BudgetCost implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+    @ApiModelProperty(value = "登记人")
+    private String registerPerson;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+    @ApiModelProperty(value = "登记部门")
+    private String registerDept;
+	/**登记日期*/
+	@Excel(name = "登记日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "登记日期")
+    private Date registerDate;
+	/**预算年度*/
+	@Excel(name = "预算年度", width = 15, format = "yyyy")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy")
+    @DateTimeFormat(pattern="yyyy")
+    @ApiModelProperty(value = "预算年度")
+    private Date budgetYear;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 102 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetCostDetail.java

@@ -0,0 +1,102 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算费用管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@ApiModel(value="budget_cost对象", description="预算费用管理")
+@Data
+@TableName("budget_cost_detail")
+public class BudgetCostDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**部门*/
+	@Excel(name = "部门", width = 15)
+	@ApiModelProperty(value = "部门")
+	private String department;
+	/**费用资金类别*/
+	@Excel(name = "费用资金类别", width = 15)
+	@ApiModelProperty(value = "费用资金类别")
+	private String costFundType;
+	/**预算资金类别*/
+	@Excel(name = "预算资金类别", width = 15)
+	@ApiModelProperty(value = "预算资金类别")
+	private String budgetFundType;
+	/**预算资金名称*/
+	@Excel(name = "预算资金名称", width = 15)
+	@ApiModelProperty(value = "预算资金名称")
+	private String budgetFundName;
+	/**预算资金构成*/
+	@Excel(name = "预算资金构成", width = 15)
+	@ApiModelProperty(value = "预算资金构成")
+	private String budgetFundPose;
+	/**预算金额*/
+	@Excel(name = "预算金额", width = 15)
+	@ApiModelProperty(value = "预算金额")
+	private java.math.BigDecimal budgetMoney;
+	/**合同金额*/
+	@Excel(name = "合同金额", width = 15)
+	@ApiModelProperty(value = "合同金额")
+	private java.math.BigDecimal contractMoney;
+	/**已支付金额*/
+	@Excel(name = "已支付金额", width = 15)
+	@ApiModelProperty(value = "已支付金额")
+	private java.math.BigDecimal paidMoney;
+	/**待支付金额*/
+	@Excel(name = "待支付金额", width = 15)
+	@ApiModelProperty(value = "待支付金额")
+	private java.math.BigDecimal toBePaidMoney;
+	/**附件上传*/
+	@Excel(name = "附件上传", width = 15)
+	@ApiModelProperty(value = "附件上传")
+	private String file;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String detailRemark;
+	/**外键*/
+	@ApiModelProperty(value = "外键")
+	private String mainId;
+}

+ 84 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetReply.java

@@ -0,0 +1,84 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@ApiModel(value="budget_reply对象", description="预算批复管理")
+@Data
+@TableName("budget_reply")
+public class BudgetReply implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+    @ApiModelProperty(value = "登记人")
+    private String registerPerson;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+    @ApiModelProperty(value = "登记部门")
+    private String registerDept;
+	/**登记日期*/
+	@Excel(name = "登记日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "登记日期")
+    private Date registerDate;
+	/**预算年度*/
+	@Excel(name = "预算年度", width = 15, format = "yyyy")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy")
+    @DateTimeFormat(pattern="yyyy")
+    @ApiModelProperty(value = "预算年度")
+    private Date budgetYear;
+	/**预算总额*/
+	@Excel(name = "预算总额", width = 15)
+    @ApiModelProperty(value = "预算总额")
+    private String budgetTotal;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private String file;
+}

+ 106 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/BudgetReplyDetail.java

@@ -0,0 +1,106 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算批复管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@ApiModel(value="budget_reply对象", description="预算批复管理")
+@Data
+@TableName("budget_reply_detail")
+public class BudgetReplyDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**部门*/
+	@Excel(name = "部门", width = 15)
+	@ApiModelProperty(value = "部门")
+	private String department;
+	/**费用资金类别*/
+	@Excel(name = "费用资金类别", width = 15)
+	@ApiModelProperty(value = "费用资金类别")
+	private String costFundType;
+	/**预算资金类别*/
+	@Excel(name = "预算资金类别", width = 15)
+	@ApiModelProperty(value = "预算资金类别")
+	private String budgetFundType;
+	/**预算资金名称*/
+	@Excel(name = "预算资金名称", width = 15)
+	@ApiModelProperty(value = "预算资金名称")
+	private String budgetFundName;
+	/**预算资金构成*/
+	@Excel(name = "预算资金构成", width = 15)
+	@ApiModelProperty(value = "预算资金构成")
+	private String budgetFundPose;
+	/**预算资金来源*/
+	@Excel(name = "预算资金来源", width = 15)
+	@ApiModelProperty(value = "预算资金来源")
+	private String budgetFundSource;
+	/**明细内容*/
+	@Excel(name = "明细内容", width = 15)
+	@ApiModelProperty(value = "明细内容")
+	private String detailContent;
+	/**明细金额*/
+	@Excel(name = "明细金额", width = 15)
+	@ApiModelProperty(value = "明细金额")
+	private java.math.BigDecimal detailMoney;
+	/**拨付方式*/
+	@Excel(name = "拨付方式", width = 15)
+	@ApiModelProperty(value = "拨付方式")
+	private String paymentMethod;
+	/**采购方式*/
+	@Excel(name = "采购方式", width = 15)
+	@ApiModelProperty(value = "采购方式")
+	private String purchaseMethod;
+	/**采购编号*/
+	@Excel(name = "采购编号", width = 15)
+	@ApiModelProperty(value = "采购编号")
+	private String purchaseNum;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**外键*/
+	@ApiModelProperty(value = "外键")
+	private String mainId;
+}

+ 84 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MuseumDuty.java

@@ -0,0 +1,84 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@ApiModel(value="museum_duty对象", description="全馆值班登记")
+@Data
+@TableName("museum_duty")
+public class MuseumDuty implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**申请人*/
+	@Excel(name = "申请人", width = 15)
+    @ApiModelProperty(value = "申请人")
+    private String applyPerson;
+	/**申请部门*/
+	@Excel(name = "申请部门", width = 15)
+    @ApiModelProperty(value = "申请部门")
+    private String applyDept;
+	/**申请日期*/
+	@Excel(name = "申请日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "申请日期")
+    private Date applyDate;
+	/**值班月*/
+	@Excel(name = "值班月", width = 15, format = "yyyy-MM")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM")
+    @DateTimeFormat(pattern="yyyy-MM")
+    @ApiModelProperty(value = "值班月")
+    private Date dutyMonth;
+	/**说明*/
+	@Excel(name = "说明", width = 15)
+    @ApiModelProperty(value = "说明")
+    private String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private String file;
+}

+ 76 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MuseumDutyDetail.java

@@ -0,0 +1,76 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 全馆值班登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@ApiModel(value="museum_duty对象", description="全馆值班登记")
+@Data
+@TableName("museum_duty_detail")
+public class MuseumDutyDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**值班日期*/
+	@Excel(name = "值班日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "值班日期")
+	private Date dutyDate;
+	/**值班人*/
+	@Excel(name = "值班人", width = 15)
+	@ApiModelProperty(value = "值班人")
+	private String dutyPerson;
+	/**值班岗位*/
+	@Excel(name = "值班岗位", width = 15)
+	@ApiModelProperty(value = "值班岗位")
+	private String dutyPost;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**外键*/
+	@ApiModelProperty(value = "外键")
+	private String mainId;
+}

+ 76 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/ReceivedDetail.java

@@ -0,0 +1,76 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 收文登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@ApiModel(value="received_main对象", description="收文登记")
+@Data
+@TableName("received_detail")
+public class ReceivedDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**公文流转部门*/
+	@Excel(name = "公文流转部门", width = 15)
+	@ApiModelProperty(value = "公文流转部门")
+	private String documentDept;
+	/**部门负责人姓名*/
+	@Excel(name = "部门负责人姓名", width = 15)
+	@ApiModelProperty(value = "部门负责人姓名")
+	private String deptHeadName;
+	/**审阅日期*/
+	@Excel(name = "审阅日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "审阅日期")
+	private Date reviewDate;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**外键*/
+	@ApiModelProperty(value = "外键")
+	private String mainId;
+}

+ 92 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/ReceivedMain.java

@@ -0,0 +1,92 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@ApiModel(value="received_main对象", description="收文登记")
+@Data
+@TableName("received_main")
+public class ReceivedMain implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**来文单位*/
+	@Excel(name = "来文单位", width = 15)
+    @ApiModelProperty(value = "来文单位")
+    private String communicationsUnit;
+	/**收文名称*/
+	@Excel(name = "收文名称", width = 15)
+    @ApiModelProperty(value = "收文名称")
+    private String receivedName;
+	/**收文日期*/
+	@Excel(name = "收文日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "收文日期")
+    private Date receivedDate;
+	/**公文流转日期*/
+	@Excel(name = "公文流转日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "公文流转日期")
+    private Date documentDate;
+	/**收文份数*/
+	@Excel(name = "收文份数", width = 15)
+    @ApiModelProperty(value = "收文份数")
+    private Integer receivedNum;
+	/**文号*/
+	@Excel(name = "文号", width = 15)
+    @ApiModelProperty(value = "文号")
+    private String documentSymbol;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private String file;
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetCostDetailMapper.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 预算费用管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface BudgetCostDetailMapper extends BaseMapper<BudgetCostDetail> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+    
+	public List<BudgetCostDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 21 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetCostMapper.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.BudgetCost;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.oa.vo.BudgetCostPages;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface BudgetCostMapper extends BaseMapper<BudgetCost> {
+    public IPage<BudgetCostPages> budgetCostlist(IPage<BudgetCostPages> page,@Param(Constants.WRAPPER)Wrapper<BudgetCostPages> queryWrapper);
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetReplyDetailMapper.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 预算批复管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface BudgetReplyDetailMapper extends BaseMapper<BudgetReplyDetail> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+    
+	public List<BudgetReplyDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 22 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/BudgetReplyMapper.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.BudgetReply;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.oa.vo.BudgetCostPages;
+
+/**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface BudgetReplyMapper extends BaseMapper<BudgetReply> {
+
+
+
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MuseumDutyDetailMapper.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 全馆值班登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface MuseumDutyDetailMapper extends BaseMapper<MuseumDutyDetail> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+    
+	public List<MuseumDutyDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MuseumDutyMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.MuseumDuty;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface MuseumDutyMapper extends BaseMapper<MuseumDuty> {
+
+}

+ 20 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/ReceivedDetailMapper.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 收文登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface ReceivedDetailMapper extends BaseMapper<ReceivedDetail> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+	public List<ReceivedDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/ReceivedMainMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.ReceivedMain;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface ReceivedMainMapper extends BaseMapper<ReceivedMain> {
+
+}

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetCostDetailMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.BudgetCostDetailMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  budget_cost_detail 
+		WHERE
+			 main_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.BudgetCostDetail">
+		SELECT * 
+		FROM  budget_cost_detail
+		WHERE
+			 main_id = #{mainId} 	</select>
+</mapper>

+ 9 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetCostMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.BudgetCostMapper">
+
+    <select id="budgetCostlist" resultType="org.jeecg.modules.oa.vo.BudgetCostPages">
+        SELECT bc.id,bc.create_by,bc.create_time,bc.update_by,bc.update_time,bc.sys_org_code,register_person,register_dept,register_date,budget_year,cost_fund_type,budget_fund_type,budget_fund_name,budget_fund_pose,budget_money,contract_money,paid_money,to_be_paid_money,remark FROM budget_cost_detail bcd left join  budget_cost bc on bc.id = bcd.main_id   ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetReplyDetailMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.BudgetReplyDetailMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  budget_reply_detail 
+		WHERE
+			 main_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.BudgetReplyDetail">
+		SELECT * 
+		FROM  budget_reply_detail
+		WHERE
+			 main_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/BudgetReplyMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.BudgetReplyMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MuseumDutyDetailMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.MuseumDutyDetailMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  museum_duty_detail 
+		WHERE
+			 main_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.MuseumDutyDetail">
+		SELECT * 
+		FROM  museum_duty_detail
+		WHERE
+			 main_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MuseumDutyMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.MuseumDutyMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/ReceivedDetailMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.ReceivedDetailMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE
+		FROM  received_detail
+		WHERE
+			 main_id = #{mainId} 	</delete>
+
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.ReceivedDetail">
+		SELECT *
+		FROM  received_detail
+		WHERE
+			 main_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/ReceivedMainMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.oa.mapper.ReceivedMainMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetCostDetailService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 预算费用管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface IBudgetCostDetailService extends IService<BudgetCostDetail> {
+
+	public List<BudgetCostDetail> selectByMainId(String mainId);
+}

+ 48 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetCostService.java

@@ -0,0 +1,48 @@
+package org.jeecg.modules.oa.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import org.jeecg.modules.oa.entity.BudgetCost;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.oa.vo.BudgetCostPages;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface IBudgetCostService extends IService<BudgetCost> {
+
+	public IPage<BudgetCostPages> pages(IPage<BudgetCostPages> page,@Param(Constants.WRAPPER)Wrapper<BudgetCostPages> queryWrapper);
+
+	/**
+	 * 添加一对多
+	 *
+	 */
+	public void saveMain(BudgetCost budgetCost,List<BudgetCostDetail> budgetCostDetailList) ;
+
+	/**
+	 * 修改一对多
+	 *
+	 */
+	public void updateMain(BudgetCost budgetCost,List<BudgetCostDetail> budgetCostDetailList);
+
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+
+}

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetReplyDetailService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 预算批复管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface IBudgetReplyDetailService extends IService<BudgetReplyDetail> {
+
+	public List<BudgetReplyDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IBudgetReplyService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import org.jeecg.modules.oa.entity.BudgetReply;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+public interface IBudgetReplyService extends IService<BudgetReply> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(BudgetReply budgetReply,List<BudgetReplyDetail> budgetReplyDetailList) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(BudgetReply budgetReply,List<BudgetReplyDetail> budgetReplyDetailList);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMuseumDutyDetailService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 全馆值班登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface IMuseumDutyDetailService extends IService<MuseumDutyDetail> {
+
+	public List<MuseumDutyDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMuseumDutyService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import org.jeecg.modules.oa.entity.MuseumDuty;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface IMuseumDutyService extends IService<MuseumDuty> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(MuseumDuty museumDuty,List<MuseumDutyDetail> museumDutyDetailList) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(MuseumDuty museumDuty,List<MuseumDutyDetail> museumDutyDetailList);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IReceivedDetailService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 收文登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface IReceivedDetailService extends IService<ReceivedDetail> {
+
+	public List<ReceivedDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IReceivedMainService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import org.jeecg.modules.oa.entity.ReceivedMain;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+public interface IReceivedMainService extends IService<ReceivedMain> {
+
+	/**
+	 * 添加一对多
+	 *
+	 */
+	public void saveMain(ReceivedMain receivedMain,List<ReceivedDetail> receivedDetailList) ;
+
+	/**
+	 * 修改一对多
+	 *
+	 */
+	public void updateMain(ReceivedMain receivedMain,List<ReceivedDetail> receivedDetailList);
+
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+
+}

+ 27 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetCostDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import org.jeecg.modules.oa.mapper.BudgetCostDetailMapper;
+import org.jeecg.modules.oa.service.IBudgetCostDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 预算费用管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Service
+public class BudgetCostDetailServiceImpl extends ServiceImpl<BudgetCostDetailMapper, BudgetCostDetail> implements IBudgetCostDetailService {
+	
+	@Autowired
+	private BudgetCostDetailMapper budgetCostDetailMapper;
+	
+	@Override
+	public List<BudgetCostDetail> selectByMainId(String mainId) {
+		return budgetCostDetailMapper.selectByMainId(mainId);
+	}
+}

+ 85 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetCostServiceImpl.java

@@ -0,0 +1,85 @@
+package org.jeecg.modules.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.modules.oa.entity.BudgetCost;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import org.jeecg.modules.oa.mapper.BudgetCostDetailMapper;
+import org.jeecg.modules.oa.mapper.BudgetCostMapper;
+import org.jeecg.modules.oa.service.IBudgetCostService;
+import org.jeecg.modules.oa.vo.BudgetCostPages;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Service
+public class BudgetCostServiceImpl extends ServiceImpl<BudgetCostMapper, BudgetCost> implements IBudgetCostService {
+
+	@Autowired
+	private BudgetCostMapper budgetCostMapper;
+	@Autowired
+	private BudgetCostDetailMapper budgetCostDetailMapper;
+
+	@Override
+	@Transactional
+	public void saveMain(BudgetCost budgetCost, List<BudgetCostDetail> budgetCostDetailList) {
+		budgetCostMapper.insert(budgetCost);
+		if(budgetCostDetailList!=null && budgetCostDetailList.size()>0) {
+			for(BudgetCostDetail entity:budgetCostDetailList) {
+				//外键设置
+				entity.setMainId(budgetCost.getId());
+				budgetCostDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	public IPage<BudgetCostPages> pages(IPage<BudgetCostPages> page, Wrapper<BudgetCostPages> queryWrapper){
+	    return budgetCostMapper.budgetCostlist(page,queryWrapper);
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(BudgetCost budgetCost,List<BudgetCostDetail> budgetCostDetailList) {
+		budgetCostMapper.updateById(budgetCost);
+
+		//1.先删除子表数据
+		budgetCostDetailMapper.deleteByMainId(budgetCost.getId());
+
+		//2.子表数据重新插入
+		if(budgetCostDetailList!=null && budgetCostDetailList.size()>0) {
+			for(BudgetCostDetail entity:budgetCostDetailList) {
+				//外键设置
+				entity.setMainId(budgetCost.getId());
+				budgetCostDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		budgetCostDetailMapper.deleteByMainId(id);
+		budgetCostMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			budgetCostDetailMapper.deleteByMainId(id.toString());
+			budgetCostMapper.deleteById(id);
+		}
+	}
+
+}

+ 27 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetReplyDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import org.jeecg.modules.oa.mapper.BudgetReplyDetailMapper;
+import org.jeecg.modules.oa.service.IBudgetReplyDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 预算批复管理子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Service
+public class BudgetReplyDetailServiceImpl extends ServiceImpl<BudgetReplyDetailMapper, BudgetReplyDetail> implements IBudgetReplyDetailService {
+	
+	@Autowired
+	private BudgetReplyDetailMapper budgetReplyDetailMapper;
+	
+	@Override
+	public List<BudgetReplyDetail> selectByMainId(String mainId) {
+		return budgetReplyDetailMapper.selectByMainId(mainId);
+	}
+}

+ 77 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/BudgetReplyServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.BudgetReply;
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import org.jeecg.modules.oa.mapper.BudgetReplyDetailMapper;
+import org.jeecg.modules.oa.mapper.BudgetReplyMapper;
+import org.jeecg.modules.oa.service.IBudgetReplyService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Service
+public class BudgetReplyServiceImpl extends ServiceImpl<BudgetReplyMapper, BudgetReply> implements IBudgetReplyService {
+
+	@Autowired
+	private BudgetReplyMapper budgetReplyMapper;
+	@Autowired
+	private BudgetReplyDetailMapper budgetReplyDetailMapper;
+	
+	@Override
+	@Transactional
+	public void saveMain(BudgetReply budgetReply, List<BudgetReplyDetail> budgetReplyDetailList) {
+		budgetReplyMapper.insert(budgetReply);
+		if(budgetReplyDetailList!=null && budgetReplyDetailList.size()>0) {
+			for(BudgetReplyDetail entity:budgetReplyDetailList) {
+				//外键设置
+				entity.setMainId(budgetReply.getId());
+				budgetReplyDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(BudgetReply budgetReply,List<BudgetReplyDetail> budgetReplyDetailList) {
+		budgetReplyMapper.updateById(budgetReply);
+		
+		//1.先删除子表数据
+		budgetReplyDetailMapper.deleteByMainId(budgetReply.getId());
+		
+		//2.子表数据重新插入
+		if(budgetReplyDetailList!=null && budgetReplyDetailList.size()>0) {
+			for(BudgetReplyDetail entity:budgetReplyDetailList) {
+				//外键设置
+				entity.setMainId(budgetReply.getId());
+				budgetReplyDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		budgetReplyDetailMapper.deleteByMainId(id);
+		budgetReplyMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			budgetReplyDetailMapper.deleteByMainId(id.toString());
+			budgetReplyMapper.deleteById(id);
+		}
+	}
+	
+}

+ 27 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MuseumDutyDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import org.jeecg.modules.oa.mapper.MuseumDutyDetailMapper;
+import org.jeecg.modules.oa.service.IMuseumDutyDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 全馆值班登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Service
+public class MuseumDutyDetailServiceImpl extends ServiceImpl<MuseumDutyDetailMapper, MuseumDutyDetail> implements IMuseumDutyDetailService {
+	
+	@Autowired
+	private MuseumDutyDetailMapper museumDutyDetailMapper;
+	
+	@Override
+	public List<MuseumDutyDetail> selectByMainId(String mainId) {
+		return museumDutyDetailMapper.selectByMainId(mainId);
+	}
+}

+ 77 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MuseumDutyServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.MuseumDuty;
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import org.jeecg.modules.oa.mapper.MuseumDutyDetailMapper;
+import org.jeecg.modules.oa.mapper.MuseumDutyMapper;
+import org.jeecg.modules.oa.service.IMuseumDutyService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Service
+public class MuseumDutyServiceImpl extends ServiceImpl<MuseumDutyMapper, MuseumDuty> implements IMuseumDutyService {
+
+	@Autowired
+	private MuseumDutyMapper museumDutyMapper;
+	@Autowired
+	private MuseumDutyDetailMapper museumDutyDetailMapper;
+	
+	@Override
+	@Transactional
+	public void saveMain(MuseumDuty museumDuty, List<MuseumDutyDetail> museumDutyDetailList) {
+		museumDutyMapper.insert(museumDuty);
+		if(museumDutyDetailList!=null && museumDutyDetailList.size()>0) {
+			for(MuseumDutyDetail entity:museumDutyDetailList) {
+				//外键设置
+				entity.setMainId(museumDuty.getId());
+				museumDutyDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(MuseumDuty museumDuty,List<MuseumDutyDetail> museumDutyDetailList) {
+		museumDutyMapper.updateById(museumDuty);
+		
+		//1.先删除子表数据
+		museumDutyDetailMapper.deleteByMainId(museumDuty.getId());
+		
+		//2.子表数据重新插入
+		if(museumDutyDetailList!=null && museumDutyDetailList.size()>0) {
+			for(MuseumDutyDetail entity:museumDutyDetailList) {
+				//外键设置
+				entity.setMainId(museumDuty.getId());
+				museumDutyDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		museumDutyDetailMapper.deleteByMainId(id);
+		museumDutyMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			museumDutyDetailMapper.deleteByMainId(id.toString());
+			museumDutyMapper.deleteById(id);
+		}
+	}
+	
+}

+ 27 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/ReceivedDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import org.jeecg.modules.oa.mapper.ReceivedDetailMapper;
+import org.jeecg.modules.oa.service.IReceivedDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 收文登记子表
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Service
+public class ReceivedDetailServiceImpl extends ServiceImpl<ReceivedDetailMapper, ReceivedDetail> implements IReceivedDetailService {
+
+	@Autowired
+	private ReceivedDetailMapper receivedDetailMapper;
+
+	@Override
+	public List<ReceivedDetail> selectByMainId(String mainId) {
+		return receivedDetailMapper.selectByMainId(mainId);
+	}
+}

+ 78 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/ReceivedMainServiceImpl.java

@@ -0,0 +1,78 @@
+package org.jeecg.modules.oa.service.impl;
+
+
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import org.jeecg.modules.oa.entity.ReceivedMain;
+import org.jeecg.modules.oa.mapper.ReceivedDetailMapper;
+import org.jeecg.modules.oa.mapper.ReceivedMainMapper;
+import org.jeecg.modules.oa.service.IReceivedMainService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Service
+public class ReceivedMainServiceImpl extends ServiceImpl<ReceivedMainMapper, ReceivedMain> implements IReceivedMainService {
+
+	@Autowired
+	private ReceivedMainMapper receivedMainMapper;
+	@Autowired
+	private ReceivedDetailMapper receivedDetailMapper;
+
+	@Override
+	@Transactional
+	public void saveMain(ReceivedMain receivedMain, List<ReceivedDetail> receivedDetailList) {
+		receivedMainMapper.insert(receivedMain);
+		if(receivedDetailList!=null && receivedDetailList.size()>0) {
+			for(ReceivedDetail entity:receivedDetailList) {
+				//外键设置
+				entity.setMainId(receivedMain.getId());
+				receivedDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(ReceivedMain receivedMain,List<ReceivedDetail> receivedDetailList) {
+		receivedMainMapper.updateById(receivedMain);
+
+		//1.先删除子表数据
+		receivedDetailMapper.deleteByMainId(receivedMain.getId());
+
+		//2.子表数据重新插入
+		if(receivedDetailList!=null && receivedDetailList.size()>0) {
+			for(ReceivedDetail entity:receivedDetailList) {
+				//外键设置
+				entity.setMainId(receivedMain.getId());
+				receivedDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		receivedDetailMapper.deleteByMainId(id);
+		receivedMainMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			receivedDetailMapper.deleteByMainId(id.toString());
+			receivedMainMapper.deleteById(id);
+		}
+	}
+
+}

+ 82 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetCostPage.java

@@ -0,0 +1,82 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.BudgetCost;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="budget_costPage对象", description="预算费用管理")
+public class BudgetCostPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+	@ApiModelProperty(value = "登记人")
+	private String registerPerson;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+	@ApiModelProperty(value = "登记部门")
+	private String registerDept;
+	/**登记日期*/
+	@Excel(name = "登记日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "登记日期")
+	private Date registerDate;
+	/**预算年度*/
+	@Excel(name = "预算年度", width = 15, format = "yyyy")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy")
+    @DateTimeFormat(pattern="yyyy")
+	@ApiModelProperty(value = "预算年度")
+	private Date budgetYear;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+
+	@ExcelCollection(name="预算费用管理子表")
+	@ApiModelProperty(value = "预算费用管理子表")
+	private List<BudgetCostDetail> budgetCostDetailList;
+
+}

+ 113 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetCostPages.java

@@ -0,0 +1,113 @@
+package org.jeecg.modules.oa.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.oa.entity.BudgetCostDetail;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 预算费用管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="budget_costPage对象", description="预算费用管理")
+public class BudgetCostPages {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+	@ApiModelProperty(value = "登记人")
+	private String registerPerson;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+	@ApiModelProperty(value = "登记部门")
+	private String registerDept;
+	/**登记日期*/
+	@Excel(name = "登记日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "登记日期")
+	private Date registerDate;
+	/**预算年度*/
+	@Excel(name = "预算年度", width = 15, format = "yyyy")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy")
+    @DateTimeFormat(pattern="yyyy")
+	@ApiModelProperty(value = "预算年度")
+	private Date budgetYear;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**部门*/
+	@Excel(name = "部门", width = 15)
+	@ApiModelProperty(value = "部门")
+	private String department;
+	/**费用资金类别*/
+	@Excel(name = "费用资金类别", width = 15)
+	@ApiModelProperty(value = "费用资金类别")
+	private String costFundType;
+	/**预算资金类别*/
+	@Excel(name = "预算资金类别", width = 15)
+	@ApiModelProperty(value = "预算资金类别")
+	private String budgetFundType;
+	/**预算资金名称*/
+	@Excel(name = "预算资金名称", width = 15)
+	@ApiModelProperty(value = "预算资金名称")
+	private String budgetFundName;
+	/**预算资金构成*/
+	@Excel(name = "预算资金构成", width = 15)
+	@ApiModelProperty(value = "预算资金构成")
+	private String budgetFundPose;
+	/**预算金额*/
+	@Excel(name = "预算金额", width = 15)
+	@ApiModelProperty(value = "预算金额")
+	private java.math.BigDecimal budgetMoney;
+	/**合同金额*/
+	@Excel(name = "合同金额", width = 15)
+	@ApiModelProperty(value = "合同金额")
+	private java.math.BigDecimal contractMoney;
+	/**已支付金额*/
+	@Excel(name = "已支付金额", width = 15)
+	@ApiModelProperty(value = "已支付金额")
+	private java.math.BigDecimal paidMoney;
+	/**待支付金额*/
+	@Excel(name = "待支付金额", width = 15)
+	@ApiModelProperty(value = "待支付金额")
+	private java.math.BigDecimal toBePaidMoney;
+
+}

+ 86 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/BudgetReplyPage.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.BudgetReply;
+import org.jeecg.modules.oa.entity.BudgetReplyDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 预算批复管理
+ * @Author: jeecg-boot
+ * @Date:   2023-05-30
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="budget_replyPage对象", description="预算批复管理")
+public class BudgetReplyPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+	@ApiModelProperty(value = "登记人")
+	private String registerPerson;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+	@ApiModelProperty(value = "登记部门")
+	private String registerDept;
+	/**登记日期*/
+	@Excel(name = "登记日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "登记日期")
+	private Date registerDate;
+	/**预算年度*/
+	@Excel(name = "预算年度", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "预算年度")
+	private Date budgetYear;
+	/**预算总额*/
+	@Excel(name = "预算总额", width = 15)
+	@ApiModelProperty(value = "预算总额")
+	private String budgetTotal;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+	@ApiModelProperty(value = "附件")
+	private String file;
+
+	@ExcelCollection(name="预算批复管理子表")
+	@ApiModelProperty(value = "预算批复管理子表")
+	private List<BudgetReplyDetail> budgetReplyDetailList;
+
+}

+ 86 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/MuseumDutyPage.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.MuseumDuty;
+import org.jeecg.modules.oa.entity.MuseumDutyDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 全馆值班登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="museum_dutyPage对象", description="全馆值班登记")
+public class MuseumDutyPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**申请人*/
+	@Excel(name = "申请人", width = 15)
+	@ApiModelProperty(value = "申请人")
+	private String applyPerson;
+	/**申请部门*/
+	@Excel(name = "申请部门", width = 15)
+	@ApiModelProperty(value = "申请部门")
+	private String applyDept;
+	/**申请日期*/
+	@Excel(name = "申请日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "申请日期")
+	private Date applyDate;
+	/**值班月*/
+	@Excel(name = "值班月", width = 15, format = "yyyy-MM")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM")
+    @DateTimeFormat(pattern="yyyy-MM")
+	@ApiModelProperty(value = "值班月")
+	private Date dutyMonth;
+	/**说明*/
+	@Excel(name = "说明", width = 15)
+	@ApiModelProperty(value = "说明")
+	private String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+	@ApiModelProperty(value = "附件")
+	private String file;
+
+	@ExcelCollection(name="全馆值班登记子表")
+	@ApiModelProperty(value = "全馆值班登记子表")
+	private List<MuseumDutyDetail> museumDutyDetailList;
+
+}

+ 93 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/ReceivedMainPage.java

@@ -0,0 +1,93 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import lombok.Data;
+import org.jeecg.modules.oa.entity.ReceivedDetail;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 收文登记
+ * @Author: jeecg-boot
+ * @Date:   2023-05-29
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="received_mainPage对象", description="收文登记")
+public class ReceivedMainPage {
+
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建日期*/
+	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建日期")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新日期*/
+	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新日期")
+	private Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private String sysOrgCode;
+	/**来文单位*/
+	@Excel(name = "来文单位", width = 15)
+	@ApiModelProperty(value = "来文单位")
+	private String communicationsUnit;
+	/**收文名称*/
+	@Excel(name = "收文名称", width = 15)
+	@ApiModelProperty(value = "收文名称")
+	private String receivedName;
+	/**收文日期*/
+	@Excel(name = "收文日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "收文日期")
+	private Date receivedDate;
+	/**公文流转日期*/
+	@Excel(name = "公文流转日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "公文流转日期")
+	private Date documentDate;
+	/**收文份数*/
+	@Excel(name = "收文份数", width = 15)
+	@ApiModelProperty(value = "收文份数")
+	private Integer receivedNum;
+	/**文号*/
+	@Excel(name = "文号", width = 15)
+	@ApiModelProperty(value = "文号")
+	private String documentSymbol;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+	@ApiModelProperty(value = "附件")
+	private String file;
+
+	@ExcelCollection(name="收文登记子表")
+	@ApiModelProperty(value = "收文登记子表")
+	private List<ReceivedDetail> receivedDetailList;
+
+}

+ 9 - 6
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java

@@ -19,7 +19,7 @@ import java.util.Objects;
  * <p>
  * 部门表
  * <p>
- * 
+ *
  * @Author Steve
  * @Since  2019-01-22
  */
@@ -27,7 +27,7 @@ import java.util.Objects;
 @TableName("sys_depart")
 public class SysDepart implements Serializable {
     private static final long serialVersionUID = 1L;
-    
+
 	/**ID*/
 	@TableId(type = IdType.ID_WORKER_STR)
 	private String id;
@@ -88,7 +88,10 @@ public class SysDepart implements Serializable {
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
 	private Date updateTime;
-	
+	@Excel(name="部门职责及人数",width=15)
+	private String dutyNum;
+
+
 	/**
 	 * 重写equals方法
 	 */
@@ -132,9 +135,9 @@ public class SysDepart implements Serializable {
     @Override
     public int hashCode() {
 
-        return Objects.hash(super.hashCode(), id, parentId, departName, 
-        		departNameEn, departNameAbbr, departOrder, description,orgCategory, 
-        		orgType, orgCode, mobile, fax, address, memo, status, 
+        return Objects.hash(super.hashCode(), id, parentId, departName,
+        		departNameEn, departNameAbbr, departOrder, description,orgCategory,
+        		orgType, orgCode, mobile, fax, address, memo, status,
         		delFlag, createBy, createTime, updateBy, updateTime);
     }
 }

+ 22 - 10
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java

@@ -12,14 +12,14 @@ import java.util.Objects;
  * <p>
  * 部门表 存储树结构数据的实体类
  * <p>
- * 
+ *
  * @Author Steve
- * @Since 2019-01-22 
+ * @Since 2019-01-22
  */
 public class SysDepartTreeModel implements Serializable{
-	
+
     private static final long serialVersionUID = 1L;
-    
+
     /** 对应SysDepart中的id字段,前端数据树中的key*/
     private String key;
 
@@ -32,7 +32,7 @@ public class SysDepartTreeModel implements Serializable{
 
     private boolean isLeaf;
     // 以下所有字段均与SysDepart相同
-    
+
     private String id;
 
     private String parentId;
@@ -46,7 +46,7 @@ public class SysDepartTreeModel implements Serializable{
     private Integer departOrder;
 
     private Object description;
-    
+
     private String orgCategory;
 
     private String orgType;
@@ -75,6 +75,8 @@ public class SysDepartTreeModel implements Serializable{
 
     private List<SysDepartTreeModel> children = new ArrayList<>();
 
+    private String dutyNum;
+
 
     /**
      * 将SysDepart对象转换成SysDepartTreeModel对象
@@ -104,6 +106,7 @@ public class SysDepartTreeModel implements Serializable{
         this.createTime = sysDepart.getCreateTime();
         this.updateBy = sysDepart.getUpdateBy();
         this.updateTime = sysDepart.getUpdateTime();
+        this.dutyNum = sysDepart.getDutyNum();
     }
 
     public boolean getIsLeaf() {
@@ -182,7 +185,7 @@ public class SysDepartTreeModel implements Serializable{
     public void setDepartName(String departName) {
         this.departName = departName;
     }
-    
+
     public String getOrgCategory() {
 		return orgCategory;
 	}
@@ -319,6 +322,14 @@ public class SysDepartTreeModel implements Serializable{
         this.updateTime = updateTime;
     }
 
+    public String getDutyNum() {
+        return dutyNum;
+    }
+
+    public void setDutyNum(String dutyNum) {
+        this.dutyNum = dutyNum;
+    }
+
     public SysDepartTreeModel() { }
 
     /**
@@ -353,9 +364,10 @@ public class SysDepartTreeModel implements Serializable{
                 Objects.equals(createTime, model.createTime) &&
                 Objects.equals(updateBy, model.updateBy) &&
                 Objects.equals(updateTime, model.updateTime) &&
+                Objects.equals(dutyNum, model.dutyNum) &&
                 Objects.equals(children, model.children);
     }
-    
+
     /**
      * 重写hashCode方法
      */
@@ -363,8 +375,8 @@ public class SysDepartTreeModel implements Serializable{
     public int hashCode() {
 
         return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr,
-        		departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, 
-        		memo, status, delFlag, createBy, createTime, updateBy, updateTime, 
+        		departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address,
+        		memo, status, delFlag, createBy, createTime, updateBy, updateTime,dutyNum,
         		children);
     }