提交 4570bdb0 authored 作者: Matrix's avatar Matrix

feat(核查模块): 增加了关于托管单位的核查处理

- 发起核查的时候不显示被托管的单位 - 被托管的单位的装备算在省本级里
上级 a6691d99
......@@ -142,14 +142,18 @@ public class DeviceCheckController {
}
/**
* @return level = 0 ,1 ,2 的单位
* 查询默认的可以被核查单位的清单(省本直,省直属,市局),同时过滤掉那些已经被代管的单位
*
* @return type = 2 and level in (1,2) ,filter escrow = 1 的单位
*/
@GetMapping("/unit")
@ApiOperation(value = "查询默认的可以被核查单位的清单(省本直,省直属,市局)")
@ApiOperation(value = "查询默认的可以被核查单位的清单(省本直,省直属,市局),同时过滤掉那些已经被代管的单位")
public ResponseEntity findDefaultUnits() {
return ResponseEntity.ok(new ResultObj<>(unitsRepo.findAllByTypeInOrLevelIn(
Lists.newArrayList(2),
Lists.newArrayList(1, 2))));
List<Units> units = unitsRepo.findAllByTypeInOrLevelIn(Lists.newArrayList(2), Lists.newArrayList(1, 2))
.stream().filter(Units::isNotEscrow)
.collect(toList());
// 需要去除掉被托管的单位
return ResponseEntity.ok(new ResultObj<>(units));
}
/**
......@@ -253,9 +257,9 @@ public class DeviceCheckController {
public ResponseEntity msgLink(@RequestParam Integer taskId) {
// 如果是businessType = 7 走unionLink 否则走detail接口
Task task = taskRepo.findById(taskId).orElseThrow(() -> new ApiException(String.format("没有找到taskId = %d 的任务", taskId)));
if (task.getBusinessType().equals(CONFIRM_CHECK_STAT.id)){
if (task.getBusinessType().equals(CONFIRM_CHECK_STAT.id)) {
return unionLink(7, task.getBillId());
}else if (task.getBusinessType().equals(CONFIRM_CHECK_DETAIL.id)){
} else if (task.getBusinessType().equals(CONFIRM_CHECK_DETAIL.id)) {
return findDetail(task.getBillId());
}
......@@ -346,6 +350,22 @@ public class DeviceCheckController {
devNotInLib.addAll(specialLib.get(false));
}
}
// 代管 - 如果当前自查为省本级自查,则需要将被代管的装备加入到省本级
Units unit = unitsRepo.findByName(checkUnit);
boolean isProv = unit.getLevel() == 1 && unit.getType() == 1;
if (isProv) {
//获得所有的需要被代管的单位的在库与非在库装备,添加到省本级的在库与非在库中去
List<Units> escrowUnits = unitsRepo.findByTypeAndEscrow(2, 1);
for (Units eu : escrowUnits) {
log.info("[核查模块] 正在将 {} 单位的装备托管代理到 {} 单位", checkUnit, eu.getName());
Map<Boolean, List<DeviceLibrary>> libMap = getDevLibMap(eu.getName(), allDevices);
devInLib.addAll(libMap.get(true));
devNotInLib.addAll(libMap.get(false));
}
}
detail.updateDevice(devInLib, devNotInLib);
//更新应查装备数量
......@@ -399,7 +419,7 @@ public class DeviceCheckController {
.orElseThrow(() -> new ApiException("[核查模块]没有找到对应billId的统计任务,您给的billId = " + billId));
// key = stat id ,value = LinkVo
if (rootTask.getBillStatus().equals(REVOKEALLOTTASK.id)) {
if (rootTask.getBillStatus().equals(CHECK_SHUT_DOWN.id)) {
// 拿之前保存的缓存
linkVo = linkRepo.findByStatId(billId)
.orElseThrow(() -> new ApiException(String.format("没有找到stat id = %d 的统计缓存,请检查数据", billId)))
......@@ -1419,14 +1439,17 @@ public class DeviceCheckController {
/**
* 获得指定单位的在库装备与非在库装备
* lifeStatus 10 = 已销毁 11 = 丢失
*
* @param checkUnit 单位名
* @param allDevices 装备列表
* @return true -> 在库装备,false -> 非在库装备
* @see DeviceLibrary#lifeStatus
*/
@NotNull
private Map<Boolean, List<DeviceLibrary>> getDevLibMap(String checkUnit, List<DeviceLibrary> allDevices) {
//在库 = A and B & not B 去除掉ls = 10 的装备 把ls = 11 的装备加入到非在库
// 在库装备 = 所在在本单位 (过滤掉生命状态为10(已销毁)的装备)
// 非在库装备 = 所属是本单位,但是所在不在本单位里 + 原本是在库装备但是生命状态是11(丢失)的装备
Map<Boolean, List<DeviceLibrary>> locationMap = allDevices.stream()
.collect(partitioningBy(d -> d.getLocationUnit().equals(checkUnit)));
......@@ -1707,13 +1730,13 @@ public class DeviceCheckController {
/**
* 尝试自动完结检查任务(市/省的)
* 1. 当且仅当该检查任务的状态等于@link{CHECK_EXAM_STAT_1}时且其下的所有子任务均为完结状态,自动推进
* 1. 当且仅当该检查任务的状态等于@link{CHECK_EXAM_STAT_1}时 并且该检查是三级结构里的核查(即父Id !=0 )且其下的所有子任务均为完结状态,自动推进
*
* @param exam的taskId
*/
private void advanceExamTask(Integer examTaskId) {
TaskBto parentTask = taskService.findByTaskId(examTaskId);
if (parentTask.getBillStatus().equals(CHECK_EXAM_STAT_1.id) && taskService.TaskTreeIsOver(examTaskId)) {
if (parentTask.getBillStatus().equals(CHECK_EXAM_STAT_1.id) && parentTask.getParentTaskId() != 0 && taskService.TaskTreeIsOver(examTaskId)) {
log.info("[核查模块] 检测到task id = {}的检查任务已经可以自动推进了,自动推进至下一步", examTaskId);
statConfirm(parentTask.getBillId());
}
......@@ -2062,17 +2085,17 @@ public class DeviceCheckController {
boolean over = taskService.TaskTreeIsOver(fatherTaskId);
// 如果汇总完毕则将父级的统计任务推进
if (over) {
log.info("[核查模块] 父节点 = {} 的所有子任务均已经完结,推动父节点的任务", fatherTaskId);
TaskBto fatherTask = taskService.get(fatherTaskId);
//如果上一个id是-1 则证明是所有人的跟踪统计,即自动核查,那么下一步推进到所有人的跟踪,否则设置为-2,即维持跟踪者id
//Integer lastUserId = fatherTask.getLastUserId() == -1 ? -1 : -2;
//TaskBto newFatherTask = taskService.moveToNext(fatherTask, lastUserId);
// 将父级的统计任务变为待办
fatherTask.getInvolveUserIdList().add(0);
fatherTask.setCurrentPoint(fatherTask.getCurrentPoint() + 1);
taskService.update(fatherTask);
}
// if (over) {
// log.info("[核查模块] 父节点 = {} 的所有子任务均已经完结,推动父节点的任务", fatherTaskId);
// TaskBto fatherTask = taskService.get(fatherTaskId);
// //如果上一个id是-1 则证明是所有人的跟踪统计,即自动核查,那么下一步推进到所有人的跟踪,否则设置为-2,即维持跟踪者id
// //Integer lastUserId = fatherTask.getLastUserId() == -1 ? -1 : -2;
// //TaskBto newFatherTask = taskService.moveToNext(fatherTask, lastUserId);
// // 将父级的统计任务变为待办
// fatherTask.getInvolveUserIdList().add(0);
// fatherTask.setCurrentPoint(fatherTask.getCurrentPoint() + 1);
// taskService.update(fatherTask);
// }
log.info("[核查模块] 数据汇总完毕");
}
......
......@@ -42,8 +42,7 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.tykj.dev.misc.base.StatusEnum.END;
import static com.tykj.dev.misc.base.StatusEnum.REVOKEALLOTTASK;
import static com.tykj.dev.misc.base.StatusEnum.*;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
......@@ -156,20 +155,21 @@ public class ObjTransUtil {
long total = childTask.size();
long done = childTask.stream()
.filter(task -> task.getBillStatus().equals(END.id) || task.getBillStatus().equals(REVOKEALLOTTASK.id))
.filter(task -> task.getBillStatus().equals(END.id) || task.getBillStatus().equals(CHECK_SHUT_DOWN.id))
.count();
//如果是检查统计的话那么还要看一下他的父节点是不是已经完成了
String completion;
if (done == total) {
if (stat.getCheckType() == CheckType.CT_EXAM && !fatherTask.getBillStatus().equals(9999)) {
boolean examFinish = fatherTask.getBillStatus().equals(END.id) || fatherTask.getBillStatus().equals(CHECK_SHUT_DOWN.id);
if (stat.getCheckType() == CheckType.CT_EXAM && !examFinish) {
completion = "核查完成待办结";
} else {
if (flag) {
completion = "核查完成待确认";
} else {
// confirmTaskidDone 为true 代表此时等待最后的father任务 为false代表 flag = false 且isDone为false 代表整个节点里没有确认节点直接完结
if (fatherTask.getBillStatus().equals(END.id) || fatherTask.getBillStatus().equals(REVOKEALLOTTASK.id)) {
if (fatherTask.getBillStatus().equals(END.id) || fatherTask.getBillStatus().equals(CHECK_SHUT_DOWN.id)) {
completion = "核查完成";
} else {
completion = "核查完成待办结";
......
......@@ -48,4 +48,6 @@ public interface UnitsDao extends JpaRepository<Units, Integer>, JpaSpecificatio
List<Units> findAllByType(Integer type);
List<Units> findByTypeAndEscrow(int type, int escrow);
}
......@@ -134,4 +134,18 @@ public class Units {
public LeftNavigation toLeftNavigation(){
return new LeftNavigation(unitId,name,null, UUID.randomUUID().toString(),2,showOrder,null);
}
/**
* @return true = 是代管单位,false = 不是代管单位
*/
public boolean isEscrow(){
return escrow == 1;
}
/**
* @return true = 不是代管单位,false = 是代管单位
*/
public boolean isNotEscrow(){
return escrow == 0;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论