فهرست منبع

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 سال پیش
والد
کامیت
e091ca0811
31فایلهای تغییر یافته به همراه468 افزوده شده و 49 حذف شده
  1. 14 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/RoleUser.java
  2. 21 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/TaskDataDictDTO.java
  3. 2 5
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java
  4. 26 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/TaskProcessRecordDictInfo.java
  5. 39 4
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java
  6. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ContractReturnedInfoVO.java
  7. 10 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractInfoController.java
  8. 18 10
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ContractReturnedInfoController.java
  9. 12 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java
  10. 20 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java
  11. 19 2
      blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java
  12. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.java
  13. 8 6
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml
  14. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml
  15. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  16. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  17. 6 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  18. 20 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  19. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IContractInfoService.java
  20. 2 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  21. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java
  22. 7 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/TaskProcessService.java
  23. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java
  24. 4 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractReturnedInfoServiceImpl.java
  25. 14 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java
  26. 8 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  27. 24 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  28. 9 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  29. 49 8
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  30. 51 3
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  31. 60 0
      blade-service/blade-control/src/main/java/org/springblade/control/utils/NumberToChinese.java

+ 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 - 5
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -35,26 +35,21 @@ 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 = "投入人员数量")
@@ -97,6 +92,7 @@ public class ProjectCostBudget extends BaseEntity {
     private String planTarget;
 
     @ApiModelProperty(value = "任务人")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Long taskUser;
 
     @DateTimeFormat(
@@ -121,6 +117,7 @@ public class ProjectCostBudget extends BaseEntity {
     private BigDecimal planDays;
 
     @ApiModelProperty(value = "关联回款")
+    @JsonSerialize(nullsUsing = NullSerializer.class)
     private Long contractReturnedId;
 
     @ApiModelProperty(value = "父id")

+ 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;
+
+}

+ 39 - 4
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/AllProjectStatsVO.java

@@ -3,6 +3,8 @@ package org.springblade.control.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * @Param
  * @Author wangwl
@@ -11,15 +13,48 @@ import lombok.Data;
 @Data
 public class AllProjectStatsVO {
     @ApiModelProperty(value = "总合同额")
-    private String allContractMoney;
+    private BigDecimal allContractMoney;
 
     @ApiModelProperty(value = "总测算成本")
-    private String allProjectCost;
+    private BigDecimal allProjectCost;
 
     @ApiModelProperty(value = "总实际支出")
-    private String allPracticalDisburse;
+    private BigDecimal allPracticalDisburse;
 
     @ApiModelProperty(value = "总回款")
-    private String allReturned;
+    private BigDecimal allReturned;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "合同金额")
+    private BigDecimal contractMoney;
+
+    @ApiModelProperty(value = "预算成本")
+    private BigDecimal budgetCost;
+
+    @ApiModelProperty(value = "实际已支出成本呢")
+    private BigDecimal practicalPayCost;
+
+    @ApiModelProperty(value = "实际已回款")
+    private BigDecimal ReturnedMoney;
+
+    @ApiModelProperty(value = "未回款")
+    private BigDecimal unreturnedMoney;
+
+    @ApiModelProperty(value = "费用分类")
+    private Integer costType;
+
+    @ApiModelProperty(value = "费用分类值")
+    private String costTypeValue;
+
+    @ApiModelProperty(value = "实际费用")
+    private BigDecimal practicalCost;
+
+    @ApiModelProperty(value = "总计")
+    private BigDecimal total;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
 
 }

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

@@ -25,5 +25,8 @@ public class ContractReturnedInfoVO extends ContractReturnedInfo {
     @ApiModelProperty(value = "催款执行人名称")
     private String reminderUserName;
 
+    @ApiModelProperty(value = "是否超时,1没有,2超时")
+    private String isTimeOut;
+
 
 }

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

@@ -87,6 +87,16 @@ public class ContractInfoController {
         return R.data(contractInfoService.getPage(dto,query));
     }
 
+    /**
+     * 合同列表,回款更新
+     */
+    @GetMapping("/getList")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "合同列表,回款更新")
+    public R getList() {
+        return R.data(contractInfoService.getList());
+    }
+
     /**
      * 获取合同类型字典
      */

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

