Răsfoiți Sursa

管控相关

liuyc 2 ani în urmă
părinte
comite
03a1b8d62b

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

@@ -37,6 +37,9 @@ public class EMLoanInfo extends BaseEntity {
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date returnDate;
 
+    @ApiModelProperty(value = "还款金额")
+    private BigDecimal returnMoney;
+
     @ApiModelProperty(value = "备注")
     private String remarks;
 

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

@@ -119,4 +119,7 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "父id")
     private Long parentId;
 
+    @ApiModelProperty(value = "任务审批闭环后,实际总金额")
+    private BigDecimal actualTotalMoney;
+
 }

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/EMFinancialReimbursementInfoVO.java

@@ -7,7 +7,7 @@ import org.springblade.control.entity.EMFinancialReimbursementInfo;
 @Data
 public class EMFinancialReimbursementInfoVO extends EMFinancialReimbursementInfo {
 
-    @ApiModelProperty(value = "报销类型")
+    @ApiModelProperty(value = "报销类型名称")
     private String frTypeName;
 
     @ApiModelProperty(value = "项目名称")

+ 7 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPlanInfoVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 
 /**
@@ -21,6 +22,9 @@ public class TaskPlanInfoVO implements Serializable {
     @ApiModelProperty(value = "计划状态")
     private String statusName;
 
+    @ApiModelProperty(value = "计划状态")
+    private Integer status;
+
     @ApiModelProperty(value = "计划任务描述(任务内容)")
     private String taskDesc;
 
@@ -33,4 +37,7 @@ public class TaskPlanInfoVO implements Serializable {
     @ApiModelProperty(value = "任务人")
     private String taskUserName;
 
+    @ApiModelProperty(value = "报销金额")
+    private BigDecimal reimbursementAmount;
+
 }

+ 14 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskPlanUpdateStatusInfoVO.java

@@ -0,0 +1,14 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.control.entity.TaskPlanUpdateStatusInfo;
+
+
+@Data
+public class TaskPlanUpdateStatusInfoVO extends TaskPlanUpdateStatusInfo {
+
+    @ApiModelProperty(value = "转移对象名称")
+    private String transferObjectName;
+
+}

+ 1 - 1
blade-service/blade-control/pom.xml

@@ -62,7 +62,7 @@
                     <target>${java.version}</target>
                     <encoding>${project.build.sourceEncoding}</encoding>
                     <compilerArguments>
-                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar:${java.home}/lib/jsse.jar
+                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>

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

@@ -54,7 +54,7 @@ public class LogHistoryController extends BladeController {
     @PostMapping("/task/complete")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "日志任务完成", notes = "传入日志logId、任务taskId")
-    public R<Object> logTaskComplete(@RequestParam Long logId, @RequestParam Long taskId) {
+    public R<Object> logTaskComplete(Long logId, @RequestParam Long taskId) {
         return R.status(logHistoryService.logTaskComplete(logId, taskId));
     }
 

+ 28 - 22
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -226,31 +226,35 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 List<LogHistoryAndTaskVO> taskVOList = jdbcTemplate.query("select * from c_log_history_task_record where log_id = " + id, new BeanPropertyRowMapper<>(LogHistoryAndTaskVO.class));
                 List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
                 List<Long> taskIds = taskVOList.stream().map(LogHistoryAndTaskVO::getTaskId).collect(Collectors.toList());
-                List<ProjectCostBudget> taskObjs = projectCostBudgetServiceImpl.listByIds(taskIds);
-                List<TaskPlanInfoVO> resultList = new ArrayList<>();
-                for (ProjectCostBudget taskObj : taskObjs) {
-                    TaskPlanInfoVO vos = new TaskPlanInfoVO();
-                    vos.setId(taskObj.getId());
-                    for (ControlProjectInfo projectInfo : controlProjectInfos) {
-                        if (projectInfo.getId().equals(taskObj.getProjectId())) {
-                            vos.setProjectName(projectInfo.getName());
-                            break;
+                if (taskIds.size() > 0) {
+                    List<ProjectCostBudget> taskObjs = projectCostBudgetServiceImpl.listByIds(taskIds);
+                    List<TaskPlanInfoVO> resultList = new ArrayList<>();
+                    for (ProjectCostBudget taskObj : taskObjs) {
+                        TaskPlanInfoVO vos = new TaskPlanInfoVO();
+                        vos.setId(taskObj.getId());
+                        for (ControlProjectInfo projectInfo : controlProjectInfos) {
+                            if (projectInfo.getId().equals(taskObj.getProjectId())) {
+                                vos.setProjectName(projectInfo.getName());
+                                break;
+                            }
                         }
+                        vos.setStatusName(taskObj.getStatus().equals(4) ? "已完成" : "未完成");
+                        vos.setTaskDesc(ObjectUtil.isNotEmpty(taskObj.getPlanTaskDesc()) ? taskObj.getPlanTaskDesc() : "");
+                        if (ObjectUtil.isNotEmpty(taskObj.getPlanStartTime()) && ObjectUtil.isNotEmpty(taskObj.getPlanEndTime())) {
+                            LocalDate planStartTime = taskObj.getPlanStartTime();
+                            LocalDate planEndTime = taskObj.getPlanEndTime();
+                            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+                            String planStartTimeStr = planStartTime.format(formatter);
+                            String planEndTimeStr = planEndTime.format(formatter);
+                            vos.setStartAndEndDate(planStartTimeStr + "~" + planEndTimeStr);
+                        }
+
+                        vos.setReimbursementAmount(taskObj.getBudgetCountMoney());
+
+                        resultList.add(vos);
                     }
-                    vos.setStatusName(taskObj.getStatus().equals(4) ? "已完成" : "未完成");
-                    vos.setTaskDesc(ObjectUtil.isNotEmpty(taskObj.getPlanTaskDesc()) ? taskObj.getPlanTaskDesc() : "");
-                    if (ObjectUtil.isNotEmpty(taskObj.getPlanStartTime()) && ObjectUtil.isNotEmpty(taskObj.getPlanEndTime())) {
-                        LocalDate planStartTime = taskObj.getPlanStartTime();
-                        LocalDate planEndTime = taskObj.getPlanEndTime();
-                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-                        String planStartTimeStr = planStartTime.format(formatter);
-                        String planEndTimeStr = planEndTime.format(formatter);
-                        vos.setStartAndEndDate(planStartTimeStr + "~" + planEndTimeStr);
-                    }
-                    resultList.add(vos);
+                    vo.setTaskList(resultList);
                 }
-                vo.setTaskList(resultList);
-
                 return vo;
             }
         }
@@ -268,6 +272,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
         }
         if (this.removeById(id)) {
             //删除已读信息
+            jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + id);
             jdbcTemplate.execute("delete from c_log_history_read_record where log_id = " + id);
             return true;
         }
@@ -336,6 +341,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 }
             }
             vo.setStatusName(obj.getStatus().equals(4) ? "已完成" : "未完成");
+            vo.setStatus(obj.getStatus());
             vo.setTaskDesc(ObjectUtil.isNotEmpty(obj.getPlanTaskDesc()) ? obj.getPlanTaskDesc() : "");
             if (ObjectUtil.isNotEmpty(obj.getPlanStartTime()) && ObjectUtil.isNotEmpty(obj.getPlanEndTime())) {
                 LocalDate planStartTime = obj.getPlanStartTime();

+ 64 - 5
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -36,6 +36,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -161,8 +162,13 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                                 //获取计划任务更改状态记录信息
                                 data = jdbcTemplate.query("select * from c_task_plan_update_status_info where approve_task_id = " + id, new BeanPropertyRowMapper<>(TaskPlanUpdateStatusInfo.class));
-                                break;
+                                TaskPlanUpdateStatusInfoVO voRW = BeanUtil.copyProperties(data, TaskPlanUpdateStatusInfoVO.class);
+                                if (voRW != null) {
+                                    voRW.setTransferObjectName(userMap.get(voRW.getTransferObject()));
+                                    data = voRW;
+                                }
 
+                                break;
                             case 2: //财务
                                 data = jdbcTemplate.query("select * from c_expense_financial_reimbursement_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMFinancialReimbursementInfo.class)).stream().findAny().orElse(null);
                                 EMFinancialReimbursementInfoVO voCW = BeanUtil.copyProperties(data, EMFinancialReimbursementInfoVO.class);
@@ -519,7 +525,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
      * 修改业务审批状态
      *
      * @param businessDataType 业务类型
-     * @param taskStatus       任务状态
+     * @param taskStatus       计划任务状态
      * @param dataId           业务id
      */
     private void updateTaskStatus(Integer businessDataType, Integer taskStatus, Long dataId) {
@@ -570,28 +576,81 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
      */
     private void processTheServiceDataAfterTheApprovalClosedLoop(Integer businessDataType, Long dataId) {
         switch (businessDataType) {
-            case 1: //计划任务
-                //TODO 处理计划任务List
+            case 1: //计划任务 计划任务金额统计、推送到对应项目中
+                ProjectCostBudget projectCostBudget = jdbcTemplate.query("select * from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
+                if (projectCostBudget != null && projectCostBudget.getStatus().equals(4)) {
+                    //已完成任务进行金额统计 budget_count_money(预算总金额) = actual_total_money(实际总金额)
+                    projectCostBudgetService.update(Wrappers.<ProjectCostBudget>lambdaUpdate().set(ProjectCostBudget::getActualTotalMoney, projectCostBudget.getBudgetCountMoney()).eq(ProjectCostBudget::getId, projectCostBudget.getId()));
+                }
 
                 break;
-            case 2: //财务 TODO 财务与预算计划关联
+            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)) {
+                    //已审批财务报销进行金额统计
+
+                    //处理借款抵扣金额(如果存在借款抵扣,那么扣除相应借款金额)
+                    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(); //当前借款金额
+                            int result = frMoney.compareTo(loanMoney);
+                            if (result < 0) { //如果借款金额大于报销金额,那么抵扣借款,无实际放款
+                                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());
+                                    //实际报销金额
+                                    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_financial_reimbursement_info set fr_money_actual = 0 where id = " + emFinancialReimbursementInfo.getId());
+                            } else { //如果借款金额小于报销金额,那么抵扣完借款,还要实际放款
+                                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());
+                                    //实际报销金额
+                                    jdbcTemplate.execute("update from c_expense_financial_reimbursement_info set fr_money_actual = " + difference + " where id = " + emFinancialReimbursementInfo.getId());
+                                }
+                            }
+                        }
+                    }
+                }
 
                 break;
             case 3: //支付 TODO 请款金额与项目关联
                 EMPayInfo emPayInfo = jdbcTemplate.query("select * from c_expense_pay_info where id = " + dataId, new BeanPropertyRowMapper<>(EMPayInfo.class)).stream().findAny().orElse(null);
+                if (emPayInfo != null && emPayInfo.getStatus().equals(2)) {
+                    //已审批支付审批进行金额统计
+                }
 
                 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);
+                if (emPurchaseInfo != null && emPurchaseInfo.getStatus().equals(2)) {
+                    //已审批采购审批进行金额统计
+                }
 
                 break;
             case 8: //外包 TODO 外包支付与项目关联
                 EMOutsourcingPayInfo emOutsourcingPayInfo = jdbcTemplate.query("select * from c_expense_outsourcing_pay_info where id = " + dataId, new BeanPropertyRowMapper<>(EMOutsourcingPayInfo.class)).stream().findAny().orElse(null);
+                if (emOutsourcingPayInfo != null && emOutsourcingPayInfo.getStatus().equals(2)) {
+                    //已审批外包支付进行金额统计
+                }
+
                 break;
         }
     }