提交 883b4363 authored 作者: Matrix's avatar Matrix

feat(核查模块): 完成了核查模块的回退功能

- 完成了核查模块的回退功能
上级 e70bc3b6
...@@ -107,23 +107,19 @@ public enum LogType { ...@@ -107,23 +107,19 @@ public enum LogType {
TRAIN_1(46,TRAIN.id, ORIGIN_STATUS.id, TRAIN1000.id, "发起培训"), TRAIN_1(46,TRAIN.id, ORIGIN_STATUS.id, TRAIN1000.id, "发起培训"),
CONFIRM_CHECK_DETAIL_NORMAL_0(401,CONFIRM_CHECK_DETAIL.id, ORIGIN_STATUS.id, CHECK_DETAIL_0.id, "核查详情任务开始"), CONFIRM_CHECK_DETAIL_NORMAL_0(401,CONFIRM_CHECK_DETAIL.id, ORIGIN_STATUS.id, CHECK_DETAIL_REGION_0.id, "核查详情任务开始"),
CONFIRM_CHECK_DETAIL_NORMAL_1(402,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_0.id, CHECK_DETAIL_1.id, "A岗核查成功,等待专管员B操作"), CONFIRM_CHECK_DETAIL_NORMAL_1(402,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_0.id, CHECK_DETAIL_REGION_1.id, "A岗核查成功,等待专管员B操作"),
CONFIRM_CHECK_DETAIL_NORMAL_2(403,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_1.id, CHECK_DETAIL_2.id, "B岗核查成功,等待核查组成员A审核"), CONFIRM_CHECK_DETAIL_NORMAL_2(403,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_1.id, CHECK_DETAIL_REGION_2.id, "B岗核查成功,等待核查组成员A审核"),
CONFIRM_CHECK_DETAIL_NORMAL_3(404,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_2.id, CHECK_DETAIL_3.id, "核查组成员A核查成功,等待核查组成员B审核"), CONFIRM_CHECK_DETAIL_NORMAL_3(404,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_2.id, END.id, "市专管员审核成功,该自查任务完结"),
CONFIRM_CHECK_DETAIL_NORMAL_4(405,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_3.id, END.id, "核查组成员B核查成功,任务结束,上传数据到统计信息"), CONFIRM_CHECK_DETAIL_OTHER_1(406,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_1.id, END.id, "B岗核查成功,该任务没有核查组成员,任务结束,上传数据到统计信息"),
CONFIRM_CHECK_DETAIL_OTHER_1(406,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_1.id, END.id, "B岗核查成功,该任务没有核查组成员,任务结束,上传数据到统计信息"), CONFIRM_CHECK_DETAIL_OTHER_2(407,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_1.id, CHECK_DETAIL_REGION_0.id, "B岗审核失败,跳回区A岗人员操作"),
CONFIRM_CHECK_DETAIL_OTHER_2(407,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_1.id, CHECK_DETAIL_0.id, "B岗审核失败,跳回A岗人员操作"), CONFIRM_CHECK_DETAIL_OTHER_3(408,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_2.id, CHECK_DETAIL_REGION_0.id, "市专管员审核失败,跳回区A岗人员操作"),
CONFIRM_CHECK_DETAIL_OTHER_3(408,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_2.id, CHECK_DETAIL_0.id, "核查组成员A审核失败,跳回A岗人员操作"),
CONFIRM_CHECK_DETAIL_OTHER_4(409,CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_3.id, CHECK_DETAIL_0.id, "核查组成员B审核失败,跳回A岗人员操作"),
CONFIRM_CHECK_DETAIL_STAT_0(410,CONFIRM_CHECK_STAT.id, ORIGIN_STATUS.id, CHECK_STAT_0.id, "核查统计任务开始"), CONFIRM_CHECK_DETAIL_STAT_0(410,CONFIRM_CHECK_STAT.id, ORIGIN_STATUS.id, CHECK_STAT_0.id, "核查统计任务开始"),
...@@ -137,20 +133,33 @@ public enum LogType { ...@@ -137,20 +133,33 @@ public enum LogType {
CONFIRM_CHECK_EXAM_STAT_2(415, CONFIRM_CHECK_STAT.id, CHECK_EXAM_STAT_1.id, END.id, "检查统计任务数据已确认完毕,任务完结"), CONFIRM_CHECK_EXAM_STAT_2(415, CONFIRM_CHECK_STAT.id, CHECK_EXAM_STAT_1.id, END.id, "检查统计任务数据已确认完毕,任务完结"),
CONFIRM_CHECK_EXAM_DETAIL_0(416, CONFIRM_CHECK_DETAIL.id, ORIGIN_STATUS.id, CHECK_EXAM_DETAIL_0.id, "检查详情任务开始"), CONFIRM_CHECK_EXAM_DETAIL_0(416, CONFIRM_CHECK_DETAIL.id, ORIGIN_STATUS.id, CHECK_DETAIL_REGION_0.id, "检查详情任务开始"),
CONFIRM_CHECK_EXAM_DETAIL_1(417, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_DETAIL_0.id, CHECK_EXAM_DETAIL_1.id, "A岗核查成功,等待专管员B操作"), CONFIRM_CHECK_EXAM_DETAIL_1(417, CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_0.id, CHECK_DETAIL_REGION_1.id, "A岗核查成功,等待专管员B操作"),
CONFIRM_CHECK_EXAM_DETAIL_2(418, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_DETAIL_1.id, END.id, "专管员B核查成功,该地区的检查任务结束了"), CONFIRM_CHECK_EXAM_DETAIL_2(418, CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_1.id, END.id, "专管员B核查成功,该地区的检查任务结束了"),
CONFIRM_CHECK_EXAM_DETAIL_3(419, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_DETAIL_1.id, CHECK_EXAM_DETAIL_0.id, "B岗审核失败,跳回A岗人员操作"), CONFIRM_CHECK_EXAM_DETAIL_3(419, CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_REGION_1.id, CHECK_DETAIL_REGION_0.id, "B岗审核失败,跳回A岗人员操作"),
CONFIRM_CHECK_EXAM_STAT_3(420, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_STAT_0.id, END.id, "检查统计任务数据已确认完毕,任务完结"), CONFIRM_CHECK_EXAM_STAT_3(420, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_STAT_0.id, END.id, "检查统计任务数据已确认完毕,任务完结"),
CONFIRM_CHECK_SELF_ROLLBACK(421, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_EXAM_DETAIL_0.id, "自查任务已退回至等待专管员A处理状态"), CONFIRM_CHECK_SELF_ROLLBACK(421, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_DETAIL_REGION_0.id, "自查任务已退回至等待专管员A处理状态"),
CONFIRM_CHECK_EXAM_ROLLBACK(422, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_EXAM_STAT_1.id, "检查任务已退回至等待确认状态"), CONFIRM_CHECK_EXAM_ROLLBACK(422, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_EXAM_STAT_1.id, "检查任务已退回至等待确认状态"),
CONFIRM_CHECK_EXAM_CITY_DETAIL_0(423, CONFIRM_CHECK_DETAIL.id, ORIGIN_STATUS.id, CHECK_DETAIL_CITY_0.id, "检查详情任务开始"),
CONFIRM_CHECK_EXAM_CITY_DETAIL_1(424, CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_CITY_0.id, CHECK_DETAIL_CITY_1.id, "专管员A操作成功,等待专管员B操作"),
CONFIRM_CHECK_EXAM_CITY_DETAIL_REDO(425, CONFIRM_CHECK_DETAIL.id, END.id, CHECK_DETAIL_CITY_0.id, "检查详情任务开始重做"),
CONFIRM_CHECK_EXAM_CITY_VERIFY_DONE(426, CONFIRM_CHECK_DETAIL.id, CONFIRM_STAT_0.id, END.id, "市统计数据确认完毕"),
CONFIRM_CHECK_EXAM_CITY_DETAIL_DONE(427, CONFIRM_CHECK_DETAIL.id, CHECK_DETAIL_CITY_1.id, END.id, "专管员B处理完毕"),
ALLOT_BACK_1(57, ALLOT_BACK.id, ORIGIN_STATUS.id, ALLOT_BACKING.id, "发起装备退回"), ALLOT_BACK_1(57, ALLOT_BACK.id, ORIGIN_STATUS.id, ALLOT_BACKING.id, "发起装备退回"),
ALLOT_BACK_2(58,ALLOT_BACK.id, ALLOT_BACKING.id, END.id, "接收退回装备并上传相关单据"), ALLOT_BACK_2(58,ALLOT_BACK.id, ALLOT_BACKING.id, END.id, "接收退回装备并上传相关单据"),
......
package com.tykj.dev.device.confirmcheck.common;
import com.tykj.dev.config.Log;
import com.tykj.dev.misc.base.StatusEnum;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
import static com.tykj.dev.misc.base.StatusEnum.*;
/**
* CheckChart. 里面用于存放核查模块要用到的一些对照表Map
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2021/8/19 at 3:14 下午
*/
@Data
@Slf4j
public class CheckChart {
/**
* key = 任务状态编号 , value = 核查情况 , 用于市区自核查页面
*/
public static Map<Integer, String> taskStatus2Situation = new HashMap<>();
static {
taskStatus2Situation.put(CHECK_DETAIL_CITY_0.id, "无");
taskStatus2Situation.put(CHECK_DETAIL_CITY_1.id, "进行中");
taskStatus2Situation.put(CHECK_DETAIL_REGION_0.id, "无");
taskStatus2Situation.put(CHECK_DETAIL_REGION_1.id, "进行中");
taskStatus2Situation.put(CHECK_DETAIL_REGION_2.id, "等待市审核");
taskStatus2Situation.put(END.id, "完成");
log.info("[核查模块] 初始化taskStatus2Situation 完毕 , size = {}",CheckChart.taskStatus2Situation.size());
}
}
...@@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMap; ...@@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tykj.dev.config.GlobalMap; import com.tykj.dev.config.GlobalMap;
import com.tykj.dev.config.swagger.AutoDocument; import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.confirmcheck.common.CheckChart;
import com.tykj.dev.device.confirmcheck.common.CheckType; import com.tykj.dev.device.confirmcheck.common.CheckType;
import com.tykj.dev.device.confirmcheck.common.TaskPeriod; import com.tykj.dev.device.confirmcheck.common.TaskPeriod;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail; import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail;
...@@ -18,6 +19,7 @@ import com.tykj.dev.device.confirmcheck.utils.ObjTransUtil; ...@@ -18,6 +19,7 @@ import com.tykj.dev.device.confirmcheck.utils.ObjTransUtil;
import com.tykj.dev.device.file.entity.FileRet; import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.file.service.FilesUtil; import com.tykj.dev.device.file.service.FilesUtil;
import com.tykj.dev.device.library.repository.DeviceLibraryDao; import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.service.DeviceLibraryCacheService;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary; import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.selfcheck.controller.SelfCheckController; import com.tykj.dev.device.selfcheck.controller.SelfCheckController;
import com.tykj.dev.device.task.repository.TaskDao; import com.tykj.dev.device.task.repository.TaskDao;
...@@ -33,6 +35,7 @@ import com.tykj.dev.device.user.subject.entity.Units; ...@@ -33,6 +35,7 @@ import com.tykj.dev.device.user.subject.entity.Units;
import com.tykj.dev.device.user.subject.entity.User; import com.tykj.dev.device.user.subject.entity.User;
import com.tykj.dev.device.user.subject.entity.bto.AreaUnit; import com.tykj.dev.device.user.subject.entity.bto.AreaUnit;
import com.tykj.dev.device.user.subject.service.AuService; import com.tykj.dev.device.user.subject.service.AuService;
import com.tykj.dev.device.user.subject.service.UserService;
import com.tykj.dev.device.user.util.AuthenticationUtils; import com.tykj.dev.device.user.util.AuthenticationUtils;
import com.tykj.dev.misc.base.ResultObj; import com.tykj.dev.misc.base.ResultObj;
import com.tykj.dev.misc.base.StatusEnum; import com.tykj.dev.misc.base.StatusEnum;
...@@ -44,11 +47,11 @@ import io.swagger.annotations.ApiOperation; ...@@ -44,11 +47,11 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -57,7 +60,6 @@ import java.time.LocalTime; ...@@ -57,7 +60,6 @@ import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Predicate;
import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_DETAIL; import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_DETAIL;
import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_STAT; import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_STAT;
...@@ -71,7 +73,7 @@ import static java.util.stream.Collectors.*; ...@@ -71,7 +73,7 @@ import static java.util.stream.Collectors.*;
@RestController @RestController
@RequestMapping(value = "/check/confirm") @RequestMapping(value = "/check/confirm")
@AutoDocument @AutoDocument
@Transactional(rollbackFor = Exception.class) //@Transactional(rollbackFor = Exception.class)
@Slf4j @Slf4j
@Api(tags = "核查模块", description = "核查模块", position = 1) @Api(tags = "核查模块", description = "核查模块", position = 1)
public class DeviceCheckController { public class DeviceCheckController {
...@@ -93,6 +95,8 @@ public class DeviceCheckController { ...@@ -93,6 +95,8 @@ public class DeviceCheckController {
@Autowired @Autowired
private DeviceCheckDetailDao detailRepo; private DeviceCheckDetailDao detailRepo;
@Autowired @Autowired
private DeviceLibraryCacheService dcService;
@Autowired
private ObjTransUtil transUtil; private ObjTransUtil transUtil;
@Autowired @Autowired
private TaskDao taskRepo; private TaskDao taskRepo;
...@@ -107,7 +111,11 @@ public class DeviceCheckController { ...@@ -107,7 +111,11 @@ public class DeviceCheckController {
@Autowired @Autowired
private ConfirmCheckService ccService; private ConfirmCheckService ccService;
@Autowired @Autowired
private UserService userService;
@Autowired
private MyWebSocket myWebSocket; private MyWebSocket myWebSocket;
@Autowired
private SelfCheckController selfCheckController;
@GetMapping("/area/{fatherId}") @GetMapping("/area/{fatherId}")
@ApiOperation(value = "查询指定区域下的所有区域信息") @ApiOperation(value = "查询指定区域下的所有区域信息")
...@@ -135,7 +143,6 @@ public class DeviceCheckController { ...@@ -135,7 +143,6 @@ public class DeviceCheckController {
return statVoList; return statVoList;
} }
@ApiOperation(value = "根据关键字分页查询核查统计数据") @ApiOperation(value = "根据关键字分页查询核查统计数据")
@PostMapping("/stat") @PostMapping("/stat")
public Page<CheckStatTableVo> findStatByKeyword( public Page<CheckStatTableVo> findStatByKeyword(
...@@ -191,7 +198,6 @@ public class DeviceCheckController { ...@@ -191,7 +198,6 @@ public class DeviceCheckController {
return ResponseEntity.ok(new ResultObj<>(cdVo)); return ResponseEntity.ok(new ResultObj<>(cdVo));
} }
/** /**
* 该接口负责处理以下跳转情况 * 该接口负责处理以下跳转情况
* 1 - 统计跳转 * 1 - 统计跳转
...@@ -222,16 +228,30 @@ public class DeviceCheckController { ...@@ -222,16 +228,30 @@ public class DeviceCheckController {
List<LinkCheckDetail> lcdList = new ArrayList<>(); List<LinkCheckDetail> lcdList = new ArrayList<>();
List<LinkExamDetail> ledList = new ArrayList<>(); List<LinkExamDetail> ledList = new ArrayList<>();
// if else 结果 1.核查页面(市检查and省直属单位自查) 2.检查页面 (均为单位自查)
// check type = 0 核查页面 看见的是市检查与省直属自查 // check type = 0 核查页面 看见的是市检查与省直属自查
if (ctVo.getCheckType() == 0) { if (ctVo.getCheckType() == 0) {
linkVo.setType(1); linkVo.setType(1);
// 根据tpye和billId找到父级节点 - 默认了最顶级的省核查节点应当为一个 // 根据tpye和billId找到父级节点 - 默认了最顶级的省核查节点应当为一个
Task rootTask = taskRepo.findAllByBillIdAndBusinessType(billId, type).get(0); Task rootTask = taskRepo.findAllByBillIdAndBusinessType(billId, type).get(0);
// 先检出所有类型为7或者8的Task集合 方便后续操作
Specification<Task> pred = Specifications.<Task>and()
.in("businessType", 7, 8)
.build();
List<Task> cacheTask = taskRepo.findAll(pred);
//key = parentId , value childList
Map<Integer, List<Task>> parentTaskMap = cacheTask.stream()
.collect(groupingBy(Task::getParentTaskId));
// 找到所有的子节点 // 找到所有的子节点
List<Task> childTask = taskRepo.findAllByParentTaskId(rootTask.getId()); List<Task> childTask = parentTaskMap.get(rootTask.getId());
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
long finalTime = System.currentTimeMillis(); long finalTime = System.currentTimeMillis();
for (Task child : childTask) { for (Task child : childTask) {
// 将子节点任务中的 统计数据确认任务 给过滤掉 // 将子节点任务中的 统计数据确认任务 给过滤掉
if (child.getTitle().contains("统计数据确认任务")) { if (child.getTitle().contains("统计数据确认任务")) {
...@@ -251,8 +271,12 @@ public class DeviceCheckController { ...@@ -251,8 +271,12 @@ public class DeviceCheckController {
DeviceCheckStat cdc = statRepo.findById(child.getBillId()).get(); DeviceCheckStat cdc = statRepo.findById(child.getBillId()).get();
CheckStatVo cdcVo = transUtil.checkStatDo2Vo(cdc); CheckStatVo cdcVo = transUtil.checkStatDo2Vo(cdc);
//todo 这里更改从detail中去查看并求和 //todo 这里更改从detail中去查看并求和
//找到chilid的子child detail 并求和 //找到chilid的子child detail 并求和 ccTask即为所有的自查任务集合
List<Task> cctask = taskRepo.findAllByParentTaskId(child.getId());
List<Task> cctask = parentTaskMap.get(child.getId());
if (Objects.isNull(cctask)){
cctask = new ArrayList<>();
}
List<CheckAreaStatVo> totalList = new ArrayList<>(); List<CheckAreaStatVo> totalList = new ArrayList<>();
...@@ -266,11 +290,11 @@ public class DeviceCheckController { ...@@ -266,11 +290,11 @@ public class DeviceCheckController {
.collect(toList()); .collect(toList());
totalList.addAll(casList); totalList.addAll(casList);
} }
//
String areaName = auService.findOne(AuExample.UnitId, child.getOwnUnit()).getName(); String areaName = auService.findOne(AuExample.UnitId, child.getOwnUnit()).getName();
CheckAreaStatVo cas = combineCaList(totalList, areaName); //
LinkCheckDetail lcd = cas2lcd(totalList, child, cctask, areaName);
LinkCheckDetail lcd = rev2lcd(child, endTime, updateTime,cas.reverse());
lcd.setCheckUnit(unitName); lcd.setCheckUnit(unitName);
if (child.getTitle().contains("统计确认待办任务")) { if (child.getTitle().contains("统计确认待办任务")) {
lcd.setCheckSituation("统计确认待办任务"); lcd.setCheckSituation("统计确认待办任务");
...@@ -300,16 +324,13 @@ public class DeviceCheckController { ...@@ -300,16 +324,13 @@ public class DeviceCheckController {
if (casList.isEmpty()) { if (casList.isEmpty()) {
cas = new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0); cas = new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0);
} else { } else {
cas = combineCaList(casList, unitName); // cas = combineCaList(casList, unitName);
cas = casList.get(0);
} }
// CheckAreaStatVo cas = parseStatString2Vo(child.parse2Bto(), childDetail).stream() // LinkExamDetail led = rev2led(child, endTime, updateTime, cas.reverse());
// .map(CheckDeviceStatVo::getAreaStatList) LinkExamDetail led = cas2led(cas, child, endTime, updateTime);
// .flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
// .reduce(CheckAreaStatVo::combine)
// .orElse(new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0));
LinkExamDetail led = rev2led(child, endTime, updateTime,cas.reverse());
led.setCheckUnit(unitName); led.setCheckUnit(unitName);
ledList.add(led); ledList.add(led);
...@@ -356,34 +377,7 @@ public class DeviceCheckController { ...@@ -356,34 +377,7 @@ public class DeviceCheckController {
int i = 0; int i = 0;
for (Task child : childTask) { for (Task child : childTask) {
Integer childBusType = child.getBusinessType(); LinkExamDetail led = getLed(endTime, updateTime, child);
Integer childBusId = child.getBillId();
DeviceCheckDetail childDetail = detailRepo.findById(childBusId).get();
String unitName = childDetail.getCheckUnit();
List<CheckAreaStatVo> casList = parseStatString2Vo(child.parse2Bto(), childDetail).stream()
.map(CheckDeviceStatVo::getAreaStatList)
.flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
.collect(toList());
//自查的areaName要从detail里找
String areaName = childDetail.getCheckUnit();
CheckAreaStatVo cas;
if (casList.isEmpty()) {
cas = new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0);
} else {
cas = combineCaList(casList, areaName);
}
//
// CheckAreaStatVo cas = parseStatString2Vo(child.parse2Bto(), childDetail).stream()
// .map(CheckDeviceStatVo::getAreaStatList)
// .flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
// .reduce(CheckAreaStatVo::combine)
// .get();
LinkExamDetail led = rev2led(child, endTime, updateTime,cas.reverse());
led.setCheckUnit(unitName);
//设置名称 //设置名称
led.setExamName(groupNames.get(i)); led.setExamName(groupNames.get(i));
...@@ -409,128 +403,207 @@ public class DeviceCheckController { ...@@ -409,128 +403,207 @@ public class DeviceCheckController {
} }
//进行了更新 使用修改时间去做是否逾期判断 @NotNull
private LinkCheckDetail rev2lcd(Task task, LocalDateTime endTime, LocalDateTime updateTime,RevAreaStat revAreaStat) { private LinkExamDetail getLed(LocalDateTime endTime, LocalDateTime updateTime, Task child) {
Integer childBusType = child.getBusinessType();
Integer childBusId = child.getBillId();
DeviceCheckDetail childDetail = detailRepo.findById(childBusId).get();
String unitName = childDetail.getCheckUnit();
List<CheckAreaStatVo> casList = parseStatString2Vo(child.parse2Bto(), childDetail).stream()
.map(CheckDeviceStatVo::getAreaStatList)
.flatMap(checkAreaStatVos -> checkAreaStatVos.stream())
.collect(toList());
//自查的areaName要从detail里找
String areaName = childDetail.getCheckUnit();
CheckAreaStatVo cas;
if (casList.isEmpty()) {
cas = new CheckAreaStatVo("默认地区", 0, 0, 0, 0, 0, 0);
} else {
cas = casList.get(0);
}
LinkExamDetail led = cas2led(cas, child, endTime, updateTime);
led.setCheckUnit(unitName);
return led;
}
/**
* lcd 里的列表都为检查,因此是集合对
*
* @return
*/
private LinkCheckDetail cas2lcd(List<CheckAreaStatVo> casList, Task task, List<Task> detailTasks, String finalCityName) {
LinkCheckDetail lcd = new LinkCheckDetail(); LinkCheckDetail lcd = new LinkCheckDetail();
lcd.setId(task.getBillId()); lcd.setId(task.getBillId());
String finalSituation = "";
//核查情况 无误/有误/逾期 // 核查结果的判断具体细节可以查看 docs/confirmCheck.md文档
if (revAreaStat.getComSituation() == -1) { List<String> situationList = detailTasks.stream()
lcd.setCheckSituation("重新检查"); .map(this::getDetailSituation)
} else if (revAreaStat.getComSituation() == 1) { .collect(toList());
lcd.setCheckSituation("有误");
} else if (revAreaStat.getComSituation() == 0) { // 如果 size = 0 或全都是 无 ,则无
if (revAreaStat.getComProgress() == 0) { if (situationList.size() == 0){
lcd.setCheckSituation("无"); finalSituation = "无";
} else { }else {
lcd.setCheckSituation("无误"); boolean allIsNothing = situationList.stream().allMatch(s -> s.equals("无"));
if (allIsNothing) {
finalSituation = "无";
}
//如果 有任意一个区状态是待审核
boolean anyIsAudit = situationList.stream().anyMatch(s -> s.equals("等待市审核"));
if (anyIsAudit) {
finalSituation = "等待市审核";
}
//如果 全都是 完成,那么是完成
boolean allIsFinish = situationList.stream().allMatch(s -> s.equals("完成"));
if (allIsFinish) {
finalSituation = "完成";
}
// 其他情况,则是进行中
if (StringUtils.isEmpty(finalSituation)) {
finalSituation = "进行中";
} }
} else {
lcd.setCheckSituation("异常");
} }
lcd.setCheckSituation(finalSituation);
//核查结果 // 核查情况 所有子任务都是初始状态 = 无 10=未
// if (endTime.isBefore(LocalDateTime.now())) { String checkReuslt = "";
// if (revAreaStat.getComProgress() ==1){ boolean allIsInit = detailTasks.stream()
// lcd.setCheckResult("逾期进行中"); .allMatch(t -> t.getBillStatus().equals(CHECK_DETAIL_CITY_0.id) || t.getBillStatus().equals(CHECK_DETAIL_REGION_0.id));
// }else if (task.getBillStatus() != 9999 || revAreaStat.getComProgress() != 2) {
// lcd.setCheckResult("逾期"); if (allIsInit) {
// } else { checkReuslt = "无";
// lcd.setCheckResult("逾期完成"); } else {
// } // 任意一个是10则是待审核
// } else { boolean waitAudit = casList.stream()
if (task.getBillStatus() == 9999) { .anyMatch(cas -> cas.getComSituation() == 10);
// if (endTime.isBefore(LocalDateTime.now())) {
// lcd.setCheckResult("逾期完成"); boolean notPassed = casList.stream()
// } .anyMatch(cas -> cas.getComSituation() == 13);
if (endTime.isBefore(updateTime)) {
lcd.setCheckResult("逾期完成"); // 需要每一个城市都有无误(即12) 才算无误
} else { Map<String, List<CheckAreaStatVo>> map = casList.stream()
lcd.setCheckResult("完成"); .collect(groupingBy(CheckAreaStatVo::getAreaName));
long okCount = 0;
for (List<CheckAreaStatVo> vos : map.values()) {
boolean containsOk = vos.stream()
.anyMatch(checkAreaStatVo -> checkAreaStatVo.getComSituation() == 12);
if (containsOk){
okCount++;
}
} }
} else if (revAreaStat.getComProgress() == 3) {
lcd.setCheckResult("已退回"); boolean allOk = okCount >= map.size();
} else if (revAreaStat.getComProgress() == 0) {
lcd.setCheckResult("未开始"); if (waitAudit) {
} else if (revAreaStat.getComProgress() == 1) { checkReuslt = "等待省审核";
lcd.setCheckResult("进行中"); } else if (allOk) {
} else if (revAreaStat.getComProgress() == 2 && task.getBillStatus() % 10 == 0) { checkReuslt = "无误";
lcd.setCheckResult("进行中"); } else if (notPassed) {
} else if (revAreaStat.getComProgress() == 2 && task.getBillStatus() % 10 == 1) { checkReuslt = "未通过";
lcd.setCheckResult("进行中");
} else if (revAreaStat.getComProgress() == 2) {
// if (endTime.isBefore(LocalDateTime.now())) {
// lcd.setCheckResult("逾期完成");
// }
if (endTime.isBefore(updateTime)) {
lcd.setCheckResult("逾期完成");
} else { } else {
lcd.setCheckResult("完成"); checkReuslt = "进行中";
} }
} }
lcd.setCheckResult(checkReuslt);
//核查单位名 lcd.setCheckUnit(finalCityName + "局");
lcd.setCheckUnit(revAreaStat.getAreaName() + "局");
//备注判断 新增缺失
lcd.setRemark(revAreaStat.getActualCount() - revAreaStat.getSupposeCount());
return lcd; return lcd;
}
@GetMapping("/test/test")
private String justForTest() {
CheckChart.taskStatus2Situation.forEach((k, v) -> System.out.println(v));
return "test";
} }
//修改
private LinkExamDetail rev2led(Task task, LocalDateTime endTime, LocalDateTime updateTime,RevAreaStat revAreaStat) { /**
* 获得自查的核查情况
*/
private String getDetailSituation(Task task) {
Integer taskStatus = task.getBillStatus();
String situation = CheckChart.taskStatus2Situation.get(taskStatus);
// 无的情况要分两种 一种是初始的无 一种是重做导致的无 通过判断task的remark
String remark = task.getRemark();
if (situation.equals("无")) {
if (Objects.nonNull(remark) && remark.contains("ROLLBACK")) {
situation = "未通过";
}
}
return situation;
}
/**
* led 里的列表都为自查,因此都是单个对象
*
* @return
*/
private LinkExamDetail cas2led(CheckAreaStatVo cas, Task task, LocalDateTime endTime, LocalDateTime updateTime) {
LinkExamDetail led = new LinkExamDetail(); LinkExamDetail led = new LinkExamDetail();
led.setId(task.getBillId()); led.setId(task.getBillId());
int comProgress = cas.getComProgress();
int comSituation = cas.getComSituation();
//核查情况 重新检查/无误/有误/逾期 // 核查情况依照 新的与task status来对应 详情可以查看docs/confirmcheck.md里的对应表 对照表
if (revAreaStat.getComSituation() == -1) {
led.setCheckSituation("重新检查"); String situation = getDetailSituation(task);
} else if (revAreaStat.getComSituation() == 1) { // 逾期的处理,只在完成的那一步才判断
led.setCheckSituation("有误"); if (situation.equals("完成") && updateTime.isAfter(endTime)) {
} else if (revAreaStat.getComSituation() == 0) { situation = "逾期完成";
if (revAreaStat.getComProgress() == 0) {
led.setCheckSituation("无");
} else {
led.setCheckSituation("无误");
}
} else {
led.setCheckSituation("异常");
} }
led.setCheckSituation(situation);
//核查结果 String checkResult = "";
if (task.getBillStatus() == 9999) { String remark = task.getRemark();
// if (endTime.isBefore(LocalDateTime.now())) { // 核查结果
// led.setCheckResult("逾期完成"); if (!situation.contains("完成")) {
// } checkResult = "无";
if (endTime.isBefore(updateTime)) { } else {
led.setCheckResult("逾期完成"); if (comSituation == 10) {
} else { // 再判断一下 是2级结构还是3级结构
led.setCheckResult("完成"); Integer rootId = taskService.findByTaskId(task.getParentTaskId()).getParentTaskId();
} boolean isTwoLevel = rootId == null || rootId ==0;
} else if (revAreaStat.getComProgress() == 3) { // 2级结构 - 发起人单位是省单位 则不变, 发起人市市单位则变为无
led.setCheckResult("已退回"); if (isTwoLevel){
} else if (revAreaStat.getComProgress() == 0) { Integer startUnitId = userService.findById(task.getCreateUserId()).getUnitsId();
led.setCheckResult("未开始"); if (startUnitId !=1){
} else if (revAreaStat.getComProgress() == 1) { checkResult = "无";
led.setCheckResult("进行中"); }else {
} else if (revAreaStat.getComProgress() == 2 && task.getBillStatus() % 10 == 0) { checkResult = "等待省审核";
led.setCheckResult("进行中"); }
} else if (revAreaStat.getComProgress() == 2 && task.getBillStatus() % 10 == 1) { }else {
led.setCheckResult("进行中"); checkResult = "等待省审核";
} else if (revAreaStat.getComProgress() == 2) { }
if (endTime.isBefore(updateTime)) { } else if (comSituation == 12) {
led.setCheckResult("逾期完成"); checkResult = "无误";
} else if (comSituation == 13) {
int redoTime = 1;
if (Objects.nonNull(remark) && remark.contains("ROLLBACK")) {
redoTime = Integer.valueOf(remark.split("-")[1]);
}
checkResult = redoTime + "次未通过";
} else { } else {
led.setCheckResult("完成"); checkResult = "状态异常";
} }
} }
led.setCheckResult(checkResult);
//核查单位名 led.setCheckUnit(cas.getAreaName() + "局");
led.setCheckUnit(revAreaStat.getAreaName() + "局");
//备注判断 新增缺失
led.setRemark(revAreaStat.getActualCount() - revAreaStat.getSupposeCount());
return led; return led;
} }
...@@ -587,7 +660,7 @@ public class DeviceCheckController { ...@@ -587,7 +660,7 @@ public class DeviceCheckController {
Integer provId = taskService.get(examJobId).getParentTaskId(); Integer provId = taskService.get(examJobId).getParentTaskId();
// 检查的job id 找到 father 进而找到 father的billid 进而找到title Id // 检查的job id 找到 father 进而找到 father的billid 进而找到title Id
Integer statId = taskService.get(provId).getBillId(); Integer statId = taskService.get(provId).getBillId();
DeviceCheckStat deviceCheckStat = statRepo.getOne(statId); DeviceCheckStat deviceCheckStat = statRepo.findById(statId).get();
String title = deviceCheckStat.getTitle(); String title = deviceCheckStat.getTitle();
String remark = deviceCheckStat.getRemark(); String remark = deviceCheckStat.getRemark();
return ResponseEntity.ok(new CheckTitleAndTimeVo(title, deviceCheckStat.getEndTime(), remark)); return ResponseEntity.ok(new CheckTitleAndTimeVo(title, deviceCheckStat.getEndTime(), remark));
...@@ -617,8 +690,8 @@ public class DeviceCheckController { ...@@ -617,8 +690,8 @@ public class DeviceCheckController {
@ApiOperation(value = "检查地区是否发起核查", notes = "检查地区是否发起核查") @ApiOperation(value = "检查地区是否发起核查", notes = "检查地区是否发起核查")
@PostMapping("/checkPossible") @PostMapping("/checkPossible")
public ResponseEntity checkPossible(@RequestBody UnitIds uuid) { public ResponseEntity checkPossible(@RequestBody UnitIds unitIds) {
List<String> unitNames = uuid.getIds().stream() List<String> unitNames = unitIds.getIds().stream()
.map(id -> auService.findOne(AuExample.UnitId, id)) .map(id -> auService.findOne(AuExample.UnitId, id))
.map(AreaUnit::getUnitName) .map(AreaUnit::getUnitName)
.collect(toList()); .collect(toList());
...@@ -720,8 +793,23 @@ public class DeviceCheckController { ...@@ -720,8 +793,23 @@ public class DeviceCheckController {
for (Units unit : selfCheckUnits) { for (Units unit : selfCheckUnits) {
//核查组成员名称用当前登录用户 //核查组成员名称用当前登录用户
String names = loginUser.getName(); String names = loginUser.getName();
// 如果是市level=2 的话,father Id为市的检查id
Integer fatherId = 0;
Integer initStatusId = 0;
// level = 2 市级 否则 区级 ,市级的自查初始状态160,区级的自查初始状态140
if (unit.getLevel() == 2) {
fatherId = cityExamIdMap.get(unit.getUnitId());
initStatusId = CHECK_DETAIL_CITY_0.id;
} else {
fatherId = provStatTask.getId();
initStatusId = CHECK_DETAIL_REGION_0.id;
}
// 3-1 构建被查单位的 自查账单 // 3-1 构建被查单位的 自查账单
DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + "默认备注", ccVO.getRemark(), 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>())); DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + "默认备注", ccVO.getRemark(), 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>()));
unitDetailDoc.setVar2(String.valueOf(initStatusId));
DeviceCheckDetail detail = detailRepo.save(unitDetailDoc); DeviceCheckDetail detail = detailRepo.save(unitDetailDoc);
// 将id放入统计中去 model -> areaName -> detailId // 将id放入统计中去 model -> areaName -> detailId
String areaName = auService.findOne(AuExample.UnitId, unit.getUnitId()).getName(); String areaName = auService.findOne(AuExample.UnitId, unit.getUnitId()).getName();
...@@ -735,13 +823,6 @@ public class DeviceCheckController { ...@@ -735,13 +823,6 @@ public class DeviceCheckController {
} }
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态) 这里的父级任务应该是省统计 // 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态) 这里的父级任务应该是省统计
// 如果是市level=2 的话,father Id为市的检查id
Integer fatherId = 0;
if (unit.getLevel() == 2) {
fatherId = cityExamIdMap.get(unit.getUnitId());
} else {
fatherId = provStatTask.getId();
}
//处理ownUnit的代码 - 用于处理没有账号的单位的可见性 //处理ownUnit的代码 - 用于处理没有账号的单位的可见性
Integer ownUnitId = 0; Integer ownUnitId = 0;
...@@ -751,7 +832,7 @@ public class DeviceCheckController { ...@@ -751,7 +832,7 @@ public class DeviceCheckController {
ownUnitId = unit.getUnitId(); ownUnitId = unit.getUnitId();
} }
TaskBto checkedTask = new TaskBto(CHECK_EXAM_DETAIL_0.id, unit.getName() + "自核查任务", fatherId, addNode(provStatTask.getNodeIdDetail(), provStatTask.getId()), CONFIRM_CHECK_DETAIL.id, detail.getId(), ownUnitId, 0); TaskBto checkedTask = new TaskBto(initStatusId, unit.getName() + "自核查任务", fatherId, addNode(provStatTask.getNodeIdDetail(), provStatTask.getId()), CONFIRM_CHECK_DETAIL.id, detail.getId(), ownUnitId, 0);
checkedTask.setCustomInfo("manual"); checkedTask.setCustomInfo("manual");
taskService.start(checkedTask); taskService.start(checkedTask);
} }
...@@ -786,12 +867,15 @@ public class DeviceCheckController { ...@@ -786,12 +867,15 @@ public class DeviceCheckController {
} }
List<String> tmpString = new ArrayList<>(); List<String> tmpString = new ArrayList<>();
// 拼接检查组和检查组成员
for (CheckExamDetailVo vo : examDetailVos) { for (CheckExamDetailVo vo : examDetailVos) {
tmpString.add(vo.getGroupName() + "," + vo.getUserNames().stream().collect(joining(","))); for (Integer u : vo.getUnitIds()) {
tmpString.add(vo.getGroupName() + "," + vo.getUserNames().stream().collect(joining(",")));
}
} }
String groupUserString = tmpString.stream().collect(joining("|")); String groupUserString = tmpString.stream().collect(joining("|"));
List<Integer> unitIds = examDetailVos.stream().map(CheckExamDetailVo::getUnitId).collect(toList()); List<Integer> unitIds = examDetailVos.stream().flatMap(cv -> cv.getUnitIds().stream()).collect(toList());
List<Units> checkedUnits = unitsRepo.findAllById(unitIds); List<Units> checkedUnits = unitsRepo.findAllById(unitIds);
List<String> checkedUnitNames = checkedUnits.stream().map(Units::getName).collect(toList()); List<String> checkedUnitNames = checkedUnits.stream().map(Units::getName).collect(toList());
...@@ -824,7 +908,7 @@ public class DeviceCheckController { ...@@ -824,7 +908,7 @@ public class DeviceCheckController {
if (ceVo.getExamStatId() == 0) { if (ceVo.getExamStatId() == 0) {
cityStatTask = new Task(CHECK_EXAM_STAT_1.id, CHECK_EXAM_STAT_0.name, 0, ".0.", CONFIRM_CHECK_STAT.id, statId, startUnitId) cityStatTask = new Task(CHECK_EXAM_STAT_1.id, CHECK_EXAM_STAT_0.name, 0, ".0.", CONFIRM_CHECK_STAT.id, statId, startUnitId)
.parse2Bto(); .parse2Bto();
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id)); // cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask.setCustomInfo("exam"); cityStatTask.setCustomInfo("exam");
cityStatTask.getInvolveUserIdList().add(currentUserId); cityStatTask.getInvolveUserIdList().add(currentUserId);
// 检查变为待办 // 检查变为待办
...@@ -836,7 +920,7 @@ public class DeviceCheckController { ...@@ -836,7 +920,7 @@ public class DeviceCheckController {
cityStatTask = taskRepo.findByBillIdAndBusinessType(ceVo.getExamStatId(), CONFIRM_CHECK_STAT.id).get().parse2Bto(); cityStatTask = taskRepo.findByBillIdAndBusinessType(ceVo.getExamStatId(), CONFIRM_CHECK_STAT.id).get().parse2Bto();
//检查变为待办 //检查变为待办
cityStatTask.getInvolveUserIdList().add(0); cityStatTask.getInvolveUserIdList().add(0);
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id)); // cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask.setCustomInfo("exam"); cityStatTask.setCustomInfo("exam");
cityStatTask.setCurrentPoint(cityStatTask.getCurrentPoint() + 1); cityStatTask.setCurrentPoint(cityStatTask.getCurrentPoint() + 1);
cityStatTask.setCreateUserId(currentUserId); cityStatTask.setCreateUserId(currentUserId);
...@@ -859,31 +943,56 @@ public class DeviceCheckController { ...@@ -859,31 +943,56 @@ public class DeviceCheckController {
// 3. 构建被核查单位的详情账单与Task // 3. 构建被核查单位的详情账单与Task
// 对每个需要核查的单位构建其detail账单与task // 对每个需要核查的单位构建其detail账单与task
boolean isProvUser = authenticationUtils.getAuthentication()
.getCurrentUserInfo().getUnitsId() == 1;
for (CheckExamDetailVo ed : examDetailVos) { for (CheckExamDetailVo ed : examDetailVos) {
Units unit = unitsRepo.findById(ed.getUnitId()).get(); List<Integer> uid = ed.getUnitIds();
String names = ed.getUserNames().stream().collect(joining(",")); for (Integer u : uid) {
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + ed.getRemark(), ceVo.getTitle() + "%^&" + ed.getRemark(), 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>())); Units unit = unitsRepo.findById(u).get();
DeviceCheckDetail detail = detailRepo.save(unitDetailDoc); String names = ed.getUserNames().stream().collect(joining(","));
detailIds.add(detail.getId());
// 将id放入统计中去 model -> areaName -> detailId // 根据发起人决定初始状态id 省发起人- 160 其他发起人 被查的市160 被查的是区140
String areaName = auService.findOne(AuExample.UnitId, unit.getUnitId()).getName(); int initTaskStatusId = 0;
for (CheckDeviceStatVo statVo : deviceStatVos) { if (isProvUser) {
for (CheckAreaStatVo asv : statVo.getAreaStatList()) { initTaskStatusId = CHECK_DETAIL_CITY_0.id;
if (asv.getAreaName().equals(areaName)) { } else {
asv.setAreaStatId(statId); //再根据被查单位的级别 level = 3 区140 level =2市 160
asv.setAreaDetailId(detail.getId()); if (unit.getLevel() == 3) {
initTaskStatusId = CHECK_DETAIL_REGION_0.id;
} else {
initTaskStatusId = CHECK_DETAIL_CITY_0.id;
}
}
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + ed.getRemark(), ceVo.getTitle() + "%^&" + ed.getRemark(), 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>()));
unitDetailDoc.setVar2(String.valueOf(initTaskStatusId));
DeviceCheckDetail detail = detailRepo.save(unitDetailDoc);
detailIds.add(detail.getId());
// 将id放入统计中去 model -> areaName -> detailId
String areaName = auService.findOne(AuExample.UnitId, unit.getUnitId()).getName();
for (CheckDeviceStatVo statVo : deviceStatVos) {
for (CheckAreaStatVo asv : statVo.getAreaStatList()) {
if (asv.getAreaName().equals(areaName)) {
asv.setAreaStatId(statId);
asv.setAreaDetailId(detail.getId());
}
} }
} }
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态)
TaskBto checkedTask = new TaskBto(initTaskStatusId, "自核查任务", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, detail.getId(), unit.getUnitId(), 0);
// checkedTask.setRemark(String.valueOf(CHECK_EXAM_DETAIL_0.id));
checkedTask.setCustomInfo("manual");
checkedTask = taskService.start(checkedTask);
desBillMap.put(detail.getId(), ed.getRemark());
desMap.put(checkedTask.getId(), ed.getRemark());
} }
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态)
TaskBto checkedTask = new TaskBto(CHECK_EXAM_DETAIL_0.id, "自核查任务", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, detail.getId(), unit.getUnitId(), 0);
checkedTask.setRemark(String.valueOf(CHECK_EXAM_DETAIL_0.id));
checkedTask.setCustomInfo("manual");
checkedTask = taskService.start(checkedTask);
desBillMap.put(detail.getId(), ed.getRemark());
desMap.put(checkedTask.getId(), ed.getRemark());
} }
// 4. 重新设置并保存统计账单 // 4. 重新设置并保存统计账单
...@@ -917,7 +1026,6 @@ public class DeviceCheckController { ...@@ -917,7 +1026,6 @@ public class DeviceCheckController {
} }
/** /**
* 根据taskId查询Remark * 根据taskId查询Remark
*/ */
...@@ -928,7 +1036,6 @@ public class DeviceCheckController { ...@@ -928,7 +1036,6 @@ public class DeviceCheckController {
return ResponseEntity.ok(desBillMap.get(billId)); return ResponseEntity.ok(desBillMap.get(billId));
} }
private TaskBto selectProvTask(Integer taskId) { private TaskBto selectProvTask(Integer taskId) {
TaskBto taskBto = taskService.get(taskId); TaskBto taskBto = taskService.get(taskId);
if (taskBto.getParentTaskId() == 0) { if (taskBto.getParentTaskId() == 0) {
...@@ -937,7 +1044,6 @@ public class DeviceCheckController { ...@@ -937,7 +1044,6 @@ public class DeviceCheckController {
return selectProvTask(taskBto.getParentTaskId()); return selectProvTask(taskBto.getParentTaskId());
} }
/** /**
* 对于专员A来说的逻辑 * 对于专员A来说的逻辑
* 1. 修改detailString * 1. 修改detailString
...@@ -1049,11 +1155,12 @@ public class DeviceCheckController { ...@@ -1049,11 +1155,12 @@ public class DeviceCheckController {
// 审核通过与不通过的逻辑不同 // 审核通过与不通过的逻辑不同
TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id); TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id);
boolean CEDStep1 = currentTask.getBillStatus().equals(CHECK_DETAIL_1.id) || currentTask.getBillStatus().equals(CHECK_EXAM_DETAIL_1.id); boolean CEDStep1 = currentTask.getBillStatus().equals(CHECK_DETAIL_REGION_1.id) || currentTask.getBillStatus().equals(CHECK_DETAIL_CITY_1.id);
if (!CEDStep1) { if (!CEDStep1) {
return ResponseEntity.status(400).body(new ResultObj<>(String.format("当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s", GlobalMap.getStatusEnumMap().get(currentTask.getBillStatus()), CHECK_DETAIL_1.name))); return ResponseEntity.status(400).body(new ResultObj<>(String.format("当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s", GlobalMap.getStatusEnumMap().get(currentTask.getBillStatus()), CHECK_DETAIL_REGION_1.name)));
} }
DeviceCheckDetail currentDetail = detailRepo.findById(id).get();
if (checkStatus == 1) { if (checkStatus == 1) {
// 只要通过了,且更新了详情结果,那么这里就进行一次更新 // 只要通过了,且更新了详情结果,那么这里就进行一次更新
if (isUpdate == 1) { if (isUpdate == 1) {
...@@ -1068,7 +1175,6 @@ public class DeviceCheckController { ...@@ -1068,7 +1175,6 @@ public class DeviceCheckController {
//依据detail账单对应的checkUserId来判断是2流程还是多流程的 //依据detail账单对应的checkUserId来判断是2流程还是多流程的
DeviceCheckDetail currentDetail = detailRepo.findById(id).get();
Integer userAId = currentDetail.getCheckUserAId(); Integer userAId = currentDetail.getCheckUserAId();
Integer userBId = currentDetail.getCheckUserBId(); Integer userBId = currentDetail.getCheckUserBId();
...@@ -1085,13 +1191,13 @@ public class DeviceCheckController { ...@@ -1085,13 +1191,13 @@ public class DeviceCheckController {
taskService.moveToNext(currentTask, userAId); taskService.moveToNext(currentTask, userAId);
} else { } else {
// 如果是2流程的,则直接结束该任务 // 如果是2流程的,则直接结束该任务
log.info("[核查模块] 该详情任务是一个2流程任务,结束任务并统计数据..."); log.info("[核查模块] 详情任务推进到下个阶段...");
taskService.moveToEnd(currentTask); taskService.moveToNext(currentTask);
summaryDetail(currentTask, currentDetail); summaryDetail(currentTask, currentDetail);
} }
} else { } else {
//不通过则回到第一阶段 //不通过则回到第一阶段
StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus()); StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus(), Integer.valueOf(currentDetail.getVar2()));
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId()); taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
} }
log.info("[核查模块] 专管员B操作成功"); log.info("[核查模块] 专管员B操作成功");
...@@ -1101,84 +1207,243 @@ public class DeviceCheckController { ...@@ -1101,84 +1207,243 @@ public class DeviceCheckController {
} }
/** /**
* 用于核查的回退接口 * 市人员审核区自查数据的接口
* *
* @param id 办结的done接口id * @param detailId
* @param pass 是否通过 true - 通过 ,false - 未通过
* @return * @return
*/ */
@ApiOperation(value = "核查回退") @PutMapping("/city/audit/{id}")
@PutMapping("/check/rollback/{id}") @ApiOperation(value = "市专管人员审核区自查数据的接口")
@Transactional(rollbackFor = Exception.class) public ResponseEntity cityAudit(
public ResponseEntity checkRollback(@PathVariable Integer id) { @PathVariable(name = "id") Integer detailId,
log.info("[核查模块] 将id = {} 的检查任务进行回退", id); @RequestParam boolean pass) {
Specification<Task> donePred = Specifications.<Task>and()
.eq("billStatus", CONFIRM_STAT_0.id)
.eq("billId", id)
.eq("businessType", CONFIRM_CHECK_STAT.id)
.build();
TaskBto doneTask = taskRepo.findOne(donePred).get().parse2Bto();
Specification<Task> checkPred = Specifications.<Task>and() TaskBto currentTask = taskService.get(detailId, CONFIRM_CHECK_DETAIL.id);
.eq("customInfo", "exam") DeviceCheckDetail currentDetail = detailRepo.findById(detailId).get();
.eq("billId", id)
.eq("businessType", CONFIRM_CHECK_STAT.id)
.build();
Task checkTask = taskRepo.findOne(checkPred).get();
//1.将市检查的任务节点回退到等待办结的状态
taskService.moveToSpecial(checkTask.parse2Bto(), CHECK_EXAM_STAT_1);
//2.删除掉省的办结任务 if (pass) {
if (Objects.isNull(doneTask)) { // 通过的话就推进任务进度,合并数据
log.info("[核查模块] 没有找到对应的办结任务"); log.info("[核查模块] 市专管员审核通过,结束 {} 区的自查任务并汇总数据", currentDetail.getCheckUnit());
taskService.moveToNext(currentTask);
summaryDetail(currentTask, currentDetail);
return ResponseEntity.ok("市专管员审核通过,结束" + currentDetail.getCheckUnit() + " 区的自查任务并汇总数据");
} else { } else {
log.info("[核查模块] 删除id = {}的办结任务", doneTask.getId()); log.info("[核查模块] 市专管员审核未通过,回滚该任务到初始状态,任务id = {}", currentTask.getId());
taskRepo.deleteById(doneTask.getId()); // 重置Task任务本身的任务状态,使其回滚到等待专管员A处理时的状态,并在Task里添加特殊的回滚标记,用来鉴别这是一个回滚任务
StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus(), Integer.valueOf(currentDetail.getVar2()));
currentTask.setRemark("ROLLBACK-0");
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
//重置该自查详情里的各个装备的自查详情
currentDetail = setDetailCheckNumber(currentDetail, 119);
currentDetail = detailRepo.save(currentDetail);
//该detail对应的stat数据里相应的数据剔除(写一个通用的剔除方法), 否则在第二次审核通过的时候会重复计算一次数据
TaskBto fatherTask = taskService.get(currentTask.getParentTaskId());
DeviceCheckStat dcs = statRepo.findById(fatherTask.getBillId()).get();
removeDetailFromDcs(currentDetail, dcs);
return ResponseEntity.ok("回退成功!回滚该任务到初始状态,id = " + currentTask.getId());
} }
return ResponseEntity.ok(new ResultObj<>("核查回退操作成功!"));
} }
/**
* 省专管员审核自查数据的方法
*
* @param detailId 自查主键id
* @param pass 是否通过 true - 通过 ,false - 未通过
* @return
*/
@PutMapping("/prov/audit/{id}")
@ApiOperation(value = "省专管人员审核区自查数据的接口")
public ResponseEntity provAudit(
@PathVariable(name = "id") Integer detailId,
@RequestParam boolean pass) {
if (pass) {
log.info("[核查模块] 省专管员审查detailId = {} 的自查数据-审核通过", detailId);
return provAuditPass(detailId);
} else {
log.info("[核查模块] 省专管员审查detailId = {} 的自查数据-审核未通过", detailId);
return provAuitNotPassed(detailId);
}
}
/** /**
* 用于检查页面的回退接口 * 将detail里的detailString里的检查数字该为指定数值
* *
* @param id 自查的detail id * @param detail
* @param number
*/
private DeviceCheckDetail setDetailCheckNumber(DeviceCheckDetail detail, Integer number) {
String detailString = detail.getCheckDetail();
String updatedString = Arrays.stream(detailString.split(","))
.map(s -> s.split("-")[0] + "-" + number)
.collect(joining(","));
detail.setCheckDetail(updatedString);
return detail;
}
/**
* 省对区审查 未通过的 逻辑
*
* @param id detail Id
* @return * @return
*/ */
@ApiOperation(value = " ") private ResponseEntity provAuitNotPassed(Integer id) {
@PutMapping("/exam/rollback/{id}") //1. bill单的自查将百位数变为3
@Transactional(rollbackFor = Exception.class) DeviceCheckDetail detail = detailRepo.findById(id).get();
public ResponseEntity examRollback(@PathVariable Integer id) { String detailString = detail.getCheckDetail();
log.info("[核查模块] 进行检查回退操作,要回退的检查detail id为 {}", id); String initalDetail = Arrays.stream(detailString.split(","))
//1. 回退device-detail数据 包括 detail String,checkResult,userAId,userBid,checkedCount .map(s -> s.split("-")[0] + "-" + 119)
// 将原来的checkDetail 的检查状态统一更改为 8 - 已退回
String detail = detailRepo.getOne(id).getCheckDetail();
String updateDetail = Arrays.stream(detail.split(","))
.map(s -> s.split("-")[0] + "-" + "8")
.collect(joining(",")); .collect(joining(","));
String updateDetail = changeHunds(detailString, 3);
detailRepo.updateCheckDetail(id, updateDetail, "", 0, 0, 0); detailRepo.updateCheckDetail(id, updateDetail, "", 0, 0, 0);
//2. 回退任务Task
//2. 当前任务结束,开启一个新的 退回任务(连带一个新的detail)
TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id); TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id);
StatusEnum firstStatus = GlobalMap.getStatusEnumMap().get(Integer.valueOf(currentTask.getRemark())); String remark = currentTask.getRemark();
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId()); if (Objects.nonNull(remark) && remark.contains("ROLLBACK")) {
//3.如果父级任务状态已经到确认阶段,则同样回退一个阶段 Integer times = Integer.valueOf(remark.split("-")[1]);
remark = "ROLLBACK-" + ++times;
} else {
remark = "ROLLBACK-1";
}
currentTask.setRemark(remark);
TaskBto newTask = currentTask.toDo().copy().parse2Bto();
currentTask.setCustomInfo(currentTask.getCustomInfo());
taskService.moveToEnd(currentTask);
// 创建新的detail 新的detail会在B的时候加入,所以老的stat要去除掉
DeviceCheckDetail cDetail = detail.copyWithoutId();
cDetail.setId(null);
cDetail.setCheckDetail(initalDetail);
cDetail = detailRepo.save(cDetail);
// 创建新的任务(被拒绝的自查单位如果是区则是140状态,否则是160状态)
String unitName = cDetail.getCheckUnit();
Integer level = unitsRepo.findByName(unitName).getLevel();
Integer initStatusId = 0;
if (level == 3) {
initStatusId = CHECK_DETAIL_REGION_0.id;
} else {
initStatusId = CHECK_DETAIL_CITY_0.id;
}
newTask.setBillStatus(initStatusId);
newTask.setBillId(cDetail.getId());
newTask.setId(0);
newTask.setCustomInfo(newTask.getCustomInfo());
newTask.getInvolveUserIdList().add(0);
newTask.setCurrentPoint(newTask.getInvolveUserIdList().size() - 1);
// 尝试从老任务中获取重做次数 - 新任务老任务都需要更新remark
newTask.setRemark(remark);
log.info("[核查模块] 省回退操作中... 任务remark = {}", remark);
newTask.setRemark(remark);
taskService.start(newTask);
//3. 在stat的remark中追加信息 - 找到currentTask在其中的顺位
TaskBto fatherTask = taskService.get(currentTask.getParentTaskId()); TaskBto fatherTask = taskService.get(currentTask.getParentTaskId());
// log.info("[核查模块] 父级统计节点的task id = {} , bill id = {}", fatherTask.getId(), fatherTask.getBillId()); List<Task> childTask = taskRepo.findAllByParentTaskId(fatherTask.getId());
// if (fatherTask.getBillStatus().equals(CHECK_EXAM_STAT_1.id)) { int pos = 0;
// log.info("[核查模块] 检测到父级节点已经进入确认阶段,回滚父级节点"); for (int i = 0; i < childTask.size(); i++) {
// taskService.moveToSpecial(fatherTask, CHECK_EXAM_STAT_0, fatherTask.getFirstUserId()); if (childTask.get(i).getId().equals(currentTask.getId())) {
// } log.info("[核查模块] 记录remark的pos位置 = {}", i);
//3. 回退合并上去的数据 }
String unitName = detailRepo.findById(id).get().getCheckUnit(); }
AreaUnit areaUnit = auService.findOne(AuExample.UnitName, unitName);
String cityName = areaUnit.getName(); DeviceCheckStat dcs = statRepo.findById(fatherTask.getBillId()).get();
String[] groups = dcs.getRemark().split("\\|");
String pading = groups[pos];
dcs.setRemark(dcs.getRemark() + "|" + pading);
log.info("[核查模块] 补充remark = {}", pading);
// 老的stat要去除掉对应areaName的数据
removeDetailFromDcs(detail, dcs);
resetStatByCity(fatherTask.getBillId(), cityName); //4.父级任务变为进行中
fatherTask.setBillStatus(CHECK_EXAM_STAT_1.id);
taskRepo.save(fatherTask.toDo());
return ResponseEntity.ok(new ResultObj<>("回退操作成功!"));
return ResponseEntity.ok(new ResultObj<>("检查回退操作成功!"));
} }
/**
* 省对区审查通过的逻辑
*
* @param id detail Id
* @return
*/
private ResponseEntity provAuditPass(Integer id) {
//将自查的情况的百位数全部替换成2
DeviceCheckDetail detail = detailRepo.findById(id).get();
String updatedString = changeHunds(detail.getCheckDetail(), 2);
detail.setCheckDetail(updatedString);
log.info("[核查模块] 审核通过 - 更新后的detailString形如 {}", updatedString.split(",")[0]);
detailRepo.save(detail);
//将对应stat中地区的comProgress 改为 2 comsitution 改为12
String areaName = auService.findOne(AuExample.UnitName, detail.getCheckUnit()).getName();
TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id);
TaskBto fatherTask = taskService.get(currentTask.getParentTaskId());
DeviceCheckStat dcs = statRepo.findById(fatherTask.getBillId()).get();
CheckStatVo csv = transUtil.checkStatDo2Vo(dcs);
for (CheckDeviceStatVo vo : csv.getDeviceStatVoList()) {
for (CheckAreaStatVo av : vo.getAreaStatList()) {
if (av.getAreaName().equals(areaName)) {
log.info("[核查模块] 审核通过 - 地区 = {} 的统计数据在统计信息中被成功修改了", areaName);
av.auditPassed();
}
}
}
return ResponseEntity.ok(new ResultObj<>("审核通过!"));
}
private void removeDetailFromDcs(DeviceCheckDetail detail, DeviceCheckStat dcs) {
String areaName = auService.findOne(AuExample.UnitName, detail.getCheckUnit()).getName();
CheckStatVo csv = transUtil.checkStatDo2Vo(dcs);
for (CheckDeviceStatVo vo : csv.getDeviceStatVoList()) {
List<CheckAreaStatVo> filterList = vo.getAreaStatList().stream()
.filter(casv -> !casv.getAreaName().equals(areaName)).collect(toList());
if (filterList.size() != vo.getAreaStatList().size()) {
log.info("[核查模块] 回退操作-将退回的数据从统计中去除了.");
vo.setAreaStatList(filterList);
}
}
statRepo.save(csv.toDo());
}
/**
* 将detailString里的百位数改为指定数字
*
* @param detailString 要更改的自查详情字符串
* @param value 想要改成的数字
* @return
*/
private String changeHunds(String detailString, Integer value) {
String updateDetail = Arrays.stream(detailString.split(","))
.map(s -> {
Integer number = Integer.valueOf(s.split("-")[1]);
int digit = number % 10;
int tens = number / 10 % 10;
number = value * 100 + tens * 10 + digit;
return s.split("-")[0] + "-" + number;
})
.collect(joining(","));
return updateDetail;
}
/** /**
* 将统计数据中指定城市的统计数据重置 * 将统计数据中指定城市的统计数据重置
* *
...@@ -1199,43 +1464,6 @@ public class DeviceCheckController { ...@@ -1199,43 +1464,6 @@ public class DeviceCheckController {
statRepo.save(statVo.toDo()); statRepo.save(statVo.toDo());
} }
@ApiOperation(value = "核查组A/B确认核查详情单")
@PutMapping("/detail/C/{id}")
public ResponseEntity<ResultObj> checkUserC(@PathVariable Integer id,
@RequestParam boolean pass) {
TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id);
DeviceCheckDetail currentDetail = detailRepo.findById(id).get();
if (pass) {
// 如果当前是第3步(利用余数来判断),则需要指定核查组B的人来接受任务
boolean stepC = currentTask.getBillStatus() % 10 == 2;
boolean stepD = currentTask.getBillStatus() % 10 == 3;
if (stepC) {
log.info("[核查模块] C 检查组成员A正在进行核查操作,核查详情账单id为 : {}", id);
if (!currentTask.getBillStatus().equals(CHECK_DETAIL_2.id)) {
return ResponseEntity.status(400).body(new ResultObj<>(String.format("当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s", GlobalMap.getStatusEnumMap().get(currentTask.getBillStatus()), CHECK_DETAIL_2.name)));
}
taskService.moveToNext(currentTask, currentDetail.getCheckUserBId());
log.info("[核查模块] C 操作完毕");
}
if (stepD) {
if (!currentTask.getBillStatus().equals(CHECK_DETAIL_3.id)) {
return ResponseEntity.status(400).body(new ResultObj<>(String.format("当前任务的状态异常!当前任务状态为 %s , 任务状态应该为 %s", GlobalMap.getStatusEnumMap().get(currentTask.getBillStatus()), CHECK_DETAIL_3.name)));
}
// 如果当前是第4步,则直接结束任务,并且进行结果汇总
log.info("[核查模块] D 检查组成员A正在进行核查操作,核查详情账单id为 : {}", id);
summaryDetail(currentTask, currentDetail);
currentTask = taskService.moveToEnd(currentTask);
log.info("[核查模块] D 操作完毕");
}
} else {
// 如果没通过则返回第1步
StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus());
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
}
return ResponseEntity.ok(new ResultObj<>("操作成功"));
}
/** /**
* @param taskId 待办任务id * @param taskId 待办任务id
* @param statId 市级统计的STAT ID * @param statId 市级统计的STAT ID
...@@ -1304,8 +1532,7 @@ public class DeviceCheckController { ...@@ -1304,8 +1532,7 @@ public class DeviceCheckController {
log.info("[核查模块] 办结统计待办操作成功"); log.info("[核查模块] 办结统计待办操作成功");
return ResponseEntity.ok(new ResultObj<>("办结统计待办确认完毕")); return ResponseEntity.ok(new ResultObj<>("办结统计待办确认完毕"));
} }
@Autowired
private SelfCheckController selfCheckController;
/** /**
* @param statId 统计账单主键id * @param statId 统计账单主键id
*/ */
...@@ -1320,6 +1547,22 @@ public class DeviceCheckController { ...@@ -1320,6 +1547,22 @@ public class DeviceCheckController {
Integer parentTaskId = currentTask.getParentTaskId(); Integer parentTaskId = currentTask.getParentTaskId();
boolean hasParent = parentTaskId != 0; boolean hasParent = parentTaskId != 0;
//尝试寻找老的市办结任务,如果有的话就删除加END
//5.需要将上一次市的确认任务给清理掉
// 父级的父级,就是省的任务,然后子child里名字包含 统计数据确认任务 的任务给 END 吧
Task verifyTask = taskRepo.findAllByParentTaskId(parentTaskId)
.stream()
.filter(task -> task.getTitle().contains("统计数据确认任务"))
.sorted(Comparator.comparing(Task::getId))
.findFirst()
.orElse(null);
if (Objects.nonNull(verifyTask)) {
log.info("[核查模块] 发现了id = {}市的统计确认任务,将其完结并剔除整个树节点",verifyTask.getId());
verifyTask.setParentTaskId(0);
taskService.moveToEnd(verifyTask.parse2Bto());
}
if (hasParent) { if (hasParent) {
//市统计的办结 -> 开启对应市 数据确认任务for 省 //市统计的办结 -> 开启对应市 数据确认任务for 省
String areaName = auService.findOne(AuExample.UnitId, currentTask.getOwnUnit()).getName(); String areaName = auService.findOne(AuExample.UnitId, currentTask.getOwnUnit()).getName();
...@@ -1345,7 +1588,11 @@ public class DeviceCheckController { ...@@ -1345,7 +1588,11 @@ public class DeviceCheckController {
* @param currentDetail 需要汇总的详情核查数据对象 * @param currentDetail 需要汇总的详情核查数据对象
*/ */
private void summaryDetail(TaskBto currentTask, DeviceCheckDetail currentDetail) { private void summaryDetail(TaskBto currentTask, DeviceCheckDetail currentDetail) {
log.info("[核查模块] 正在进行数据汇总"); log.info("[核查模块] 正在尝试进行Task id = {} 的自查数据汇总...", currentTask.getId());
if (!currentTask.getBillStatus().equals(END.id)) {
log.info("[核查模块] 该自查任务还未完成,结束汇总,当前任务状态id = {}", currentTask.getBillStatus());
}
// 先找到汇总地区的账单id 查询当前detail task 的 父级TASK // 先找到汇总地区的账单id 查询当前detail task 的 父级TASK
Integer fatherTaskId = currentTask.getParentTaskId(); Integer fatherTaskId = currentTask.getParentTaskId();
int statId = taskRepo.findBillId(fatherTaskId, CONFIRM_CHECK_STAT.id); int statId = taskRepo.findBillId(fatherTaskId, CONFIRM_CHECK_STAT.id);
...@@ -1412,9 +1659,14 @@ public class DeviceCheckController { ...@@ -1412,9 +1659,14 @@ public class DeviceCheckController {
* *
* @param currentStatusId 任务状态id * @param currentStatusId 任务状态id
*/ */
private StatusEnum getFirstStatus(Integer currentStatusId) { private StatusEnum getFirstStatus(Integer currentStatusId, Integer defaultStatusId) {
int remainder = currentStatusId % 10; int remainder = currentStatusId % 10;
return GlobalMap.getStatusEnumMap().get(currentStatusId - remainder); StatusEnum resultEnum = GlobalMap.getStatusEnumMap().get(currentStatusId - remainder);
if (Objects.isNull(resultEnum)) {
return GlobalMap.getStatusEnumMap().get(defaultStatusId);
} else {
return resultEnum;
}
} }
public List<CheckDeviceStatVo> parseStatString2Vo(TaskBto task, DeviceCheckDetail detail) { public List<CheckDeviceStatVo> parseStatString2Vo(TaskBto task, DeviceCheckDetail detail) {
...@@ -1441,8 +1693,10 @@ public class DeviceCheckController { ...@@ -1441,8 +1693,10 @@ public class DeviceCheckController {
.collect(toList()); .collect(toList());
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
Map<Integer, DeviceLibrary> deviceMap = deviceRepo.findAllByIdIn(idList)
.stream() List<DeviceLibrary> allDevice = dcService.getAllDeviceLibraryList();
Map<Integer, DeviceLibrary> deviceMap = allDevice.stream()
.filter(d -> idList.contains(d.getId()))
.collect(toMap(DeviceLibrary::getId, Function.identity())); .collect(toMap(DeviceLibrary::getId, Function.identity()));
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
log.info("[核查TEST] 批量查询id集合耗时 {} ms ", end - start); log.info("[核查TEST] 批量查询id集合耗时 {} ms ", end - start);
...@@ -1458,23 +1712,34 @@ public class DeviceCheckController { ...@@ -1458,23 +1712,34 @@ public class DeviceCheckController {
DeviceLibrary checkDevice = deviceMap.get(deviceId); DeviceLibrary checkDevice = deviceMap.get(deviceId);
CheckAreaStatVo checkAreaStatVo; CheckAreaStatVo checkAreaStatVo;
// 百位数 0/1 待审核 2 无误 3未通过
// 十位数 1 人工 2 自动 // 十位数 1 人工 2 自动
// 0缺失1无误2新增3不在库 8已退回 9未检查 // 0缺失1无误2新增3不在库 8已退回 9未检查
int digits = proofResult % 10; int digits = proofResult % 10;
int tens = proofResult / 10 % 10;
int huns = proofResult / 100 % 10;
if (digits == 8) { // 个位数判断自查结果
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 3, -1, statId, detailId); if (digits == 9) {
} else if (digits == 9) { checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 0, 10, statId, detailId);
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 0, 0, statId, detailId);
} else if (digits == 3) { } else if (digits == 3) {
//跳过非在库的统计 //跳过非在库的统计
continue; continue;
} else if (digits == 1) { } else if (digits == 1) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 0, statId, detailId); checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 10, statId, detailId);
} else if (digits == 0) { } else if (digits == 0) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 0, 1, 2, 1, statId, detailId); checkAreaStatVo = new CheckAreaStatVo(areaName, 0, 1, 2, 10, statId, detailId);
} else { } else {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 1, statId, detailId); checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 10, statId, detailId);
}
// 百位数判断审核情况 0,1未检查 2是无误 3是未通过
if (huns == 0 || huns == 1) {
checkAreaStatVo.setComSituation(10);
} else if (huns == 2) {
checkAreaStatVo.setComSituation(12);
} else if (huns == 3) {
checkAreaStatVo.setComSituation(13);
} }
List<CheckAreaStatVo> areaStatVoList = new ArrayList<>(); List<CheckAreaStatVo> areaStatVoList = new ArrayList<>();
...@@ -1657,7 +1922,7 @@ public class DeviceCheckController { ...@@ -1657,7 +1922,7 @@ public class DeviceCheckController {
return new CheckAreaStatVo(finalCityName, actualCount, supposeCount, finalProgress, finalSituation, 0, 0); return new CheckAreaStatVo(finalCityName, actualCount, supposeCount, finalProgress, finalSituation, 0, 0);
} }
private void findBySystem(){ private void findBySystem() {
selfCheckController.findBySystem1(); selfCheckController.findBySystem1();
} }
......
...@@ -128,7 +128,7 @@ public class DeviceCheckDetail extends BaseEntity { ...@@ -128,7 +128,7 @@ public class DeviceCheckDetail extends BaseEntity {
private String remark; private String remark;
/** /**
* 预留字段2 * 预留字段2 现在用来记录该自查任务的初始状态号
*/ */
@ApiModelProperty(value = "预留字段2") @ApiModelProperty(value = "预留字段2")
private String var2; private String var2;
......
...@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; ...@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
...@@ -27,12 +28,12 @@ public class CheckExamDetailVo { ...@@ -27,12 +28,12 @@ public class CheckExamDetailVo {
private List<String> userNames; private List<String> userNames;
@ApiModelProperty(name = "需要被检查的区域id") @ApiModelProperty(name = "需要被检查的区域id")
private Integer unitId; private List<Integer> unitIds;
@ApiModelProperty(name = "备注") @ApiModelProperty(name = "备注")
private String remark; private String remark;
public CheckExamDetailVo copy(Integer unitId,String remark) { public CheckExamDetailVo copy(Integer unitId,String remark) {
return new CheckExamDetailVo(this.groupName, this.userNames, unitId, remark); return new CheckExamDetailVo(this.groupName, this.userNames, Collections.singletonList(unitId), remark);
} }
} }
...@@ -57,7 +57,7 @@ import java.util.stream.Collectors; ...@@ -57,7 +57,7 @@ import java.util.stream.Collectors;
import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_DETAIL; import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_DETAIL;
import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_STAT; import static com.tykj.dev.misc.base.BusinessEnum.CONFIRM_CHECK_STAT;
import static com.tykj.dev.misc.base.StatusEnum.CHECK_DETAIL_0; import static com.tykj.dev.misc.base.StatusEnum.CHECK_DETAIL_REGION_0;
import static com.tykj.dev.misc.base.StatusEnum.CHECK_STAT_0; import static com.tykj.dev.misc.base.StatusEnum.CHECK_STAT_0;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
...@@ -210,7 +210,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine ...@@ -210,7 +210,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
.collect(toList()); .collect(toList());
statVoList.addAll(cityStatVoList); statVoList.addAll(cityStatVoList);
// 构建市自查TASK // 构建市自查TASK
TaskBto cityDetailTask = new TaskBto(CHECK_DETAIL_0.id, cityUnit.getName() + "自动核查自查", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, cityDetail.getId(), cityUnit.getUnitId(), 0); TaskBto cityDetailTask = new TaskBto(CHECK_DETAIL_REGION_0.id, cityUnit.getName() + "自动核查自查", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, cityDetail.getId(), cityUnit.getUnitId(), 0);
cityDetailTask.setCustomInfo("auto"); cityDetailTask.setCustomInfo("auto");
cityDetailTask = taskService.start(cityDetailTask); cityDetailTask = taskService.start(cityDetailTask);
resultIds.get("taskId").add(cityDetailTask.getId()); resultIds.get("taskId").add(cityDetailTask.getId());
...@@ -236,7 +236,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine ...@@ -236,7 +236,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
statVoList.addAll(countyStatVoList); statVoList.addAll(countyStatVoList);
//构建县自查TASK //构建县自查TASK
TaskBto countyDetailTask = new TaskBto(CHECK_DETAIL_0.id, countyUnit.getName() + "自动核查自查", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, countyDetail.getId(), countyUnit.getUnitId(), 0); TaskBto countyDetailTask = new TaskBto(CHECK_DETAIL_REGION_0.id, countyUnit.getName() + "自动核查自查", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, countyDetail.getId(), countyUnit.getUnitId(), 0);
countyDetailTask.setCustomInfo("auto"); countyDetailTask.setCustomInfo("auto");
countyDetailTask = taskService.start(countyDetailTask); countyDetailTask = taskService.start(countyDetailTask);
resultIds.get("taskId").add(countyDetailTask.getId()); resultIds.get("taskId").add(countyDetailTask.getId());
......
...@@ -47,19 +47,23 @@ public enum StatusEnum { ...@@ -47,19 +47,23 @@ public enum StatusEnum {
CHECK_STAT_1(111, "统计数据等待确认"), CHECK_STAT_1(111, "统计数据等待确认"),
//以下为detail状态 //以下为 区自查detail状态
CHECK_DETAIL_0(120, "等待专管员A处理"), CHECK_DETAIL_0(120, "等待专管员A处理"),
CHECK_DETAIL_1(121, "等待专管员B处理"), CHECK_DETAIL_1(121, "等待专管员B处理"),
CHECK_DETAIL_2(122, "等待核查员A处理"), CHECK_DETAIL_2(122, "等待核查员A处理"),
CHECK_DETAIL_3(123, "等待核查员B处理"),
//以下为检查stat状态 //以下为检查stat状态
CHECK_EXAM_STAT_0(130, "检查统计数据收集中"), CHECK_EXAM_STAT_0(130, "检查统计数据收集中"),
CHECK_EXAM_STAT_1(131, "检查统计数据等待确认"), CHECK_EXAM_STAT_1(131, "检查统计数据等待确认"),
//以下为检查detail状态 //以下为检查detail状态
CHECK_EXAM_DETAIL_0(140, "等待专管员A处理"), CHECK_DETAIL_REGION_0(140, "等待区专管员A处理"),
CHECK_EXAM_DETAIL_1(141, "等待专管员B处理"), CHECK_DETAIL_REGION_1(141, "等待区专管员B处理"),
CHECK_DETAIL_REGION_2(142, "等待市专管员审核"),
// 市本级自查detail状态
CHECK_DETAIL_CITY_0(160, "等待专管员A处理"),
CHECK_DETAIL_CITY_1(161, "等待专管员B处理"),
/** /**
* 清退任务 * 清退任务
......
...@@ -1244,7 +1244,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -1244,7 +1244,7 @@ public class TaskServiceImpl implements TaskService {
if (taskSelectVo.getSelectNum() == 3) { if (taskSelectVo.getSelectNum() == 3) {
//所有涉及人员所在单位包含当前用户所在单位且指针对应UserId不是当前用户 //所有涉及人员所在单位包含当前用户所在单位且指针对应UserId不是当前用户
// List<Integer> status = Arrays.asList(201,333,810,322,722,788,1250,2223,8110,888,140,130,141,111,1002,150); // List<Integer> status = Arrays.asList(201,333,810,322,722,788,1250,2223,8110,888,140,130,141,111,1002,150);
List<Integer> status = Arrays.asList(201,333,810,322,722,788,1250,2223,8110,888,140,130,141,111,1002,150,101); List<Integer> status = Arrays.asList(201,333,810,322,722,788,1250,2223,8110,888,140,130,141,111,1002,150,101,142,160,161);
List<TaskBto> taskBtoList = taskBtos.stream() List<TaskBto> taskBtoList = taskBtos.stream()
.filter(taskBto -> { .filter(taskBto -> {
// boolean unitExists = getUnitsByUsers(taskBto.getInvolveUserIdList()).contains(unitId); // boolean unitExists = getUnitsByUsers(taskBto.getInvolveUserIdList()).contains(unitId);
......
## 任务Task的设定
**关于Involve_Users的设定**
- 0 是所有都能看见
- {id} 是该id的User可以看见
- -1 表明该任务不是待办,而是一个业务追踪
\ No newline at end of file
...@@ -27,11 +27,11 @@ ...@@ -27,11 +27,11 @@
如上图所示,核查情况与自查任务的状态有着对应的关系 如上图所示,核查情况与自查任务的状态有着对应的关系
| 核查情况 | 结果 | | 任务状态 | 核查情况 |
| ----------------- | -------------------------------------- | | ----------------- | -------------------------------------- |
| 等待区专管员A处理 | 无 | | 等待区专管员A处理 | 无 |
| 等待区专管员B处理 | 进行中 | | 等待区专管员B处理 | 进行中 |
| 等待市专管员处理 | 审核 | | 等待市专管员处理 | 等待市审核 |
| 完结 | 完成 | | 完结 | 完成 |
| 等待区专管员A处理 | 未通过(可以通过Task里的特殊标记来实现) | | 等待区专管员A处理 | 未通过(可以通过Task里的特殊标记来实现) |
...@@ -41,9 +41,9 @@ ...@@ -41,9 +41,9 @@
| 核查情况 | 核查结果 | | 核查情况 | 核查结果 |
| ---------------------------- | -------- | | ---------------------------- | -------- |
| 在完成以前的状态 | 无 | | 在完成以前的状态 | 无 |
| 完成状态 | 审核 | | 完成状态 | 等待省审核 |
| 完成且省审核通过 | 无误 | | 完成且省审核通过 | 无误 |
| 完成且省审核未通过(点击回退按钮了) | 未通过 | | 完成且省审核未通过(点击回退按钮了) | 等待重做 |
### 市本级自查流程 ### 市本级自查流程
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
如上图所示,核查情况与自查任务的状态有着对应的关系 如上图所示,核查情况与自查任务的状态有着对应的关系
| 核查情况 | 结果 | | 任务状态 | 结果 |
| ----------------- | -------------------------------------- | | ----------------- | -------------------------------------- |
| 等待市专管员A处理 | 无 | | 等待市专管员A处理 | 无 |
| 等待市专管员B处理 | 进行中 | | 等待市专管员B处理 | 进行中 |
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
| 核查情况 | 核查结果 | | 核查情况 | 核查结果 |
| ---------------------------- | -------- | | ---------------------------- | -------- |
| 在完成以前的状态 | 无 | | 在完成以前的状态 | 无 |
| 完成状态 | 审核 | | 完成状态 | 等待省审核 |
| 完成且省审核通过 | 无误 | | 完成且省审核通过 | 无误 |
| 完成且省审核未通过(点击回退按钮了) | 未通过 | | 完成且省审核未通过(点击回退按钮了) | 未通过 |
...@@ -126,9 +126,22 @@ ...@@ -126,9 +126,22 @@
| 核查结果 | 触发条件 | | 核查结果 | 触发条件 |
| -------- | -------------------------------------- | | -------- | -------------------------------------- |
| 无 | 该市级下所有区的核查结果为无 | | 无 | 该市级下所有区的核查结果为无 |
| 待审核 | 该市级下有任意一个区核查结果为待审核 | | 待省审核 | 该市级下有任意一个区核查结果为等待省审核 |
| 未通过 | 该市级下有任意一个区的核查结果为未通过 | | 未通过 | 该市级下有任意一个区的核查结果为未通过 |
| 无误 | 该市级下所有区的核查结果都为无误 | | 无误 | 该市级下所有区的核查结果都为无误 |
| 审核中 | 其他情况下为审核中 |
## 关于自查状态问题的说明
**发起人是省**
- 状态转换 专管员A - 专管员B - 结束
**发起人是市**
- 区自查 专管员A - 专管员B - 市审核 - 结束
- 市本级自查 专管员A - 专管员B - 结束
## 已经发起的老数据的维护
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论