@@ -2,9 +2,12 @@ package org.springblade.control.controller;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 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.service.IContractInfoService;
@@ -27,16 +30,21 @@ 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 = "批量新增或修改回款信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "合同id", required = true),
+            @ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+            @ApiImplicitParam(name = "list", value = "合同回款集合", required = false),
+    })
+    public R saveOrUpdateBatchReturned(@RequestBody ControlContractInfoDTO dto) {
+        contractReturnedInfoService.saveOrUpdateBatchReturned(dto);
+        return R.success("保存成功");
+    }
 
     /**
      * 根据合同ID获取合同回款列表

+ 12 - 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;
@@ -139,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);
+    }
+
 }

+ 20 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectInfoController.java

@@ -119,4 +119,24 @@ public class ProjectInfoController {
         return R.data(projectInfoService.allProjectStats());
     }
 
+    /**
+     * 项目统计列表统计
+     */
+    @GetMapping("/ProjectListStats")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "项目统计列表统计")
+    public R ProjectListStats() {
+        return R.data(projectInfoService.ProjectListStats());
+    }
+
+    /**
+     * 项目统计费用分类
+     */
+    @GetMapping("/ProjectCostTypeStats")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "项目统计费用分类")
+    public R ProjectCostTypeStats(Long id) {
+        return R.data(projectInfoService.ProjectCostTypeStats(id));
+    }
+
 }

+ 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 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.java

@@ -30,4 +30,6 @@ public interface ContractInfoMapper extends BaseMapper<ControlContractInfo> {
     List<ControlContractInfoVO> getPage(IPage page,@Param("dto") ControlContractInfoDTO dto);
 
     List<ControlProjectInfo> getNoConnectionProject2();
+
+    List<ControlContractInfo> getList();
 }

+ 8 - 6
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractInfoMapper.xml

@@ -19,14 +19,16 @@
         FROM c_control_contract_info ci WHERE ci.id = #{id}
     </select>
     <select id="getPage" resultType="org.springblade.control.vo.ControlContractInfoVO">
-        SELECT
-            ci.*,
-            (select dict_name  from c_dict_info WHERE code = 'contract_type' AND dict_value= ci.contract_type) as contractTypeValue,
-            IFNULL((select SUM(practical_returned_money) from c_contract_returned_info WHERE contract_id = ci.id),0)  as returnedMoney,
-            (ci.contract_money - IFNULL((select SUM(practical_returned_money) from c_contract_returned_info WHERE contract_id = ci.id),0)) as unreturnedMoney
-        FROM c_control_contract_info ci
+        select ci.* , ( select dict_name from c_dict_info where code = 'contract_type' and dict_value = ci.contract_type ) as contractTypeValue,
+        IFNULL(( select sum(practical_returned_money) from c_contract_returned_info where contract_id = ci.id ), 0) as returnedMoney ,
+        (IFNULL(( select sum(cri.should_returned_money) from c_contract_returned_info cri where cri.should_returned_time &lt; NOW()  and cri.contract_id = ci.id and cri.is_deleted=0), 0) -
+        IFNULL(( select sum(cri.practical_returned_money) from c_contract_returned_info cri where cri.contract_id = ci.id and cri.is_deleted=0), 0)) as unreturnedMoney
+        from c_control_contract_info ci where ci.is_deleted = 0
     </select>
     <select id="getNoConnectionProject2" resultType="org.springblade.control.entity.ControlProjectInfo">
         select pi.id,pi.name from c_control_project_info pi WHERE pi.is_deleted = 0
     </select>
+    <select id="getList" resultType="org.springblade.control.entity.ControlContractInfo">
+        select * from c_control_contract_info WHERE is_deleted = 0
+    </select>
 </mapper>

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ContractReturnedInfoMapper.xml

@@ -10,6 +10,7 @@
     <select id="getListByContractId" resultType="org.springblade.control.vo.ContractReturnedInfoVO">
         select
             ri.*,
+        (IF(ri.practical_returned_time is null,IF (ri.should_returned_time &lt; NOW(),2,1),1)) as 'isTimeOut',
             (select name from blade_user WHERE id = ri.reminder_user) as reminderUserName
         from c_contract_returned_info ri where ri.contract_id = #{contractId}
     </select>

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -49,4 +49,6 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     List<ProjectCostBudget> MonthOfYearPlanOverview(@Param("user") Long user,@Param("year") int year);
 
     Integer getPostMoney(@Param("type") Integer postType);
