Browse Source

Merge remote-tracking branch 'origin/master' into master

yangyj 2 năm trước cách đây
mục cha
commit
94e53992dc
28 tập tin đã thay đổi với 333 bổ sung48 xóa
  1. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlContractInfoDTO.java
  2. 14 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/RoleUser.java
  3. 21 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/TaskDataDictDTO.java
  4. 2 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPayInfo.java
  5. 7 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  6. 26 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskProcessRecordDictInfo.java
  7. 0 3
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/EMPayInfoVO.java
  8. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByLoanVO.java
  9. 4 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java
  10. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  11. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  12. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  13. 9 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  14. 5 4
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java
  15. 10 10
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractReturnedInfoController.java
  16. 13 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java
  17. 19 2
      blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java
  18. 2 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractInfoService.java
  19. 2 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractReturnedInfoService.java
  20. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/TaskProcessService.java
  21. 17 7
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java
  22. 4 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java
  23. 14 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java
  24. 0 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPayServiceImpl.java
  25. 8 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  26. 25 7
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  27. 51 3
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  28. 60 0
      blade-service/blade-control/src/main/java/org/springblade/control/utils/NumberToChinese.java

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/ControlContractInfoDTO.java

@@ -18,4 +18,7 @@ import java.util.List;
 public class ControlContractInfoDTO extends ControlContractInfo {
     @ApiModelProperty(value = "搜索值")
     private String queryValue;
+
+    @ApiModelProperty(value = "合同回款集合")
+    private List<ContractReturnedInfo> list;
 }

+ 14 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/RoleUser.java

@@ -0,0 +1,14 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class RoleUser {
+
+    @ApiModelProperty(value = "角色id")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+}

+ 21 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/TaskDataDictDTO.java

@@ -0,0 +1,21 @@
+package org.springblade.control.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class TaskDataDictDTO implements Serializable {
+
+    @ApiModelProperty(value = "审批一级科目id")
+    private Long dictId;
+
+    @ApiModelProperty(value = "审批岗位名称集合")
+    private List<RoleUser> approveRoleList;
+
+    @ApiModelProperty(value = "抄送岗位名称集合")
+    private List<RoleUser> ccRoleList;
+
+}

+ 2 - 2
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPayInfo.java

