liuyc 2 роки тому
батько
коміт
5cc0069fc4
16 змінених файлів з 265 додано та 54 видалено
  1. 35 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java
  2. 42 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java
  3. 27 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java
  4. 15 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ExDraftRecord.java
  5. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskProcessInfo.java
  6. 24 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/EMDraftGroupVO.java
  7. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessDetailBasicsVO.java
  8. 6 0
      blade-service/blade-control/pom.xml
  9. 8 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExpenseManagerController.java
  10. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java
  11. 5 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java
  12. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/TaskProcessService.java
  13. 36 11
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java
  14. 2 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java
  15. 37 32
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  16. 18 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 35 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java

@@ -0,0 +1,35 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class EMFinancialReimbursementInfoDTOBatch implements Serializable {
+
+    @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
+    private String submitStatus;
+
+    @ApiModelProperty(value = "明细信息")
+    private List<EMFinancialReimbursementInfoDTODetailInfo> detailInfo;
+
+    @ApiModelProperty(value = "审批人对象")
+    private EMFinancialReimbursementInfoDTOTaskUser taskUser;
+
+    @ApiModelProperty(value = "归属人id")
+    private Long userIdVesting;
+
+    @ApiModelProperty(value = "是否抵扣借款 0=否 1=是")
+    private Integer isDeductLoan;
+
+    @ApiModelProperty(value = "借款信息id")
+    private Long deductLoanId;
+
+    @ApiModelProperty(value = "实际报销金额")
+    private BigDecimal frMoneyActual;
+
+
+}

+ 42 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java

@@ -0,0 +1,42 @@
+package org.springblade.control.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class EMFinancialReimbursementInfoDTODetailInfo implements Serializable {
+
+    @ApiModelProperty(value = "数据id")
+    private Long id;
+
+    @ApiModelProperty(value = "所属项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "预算计划ids")
+    private String budgetPlanIds;
+
+    @ApiModelProperty(value = "报销类型")
+    private Integer frType;
+
+    @ApiModelProperty(value = "报销金额")
+    private BigDecimal frMoney;
+
+    @ApiModelProperty(value = "报销时间")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date frDate;
+
+    @ApiModelProperty(value = "费用说明")
+    private String frDesc;
+
+    @ApiModelProperty(value = "电子发票url地址")
+    private String frElectronicInvoiceUrl;
+
+    @ApiModelProperty(value = "附件url地址")
+    private String frAttachmentUrl;
+
+}

+ 27 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java

@@ -0,0 +1,27 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.control.entity.EMProcessTaskUser;
+
+import java.util.List;
+
+@Data
+public class EMFinancialReimbursementInfoDTOTaskUser {
+
+    @ApiModelProperty(value = "部门负责人")
+    private EMProcessTaskUser responsibleUser;
+
+    @ApiModelProperty(value = "财务人员")
+    private EMProcessTaskUser financeUser;
+
+    @ApiModelProperty(value = "最终确认付款人")
+    private EMProcessTaskUser finalConfirmationUser;
+
+    @ApiModelProperty(value = "出纳人")
+    private EMProcessTaskUser cashierUser;
+
+    @ApiModelProperty(value = "抄送人列表")
+    private List<EMProcessTaskUser> ccUserList;
+
+}

+ 15 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ExDraftRecord.java

@@ -0,0 +1,15 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName(value = "c_ex_draft_record")
+public class ExDraftRecord implements Serializable {
+    private Long id;
+    private Long groupId;
+    private Long dataId;
+    private Integer dataType;
+}

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskProcessInfo.java

@@ -48,4 +48,7 @@ public class TaskProcessInfo extends BaseEntity {
     @ApiModelProperty(value = "驳回原因")
     private String rejectDesc;
 
+    @ApiModelProperty(value = "支付状态 1=已支付 0=待支付")
+    private Integer payStatus;
+
 }

+ 24 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/EMDraftGroupVO.java

@@ -0,0 +1,24 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class EMDraftGroupVO implements Serializable {
+
+    @ApiModelProperty(value = "草稿记录分组id")
+    private Long groupId;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "草稿信息Ids")
+    private String eMDraftIds;
+
+}

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessDetailBasicsVO.java

