diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupController.java b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupController.java
new file mode 100644
index 00000000..efe2859e
--- /dev/null
+++ b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupController.java
@@ -0,0 +1,246 @@
+package com.jero.drafting.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jero.common.api.vo.Result;
+import com.jero.common.aspect.annotation.AutoLog;
+import com.jero.common.service.RolePermissionService;
+import com.jero.common.system.base.controller.JeroController;
+import com.jero.common.system.vo.LoginUser;
+import com.jero.common.util.ValidUtil;
+import com.jero.common.util.oConvertUtils;
+import com.jero.drafting.entity.PayDraftingGroup;
+import com.jero.drafting.service.IPayDraftingGroupService;
+import com.jero.drafting.vo.PayDraftingGroupVo;
+import com.jero.project.common.PayProjectCommon;
+import com.jero.project.entity.PayWorkingGroup;
+import com.jero.project.service.IPayWorkingGroupService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 起草组表 前端控制器
+ *
+ *
+ * @author sz
+ * @since 2024-01-02
+ */
+@Api(tags = "起草组项目")
+@RestController
+@RequestMapping("/drafting/payDraftingGroup")
+@Slf4j
+public class PayDraftingGroupController extends JeroController {
+
+ @Resource
+ private IPayDraftingGroupService payDraftingGroupService;
+ @Resource
+ private RolePermissionService rolePermissionService;
+ @Resource
+ private IPayWorkingGroupService payWorkingGroupService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param payDraftingGroup 起草组项目
+ * @param pageNo 页数
+ * @param pageSize 条数
+ */
+// @RequiresPermissions("draftingGroupProject:search")
+ @ApiOperation(value="起草组项目-分页列表查询", notes="起草组项目-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(PayDraftingGroup payDraftingGroup,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
+ // 校验参数
+ if(!StringUtils.isBlank(payDraftingGroup.getDraftingGroupProject()) && payDraftingGroup.getDraftingGroupProject().length() > 50){
+ return Result.error("起草组项目长度不能大于50个字符");
+ }
+
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if(!rolePermissionService.getRolePermission("draftingGroupProject:search")){
+ payDraftingGroup.setPrincipalA(sysUser.getId());
+ payDraftingGroup.setPrincipalB(sysUser.getId());
+ }
+
+ // 分页条件查询
+ Page page = new Page<>(pageNo, pageSize);
+ if(!StringUtils.isBlank(payDraftingGroup.getDraftingGroupProject())){
+ payDraftingGroup.setDraftingGroupProject(oConvertUtils.replaceAllPercent(payDraftingGroup.getDraftingGroupProject()));
+ }
+
+ IPage pageList = payDraftingGroupService.queryPageList(page,payDraftingGroup);
+ if (!Objects.isNull(pageList)) {
+ List listPayDraftingGroupVo = pageList.getRecords();
+ if (!CollectionUtils.isEmpty(listPayDraftingGroupVo)) {
+ listPayDraftingGroupVo.forEach(p->{
+ if(!rolePermissionService.getRolePermission("generalProject:search") && Objects.equals(p.getPrincipalIdB(),sysUser.getId())){
+ p.setCheckoutOperation(PayProjectCommon.CHECKOUT_OPERATION2);
+ }else{
+ p.setCheckoutOperation(PayProjectCommon.CHECKOUT_OPERATION1);
+ }
+ // 根据工作组id查询对应的工作组名称
+ if (StringUtils.isNotBlank(p.getWorkingGroupId())) {
+ PayWorkingGroup payWorkingGroup = payDraftingGroupService.getPayWorkingGroupNameById(p.getWorkingGroupId());
+ if (!Objects.isNull(payWorkingGroup)) {
+ p.setWorkingGroupName(payWorkingGroup.getWorkingGroupProject());
+ }
+ }
+ });
+ pageList.setRecords(listPayDraftingGroupVo);
+ }
+ }
+
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加
+ *
+ * @param payDraftingGroup 起草组项目
+ * @return
+ */
+ @AutoLog(value = "起草组项目-添加",operateType = 1)
+// @RequiresPermissions("draftingGroupProject:add")
+ @ApiOperation(value="起草组项目-添加", notes="起草组项目-添加")
+ @PostMapping(value = "/add")
+ public Result> add(@RequestBody PayDraftingGroup payDraftingGroup) {
+ // 参数校验
+ StringBuilder msg = ValidUtil.validateAll(payDraftingGroup);
+ if(!StringUtils.isBlank(msg)){
+ return Result.error(msg.toString());
+ }
+ try {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(PayDraftingGroup::getDraftingGroupProject,payDraftingGroup.getDraftingGroupProject());
+ PayDraftingGroup payDraftingGroupDB = payDraftingGroupService.getOne(queryWrapper);
+ if(!Objects.isNull(payDraftingGroupDB)) {
+ return Result.error("起草组项目已存在!");
+ }
+ }catch (Exception e){
+ log.info("起草组项目-添加",e);
+ return Result.error("起草组项目已存在!");
+ }
+ payDraftingGroupService.setPayDraftingGroup(payDraftingGroup);
+ payDraftingGroupService.save(payDraftingGroup);
+ return Result.OK("添加成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id 工作组项目id
+ * @return
+ */
+ @AutoLog(value = "起草组项目-通过id删除",operateType = 2)
+// @RequiresPermissions("draftingGroupProject:delete")
+ @ApiOperation(value="起草组项目-通过id删除", notes="起草组项目-通过id删除")
+ @GetMapping(value = "/delete")
+ public Result> delete(@RequestParam(name="id") String id) {
+ if(StringUtils.isBlank(id)){
+ return Result.error("id不能为空!");
+ }
+ payDraftingGroupService.deleteById(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids 起草组项目ids 逗号分隔
+ * @return
+ */
+// @RequiresPermissions("draftingGroupProject:batchDel")
+ @ApiOperation(value="起草组项目-批量删除", notes="起草组项目-批量删除")
+ @GetMapping(value = "/deleteBatch")
+ public Result> deleteBatch(@RequestParam(name="ids") String ids) {
+ if(StringUtils.isBlank(ids)){
+ return Result.error("id不能为空!");
+ }
+ String[] s = ids.split(",");
+ for (String s1 : s) {
+ if(StringUtils.isBlank(s1)){
+ return Result.error("id不能为空!");
+ }
+ }
+ payDraftingGroupService.deleteByIds(Arrays.asList(ids.split(",")));
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 复制
+ *
+ * @param payDraftingGroup 起草组项目
+ * @return
+ */
+ @AutoLog(value = "起草组项目-复制",operateType = 3)
+// @RequiresPermissions("draftingGroupProject:copy")
+ @ApiOperation(value="起草组项目-复制", notes="起草组项目-复制")
+ @PostMapping(value = "/copy")
+ public Result> copy(@RequestBody PayDraftingGroup payDraftingGroup) {
+ if(StringUtils.isBlank(payDraftingGroup.getId())){
+ return Result.error("起草组id不能为空!");
+ }
+ PayDraftingGroup payDraftingGroupOld = payDraftingGroupService.getById(payDraftingGroup.getId());
+ if(Objects.isNull(payDraftingGroupOld)){
+ return Result.error("起草组不存在!");
+ }
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if(!rolePermissionService.getRolePermission("draftingGroupProject:copy") && !Objects.equals(payDraftingGroupOld.getPrincipalIdA(),sysUser.getId())){
+ return Result.error(payDraftingGroupOld.getDraftingGroupProject() + "数据权限不足!");
+ }
+ payDraftingGroupService.copy(payDraftingGroup);
+ return Result.OK("复制成功!");
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id 起草组项目id
+ * @return
+ */
+ @ApiOperation(value="起草组项目-通过id查询", notes="起草组项目-通过id查询")
+ @GetMapping(value = "/queryById")
+ public Result> queryById(@RequestParam(name="id") String id) {
+ if (StringUtils.isBlank(id)) {
+ return Result.error("起草组id不能为空");
+ }
+ PayDraftingGroup payDraftingGroup = payDraftingGroupService.getById(id);
+ if(Objects.isNull(payDraftingGroup)) {
+ return Result.error("未找到对应数据");
+ }
+ return Result.OK(payDraftingGroup);
+ }
+
+ /**
+ * 查询所有工作组
+ * @return
+ */
+ @ApiOperation(value="工作组项目-查询所有工作组", notes="工作组项目-查询所有工作组")
+ @GetMapping(value = "/queryAllWorkingGroupsIdAndName")
+ public Result> queryAllWorkingGroupsIdAndName() {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("id","working_group_project");
+ queryWrapper.lambda().groupBy(PayWorkingGroup::getWorkingGroupProject);
+ List payWorkingGroups = payWorkingGroupService.list(queryWrapper);
+ List> mapList = payWorkingGroups.stream().map(p -> {
+ HashMap map = new HashMap<>();
+ map.put("id", p.getId());
+ map.put("workingGroupProject", p.getWorkingGroupProject());
+ return map;
+ }).collect(Collectors.toList());
+ return Result.OK(mapList);
+ }
+}
\ No newline at end of file
diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemContactsController.java b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemContactsController.java
new file mode 100644
index 00000000..40c10a14
--- /dev/null
+++ b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemContactsController.java
@@ -0,0 +1,27 @@
+package com.jero.drafting.controller;
+
+import com.jero.common.system.base.controller.JeroController;
+import com.jero.drafting.entity.PayDraftingGroupSubItem;
+import com.jero.drafting.entity.PayDraftingGroupSubItemContacts;
+import com.jero.drafting.service.IPayDraftingGroupSubItemContactsService;
+import com.jero.drafting.service.IPayDraftingGroupSubItemService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 起草组成员企业联系人表 前端控制器
+ *
+ *
+ * @author sz
+ * @since 2024-01-02
+ */
+@Api(tags="起草组成员")
+@RestController
+@RequestMapping("/drafting/payDraftingGroupSubitemContacts")
+@Slf4j
+public class PayDraftingGroupSubItemContactsController extends JeroController {
+
+}
diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemController.java b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemController.java
new file mode 100644
index 00000000..5bf2b149
--- /dev/null
+++ b/jero-boot-incoming-payment/src/main/java/com/jero/drafting/controller/PayDraftingGroupSubItemController.java
@@ -0,0 +1,372 @@
+package com.jero.drafting.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jero.common.api.vo.Result;
+import com.jero.common.aspect.annotation.AutoLog;
+import com.jero.common.exception.JeroBootException;
+import com.jero.common.service.ProjectDetailService;
+import com.jero.common.service.RolePermissionService;
+import com.jero.common.system.base.controller.JeroController;
+import com.jero.common.system.vo.LoginUser;
+import com.jero.common.util.PasswordUtil;
+import com.jero.common.util.ValidUtil;
+import com.jero.common.util.oConvertUtils;
+import com.jero.common.vo.ProjectDetailVO;
+import com.jero.drafting.entity.PayDraftingGroup;
+import com.jero.drafting.entity.PayDraftingGroupSubItem;
+import com.jero.drafting.entity.PayDraftingGroupSubItemContacts;
+import com.jero.drafting.service.IPayDraftingGroupService;
+import com.jero.drafting.service.IPayDraftingGroupSubItemContactsService;
+import com.jero.drafting.service.IPayDraftingGroupSubItemService;
+import com.jero.drafting.vo.PayDraftingGroupSubItemExcel;
+import com.jero.modules.system.service.ISysUserService;
+import com.jero.project.entity.PayWorkingGroup;
+import com.jero.project.entity.PayWorkingGroupSubItem;
+import com.jero.project.entity.PayWorkingGroupSubItemContacts;
+import com.jero.project.vo.excel.PayWorkingGroupSubItemExcel;
+import com.jero.temporary.entity.PayContactsManagementTemporary;
+import com.jero.temporary.service.IPayContactsManagementTemporaryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 起草组成员表 前端控制器
+ *
+ *
+ * @author sz
+ * @since 2024-01-02
+ */
+@Api(tags="起草组成员")
+@RestController
+@RequestMapping("/drafting/payDraftingGroupSubitem")
+@Slf4j
+public class PayDraftingGroupSubItemController extends JeroController {
+
+ @Resource
+ private IPayDraftingGroupService payDraftingGroupService;
+ @Resource
+ private IPayDraftingGroupSubItemService payDraftingGroupSubItemService;
+ @Resource
+ private IPayDraftingGroupSubItemContactsService payDraftingGroupSubItemContactsService;
+ @Resource
+ private RolePermissionService rolePermissionService;
+ @Resource
+ private IPayContactsManagementTemporaryService payContactsManagementTemporaryService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param payDraftingGroupSubItem 起草组成员
+ * @param pageNo 页数
+ * @param pageSize 条数
+ * @param paymentDate 日期
+ * @return
+ */
+// @RequiresPermissions("draftingGroupMember:search")
+ @ApiOperation(value = "起草组成员-分页列表查询", notes = "起草组成员-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(PayDraftingGroupSubItem payDraftingGroupSubItem,
+ @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+ @RequestParam(name = "paymentDate", required = false) String paymentDate) {
+ if (!StringUtils.isBlank(payDraftingGroupSubItem.getChargeCompanyTemporaryName()) && payDraftingGroupSubItem.getChargeCompanyTemporaryName().length() > 50) {
+ return Result.error("成员单位长度不能大于50个字符");
+ }
+ if (StringUtils.isBlank(payDraftingGroupSubItem.getDraftingGroupId())) {
+ return Result.error("起草组id不能为空!");
+ }
+ if(!StringUtils.isBlank(payDraftingGroupSubItem.getChargeCompanyTemporaryName())){
+ payDraftingGroupSubItem.setChargeCompanyTemporaryName(oConvertUtils.replaceAllPercent(payDraftingGroupSubItem.getChargeCompanyTemporaryName()));
+ }
+ PayDraftingGroup payDraftingGroup = payDraftingGroupService.getById(payDraftingGroupSubItem.getDraftingGroupId());
+ if(Objects.isNull(payDraftingGroup)){
+ return Result.error("起草组不存在!");
+ }
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if(!rolePermissionService.getRolePermission("draftingGroupMember:search") && !Objects.equals(payDraftingGroup.getPrincipalIdA(),sysUser.getId())){
+ return Result.error("数据权限不足!");
+ }
+ Page page = new Page<>(pageNo, pageSize);
+ IPage pageList = payDraftingGroupSubItemService.queryPageList(page, payDraftingGroupSubItem, paymentDate);
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加
+ *
+ * @param payDraftingGroupSubItem 起草组成员
+ * @return
+ */
+ @AutoLog(value = "起草组成员-添加",operateType = 2)
+// @RequiresPermissions("draftingGroupMember:add")
+ @ApiOperation(value = "起草组成员-添加", notes = "起草组成员-添加")
+ @PostMapping(value = "/add")
+ public Result> add(@RequestBody PayDraftingGroupSubItem payDraftingGroupSubItem) {
+ StringBuilder msg = ValidUtil.validateAll(payDraftingGroupSubItem);
+ if (!StringUtils.isBlank(msg)) {
+ return Result.error(msg.toString());
+ }
+ payDraftingGroupSubItemService.addPayDraftingGroupSubItem(payDraftingGroupSubItem);
+ return Result.OK("添加成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id 起草组成员id
+ * @return
+ */
+ @AutoLog(value = "起草组成员-删除",operateType = 4)
+// @RequiresPermissions("draftingGroupMember:delete")
+ @ApiOperation(value = "起草组成员-通过id删除", notes = "起草组成员-通过id删除")
+ @GetMapping(value = "/delete")
+ public Result> delete(@RequestParam(name = "id") String id) {
+ payDraftingGroupSubItemService.delete(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids 起草组成员ids 逗号分隔
+ * @return
+ */
+// @RequiresPermissions("draftingGroupMember:batchDel")
+ @ApiOperation(value = "起草组成员-批量删除", notes = "起草组成员-批量删除")
+ @GetMapping(value = "/deleteBatch")
+ public Result> deleteBatch(@RequestParam(name = "ids") String ids) {
+ payDraftingGroupSubItemService.deleteBatch(ids);
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 编辑
+ *
+ * @param payDraftingGroupSubItem 工作组成员
+ * @return
+ */
+ @AutoLog(value = "工作组成员-修改",operateType = 3)
+// @RequiresPermissions("draftingGroupMember:edit")
+ @ApiOperation(value = "工作组成员-编辑", notes = "工作组成员-编辑")
+ @PostMapping(value = "/edit")
+ public Result> edit(@RequestBody PayDraftingGroupSubItem payDraftingGroupSubItem) {
+ StringBuilder msg = ValidUtil.validateAll(payDraftingGroupSubItem);
+ if (!StringUtils.isBlank(msg)) {
+ return Result.error(msg.toString());
+ }
+ payDraftingGroupSubItemService.editPayWorkingGroupSubItem(payDraftingGroupSubItem);
+ return Result.OK("编辑成功!");
+ }
+
+// /**
+// * 通过id查询
+// *
+// * @param id 起草组成员
+// * @return
+// */
+// @ApiOperation(value = "起草组成员-通过id查询", notes = "起草组成员-通过id查询")
+// @GetMapping(value = "/queryById")
+// public Result> queryById(@RequestParam(name = "id") String id) {
+// PayDraftingGroupSubItem payDraftingGroupSubitem = payDraftingGroupSubItemService.getById(id);
+// if (payDraftingGroupSubitem == null) {
+// return Result.error("未找到对应数据");
+// }
+// ProjectDetailVO projectDetailVO = projectDetailService.getProjectDetail(payDraftingGroupSubitem.getId());
+// return Result.OK(projectDetailVO);
+// }
+
+ /**
+ * 模板下载
+ *
+ * @return
+ */
+// @RequiresPermissions("draftingGroupMember:downTemplate")
+ @ApiOperation(value = "起草组成员-模板下载", notes = "起草组成员-模板下载")
+ @GetMapping(value = "/downloadExcelModel")
+ public ModelAndView downloadExcelModel() {
+ return super.exportTemplate(PayDraftingGroupSubItem.class, "起草组成员导入模板");
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @return
+ */
+ @AutoLog(value = "起草组成员-excel导入数据",operateType = 5)
+// @RequiresPermissions("draftingGroupMember:import")
+ @PostMapping(value = "/importExcel")
+ @ApiOperation(value = "起草组成员-通过excel导入数据", notes = "起草组成员-通过excel导入数据")
+ public Result> importExcel(HttpServletRequest request) {
+ List