@@ -30,8 +30,8 @@ public class EMPayInfo extends BaseEntity {
     @ApiModelProperty(value = "申请金额")
     private BigDecimal afMoney;
 
-    @ApiModelProperty(value = "收款人id")
-    private Long payeeUserId;
+    @ApiModelProperty(value = "收款人")
+    private String payeeUserName;
 
     @ApiModelProperty(value = "收款人开户行")
     private String payeeUserBankName;

+ 7 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -2,6 +2,8 @@ package org.springblade.control.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.NullSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -33,21 +35,26 @@ public class ProjectCostBudget extends BaseEntity {
     private Long deptId;
 
     @ApiModelProperty(value = "费用类型")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Integer costType;
 
     @ApiModelProperty(value = "项目环节")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Long projectProcess;
 
     @ApiModelProperty(value = "预算类型")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Integer budgetType;
 
     @ApiModelProperty(value = "任务类型")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Integer taskDetail;
 
     @ApiModelProperty(value = "预计天数")
     private BigDecimal budgetDays;
 
     @ApiModelProperty(value = "岗位类型")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Integer postType;
 
     @ApiModelProperty(value = "投入人员数量")

+ 26 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskProcessRecordDictInfo.java

@@ -0,0 +1,26 @@
+package org.springblade.control.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName(value = "c_task_process_record_dict_info")
+public class TaskProcessRecordDictInfo implements Serializable {
+
+    private Long id;
+    private Long dictId;
+    private Integer type;
+
+    @ApiModelProperty(value = "角色id")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+}

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

@@ -7,9 +7,6 @@ import org.springblade.control.entity.EMPayInfo;
 @Data
 public class EMPayInfoVO extends EMPayInfo {
 
-    @ApiModelProperty(value = "收款人")
-    private String payeeUserName;
-
     @ApiModelProperty(value = "创建人")
     private String createName;
 

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByLoanVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 @Data
 public class ExMaByLoanVO implements Serializable {
@@ -14,4 +15,7 @@ public class ExMaByLoanVO implements Serializable {
     @ApiModelProperty(value = "借款名称")
     private String loanName;
 
+    @ApiModelProperty(value = "借款金额")
+    private BigDecimal loanMoney;
+
 }

+ 4 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.archive.utils.FileUtils;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
@@ -61,6 +62,7 @@ public class ArchiveFileController extends BladeController {
     private final WbsTreeContractClient wbsTreeContractClient;
     private final ContractClient contractClient;
     private final MetadataClassificationClient metadataClassificationClient;
+    private final IArchivesAutoService autoService;
 
     /**
      * 上传文件
@@ -319,7 +321,8 @@ public class ArchiveFileController extends BladeController {
     @ApiOperation(value = "档案统计-档案总存储")
     public R allArchiveFileSize(Long projectId) {
         //统计案卷文件大小
-        Long fileSize = archiveFileClient.getAllArchiveFileSize(projectId);
+//        Long fileSize = archiveFileClient.getAllArchiveFileSize(projectId);
+        Long fileSize = autoService.allArchiveFileSize(projectId);
         if (fileSize == null) {
             return R.data("0B");
         }

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -134,4 +134,5 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 
 	List<ArchivesAutoVO> pageByArchivesAuto4(@Param("vo") ArchivesAutoVO vo);
 
+    Long getAllArchiveFileSize(@Param("projectId") Long projectId);
 }

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -701,6 +701,9 @@
                                                           WHERE uaa.is_deleted = 1 AND  uaa.is_destroy = 1
                                                           GROUP BY uaa.update_user )
     </select>
+    <select id="getAllArchiveFileSize" resultType="java.lang.Long">
+        select sum(uaa.file_size)  from u_archives_auto uaa WHERE uaa.project_id = #{projectId} and is_deleted = 0
+    </select>
 
 
     <update id="splitFiles">

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -90,4 +90,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	R pageByArchivesAuto2(ArchivesAutoVO archivesAuto);
 
     void getArchivesAuthByUser(Long projectId,Long contractId,Integer archiveType);
+
+    Long allArchiveFileSize(Long projectId);
 }

+ 9 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -272,6 +272,15 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		}
 	}
 
+	@Override
+	public Long allArchiveFileSize(Long projectId) {
+		Long size = baseMapper.getAllArchiveFileSize(projectId);
+		if (size == null){
+			return 0L;
+		}
+		return size * 1024L;
+	}
+
 	/**
 	 * 根据搜索获取档案柜
 	 * @param archivesAuto

+ 5 - 4
blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java

@@ -11,6 +11,7 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.ControlContractInfo;
 import org.springblade.control.service.IContractInfoService;
 import org.springblade.control.service.IProjectInfoService;
+import org.springblade.control.vo.ControlContractInfoVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
@@ -33,8 +34,8 @@ public class ContractInfoController {
     @PostMapping("/addContractInfo")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "新增合同")
-    public R addContractInfo(@RequestBody ControlContractInfo contractInfo) {
-        contractInfoService.addContractInfo(contractInfo);
+    public R addContractInfo(@RequestBody ControlContractInfoDTO dto) {
+        contractInfoService.addContractInfo(dto);
         return R.success("新增成功");
     }
 
@@ -58,8 +59,8 @@ public class ContractInfoController {
     @PostMapping("/updateContractInfo")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "修改合同")
-    public R updateContractInfo(@RequestBody ControlContractInfo contractInfo) {
-        contractInfoService.updateContractInfo(contractInfo);
+    public R updateContractInfo(@RequestBody ControlContractInfoDTO dto) {
+        contractInfoService.updateContractInfo(dto);
         return R.success("修改成功");
     }
 

+ 10 - 10
blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractReturnedInfoController.java

@@ -27,16 +27,16 @@ public class ContractReturnedInfoController {
 
     private final IContractReturnedInfoService contractReturnedInfoService;
 
-    /**
-     * 批量新增或修改回款信息
-     */
-    @PostMapping("/saveOrUpdateBatchReturned")
-    @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "批量新增或修改回款信息")
-    public R saveOrUpdateBatchReturned(@RequestBody ContractReturnedInfoDTO dto) {
-        contractReturnedInfoService.saveOrUpdateBatchReturned(dto);
-        return R.success("保存成功");
-    }
+//    /**
+//     * 批量新增或修改回款信息
+//     */
+//    @PostMapping("/saveOrUpdateBatchReturned")
+//    @ApiOperationSupport(order = 1)
+//    @ApiOperation(value = "批量新增或修改回款信息")
+//    public R saveOrUpdateBatchReturned(@RequestBody ContractReturnedInfoDTO dto) {
+//        contractReturnedInfoService.saveOrUpdateBatchReturned(dto);
+//        return R.success("保存成功");
+//    }
 
     /**
      * 根据合同ID获取合同回款列表

+ 13 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java

@@ -2,6 +2,7 @@ package org.springblade.control.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -15,6 +16,7 @@ import org.springblade.control.service.impl.ContractReturnedInfoServiceImpl;
 import org.springblade.control.service.impl.EMLoanServiceImpl;
 import org.springblade.control.service.impl.ProjectCostBudgetServiceImpl;
 import org.springblade.control.service.impl.ProjectInfoServiceImpl;
+import org.springblade.control.utils.NumberToChinese;
 import org.springblade.control.vo.ExMaByContractReturnedInfoVO;
 import org.springblade.control.vo.ExMaByControlProjectInfoVO;
 import org.springblade.control.vo.ExMaByLoanVO;
@@ -112,6 +114,7 @@ public class ExMaTwoController extends BladeController {
             BigDecimal difference = obj.getLoanMoney().subtract(obj.getReturnMoney()).abs();
             String title = format + "借款" + difference + "元";
             vo.setLoanName(title);
+            vo.setLoanMoney(difference);
             return vo;
         }).collect(Collectors.toList());
         return R.data(collect);
@@ -138,4 +141,14 @@ public class ExMaTwoController extends BladeController {
     }
 
 
+    @GetMapping("/getNumberToChinese")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "将数字转换为汉语大写,支持小数点", notes = "传入字符串value")
+    public R<Object> getNumberToChinese(@RequestParam String value) {
+        if (StringUtils.isNotEmpty(value)) {
+            return R.data(NumberToChinese.toChinese(value));
+        }
+        return R.data(null);
+    }
+
 }

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

@@ -5,9 +5,11 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springblade.control.dto.TaskDataDictDTO;
 import org.springblade.control.dto.TaskPlanDTO;
 import org.springblade.control.dto.TaskPlanStatusUpdateDTO;
 import org.springblade.control.dto.TaskProcessInfoDTO;
+import org.springblade.control.entity.TaskProcessRecordDictInfo;
 import org.springblade.control.service.TaskProcessService;
 import org.springblade.control.vo.TaskPlanInfoVO;
 import org.springblade.control.vo.TaskProcessInfoDetailVO;
@@ -19,6 +21,7 @@ import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 
 @RestController
@@ -65,17 +68,31 @@ public class TaskProcessController extends BladeController {
     }
 
     @PostMapping("/task/plan/detail")
-    @ApiOperationSupport(order = 5)
+    @ApiOperationSupport(order = 6)
     @ApiOperation(value = "计划任务详情", notes = "传入计划任务ids")
     public R<List<TaskPlanInfoVO>> taskPlanDetail(@RequestParam String ids) {
         return R.data(taskProcessService.taskPlanDetail(ids));
     }
 
     @PostMapping("/task/plan/submit")
-    @ApiOperationSupport(order = 6)
+    @ApiOperationSupport(order = 7)
     @ApiOperation(value = "计划任务变更状态", notes = "传入TaskPlanStatusUpdateDTO")
     public R<Object> taskPlanSubmit(@RequestBody TaskPlanStatusUpdateDTO dto) {
         return R.status(taskProcessService.taskPlanSubmit(dto));
     }
 
+    @PostMapping("/data/dict/submit")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "参数配置审批流程提交", notes = "传入TaskDataDictDTO")
+    public R<Object> dataDictSubmit(@RequestBody TaskDataDictDTO dto) {
+        return R.status(taskProcessService.dataDictSubmit(dto));
+    }
+
+    @GetMapping("/data/dict/list")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "参数配置审批流程列表", notes = "传入审批一级科目id")
+    public R<Map<String, List<TaskProcessRecordDictInfo>>> dataDictList(@RequestParam String id) {
+        return R.data(taskProcessService.dataDictList(id));
+    }
+
 }

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

@@ -22,7 +22,7 @@ import java.util.List;
 public interface IContractInfoService extends BaseService<ControlContractInfo> {
 
 
-    void addContractInfo(ControlContractInfo contractInfo);
+    void addContractInfo(ControlContractInfoDTO dto);
 
     List<DictInfo> getContractTypeDict();
 
@@ -30,7 +30,7 @@ public interface IContractInfoService extends BaseService<ControlContractInfo> {
 
     void deleteContractInfoById(Long id);
 
-    void updateContractInfo(ControlContractInfo contractInfo);
+    void updateContractInfo(ControlContractInfoDTO dto);
 
     ControlContractInfoVO getContractInfoById(Long id);
 

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

@@ -1,6 +1,7 @@
 package org.springblade.control.service;
 
 import org.springblade.control.dto.ContractReturnedInfoDTO;
+import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.entity.ContractReturnedInfo;
 import org.springblade.control.entity.ControlContractInfo;
 import org.springblade.control.entity.ControlProjectInfo;
@@ -19,7 +20,7 @@ import java.util.List;
  **/
 public interface IContractReturnedInfoService extends BaseService<ContractReturnedInfo> {
 
-    void saveOrUpdateBatchReturned(ContractReturnedInfoDTO dto);
+    void saveOrUpdateBatchReturned(ControlContractInfoDTO dto);
 
     /**
      * 根据合同id获取合同已回款金额

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

@@ -1,17 +1,20 @@
 package org.springblade.control.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.control.dto.TaskDataDictDTO;
 import org.springblade.control.dto.TaskPlanDTO;
 import org.springblade.control.dto.TaskPlanStatusUpdateDTO;
 import org.springblade.control.dto.TaskProcessInfoDTO;
 import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.entity.TaskProcessInfo;
+import org.springblade.control.entity.TaskProcessRecordDictInfo;
 import org.springblade.control.vo.TaskPlanInfoVO;
 import org.springblade.control.vo.TaskProcessInfoDetailVO;
 import org.springblade.control.vo.TaskProcessInfoVO;
 import org.springblade.core.mp.base.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface TaskProcessService extends BaseService<TaskProcessInfo> {
 
@@ -29,4 +32,8 @@ public interface TaskProcessService extends BaseService<TaskProcessInfo> {
 
     boolean taskPlanSubmit(TaskPlanStatusUpdateDTO dto);
 
+    boolean dataDictSubmit(TaskDataDictDTO dto);
+
+    Map<String, List<TaskProcessRecordDictInfo>> dataDictList(String id);
+
 }

+ 17 - 7
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java

@@ -41,11 +41,16 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
     /**
      * 添加合同信息
-     * @param contractInfo
      */
     @Override
-    public void addContractInfo(ControlContractInfo contractInfo) {
+    public void addContractInfo(ControlContractInfoDTO dto) {
+        ControlContractInfo contractInfo = new ControlContractInfo();
+        Long id = SnowFlakeUtil.getId();
+        dto.setId(id);
+        BeanUtils.copyProperties(dto,contractInfo);
         baseMapper.insert(contractInfo);
+        returnedInfoService.saveOrUpdateBatchReturned(dto);
+
     }
 
     /**
@@ -83,11 +88,14 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
     /**
      * 修改合同
-     * @param contractInfo
      */
     @Override
-    public void updateContractInfo(ControlContractInfo contractInfo) {
-        baseMapper.updateById(contractInfo);
+    @Transactional
+    public void updateContractInfo(ControlContractInfoDTO dto) {
+        ControlContractInfo contractInfo = new ControlContractInfo();
+        BeanUtils.copyProperties(dto,contractInfo);
+        this.updateById(contractInfo);
+        returnedInfoService.saveOrUpdateBatchReturned(dto);
     }
 
     /**
@@ -99,8 +107,10 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     public ControlContractInfoVO getContractInfoById(Long id) {
         ControlContractInfoVO contractInfo = baseMapper.getContractInfoById(id);
         BigDecimal returnedMoney = returnedInfoService.getContractReturnedMoney(id);
-        contractInfo.setReturnedMoney(returnedMoney);
-        contractInfo.setUnreturnedMoney(contractInfo.getContractMoney().subtract(returnedMoney));
+        if (contractInfo.getContractMoney() != null && returnedMoney != null) {
+            contractInfo.setReturnedMoney(returnedMoney);
+            contractInfo.setUnreturnedMoney(contractInfo.getContractMoney().subtract(returnedMoney));
+        }
         return contractInfo;
     }
 

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

@@ -3,6 +3,7 @@ package org.springblade.control.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.AllArgsConstructor;
 import org.springblade.control.dto.ContractReturnedInfoDTO;
+import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.entity.ContractReturnedInfo;
 import org.springblade.control.entity.ControlContractInfo;
 import org.springblade.control.entity.ControlProjectInfo;
@@ -36,8 +37,9 @@ public class ContractReturnedInfoServiceImpl extends BaseServiceImpl<ContractRet
      */
     @Override
     @Transactional
-    public void saveOrUpdateBatchReturned(ContractReturnedInfoDTO dto) {
-        baseMapper.deleteOldInfo(dto.getContractId());
+    public void saveOrUpdateBatchReturned(ControlContractInfoDTO dto) {
+        //删除所有回款信息
+        baseMapper.deleteOldInfo(dto.getId());
         List<ContractReturnedInfo> list = dto.getList();
         if (list != null && list.size() >0) {
             list.stream().forEach(l->l.setProjectId(dto.getProjectId()));

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

@@ -28,6 +28,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -51,12 +52,23 @@ public class EMLoanServiceImpl extends BaseServiceImpl<ExMLoanMapper, EMLoanInfo
             BeanUtils.copyProperties(obj, vo);
 
             //在财务报销里,财务报销审批闭环后,如果有选择抵消借款金额,那么比对还款金额与借款金额
-            vo.setReturnStatus(vo.getLoanMoney().compareTo(vo.getReturnMoney()) == 0 ? "已还清" : "未还清");
+            if (ObjectUtil.isNotEmpty(vo.getLoanMoney())) {
+                if (vo.getLoanMoney().equals(vo.getReturnMoney())) {
+                    vo.setReturnStatus("已还清");
+                } else {
+                    vo.setReturnStatus("未还清");
+                }
+            }
 
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
-            vo.setUseReturnDate(vo.getUseDate() + "-" + vo.getReturnDate());
+            if (ObjectUtil.isNotEmpty(obj.getUseDate()) && ObjectUtil.isNotEmpty(obj.getReturnDate())) {
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
+                String useDate = simpleDateFormat.format(obj.getUseDate());
+                String returnDate = simpleDateFormat.format(obj.getReturnDate());
+                vo.setUseReturnDate(useDate + "-" + returnDate);
+            }
             return vo;
         });
     }

+ 0 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPayServiceImpl.java

@@ -47,7 +47,6 @@ public class EMPayServiceImpl extends BaseServiceImpl<ExMPayMapper, EMPayInfo> i
         return pages.convert(obj -> {
             EMPayInfoVO vo = new EMPayInfoVO();
             BeanUtils.copyProperties(obj, vo);
-            vo.setPayeeUserName(userMap.get(vo.getPayeeUserId()));
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -54,7 +55,13 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             vo.setUcOrgName(""); //TODO 部门
-            vo.setUseReturnDate(vo.getUseStartDate() + "-" + vo.getUseEndDate());
+
+            if (ObjectUtil.isNotEmpty(obj.getUseStartDate()) && ObjectUtil.isNotEmpty(obj.getUseEndDate())){
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
+                String useDate = simpleDateFormat.format(obj.getUseStartDate());
+                String returnDate = simpleDateFormat.format(obj.getUseEndDate());
+                vo.setUseReturnDate(useDate + "-" + returnDate);
+            }
             return vo;
         });
     }

+ 25 - 7
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -55,9 +55,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
             queryWrapper.eq(LogHistoryInfo::getUserId, dto.getUserId());
         }
         if (StringUtils.isNotEmpty(dto.getStartTime()) && StringUtils.isNotEmpty(dto.getEndTime())) {
-            String endTime = dto.getEndTime();
-            endTime = DateUtil.format(DateUtils.addDays(DateUtil.parse(endTime, "yyyy-MM"), 1), "yyyy-MM");
-            queryWrapper.between(LogHistoryInfo::getCreateTime, dto.getStartTime(), endTime);
+            queryWrapper.apply("DATE_FORMAT(create_time, '%Y-%m') BETWEEN '" + dto.getStartTime() + "' AND '" + dto.getEndTime() + "'");
         } else {
             //默认查询当月所有日志
             LocalDate today = LocalDate.now();
@@ -104,13 +102,33 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
 
             return voList.stream()
                     .collect(Collectors.groupingBy(vo -> {
-                        LocalDateTime localDateTime = LocalDateTime.ofInstant(vo.getCreateTime().toInstant(), ZoneId.systemDefault());
-                        return localDateTime.toLocalDate().toString();
+                        return formatDate(
+                                vo.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().toString(),
+                                "今天",
+                                "昨天",
+                                "前天");
                     }, LinkedHashMap::new, Collectors.toList()));
         }
         return null;
     }
 
+    public static String formatDate(String dateStr, String todayStr, String yesterdayStr, String beforeYesterdayStr) {
+        LocalDate date = LocalDate.parse(dateStr);
+        LocalDate today = LocalDate.now();
+        if (date.equals(today)) {
+            return todayStr;
+        }
+        LocalDate yesterday = today.minusDays(1);
+        if (date.equals(yesterday)) {
+            return yesterdayStr;
+        }
+        LocalDate beforeYesterday = today.minusDays(2);
+        if (date.equals(beforeYesterday)) {
+            return beforeYesterdayStr;
+        }
+        return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+    }
+
     @Override
     public boolean logSubmit(LogHistoryInfoDTO dto) {
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
@@ -212,9 +230,9 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
 
                 //处理当前日志所有已读人信息
                 List<LogHistoryInfoReadVO> readUsersInfo = jdbcTemplate.query("select * from c_log_history_read_record where log_id = " + vo.getId(), new BeanPropertyRowMapper<>(LogHistoryInfoReadVO.class));
-                List<Long> userIds = readUsersInfo.stream().map(LogHistoryInfoReadVO::getUserId).distinct().collect(Collectors.toList());
+                List<String> userIds = readUsersInfo.stream().map(LogHistoryInfoReadVO::getUserId).distinct().map(String::valueOf).collect(Collectors.toList());
                 if (userIds.size() > 0) {
-                    List<User> readUserInfoList = iUserClient.userInfoByIds(userIds);
+                    List<User> readUserInfoList = jdbcTemplate.query("select * from blade_user where id in(" + StringUtils.join(userIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
                     List<LogHistoryInfoVO.ReadUser> readUsers = new ArrayList<>();
                     for (User userRead : readUserInfoList) {
                         readUsers.add(new LogHistoryInfoVO.ReadUser(userRead.getAvatar(), userRead.getRealName()));

+ 51 - 3
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -14,9 +14,7 @@ import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.control.dto.TaskPlanDTO;
-import org.springblade.control.dto.TaskPlanStatusUpdateDTO;
-import org.springblade.control.dto.TaskProcessInfoDTO;
+import org.springblade.control.dto.*;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.TaskProcessMapper;
 import org.springblade.control.service.TaskProcessService;
@@ -538,6 +536,56 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         return false;
     }
 
+    @Override
+    public boolean dataDictSubmit(TaskDataDictDTO dto) {
+        if (ObjectUtil.isNotEmpty(dto.getDictId())) {
+            //删除当前类型的审批流程
+            jdbcTemplate.execute("delete from c_task_process_record_dict_info where dict_id =" + dto.getDictId());
+
+            //新增审批流程
+            if (dto.getApproveRoleList().size() > 0) {
+                List<RoleUser> approveRoleList = dto.getApproveRoleList();
+                int sort = 1;
+                for (RoleUser roleUser : approveRoleList) {
+                    jdbcTemplate.execute("insert into c_task_process_record_dict_info(id,dict_id,type,role_id,role_name,sort) values (" + SnowFlakeUtil.getId() + "," + dto.getDictId() + ",1," + roleUser.getRoleId() + ",'" + roleUser.getRoleName() + "'," + sort + ")");
+                    sort++;
+                }
+            }
+
+            //新增抄送流程
+            if (dto.getCcRoleList().size() > 0) {
+                List<RoleUser> ccRoleList = dto.getCcRoleList();
+                int sort = 1;
+                for (RoleUser roleUser : ccRoleList) {
+                    jdbcTemplate.execute("insert into c_task_process_record_dict_info(id,dict_id,type,role_id,role_name,sort) values (" + SnowFlakeUtil.getId() + "," + dto.getDictId() + ",2," + roleUser.getRoleId() + ",'" + roleUser.getRoleName() + "'," + sort + ")");
+                    sort++;
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public Map<String, List<TaskProcessRecordDictInfo>> dataDictList(String id) {
+        Map<String, List<TaskProcessRecordDictInfo>> resultMap = new LinkedHashMap<>();
+        if (StringUtils.isNotEmpty(id)) {
+            List<TaskProcessRecordDictInfo> taskProcessRecordDictInfos = jdbcTemplate.query("select * from c_task_process_record_dict_info where dict_id = " + id, new BeanPropertyRowMapper<>(TaskProcessRecordDictInfo.class));
+            if (taskProcessRecordDictInfos.size() > 0) {
+                Map<Integer, List<TaskProcessRecordDictInfo>> maps = taskProcessRecordDictInfos.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(TaskProcessRecordDictInfo::getType));
+                List<TaskProcessRecordDictInfo> taskProcessRecordDictInfos1 = maps.get(1);
+                if (taskProcessRecordDictInfos1 != null) {
+                    resultMap.put("审批岗位", taskProcessRecordDictInfos1);
+                }
+                List<TaskProcessRecordDictInfo> taskProcessRecordDictInfos2 = maps.get(2);
+                if (taskProcessRecordDictInfos2 != null) {
+                    resultMap.put("抄送信息", taskProcessRecordDictInfos2);
+                }
+            }
+        }
+        return resultMap;
+    }
+
     /**
      * 修改业务审批状态
      *

+ 60 - 0
blade-service/blade-control/src/main/java/org/springblade/control/utils/NumberToChinese.java

@@ -0,0 +1,60 @@
+package org.springblade.control.utils;
+
+import java.math.BigDecimal;
+
+public class NumberToChinese {
+
+    private static final char[] CN_UPPER_NUMBER = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
+    private static final char[] CN_UPPER_UNIT = {' ', '拾', '佰', '仟', '万', '亿'};
+
+    //将数字字符串转换为汉语大写,支持小数点
+    public static String toChinese(String numberStr) {
+        if (numberStr == null || numberStr.isEmpty()) {
+            return "";
+        }
+        try {
+            String[] parts = numberStr.split("\\.");
+            StringBuilder builder = new StringBuilder();
+            int signum = new BigDecimal(parts[0]).signum();
+            if (signum == 0) {
+                builder.append(CN_UPPER_NUMBER[0]);
+                builder.append("元整");
+                return builder.toString();
+            }
+            if (signum == -1) {
+                builder.append("负");
+                parts[0] = parts[0].substring(1);
+            }
+            long integerPart = Long.parseLong(parts[0]);
+            if (integerPart == 0) {
+                builder.append(CN_UPPER_NUMBER[0]);
+            } else {
+                int unitIndex = 0;
+                while (integerPart > 0) {
+                    int num = (int) (integerPart % 10);
+                    if (num > 0 || unitIndex == 4 || unitIndex == 8) {
+                        builder.insert(0, CN_UPPER_UNIT[unitIndex]);
+                    }
+                    builder.insert(0, CN_UPPER_NUMBER[num]);
+                    integerPart /= 10;
+                    unitIndex++;
+                }
+            }
+            if (parts.length == 2) {
+                String decimalStr = parts[1];
+                builder.append("点");
+                for (int i = 0; i < decimalStr.length(); i++) {
+                    int num = decimalStr.charAt(i) - '0';
+                    builder.append(CN_UPPER_NUMBER[num]);
+                }
+            }
+            builder.append("元");
+            return builder.toString();
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException("输入参数格式错误,只支持数字(包含小数点)");
+        }
+    }
+}
+
+
+