+
+    List<ProjectCostBudget> getAllBudgetByProjectId(@Param("id") Long id);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -118,6 +118,9 @@
         select dict_value
         from c_dict_info where `type` = 3 and code = #{type}
     </select>
+    <select id="getAllBudgetByProjectId" resultType="org.springblade.control.entity.ProjectCostBudget">
+        select * from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = #{id} and pcb.parent_id = 0
+    </select>
 
 
 </mapper>

+ 6 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java

@@ -29,4 +29,10 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     Long selectProjectCount();
 
     AllProjectStatsVO allProjectStats();
+
+    List<AllProjectStatsVO> ProjectListStats();
+
+    List<DictInfo> getCostTypeDict();
+
+    ControlProjectInfo getById(@Param("id") Long id);
 }

+ 20 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -54,7 +54,26 @@
         select count(1) from c_control_project_info
     </select>
     <select id="allProjectStats" resultType="org.springblade.control.vo.AllProjectStatsVO">
-
+        select
+            (select sum(cci.contract_money)  from c_control_contract_info cci WHERE cci.is_deleted = 0) as allContractMoney,
+            (select SUM(cbs.project_cost_total)  from c_project_cost_budget_stats cbs WHERE cbs.is_deleted = 0) as allProjectCost,
+            (select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cri.is_deleted = 0) as allReturned
+    </select>
+    <select id="ProjectListStats" resultType="org.springblade.control.vo.AllProjectStatsVO">
+        select
+            cpi.name as 'projectName',
+            cci.contract_money  as 'contractMoney',
+                (select cbs.project_cost_total from c_project_cost_budget_stats cbs WHERE cpi.id = cbs.project_id  and cbs.is_deleted = 0) as 'budgetCost',
+                (select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cpi.id = cri.project_id and cri.is_deleted = 0) as 'ReturnedMoney',
+                (cci.contract_money - IFNULL((select SUM(cri.practical_returned_money) from c_contract_returned_info cri WHERE cri.contract_id = cci.id and cri.is_deleted = 0),0)) as 'unreturnedMoney'
+        from c_control_project_info cpi left join c_control_contract_info cci on cpi.id = cci.project_id and cci.is_deleted = 0
+        WHERE cpi.is_deleted = 0
+    </select>
+    <select id="getCostTypeDict" resultType="org.springblade.control.entity.DictInfo">
+        select * from c_dict_info WHERE code = 'cost_type' order by sort
+    </select>
+    <select id="getById" resultType="org.springblade.control.entity.ControlProjectInfo">
+        select * from c_control_project_info where id = #{id}
     </select>
 
 

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

@@ -35,4 +35,6 @@ public interface IContractInfoService extends BaseService<ControlContractInfo> {
     ControlContractInfoVO getContractInfoById(Long id);
 
     List<ControlContractInfoVO> getPage(ControlContractInfoDTO dto,Query query);
+
+    List<ControlContractInfo> getList();
 }

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

@@ -52,4 +52,6 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     List<ProjectCostBudgetVO3> postponePlan();
 
     List<Map<String,List<Integer>>> MonthOfYearPlanOverview();
+
+    List<ProjectCostBudget> getAllBudgetByProjectId(Long id);
 }

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectInfoService.java

@@ -33,4 +33,8 @@ public interface IProjectInfoService extends BaseService<ControlProjectInfo> {
     List<DictInfo> getProjectServerTypeDict();
 
     AllProjectStatsVO allProjectStats();
+
+    List<AllProjectStatsVO> ProjectListStats();
+
+    List<AllProjectStatsVO> ProjectCostTypeStats(Long 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);
+
 }

+ 8 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ContractInfoServiceImpl.java

@@ -124,4 +124,12 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         IPage<ControlContractInfoVO> page = new Page<>(query.getCurrent(),query.getSize());
         return baseMapper.getPage(page,dto);
     }
+
+    /**
+     * 合同列表,回款更新
+     */
+    @Override
+    public List<ControlContractInfo> getList() {
+        return baseMapper.getList();
+    }
 }

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

@@ -42,7 +42,10 @@ public class ContractReturnedInfoServiceImpl extends BaseServiceImpl<ContractRet
         baseMapper.deleteOldInfo(dto.getId());
         List<ContractReturnedInfo> list = dto.getList();
         if (list != null && list.size() >0) {
-            list.stream().forEach(l->l.setProjectId(dto.getProjectId()));
+            for (ContractReturnedInfo info : list) {
+                info.setProjectId(dto.getProjectId());
+                info.setContractId(dto.getId());
+            }
             this.saveOrUpdateBatch(list);
         }
     }

