liuyc 2 år sedan
förälder
incheckning
ed839a737a

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

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -41,4 +42,9 @@ public class EMFinancialReimbursementInfoVO extends EMFinancialReimbursementInfo
     @ApiModelProperty("创建时间")
     private Date createTime;
 
+    @ApiModelProperty(value = "借款信息")
+    private String deductLoanInfo;
+
+    @ApiModelProperty(value = "借款剩余未还金额")
+    private BigDecimal loanOutstandingBalance;
 }

+ 12 - 8
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMOutsourcingPayServiceImpl.java

@@ -53,17 +53,21 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<ExMOutsourcingP
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
 
-            for (DictInfo dictInfo : dictInfoList) {
-                if (vo.getOutsourcingType().equals(dictInfo.getDictValue().intValue())) {
-                    vo.setOutsourcingTypeName(dictInfo.getDictName());
-                    break;
+            if (ObjectUtil.isNotEmpty(vo.getOutsourcingType())) {
+                for (DictInfo dictInfo : dictInfoList) {
+                    if (vo.getOutsourcingType().equals(dictInfo.getDictValue().intValue())) {
+                        vo.setOutsourcingTypeName(dictInfo.getDictName());
+                        break;
+                    }
                 }
             }
 
-            for (ControlProjectInfo projectInfo : controlProjectInfos) {
-                if (projectInfo.getId().equals(vo.getProjectId())) {
-                    vo.setProjectName(projectInfo.getName());
-                    break;
+            if (ObjectUtil.isNotEmpty(vo.getProjectId())) {
+                for (ControlProjectInfo projectInfo : controlProjectInfos) {
+                    if (projectInfo.getId().equals(vo.getProjectId())) {
+                        vo.setProjectName(projectInfo.getName());
+                        break;
+                    }
                 }
             }
 

+ 38 - 42
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -201,8 +201,8 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 //获取当天,当前用户所有的计划任务信息,新增关联信息
                 List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
                 if (taskPlanInfoVOS.size() > 0) {
-                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId());
                     for (TaskPlanInfoVO task : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId() + " and task_id = " + task.getId());
                         jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + task.getId() + ")");
                     }
                 }
@@ -244,8 +244,8 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 //获取当天,当前用户所有的计划任务信息,新增关联信息
                 List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
                 if (taskPlanInfoVOS.size() > 0) {
-                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId());
                     for (TaskPlanInfoVO task : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + dto.getId() + " and task_id = " + task.getId());
                         jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + dto.getId() + "," + task.getId() + ")");
                     }
                 }