@@ -27,4 +27,7 @@ public class TaskProcessDetailBasicsVO implements Serializable {
     @ApiModelProperty(value = "审批任务上报时间")
     private Date reportDate;
 
+    @ApiModelProperty(value = "支付状态 1=已支付 0=待支付")
+    private Integer payStatus;
+
 }

+ 6 - 0
blade-service/blade-control/pom.xml

@@ -36,6 +36,12 @@
             <version>2.9.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-system-api</artifactId>
+            <version>2.9.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExpenseManagerController.java

@@ -40,10 +40,17 @@ public class ExpenseManagerController extends BladeController {
     @GetMapping("/financial/draft/list")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "财务报销草稿箱列表")
-    public R<List<EMDraftVO>> financialDraftList() {
+    public R<List<EMDraftGroupVO>> financialDraftList() {
         return R.data(financialReimbursementService.financialDraftList());
     }
 
+    @GetMapping("/financial/draft/detail")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "财务报销草稿箱编辑详情", notes = "传入当前草稿的eMDraftIds")
+    public R<List<EMFinancialReimbursementInfoVO>> financialDraftDetail(@RequestParam String eMDraftIds) {
+        return R.data(financialReimbursementService.financialDraftDetail(eMDraftIds));
+    }
+
     @GetMapping("/financial/detail")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "财务报销信息详情", notes = "传入财务报销信息id")

+ 3 - 3
blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java

@@ -52,9 +52,9 @@ public class TaskProcessController extends BladeController {
 
     @PostMapping("/task/submit")
     @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "审批任务提交", notes = "传入审批任务id")
