|
@@ -3,12 +3,17 @@ package org.springblade.control.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import io.swagger.annotations.ApiModelProperty;
|
|
|
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.entity.*;
|
|
|
import org.springblade.control.mapper.TaskProcessMapper;
|
|
@@ -31,7 +36,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.time.Duration;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -42,6 +50,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
private final IUserClient iUserClient;
|
|
|
private final JdbcTemplate jdbcTemplate;
|
|
|
private final BladeRedis bladeRedis;
|
|
|
+ private final ProjectCostBudgetServiceImpl projectCostBudgetService;
|
|
|
+ private final ProjectInfoServiceImpl projectInfoServiceImpl;
|
|
|
|
|
|
@Override
|
|
|
public IPage<TaskProcessInfoVO> taskPage(IPage<TaskProcessInfo> page, TaskProcessInfoDTO dto) {
|
|
@@ -120,6 +130,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
|
|
|
List<DictInfo> dictInfoList1 = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'report_type'", new BeanPropertyRowMapper<>(DictInfo.class));
|
|
|
List<DictInfo> dictInfoList2 = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'expense_fr_type'", new BeanPropertyRowMapper<>(DictInfo.class));
|
|
|
+ List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
|
|
|
TaskProcessDetailBasicsVO basicsVO = new TaskProcessDetailBasicsVO();
|
|
|
basicsVO.setTaskId(taskProcessInfo.getId());
|
|
|
basicsVO.setTaskName(taskProcessInfo.getTaskName());
|
|
@@ -143,15 +154,25 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
Integer type = record.getExpenseInfoType();
|
|
|
switch (type) {
|
|
|
case 1: //计划任务
|
|
|
- //TODO 处理计划任务List
|
|
|
- vo.setPlanTaskInfoList(null);
|
|
|
+ TaskPlanInfoVO planTaskInfoList1 = this.getPlanTaskInfoList(record.getExpenseInfoId(), controlProjectInfos);
|
|
|
+ if (planTaskInfoList1 != null) {
|
|
|
+ vo.setPlanTaskInfoList(Collections.singletonList(planTaskInfoList1));
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取计划任务更改状态记录信息
|
|
|
+ data = jdbcTemplate.query("select * from c_task_plan_update_status_info where approve_task_id = " + id, new BeanPropertyRowMapper<>(TaskPlanUpdateStatusInfo.class));
|
|
|
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);
|
|
|
if (voCW != null) {
|
|
|
+ if (ObjectUtil.isNotEmpty(voCW.getProjectId()) && ObjectUtil.isNotEmpty(voCW.getBudgetPlanIds())) { //如果预算ids不为空,那么证明有关联计划任务(单关联)
|
|
|
+ TaskPlanInfoVO planTaskInfoList2 = this.getPlanTaskInfoList(Long.parseLong(voCW.getBudgetPlanIds()), controlProjectInfos);
|
|
|
+ if (planTaskInfoList2 != null) {
|
|
|
+ vo.setPlanTaskInfoList(Collections.singletonList(planTaskInfoList2));
|
|
|
+ }
|
|
|
+ }
|
|
|
for (DictInfo dictInfo : dictInfoList2) {
|
|
|
if (dictInfo.getDictValue().equals(voCW.getFrType() + "")) {
|
|
|
voCW.setFrTypeName(dictInfo.getDictName());
|
|
@@ -162,8 +183,6 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
data = voCW;
|
|
|
}
|
|
|
|
|
|
- vo.setPlanTaskInfoList(null); //TODO 处理计划任务List
|
|
|
-
|
|
|
break;
|
|
|
case 3: //支付
|
|
|
data = jdbcTemplate.query("select * from c_expense_pay_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMPayInfo.class)).stream().findAny().orElse(null);
|
|
@@ -189,8 +208,17 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
case 9: //出差
|
|
|
data = jdbcTemplate.query("select * from c_attendance_trip_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(AttendanceTripInfo.class)).stream().findAny().orElse(null);
|
|
|
|
|
|
- vo.setPlanTaskInfoList(null); //TODO 处理计划任务List
|
|
|
+ AttendanceTripInfoVO voCC = BeanUtil.copyProperties(data, AttendanceTripInfoVO.class);
|
|
|
+ if (voCC != null) {
|
|
|
+ if (ObjectUtil.isNotEmpty(voCC.getProjectId()) && ObjectUtil.isNotEmpty(voCC.getBudgetPlanIds())) { //如果预算ids不为空,那么证明有关联计划任务(单关联)
|
|
|
+ TaskPlanInfoVO planTaskInfoList2 = this.getPlanTaskInfoList(Long.parseLong(voCC.getBudgetPlanIds()), controlProjectInfos);
|
|
|
+ if (planTaskInfoList2 != null) {
|
|
|
+ vo.setPlanTaskInfoList(Collections.singletonList(planTaskInfoList2));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ data = voCC;
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -327,6 +355,165 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public IPage<TaskPlanInfoVO> taskPlanPage(IPage<ProjectCostBudget> page, TaskPlanDTO dto) {
|
|
|
+ QueryWrapper<ProjectCostBudget> queryWrapper = Condition.getQueryWrapper(dto);
|
|
|
+ if (dto.getSelectType().equals("1")) { //我的计划任务
|
|
|
+ if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
|
|
|
+ throw new ServiceException("未获取到当前用户信息,请联系管理员");
|
|
|
+ }
|
|
|
+ queryWrapper.lambda().eq(ProjectCostBudget::getTaskUser, SecureUtil.getUserId());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getDeptId())) {
|
|
|
+ queryWrapper.lambda().eq(ProjectCostBudget::getDeptId, dto.getDeptId());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getTaskStatus())) {
|
|
|
+ queryWrapper.lambda().eq(ProjectCostBudget::getStatus, dto.getTaskStatus());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getStartTime()) && ObjectUtil.isNotEmpty(dto.getEndTime())) {
|
|
|
+ queryWrapper.lambda().ge(ProjectCostBudget::getPlanStartTime, dto.getStartTime()).le(ProjectCostBudget::getPlanEndTime, dto.getEndTime());
|
|
|
+ }
|
|
|
+ IPage<ProjectCostBudget> pages = projectCostBudgetService.page(page, queryWrapper.lambda().orderBy(true, true, ProjectCostBudget::getCreateTime));
|
|
|
+ Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
|
|
|
+ List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
|
|
|
+
|
|
|
+ //封装page对象
|
|
|
+ IPage<TaskPlanInfoVO> vosPage = new Page<>();
|
|
|
+ vosPage.setCurrent(pages.getCurrent());
|
|
|
+ vosPage.setSize(pages.getSize());
|
|
|
+ vosPage.setTotal(pages.getTotal());
|
|
|
+
|
|
|
+ //构造page参数
|
|
|
+ List<ProjectCostBudget> records = pages.getRecords();
|
|
|
+ List<TaskPlanInfoVO> vos = new ArrayList<>();
|
|
|
+ for (ProjectCostBudget obj : records) {
|
|
|
+ TaskPlanInfoVO vo = new TaskPlanInfoVO();
|
|
|
+ vo.setId(obj.getId());
|
|
|
+ vo.setTaskUserName(ObjectUtil.isNotEmpty(userMap.get(obj.getTaskUser())) ? userMap.get(obj.getTaskUser()) : "");
|
|
|
+ vo.setTaskDesc(obj.getPlanTaskDesc());
|
|
|
+ vo.setPlanTarget(obj.getPlanTarget());
|
|
|
+
|
|
|
+ vo.setStatusName(null); //TODO 任务状态 多种
|
|
|
+
|
|
|
+ for (ControlProjectInfo projectInfo : controlProjectInfos) {
|
|
|
+ if (projectInfo.getId().equals(obj.getProjectId())) {
|
|
|
+ vo.setProjectName(projectInfo.getName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(obj.getPlanStartTime()) && ObjectUtil.isNotEmpty(obj.getPlanEndTime())) {
|
|
|
+ LocalDate planStartTime = obj.getPlanStartTime();
|
|
|
+ LocalDate planEndTime = obj.getPlanEndTime();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
|
+ String planStartTimeStr = planStartTime.format(formatter);
|
|
|
+ String planEndTimeStr = planEndTime.format(formatter);
|
|
|
+ vo.setStartAndEndDate(planStartTimeStr + "~" + planEndTimeStr);
|
|
|
+ }
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ vosPage.setRecords(vos);
|
|
|
+ return vosPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TaskPlanInfoVO> taskPlanDetail(String ids) {
|
|
|
+ List<ProjectCostBudget> taskList = projectCostBudgetService.getBaseMapper().selectBatchIds(Func.toStrList(ids));
|
|
|
+ List<ControlProjectInfo> controlProjectInfos = projectInfoServiceImpl.getBaseMapper().selectList(Wrappers.<ControlProjectInfo>lambdaQuery().select(ControlProjectInfo::getId, ControlProjectInfo::getName));
|
|
|
+ List<TaskPlanInfoVO> vos = new ArrayList<>();
|
|
|
+ for (ProjectCostBudget obj : taskList) {
|
|
|
+ TaskPlanInfoVO vo = new TaskPlanInfoVO();
|
|
|
+ vo.setId(obj.getId());
|
|
|
+ vo.setTaskDesc(obj.getPlanTaskDesc());
|
|
|
+ for (ControlProjectInfo projectInfo : controlProjectInfos) {
|
|
|
+ if (projectInfo.getId().equals(obj.getProjectId())) {
|
|
|
+ vo.setProjectName(projectInfo.getName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setStatusName(""); //TODO 任务状态 多种
|
|
|
+ vos.add(vo);
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean taskPlanSubmit(TaskPlanStatusUpdateDTO dto) {
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getTaskIds()) && ObjectUtil.isNotEmpty(dto.getUpdateType()) && ObjectUtil.isNotEmpty(dto.getCompletionTime())) {
|
|
|
+ List<String> taskIds = Func.toStrList(dto.getTaskIds());
|
|
|
+ SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String completionTimeStr = dateFormatter.format(dto.getCompletionTime());
|
|
|
+ for (String taskId : taskIds) {
|
|
|
+ ProjectCostBudget planTaskInfo = projectCostBudgetService.getById(taskId);
|
|
|
+ if (planTaskInfo != null) {
|
|
|
+ User departmentHead = this.getDepartmentHead(planTaskInfo.getDeptId());
|
|
|
+ if (departmentHead != null && dto.getUpdateType().equals("1")) {
|
|
|
+ //任务完成
|
|
|
+ TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
|
|
|
+ taskProcessInfo.setId(SnowFlakeUtil.getId());
|
|
|
+ taskProcessInfo.setStatus(1); //待审批
|
|
|
+ taskProcessInfo.setReportDate(new Date());
|
|
|
+ taskProcessInfo.setTaskType(1); //任务审批
|
|
|
+ taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【任务审批】审批");
|
|
|
+
|
|
|
+ //上报人
|
|
|
+ taskProcessInfo.setReportUserId(SecureUtil.getUserId());
|
|
|
+
|
|
|
+ //审批人
|
|
|
+ List<String> auditUserIds = new LinkedList<>();
|
|
|
+ EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
|
|
|
+ responsibleObj.setUserId(departmentHead.getId() + "");
|
|
|
+ responsibleObj.setUserName(departmentHead.getRealName());
|
|
|
+ auditUserIds.add(responsibleObj.getUserId());
|
|
|
+
|
|
|
+ taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
|
|
|
+
|
|
|
+ this.save(taskProcessInfo);
|
|
|
+
|
|
|
+ //新增计划任务更改状态记录信息
|
|
|
+ jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,transfer_object,transfer_reason) " +
|
|
|
+ "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1,'" + completionTimeStr + "',null,null)");
|
|
|
+
|
|
|
+ //新增审批任务关联信息
|
|
|
+ jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
|
|
|
+
|
|
|
+ } else if (departmentHead != null && dto.getUpdateType().equals("2")) {
|
|
|
+ //任务转移
|
|
|
+ TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
|
|
|
+ taskProcessInfo.setId(SnowFlakeUtil.getId());
|
|
|
+ taskProcessInfo.setStatus(1); //待审批
|
|
|
+ taskProcessInfo.setReportDate(new Date());
|
|
|
+ taskProcessInfo.setTaskType(1); //任务审批
|
|
|
+ taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【任务转移】审批");
|
|
|
+
|
|
|
+ //上报人
|
|
|
+ taskProcessInfo.setReportUserId(SecureUtil.getUserId());
|
|
|
+
|
|
|
+ //审批人
|
|
|
+ List<String> auditUserIds = new LinkedList<>();
|
|
|
+ EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
|
|
|
+ responsibleObj.setUserId(departmentHead.getId() + "");
|
|
|
+ responsibleObj.setUserName(departmentHead.getRealName());
|
|
|
+ auditUserIds.add(responsibleObj.getUserId());
|
|
|
+
|
|
|
+ taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
|
|
|
+
|
|
|
+ this.save(taskProcessInfo);
|
|
|
+
|
|
|
+ //新增计划任务更改状态记录信息
|
|
|
+ jdbcTemplate.execute("insert into c_task_plan_update_status_info(id,approve_task_id,plan_task_id,update_type,completion_time,transfer_object,transfer_reason) " +
|
|
|
+ "values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",2,'" + completionTimeStr + "'," + dto.getTransferObject() + "," + dto.getTransferReason() + ")");
|
|
|
+
|
|
|
+ //新增审批任务关联信息
|
|
|
+ jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + planTaskInfo.getId() + ",1)");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 修改业务审批状态
|
|
@@ -338,7 +525,13 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
private void updateTaskStatus(Integer businessDataType, Integer taskStatus, Long dataId) {
|
|
|
switch (businessDataType) {
|
|
|
case 1: //计划任务
|
|
|
- //TODO 修改计划任务状态
|
|
|
+ if (taskStatus == 2) {
|
|
|
+ //已完成 = 已完成
|
|
|
+ jdbcTemplate.execute("update c_project_cost_budget set status = 4 where id = " + dataId);
|
|
|
+ } else if (taskStatus == 3) {
|
|
|
+ //已驳回 = 未开始
|
|
|
+ jdbcTemplate.execute("update c_project_cost_budget set status = 1 where id = " + dataId);
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case 2: //财务
|
|
@@ -401,7 +594,47 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
|
|
|
EMOutsourcingPayInfo emOutsourcingPayInfo = jdbcTemplate.query("select * from c_expense_outsourcing_pay_info where id = " + dataId, new BeanPropertyRowMapper<>(EMOutsourcingPayInfo.class)).stream().findAny().orElse(null);
|
|
|
break;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据部门id获取部门负责人信息
|
|
|
+ *
|
|
|
+ * @param deptId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public User getDepartmentHead(Long deptId) {
|
|
|
+ if (ObjectUtil.isNotEmpty(deptId)) {
|
|
|
+ //TODO 根据部门id获取部门负责人信息
|
|
|
+ User user = new User();
|
|
|
+ user.setId(SnowFlakeUtil.getId());
|
|
|
+ user.setDeptId("123456789");
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取计划任务List
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @param controlProjectInfos
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private TaskPlanInfoVO getPlanTaskInfoList(Long id, List<ControlProjectInfo> controlProjectInfos) {
|
|
|
+ ProjectCostBudget planTask = jdbcTemplate.query("select * from c_project_cost_budget where id = " + id, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
|
|
|
+ if (planTask != null) {
|
|
|
+ TaskPlanInfoVO planInfoVO = new TaskPlanInfoVO();
|
|
|
+ planInfoVO.setId(planTask.getId());
|
|
|
+ for (ControlProjectInfo controlProjectInfo : controlProjectInfos) {
|
|
|
+ if (planTask.getProjectId().equals(controlProjectInfo.getId())) {
|
|
|
+ planInfoVO.setProjectName(controlProjectInfo.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ planInfoVO.setTaskDesc(planTask.getPlanTaskDesc());
|
|
|
+ return planInfoVO;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|