@@ -326,9 +326,6 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 }
 
                 if (taskIds.size() > 0) {
-                    //任务逾期完成关系信息
-                    //List<TaskPlanOverdueStatusVO> overdueStatusVOS = jdbcTemplate.query("select * from c_task_plan_overdue_status where user_id = " + obj.getUserId(), new BeanPropertyRowMapper<>(TaskPlanOverdueStatusVO.class));
-
                     //获取所有审批任务与计划任务关系
                     List<ExpenseTaskRecord> expenseTaskRecords = jdbcTemplate.query("select task_id,expense_info_id,is_transfer from c_expense_task_record where expense_info_type = 1 and expense_info_id in(" + StringUtils.join(taskIds, ",") + ")", new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
                     Map<String, ExpenseTaskRecord> taskRecordMaps = expenseTaskRecords.stream().collect(Collectors.toMap(ExpenseTaskRecord::getExpenseInfoId, Function.identity()));
@@ -339,6 +336,26 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                     LocalDate nowDateYQ = LocalDate.now();
                     for (ProjectCostBudget taskObj : taskObjs) {
                         TaskPlanInfoVO vos = new TaskPlanInfoVO();
+                        if (ObjectUtil.isNotEmpty(taskObj.getPlanStartTime()) && ObjectUtil.isNotEmpty(taskObj.getPlanEndTime())) {
+                            //如果任务结束时间在当前系统时间之前,视为逾期
+                            if (taskObj.getPlanEndTime().isBefore(nowDateYQ) && taskObj.getStatus() == 4 && taskObj.getTaskUser().equals(SecureUtil.getUserId())) {
+                                //逾期完成(自己不查看)
+                                continue;
+                            } else if (taskObj.getPlanEndTime().isBefore(nowDateYQ) && taskObj.getStatus() == 4 && !taskObj.getTaskUser().equals(SecureUtil.getUserId())) {
+                                //逾期完成(别人查看状态)
+                                vos.setIsOverdue(1);
+                            } else if (taskObj.getPlanEndTime().isBefore(nowDateYQ) && taskObj.getStatus() != 4) {
+                                //逾期未完成(都要查看)
+                                vos.setIsOverdue(1);
+                            }
+
+                            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.setId(taskObj.getId());
                         for (ControlProjectInfo projectInfo : controlProjectInfos) {
                             if (projectInfo.getId().equals(taskObj.getProjectId())) {
@@ -346,7 +363,6 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                                 break;
                             }
                         }
-
                         //判断任务状态
                         ExpenseTaskRecord record = taskRecordMaps.getOrDefault(String.valueOf(taskObj.getId()), null);
                         if (record != null) {
@@ -364,35 +380,8 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                             vos.setStatus(0);
                             vos.setStatusName("未上报");
                         }
-
                         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);
-                            /*if (vos.getStatus().equals(4)) { //TODO 业务说暂时不需要标记逾期完成的
-                                //逾期完成
-                                for (TaskPlanOverdueStatusVO overdueVO : overdueStatusVOS) {
-                                    if (overdueVO.getPlanTaskId().equals(taskObj.getId())) {
-                                        vos.setIsOverdue(1);
-                                        break;
-                                    }
-                                }
-                            } else {*/
-                            //逾期未完成
-                            if (taskObj.getPlanEndTime().isBefore(nowDateYQ) && obj.getStatus() != 4) {
-                                if (ObjectUtil.isNotEmpty(taskObj.getPlanStartTime()) && ObjectUtil.isNotEmpty(taskObj.getPlanEndTime())) {
-                                    vos.setIsOverdue(1);
-                                }
-                            }
-                            //}
-                        }
-
                         vos.setReimbursementAmount(taskObj.getBudgetCountMoney());
-
                         resultList.add(vos);
                     }
                     List<TaskPlanInfoVO> collect = resultList.stream().sorted(Comparator.comparing(TaskPlanInfoVO::getStatus)).collect(Collectors.toList());
@@ -427,6 +416,9 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
+        if (ObjectUtil.isEmpty(logId)) {
+            throw new ServiceException("请先提交日志后再进行计划任务关联!");
+        }
 
         ProjectCostBudget task = projectCostBudgetServiceImpl.getBaseMapper().selectById(taskId);
         if (ObjectUtil.isEmpty(task.getDeptId())) {
@@ -465,8 +457,8 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
             if (ObjectUtil.isNotEmpty(logId)) { //编辑时,点完成,那么重塑关系信息
                 List<TaskPlanInfoVO> taskPlanInfoVOS = this.logTaskList();
                 if (taskPlanInfoVOS.size() > 0) {
-                    jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + logId);
                     for (TaskPlanInfoVO taskPlanInfoVO : taskPlanInfoVOS) {
+                        jdbcTemplate.execute("delete from c_log_history_task_record where log_id = " + logId + " and task_id = " + taskPlanInfoVO.getId());
                         jdbcTemplate.execute("insert into c_log_history_task_record(id,log_id,task_id) values(" + SnowFlakeUtil.getId() + "," + logId + "," + taskPlanInfoVO.getId() + ")");
                     }
                 }
@@ -532,19 +524,11 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
         }
         //当前用户所有的计划任务信息
         List<ProjectCostBudget> projectCostBudgetsAllByTaskUser = jdbcTemplate.query("SELECT * FROM c_project_cost_budget WHERE task_user = " + SecureUtil.getUserId(), new BeanPropertyRowMapper<>(ProjectCostBudget.class));
-        //List<ProjectCostBudget> projectCostBudgets = jdbcTemplate.query("SELECT * FROM c_project_cost_budget WHERE CURDATE() BETWEEN plan_start_time AND plan_end_time AND task_user = " + SecureUtil.getUserId(), new BeanPropertyRowMapper<>(ProjectCostBudget.class));
         List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
         List<TaskPlanInfoVO> resultList = new ArrayList<>();
         LocalDate nowDate = LocalDate.now();
         for (ProjectCostBudget obj : projectCostBudgetsAllByTaskUser) {
             TaskPlanInfoVO vo = new TaskPlanInfoVO();
-            vo.setId(obj.getId());
-            for (ControlProjectInfo projectInfo : controlProjectInfos) {
-                if (projectInfo.getId().equals(obj.getProjectId())) {
-                    vo.setProjectName(projectInfo.getName());
-                    break;
-                }
-            }
             vo.setStatusName(obj.getStatus().equals(4) ? "已完成" : "未完成");
             vo.setTaskDesc(ObjectUtil.isNotEmpty(obj.getPlanTaskDesc()) ? obj.getPlanTaskDesc() : "");
             if (ObjectUtil.isNotEmpty(obj.getPlanStartTime()) && ObjectUtil.isNotEmpty(obj.getPlanEndTime())) {
@@ -554,12 +538,24 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
                 String planStartTimeStr = planStartTime.format(formatter);
                 String planEndTimeStr = planEndTime.format(formatter);
                 vo.setStartAndEndDate(planStartTimeStr + "~" + planEndTimeStr);
+                if (obj.getPlanEndTime().isBefore(nowDate) && obj.getStatus() == 4) {
+                    //如果当前任务是已完成任务,且起止时间已超过当前时间,那么跳过
+                    continue;
+                }
                 if (obj.getPlanEndTime().isBefore(nowDate) && obj.getStatus() != 4) {
                     if (ObjectUtil.isNotEmpty(obj.getPlanStartTime()) && ObjectUtil.isNotEmpty(obj.getPlanEndTime())) {
                         vo.setIsOverdue(1); //逾期任务
                     }
                 }
             }
+
+            vo.setId(obj.getId());
+            for (ControlProjectInfo projectInfo : controlProjectInfos) {
+                if (projectInfo.getId().equals(obj.getProjectId())) {
+                    vo.setProjectName(projectInfo.getName());
+                    break;
+                }
+            }
             resultList.add(vo);
         }
         if (resultList.size() > 0) {

+ 38 - 12
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -278,6 +278,24 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                                         }
                                     }
 