-    public R<Object> taskSubmit(@RequestParam String id) {
-        return R.status(taskProcessService.taskSubmit(id));
+    @ApiOperation(value = "审批任务提交", notes = "传入审批任务id、是否支付payStatus(已支付=1,待支付=0)")
+    public R<Object> taskSubmit(@RequestParam String id, String payStatus) {
+        return R.status(taskProcessService.taskSubmit(id, payStatus));
     }
 
     @PostMapping("/task/plan/page")

+ 5 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java

@@ -2,7 +2,9 @@ package org.springblade.control.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.EMFinancialReimbursementInfoDTO;
+import org.springblade.control.dto.EMFinancialReimbursementInfoDTOBatch;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.core.mp.base.BaseService;
@@ -13,7 +15,7 @@ public interface EMFinancialReimbursementService extends BaseService<EMFinancial
 
     IPage<EMFinancialReimbursementInfoVO> financialPage(IPage<EMFinancialReimbursementInfo> page, EMFinancialReimbursementInfoDTO dto);
 
-    List<EMDraftVO> financialDraftList();
+    List<EMDraftGroupVO> financialDraftList();
 
     EMFinancialReimbursementInfoVO financialDetail(Long id);
 
@@ -23,4 +25,6 @@ public interface EMFinancialReimbursementService extends BaseService<EMFinancial
 
     boolean financialCancel(Long id);
 
+    List<EMFinancialReimbursementInfoVO> financialDraftDetail(String eMDraftIds);
+
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/TaskProcessService.java

@@ -21,7 +21,7 @@ public interface TaskProcessService extends BaseService<TaskProcessInfo> {
 
     boolean taskReject(TaskProcessInfoDTO dto);
 
-    boolean taskSubmit(String id);
+    boolean taskSubmit(String id, String payStatus);
 
     IPage<TaskPlanInfoVO> taskPlanPage(IPage<ProjectCostBudget> page, TaskPlanDTO dto);
 

+ 36 - 11
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java

@@ -6,12 +6,16 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMFinancialReimbursementInfoDTO;
+import org.springblade.control.dto.EMFinancialReimbursementInfoDTOBatch;
+import org.springblade.control.dto.EMFinancialReimbursementInfoDTODetailInfo;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.ExMFinancialReimbursementMapper;
 import org.springblade.control.service.EMFinancialReimbursementService;
 import org.springblade.control.utils.BuildSerialUtils;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.core.log.exception.ServiceException;
@@ -19,6 +23,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -73,7 +78,7 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
     }
 
     @Override
-    public List<EMDraftVO> financialDraftList() {
+    public List<EMDraftGroupVO> financialDraftList() {
         if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
@@ -87,17 +92,27 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
         queryWrapper.eq(EMFinancialReimbursementInfo::getIsTemp, 0); //暂存
         List<EMFinancialReimbursementInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
-        List<EMDraftVO> resultVOS = new ArrayList<>();
-        for (EMFinancialReimbursementInfo obj : list) {
-            EMDraftVO vo = new EMDraftVO();
-            vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的日常报销" : ""));
-            vo.setUpdateTime(obj.getUpdateTime());
-            resultVOS.add(vo);
+
+        List<String> dataIds = list.stream().map(EMFinancialReimbursementInfo::getId).map(String::valueOf).collect(Collectors.toList());
+        List<EMDraftGroupVO> resultList = new LinkedList<>();
+        if (dataIds.size() > 0) {
+            List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where data_id in(" + StringUtils.join(dataIds, ",") + ")", new BeanPropertyRowMapper<>(ExDraftRecord.class));
+            Map<Long, List<ExDraftRecord>> groupMaps = query.stream().collect(Collectors.groupingBy(ExDraftRecord::getGroupId));
+            for (Map.Entry<Long, List<ExDraftRecord>> listEntry : groupMaps.entrySet()) {
+                Long groupId = listEntry.getKey();
+                List<Long> ids = listEntry.getValue().stream().map(ExDraftRecord::getDataId).collect(Collectors.toList());
+                EMFinancialReimbursementInfo obj = baseMapper.selectById(ids.get(0));
+                EMDraftGroupVO vo = new EMDraftGroupVO();
+                if (obj != null) {
+                    userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的日常报销" : ""));
+                    vo.setUpdateTime(obj.getUpdateTime());
+                }
+                vo.setGroupId(groupId);
+                vo.setEMDraftIds(StringUtils.join(ids, ","));
+                resultList.add(vo);
+            }
         }
-        return resultVOS.stream()
-                .sorted(Comparator.comparing(EMDraftVO::getUpdateTime).reversed())
-                .collect(Collectors.toList());
+        return resultList;
     }
 
     @Override
@@ -113,6 +128,7 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
+        Long draftGroupId = SnowFlakeUtil.getId(); //草稿draftGroupId
         for (EMFinancialReimbursementInfoDTO dto : dtoList) { //批量提交
             boolean var = false;
             dto.setCreateUser(SecureUtil.getUserId());
@@ -131,6 +147,8 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
                 dto.setIsTemp(0); //暂存
                 dto.setStatus(0); //未上报
                 if (var) {
+                    //绑定关系
+                    jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + dto.getId() + ",1)");
                     this.save(dto);
                 } else {
                     this.saveOrUpdate(dto);
@@ -242,6 +260,13 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
         return false;
     }
 
+    @Override
+    public List<EMFinancialReimbursementInfoVO> financialDraftDetail(String eMDraftIds) {
+        List<EMFinancialReimbursementInfo> emFinancialReimbursementInfos = baseMapper.selectBatchIds(Func.toStrList(eMDraftIds));
+        List<EMFinancialReimbursementInfoVO> vos = BeanUtil.copyProperties(emFinancialReimbursementInfos, EMFinancialReimbursementInfoVO.class);
+        return vos;
+    }
+
     /**
      * 获取编号
      *

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java

@@ -50,8 +50,8 @@ public class EMLoanServiceImpl extends BaseServiceImpl<ExMLoanMapper, EMLoanInfo
             EMLoanInfoVO vo = new EMLoanInfoVO();
             BeanUtils.copyProperties(obj, vo);
 
-            //在财务报销里,财务报销审批闭环后,如果有选择抵消借款金额,那么扣除后,当前借款=0,就视为已还
-            vo.setReturnStatus(vo.getLoanMoney().compareTo(BigDecimal.valueOf(0)) == 0 ? "已还" : "未还");
+            //在财务报销里,财务报销审批闭环后,如果有选择抵消借款金额,那么比对还款金额与借款金额
+            vo.setReturnStatus(vo.getLoanMoney().compareTo(vo.getReturnMoney()) == 0 ? "已还清" : "未还清");
 
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));

+ 37 - 32
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -1,6 +1,8 @@
 package org.springblade.control.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,10 +26,13 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
@@ -49,6 +54,7 @@ import java.util.stream.Collectors;
 public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, TaskProcessInfo> implements TaskProcessService {
 
     private final IUserClient iUserClient;
+    private final ISysClient iSysClient;
     private final JdbcTemplate jdbcTemplate;
     private final BladeRedis bladeRedis;
     private final ProjectCostBudgetServiceImpl projectCostBudgetService;
@@ -144,6 +150,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             String userName = userMap.get(taskProcessInfo.getReportUserId());
             basicsVO.setReportUser(StringUtils.isNotEmpty(userName) ? userName : "");
             basicsVO.setReportDate(taskProcessInfo.getReportDate());
+            basicsVO.setPayStatus(ObjectUtil.isNotEmpty(taskProcessInfo.getPayStatus()) ? taskProcessInfo.getPayStatus() : null);
             vo.setBasicsInfo(basicsVO);
 
             //查询审批任务与业务数据关系,构造其他信息
@@ -287,7 +294,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean taskSubmit(String id) {
+    public boolean taskSubmit(String id, String payStatus) {
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("未获取到当前用户信息,请联系管理员");
         }
@@ -326,13 +333,23 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 auditUserIdCompleteList.add(SecureUtil.getUserId() + "");
             }
 
+            LambdaUpdateWrapper<TaskProcessInfo> updateWrapper = new LambdaUpdateWrapper<>();
+            //获取当前用户是否为财务人员,财务人员修改是否支付状态
+            R<Dept> dept = iSysClient.getDept(Long.parseLong(SecureUtil.getDeptId()));
+            if (dept != null && dept.getData() != null && ObjectUtil.isNotEmpty(payStatus)) {
+                Dept deptObj = dept.getData();
+                if (deptObj != null && (deptObj.getDeptName().contains("财务") || deptObj.getDeptName().contains("人事"))) {
+                    updateWrapper.set(TaskProcessInfo::getPayStatus, payStatus);
+                }
+            }
+
             //修改待审批人ids、完成审批人ids
-            this.update(Wrappers.<TaskProcessInfo>lambdaUpdate()
-                    .set(TaskProcessInfo::getAuditUserIds, ObjectUtil.isNotEmpty(auditUserIdList) ? StringUtils.join(auditUserIdList, ",") : null)
-                    .set(TaskProcessInfo::getAuditUserIdsComplete, ObjectUtil.isNotEmpty(auditUserIdCompleteList) ? StringUtils.join(auditUserIdCompleteList, ",") : null)
-                    .eq(TaskProcessInfo::getId, id));
+            updateWrapper.set(TaskProcessInfo::getAuditUserIds, ObjectUtil.isNotEmpty(auditUserIdList) ? StringUtils.join(auditUserIdList, ",") : null);
+            updateWrapper.set(TaskProcessInfo::getAuditUserIdsComplete, ObjectUtil.isNotEmpty(auditUserIdCompleteList) ? StringUtils.join(auditUserIdCompleteList, ",") : null);
+            updateWrapper.eq(TaskProcessInfo::getId, id);
+            this.update(updateWrapper);
 
-            //如果待审批人已全部审批完毕,那么修改任务状态
+            //如果待审批人已全部审批完毕,那么修改任务状态,闭环
             if (auditUserIdList.size() == 0) {
 
                 //审批任务状态 =2 已审批
@@ -478,8 +495,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                         this.save(taskProcessInfo);
 
                         //新增计划任务更改状态记录信息
-                        jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,transfer_object,transfer_reason) " +
-                                "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1,'" + completionTimeStr + "',null,null)");
+                        jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,start_transfer_object,transfer_object,transfer_reason) " +
+                                "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1,'" + completionTimeStr + "',null,null,null)");
 
                         //新增审批任务关联信息
                         jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
@@ -508,8 +525,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                         this.save(taskProcessInfo);
 
                         //新增计划任务更改状态记录信息
-                        jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,transfer_object,transfer_reason) " +
-                                "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",2,'" + completionTimeStr + "'," + dto.getTransferObject() + "," + dto.getTransferReason() + ")");
+                        jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,start_transfer_object,transfer_object,transfer_reason) " +
+                                "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",2,'" + completionTimeStr + "'," + SecureUtil.getUserId() + "," + dto.getTransferObject() + "," + dto.getTransferReason() + ")");
 
                         //新增审批任务关联信息
                         jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
@@ -567,7 +584,6 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         }
     }
 
-
     /**
      * 处理审批闭环后的业务数据
      *
@@ -587,35 +603,31 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             case 2: //财务
                 EMFinancialReimbursementInfo emFinancialReimbursementInfo = jdbcTemplate.query("select * from c_expense_financial_reimbursement_info where id = " + dataId, new BeanPropertyRowMapper<>(EMFinancialReimbursementInfo.class)).stream().findAny().orElse(null);
                 if (emFinancialReimbursementInfo != null && emFinancialReimbursementInfo.getStatus().equals(2)) {
-                    //已审批财务报销进行金额统计
+                    //TODO 已审批财务报销进行金额统计
 
                     //处理借款抵扣金额(如果存在借款抵扣,那么扣除相应借款金额)
                     if (ObjectUtil.isNotEmpty(emFinancialReimbursementInfo.getFrMoney()) && emFinancialReimbursementInfo.getIsDeductLoan() == 1 && ObjectUtil.isNotEmpty(emFinancialReimbursementInfo.getDeductLoanId())) {
                         //获取借款金额(已审批、提交的借款金额数据)
                         EMLoanInfo emLoanInfo = jdbcTemplate.query("select id,loan_money from c_expense_loan_info where is_deleted = 0 and status = 2 and is_temp = 1 and id = " + emFinancialReimbursementInfo.getDeductLoanId(), new BeanPropertyRowMapper<>(EMLoanInfo.class)).stream().findAny().orElse(null);
                         if (emLoanInfo != null && ObjectUtil.isNotEmpty(emLoanInfo.getLoanMoney())) {
-                            BigDecimal frMoney = emFinancialReimbursementInfo.getFrMoney(); //当前报销金额
-                            BigDecimal loanMoney = emLoanInfo.getLoanMoney(); //当前借款金额
+                            BigDecimal frMoney = emFinancialReimbursementInfo.getFrMoney();
+                            BigDecimal loanMoney = emLoanInfo.getLoanMoney();
                             int result = frMoney.compareTo(loanMoney);
                             if (result < 0) { //如果借款金额大于报销金额,那么抵扣借款,无实际放款
-                                BigDecimal difference = frMoney.subtract(loanMoney).abs(); //剩余借款金额
+                                BigDecimal difference = frMoney.subtract(loanMoney).abs();
                                 if (ObjectUtil.isNotEmpty(difference)) {
-                                    //借款
-                                    jdbcTemplate.execute("update from c_expense_loan_info set loan_money = " + difference + " where id = " + emLoanInfo.getId());
-                                    //实际报销金额
+                                    //部分还完frMoney
+                                    jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
                                     jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
                                 }
                             } else if (result == 0) { //相同,抵扣完成
-                                //借款
-                                jdbcTemplate.execute("update from c_expense_loan_info set loan_money = 0 where id = " + emLoanInfo.getId());
-                                //实际报销金额
+                                jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + frMoney + " where id = " + emLoanInfo.getId());
                                 jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
                             } else { //如果借款金额小于报销金额,那么抵扣完借款,还要实际放款
-                                BigDecimal difference = frMoney.subtract(loanMoney).abs(); //实际放款金额
+                                BigDecimal difference = frMoney.subtract(loanMoney).abs();
                                 if (ObjectUtil.isNotEmpty(difference)) {
-                                    //借款
-                                    jdbcTemplate.execute("update from c_expense_loan_info set loan_money = 0 where id = " + emLoanInfo.getId());
-                                    //实际报销金额
+                                    //全部还完loanMoney
+                                    jdbcTemplate.execute("update from c_expense_loan_info set return_money = " + loanMoney + " where id = " + emLoanInfo.getId());
                                     jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = " + difference + " where id = " + emFinancialReimbursementInfo.getId());
                                 }
                             }
@@ -630,13 +642,6 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                     //已审批支付审批进行金额统计
                 }
 
-                break;
-            case 4: //借款 TODO 借款与财务报销的抵消关联
-                EMLoanInfo emLoanInfo = jdbcTemplate.query("select * from c_expense_loan_info where id = " + dataId, new BeanPropertyRowMapper<>(EMLoanInfo.class)).stream().findAny().orElse(null);
-                if (emLoanInfo != null && emLoanInfo.getStatus().equals(2)) {
-                    //已审批借款审批进行金额统计
-                }
-
                 break;
             case 5: //采购 TODO 采购与经营预算关联
                 EMPurchaseInfo emPurchaseInfo = jdbcTemplate.query("select * from c_expense_purchase_info where id = " + dataId, new BeanPropertyRowMapper<>(EMPurchaseInfo.class)).stream().findAny().orElse(null);

+ 18 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -655,6 +655,18 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     //监理表的所有有效字段
                     List<String> keysAll = Func.toStrList(filedTabMaps.get(initTabName).get(0));
 
+                    //获取所有有效字段长度
+                    String sql = "SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME IN (" + StringUtils.repeat("?", ",", keysAll.size()) + ")";
+                    List<Object> args = new ArrayList<>(Arrays.asList("bladex", initTabName));
+                    args.addAll(keysAll);
+                    List<Map<String, Object>> keyLengthMap = jdbcTemplate.queryForList(sql, args.toArray());
+                    Map<String, Integer> keyLengthMaps = new HashMap<>();
+                    for (Map<String, Object> row : keyLengthMap) {
+                        String key = (String) row.get("COLUMN_NAME");
+                        int length = (int) row.get("CHARACTER_MAXIMUM_LENGTH");
+                        keyLengthMaps.put(key, length);
+                    }
+
                     //一张实体表中,多组数据,复制表共用同一张实体表,只是pKeyId不同
                     Map<String, List<InsertDataVO>> oneTab = dataValue.stream().collect(Collectors.groupingBy(InsertDataVO::getPKeyId));
                     for (Map.Entry<String, List<InsertDataVO>> tab : oneTab.entrySet()) {
@@ -675,8 +687,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                 values.add(data);
                             }
                             if (ObjectUtil.isNotEmpty(vo.getDataLength()) && vo.getDataLength() > 250 && vo.getDataLength() <= 500) {
-                                //如果字段长度不够,那么扩容
-                                exKeys.add(vo.getKey() + "---" + vo.getDataLength());
+                                Integer length = keyLengthMaps.get(vo.getKey());
+                                if (length < vo.getDataLength()) { //表字段的实际长度小于当前入参长度
+                                    //如果字段长度不够,那么扩容
+                                    exKeys.add(vo.getKey() + "---" + vo.getDataLength());
+                                }
                             }
                             if (ObjectUtil.isNotEmpty(vo.getDataLength()) && vo.getDataLength() > 500) {
                                 //如果超过500字符长度,那么直接异常提示
@@ -690,7 +705,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                 for (String exKey : exKeys) {
                                     String[] split = exKey.split("---");
                                     String key = split[0];
-                                    int length = Integer.parseInt(split[1]) + 10; //字段长度+10
+                                    int length = Integer.parseInt(split[1]) * 200; //长度扩容+200
                                     String alterSql = "ALTER TABLE " + initTabName + " MODIFY " + key + " VARCHAR(" + length + ");";
                                     exStrBuilder.append(alterSql);
                                 }