|
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiImplicitParam;
|
|
@@ -18,10 +19,9 @@ import org.apache.commons.lang.time.DateUtils;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import org.springblade.business.dto.ArchiveTaskBatchRepealDTO;
|
|
|
-import org.springblade.business.dto.ArchiveTaskBatchReportDTO;
|
|
|
-import org.springblade.business.dto.TaskArchiveDTO;
|
|
|
-import org.springblade.business.dto.TaskArchiveOuterLayerDTO;
|
|
|
+import org.springblade.archive.dto.ArchiveTaskDTO;
|
|
|
+import org.springblade.archive.vo.ArchiveTaskPageVO;
|
|
|
+import org.springblade.business.dto.*;
|
|
|
import org.springblade.business.entity.*;
|
|
|
import org.springblade.business.service.*;
|
|
|
import org.springblade.business.socket.WebSocket;
|
|
@@ -45,6 +45,7 @@ import org.springblade.flow.core.entity.BladeFlow;
|
|
|
import org.springblade.flow.core.feign.NewFlowClient;
|
|
|
import org.springblade.flow.core.vo.SendPageVO;
|
|
|
import org.springblade.manager.entity.ContractInfo;
|
|
|
+import org.springblade.manager.entity.ContractRelationJlyz;
|
|
|
import org.springblade.manager.feign.ContractClient;
|
|
|
import org.springblade.resource.feign.CommonFileClient;
|
|
|
import org.springblade.resource.feign.NewISmsClient;
|
|
@@ -1066,4 +1067,170 @@ public class TaskController extends BladeController {
|
|
|
return this.taskService.startApproval(taskVO) ? R.data(200, true, "操作成功") : R.data(200, false, "操作失败,请联系管理员");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 资料填报-任务管理-任务查看分页查询
|
|
|
+ */
|
|
|
+ @PostMapping("/page")
|
|
|
+ @ApiOperationSupport(order = 1)
|
|
|
+ @ApiOperation(value = "资料填报-任务管理-任务查看分页查询", notes = "传入BusinessTaskDTO")
|
|
|
+ public R<IPage<BusinessTaskPageVO>> page(@RequestBody BusinessTaskDTO dto) {
|
|
|
+ int current = dto.getCurrent();
|
|
|
+ int size = dto.getSize();
|
|
|
+ //封装入参SQL
|
|
|
+ List<Object> params = new ArrayList<>();
|
|
|
+ StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND approval_type != 4"); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
|
|
|
+ sqlString.append(" AND type = ?");
|
|
|
+ params.add(dto.getTypeValue());
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getStatusValue())) {
|
|
|
+ sqlString.append(" AND status = ?");
|
|
|
+ params.add(dto.getStatusValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ ContractInfo contractInfo = jdbcTemplate.queryForObject("select contract_type from m_contract_info where id = " + dto.getCurrentContractId(), new BeanPropertyRowMapper<>(ContractInfo.class));
|
|
|
+ if (contractInfo != null && contractInfo.getContractType().equals(1)) {
|
|
|
+ //施工合同段正常查询
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getContractIdValue())) {
|
|
|
+ sqlString.append(" AND contract_id = ?");
|
|
|
+ params.add(dto.getContractIdValue());
|
|
|
+ } else {
|
|
|
+ //如果合同段id=null,那么查询当前项目下所有合同段任务
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getProjectIdValue())) {
|
|
|
+ sqlString.append(" AND project_id = ?");
|
|
|
+ params.add(dto.getProjectIdValue());
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("未获取到项目信息,请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (contractInfo != null && (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3))) {
|
|
|
+ //如果是监理合同段,那么默认查询关联的全部施工合同段+本身任务
|
|
|
+ List<ContractRelationJlyz> contractRelationJLYZ = jdbcTemplate.query("select contract_id_sg from m_contract_relation_jlyz where contract_id_jlyz = " + dto.getCurrentContractId(), new BeanPropertyRowMapper<>(ContractRelationJlyz.class));
|
|
|
+ Set<Long> ids = contractRelationJLYZ.stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toSet());
|
|
|
+ ids.add(dto.getCurrentContractId()); //把监理本身也加入查询
|
|
|
+ sqlString.append(" AND contract_id in(").append(StringUtils.join(ids, ",")).append(")");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getBatchValue())) {
|
|
|
+ sqlString.append(" AND batch = ?");
|
|
|
+ params.add(dto.getBatchValue());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
|
|
|
+ sqlString.append(" AND start_time >= ?")
|
|
|
+ .append(dto.getStartTimeValue())
|
|
|
+ .append(" AND end_time <= ?");
|
|
|
+ params.add(dto.getStartTimeValue());
|
|
|
+ params.add(dto.getEndTimeValue());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getQueryValue())) {
|
|
|
+ sqlString.append(" AND task_name LIKE ?");
|
|
|
+ params.add("%" + dto.getQueryValue() + "%");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getSelectedType())) {
|
|
|
+ sqlString.append(" AND (");
|
|
|
+ if (dto.getSelectedType().equals(1)) { //待办页面
|
|
|
+
|
|
|
+ //如果是待办页面,且 任务状态下拉框 选择的是 待审批状态 的任务,那么才查询数据
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getStatusValue()) && dto.getStatusValue().equals(1)) {
|
|
|
+ sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
|
|
|
+ params.add(1);
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+
|
|
|
+ //如果是待办页面,且 任务状态下拉框 选择的不是 待审批状态 的任务,那么直接返回null
|
|
|
+ } else if (ObjectUtil.isNotEmpty(dto.getStatusValue()) && !dto.getStatusValue().equals(1)) {
|
|
|
+ return null;
|
|
|
+
|
|
|
+ //如果是待办页面,没选择 任务状态下拉框,那么就默认查询 待审批状态 任务
|
|
|
+ } else if (ObjectUtil.isEmpty(dto.getStatusValue())) {
|
|
|
+ sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
|
|
|
+ params.add(1);
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+ sqlString.append(" AND status = 1");
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (dto.getSelectedType().equals(2)) { //已办页面
|
|
|
+ sqlString.append("EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = ? AND u_task_parallel.task_user = ?)");
|
|
|
+ //当前自己的任务必须是已审批,才视为已办
|
|
|
+ params.add(2);
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+
|
|
|
+ } else if (dto.getSelectedType().equals(3)) { //我发起页面
|
|
|
+ sqlString.append("report_user = ?");
|
|
|
+ params.add(SecureUtil.getUserId());
|
|
|
+ }
|
|
|
+ sqlString.append(")");
|
|
|
+ }
|
|
|
+
|
|
|
+ //总数量
|
|
|
+ String sqlCount = sqlString.toString().replace("*", "count(1)");
|
|
|
+ Optional<Integer> totalCountOptional = Optional.ofNullable(jdbcTemplate.queryForObject(sqlCount, Integer.class, params.toArray()));
|
|
|
+ int totalCount = totalCountOptional.orElse(0);
|
|
|
+
|
|
|
+ //分页
|
|
|
+ sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
|
|
|
+ params.add(size);
|
|
|
+ params.add((current - 1) * size);
|
|
|
+
|
|
|
+ //执行SQL获取数据
|
|
|
+ String sqlPage = sqlString.toString();
|
|
|
+ List<Task> resultList = jdbcTemplate.query(
|
|
|
+ sqlPage,
|
|
|
+ new BeanPropertyRowMapper<>(Task.class),
|
|
|
+ params.toArray()
|
|
|
+ );
|
|
|
+
|
|
|
+ //获取任务详情信息Map
|
|
|
+ Set<String> processInstanceIds = resultList.stream().map(Task::getProcessInstanceId).collect(Collectors.toSet());
|
|
|
+ Map<String, List<TaskParallel>> taskParallelGroupMap = new HashMap<>();
|
|
|
+ if (processInstanceIds.size() > 0) {
|
|
|
+ StringJoiner joiner = new StringJoiner(",", "'", "'");
|
|
|
+ processInstanceIds.forEach(joiner::add);
|
|
|
+ String joinedIds = joiner.toString();
|
|
|
+ taskParallelGroupMap = jdbcTemplate.query("select process_instance_id,task_user_name,e_visa_status,e_visa_content from u_task_parallel where process_instance_id in(" + joinedIds + ") order by id", new BeanPropertyRowMapper<>(TaskParallel.class)).stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
|
|
|
+ }
|
|
|
+ Map<String, List<TaskParallel>> finalTaskParallelGroupMap = taskParallelGroupMap;
|
|
|
+
|
|
|
+ //获取用户信息Map
|
|
|
+ Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0", new BeanPropertyRowMapper<>(User.class)).stream().collect(Collectors.toMap(User::getId, User::getName, (key1, key2) -> key1));
|
|
|
+
|
|
|
+ //解析page分页数据
|
|
|
+ IPage<BusinessTaskPageVO> page = new Page<>(current, size);
|
|
|
+ List<BusinessTaskPageVO> pageList = resultList.stream()
|
|
|
+ .map(task -> {
|
|
|
+ BusinessTaskPageVO vo = new BusinessTaskPageVO();
|
|
|
+ vo.setId(task.getId());
|
|
|
+ vo.setTaskName(task.getTaskName());
|
|
|
+ vo.setTaskTypeName(task.getType().equals(1) ? "普通任务" : task.getType().equals(2) ? "验收任务" : "移交任务");
|
|
|
+ vo.setTaskStatusName(task.getStatus().equals(1) ? "待审批" : task.getStatus().equals(2) ? "已审批" : "已废除");
|
|
|
+ vo.setStartTime(task.getStartTime());
|
|
|
+ vo.setEndTime(task.getEndTime());
|
|
|
+ vo.setTaskDesc(task.getTaskContent());
|
|
|
+ vo.setTaskReportUserName(nameMap.get(Long.parseLong(task.getReportUser())));
|
|
|
+ vo.setApprovalType(task.getApprovalType());
|
|
|
+ vo.setFormDataId(task.getFormDataId());
|
|
|
+ vo.setProcessInstanceId(task.getProcessInstanceId());
|
|
|
+ List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
|
|
|
+ if (taskParallelList != null && taskParallelList.size() > 0) {
|
|
|
+ List<String> names = taskParallelList.stream().map(TaskParallel::getTaskUserName).collect(Collectors.toList());
|
|
|
+ if (names.size() > 0) {
|
|
|
+ vo.setTaskApproveUserNames(StringUtils.join(names, ","));
|
|
|
+ }
|
|
|
+ Set<Integer> eVisaStatus = taskParallelList.stream().map(TaskParallel::getEVisaStatus).collect(Collectors.toSet());
|
|
|
+ if (eVisaStatus.size() > 0) {
|
|
|
+ vo.setEVisaStatus(StringUtils.join(eVisaStatus, "、"));
|
|
|
+ }
|
|
|
+ Set<String> eVisaContents = taskParallelList.stream().map(TaskParallel::getEVisaContent).collect(Collectors.toSet());
|
|
|
+ if (eVisaContents.size() > 0) {
|
|
|
+ vo.setEVisaContents(StringUtils.join(eVisaContents, "、"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return vo;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ page.setRecords(pageList);
|
|
|
+ page.setTotal(totalCount);
|
|
|
+ return R.data(page);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|