+                                    //借款信息
+                                    if (ObjectUtil.isNotEmpty(voCW.getDeductLoanId())) {
+                                        EMLoanInfo emLoanInfo = jdbcTemplate.queryForObject("select * from c_expense_loan_info where id = " + voCW.getDeductLoanId(), new BeanPropertyRowMapper<>(EMLoanInfo.class));
+                                        if (emLoanInfo != null) {
+                                            Date useDate = emLoanInfo.getUseDate();
+                                            SimpleDateFormat smp = new SimpleDateFormat("yyyy年MM月dd日");
+                                            String format = smp.format(useDate);
+                                            BigDecimal difference;
+                                            if (ObjectUtil.isNotEmpty(emLoanInfo.getReturnMoney())) {
+                                                difference = emLoanInfo.getLoanMoney().subtract(emLoanInfo.getReturnMoney()).abs();
+                                            } else {
+                                                difference = emLoanInfo.getLoanMoney();
+                                            }
+                                            String title = format + "借款" + emLoanInfo.getLoanMoney() + "元,剩余" + difference + "元未还";
+                                            voCW.setLoanOutstandingBalance(difference);
+                                            voCW.setDeductLoanInfo(title);
+                                        }
+                                    }
                                     data = voCW;
                                 }
                                 break;
@@ -1021,6 +1039,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 //修改projectCostBudgetList的approve=2(审批中)
                 projectCostBudgetService.update(Wrappers.<ProjectCostBudget>lambdaUpdate().set(ProjectCostBudget::getApprove, 2).in(ProjectCostBudget::getId, ids));
 
+                //日志操作信息
+                planInformService.taskFinishedInform("成本测算申请", taskProcessInfo.getReportUserId(), SecureUtil.getNickName(), taskProcessInfo.getStatus());
+
                 return true;
             }
         }
@@ -1038,18 +1059,23 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
     private void updateTaskStatus(Integer businessDataType, Integer taskStatus, Long approveTaskId, String dataId) {
         switch (businessDataType) {
             case 1: //计划任务
-                if (taskStatus == 2) { //通过审批
-                    //任务转移后,标记关系信息为转移任务
-                    jdbcTemplate.execute("update c_expense_task_record set is_transfer = 1 where expense_info_type = 1 and task_id = " + approveTaskId + " and expense_info_id = " + dataId);
-
-                    //删除当前计划任务与日志关系信息(如果任务转移,那么就不属于该用户了,就应该在新用户写日志时,与新用户绑定)
-                    jdbcTemplate.execute("delete from c_log_history_task_record where task_id = " + dataId);
-
-                } else if (taskStatus == 3) { //驳回审批
-                    TaskProcessInfo taskProcessInfo = jdbcTemplate.query("select status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
-                    ProjectCostBudget projectCostBudget = jdbcTemplate.query("select plan_task_desc,task_user from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
-                    if (taskProcessInfo != null && projectCostBudget != null) {
-                        planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getNickName(), taskProcessInfo.getStatus());
+                TaskProcessInfo taskProcessInfo = jdbcTemplate.query("select status,task_name from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                if (taskProcessInfo != null) {
+                    if (taskStatus == 2) { //通过审批
+                        if (taskProcessInfo.getTaskName().contains("计划任务转移")) {
+                            //任务转移后,标记关系信息为转移任务
+                            jdbcTemplate.execute("update c_expense_task_record set is_transfer = 1 where expense_info_type = 1 and task_id = " + approveTaskId + " and expense_info_id = " + dataId);
+
+                            //删除当前计划任务与日志关系信息(如果任务转移,那么就不属于该用户了,就应该在新用户写日志时,与新用户绑定)
+                            jdbcTemplate.execute("delete from c_log_history_task_record where task_id = " + dataId);
+                        }
+
+                    } else if (taskStatus == 3) { //驳回审批
+                        ProjectCostBudget projectCostBudget = jdbcTemplate.query("select plan_task_desc,task_user from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
+                        if (projectCostBudget != null) {
+                            //日志操作信息
+                            planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getNickName(), taskProcessInfo.getStatus());
+                        }
                     }
                 }
                 break;