+ 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;
         });
     }

+ 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;
         });
     }

+ 24 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -102,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())) {
@@ -210,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()));

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

@@ -43,7 +43,9 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBudgetMapper, ProjectCostBudget> implements IProjectCostBudgetService {
 
-    private final IProjectInfoService projectInfoService;
+//    private final IProjectInfoService projectInfoService;
+
+    private final ProjectInfoMapper infoMapper;
 
     private final ProjectCostBudgetMapper budgetMapper;
     /**
@@ -133,7 +135,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
     @Override
     public ProjectCostBudgetVO getPlanByProjectId(Long id) {
         //获取项目信息
-        ControlProjectInfo projectInfo = projectInfoService.getById(id);
+        ControlProjectInfo projectInfo = infoMapper.getById(id);
         ProjectCostBudgetVO vo = new ProjectCostBudgetVO();
         vo.setProjectName(projectInfo.getName());
         vo.setProjectId(id);
@@ -378,6 +380,11 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         }
     }
 
+    @Override
+    public List<ProjectCostBudget> getAllBudgetByProjectId(Long id) {
+        return baseMapper.getAllBudgetByProjectId(id);
+    }
+
     /**
      * 统计一行的几个总金额
      */

+ 49 - 8
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -6,15 +6,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
-import org.springblade.control.entity.ControlContractInfo;
-import org.springblade.control.entity.ControlProjectInfo;
-import org.springblade.control.entity.DictInfo;
-import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.entity.*;
 import org.springblade.control.mapper.ProjectInfoMapper;
-import org.springblade.control.service.IContractInfoService;
-import org.springblade.control.service.IProjectCostBudgetStatsService;
-import org.springblade.control.service.IProjectInfoService;
-import org.springblade.control.service.IProjectProcessService;
+import org.springblade.control.service.*;
 import org.springblade.control.vo.AllProjectStatsVO;
 import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.log.exception.ServiceException;
@@ -22,10 +16,16 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.system.entity.DictBiz;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Param
@@ -38,6 +38,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
     private final ProjectInfoMapper infoMapper;
     private final IProjectProcessService processService;
     private final IContractInfoService contractInfoService;
+    private final IProjectCostBudgetService budgetService;
 
     /**
      * 自定义分页
@@ -145,5 +146,45 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         return baseMapper.allProjectStats();
     }
 
+    /**
+     * 项目统计列表统计
+     */
+    @Override
+    public List<AllProjectStatsVO> ProjectListStats() {
+        return baseMapper.ProjectListStats();
+    }
+
+    /**
+     * 项目统计费用分类
+     */
+    @Override
+    public List<AllProjectStatsVO> ProjectCostTypeStats(Long id) {
+        List<AllProjectStatsVO> list = new ArrayList<>();
+        //获取费用字典
+        List<DictInfo> costTypeDict = baseMapper.getCostTypeDict();
+        //获取项目所有预算
+        List<ProjectCostBudget> budgets = budgetService.getAllBudgetByProjectId(id);
+        if (budgets != null && budgets.size() > 0){
+            Map<Integer, List<ProjectCostBudget>> budgetMap = budgets.parallelStream()
+                    .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
+            for (int i = 1; i <= 6; i++) {
+                AllProjectStatsVO vo = new AllProjectStatsVO();
+                vo.setCostType(i);
+                vo.setCostTypeValue(costTypeDict.get(i-1).getDictName());
+                List<ProjectCostBudget> costBudgets = budgetMap.get(i-1);
+                BigDecimal bigDecimal = new BigDecimal(0);
+                if (costBudgets != null && costBudgets.size() > 0){
+                    for (ProjectCostBudget budget : costBudgets) {
+                        bigDecimal = bigDecimal.add(budget.getBudgetCountMoney());
+                    }
+                }
+                vo.setBudgetCost(bigDecimal);
+                list.add(vo);
+            }
+            return list;
+        }
+        return null;
+    }
+
 
 }

+ 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("输入参数格式错误,只支持数字(包含小数点)");
+        }
+    }
+}
+
+
+