提交 85450c1d authored 作者: Matrix's avatar Matrix

[核查模块] 修复了两级核查与三级核查相关的BUG

上级 1c8a5e4f
...@@ -150,6 +150,8 @@ public enum LogType { ...@@ -150,6 +150,8 @@ public enum LogType {
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_EXAM_DETAIL_1.id, CHECK_EXAM_DETAIL_0.id, "B岗审核失败,跳回A岗人员操作"),
CONFIRM_CHECK_EXAM_STAT_3(420, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_STAT_0.id, END.id, "检查统计任务数据已确认完毕,任务完结"),
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.controller; package com.tykj.dev.device.confirmcheck.controller;
import com.github.wenhao.jpa.Specifications;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
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;
...@@ -39,11 +40,13 @@ import io.swagger.annotations.ApiParam; ...@@ -39,11 +40,13 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional; 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;
import java.time.LocalDateTime;
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;
...@@ -174,14 +177,13 @@ public class DeviceCheckController { ...@@ -174,14 +177,13 @@ public class DeviceCheckController {
@PostMapping("/auto") @PostMapping("/auto")
public ResultObj<Map<String, List<Integer>>> startAutoCheck() { public ResultObj<Map<String, List<Integer>>> startAutoCheck() {
Map<String, List<Integer>> resultIds = ccService.autoCheck(); Map<String, List<Integer>> resultIds = ccService.autoCheck();
myWebSocket.sendMessage1();
return new ResultObj<>(resultIds, "自动核查任务发起成功"); return new ResultObj<>(resultIds, "自动核查任务发起成功");
} }
@ApiOperation(value = "发起核查", notes = "对指定地区发起核查任务") @ApiOperation(value = "发起核查", notes = "对指定地区发起核查任务")
@PostMapping("/startCheck") @PostMapping("/startCheck")
public ResponseEntity startCheckCheck(@RequestBody CheckCheckVo ccVO) { public ResponseEntity startCheck(@RequestBody CheckCheckVo ccVO) {
//构建省的统计账单 //构建省的统计账单
Integer startUnitId = ccVO.getUnitId(); Integer startUnitId = ccVO.getUnitId();
Units startUnit = unitsRepo.findById(startUnitId).get(); Units startUnit = unitsRepo.findById(startUnitId).get();
...@@ -189,7 +191,7 @@ public class DeviceCheckController { ...@@ -189,7 +191,7 @@ public class DeviceCheckController {
List<String> checkedUnitNames = checkedUnits.stream().map(Units::getName).collect(toList()); List<String> checkedUnitNames = checkedUnits.stream().map(Units::getName).collect(toList());
log.info("[核查模块]发起核查,发起单位为{},被查单位为{}", startUnit.getName(), checkedUnitNames); log.info("[核查模块]发起核查,发起单位为{},被查单位为{}", startUnit.getName(), checkedUnitNames);
DeviceCheckStat provinceCheckStat = initStatData(ccVO.getTitle(), ccVO.getRemark(), 0, 0, startUnit.getName(), checkedUnits); DeviceCheckStat provinceCheckStat = initStatData(ccVO.getTitle(), ccVO.getRemark(), 0, 0, startUnit.getName(), checkedUnits, ccVO.getEndTime().atStartOfDay());
Integer statId = statRepo.save(provinceCheckStat).getId(); Integer statId = statRepo.save(provinceCheckStat).getId();
List<CheckDeviceStatVo> deviceStatVos = Arrays.stream( List<CheckDeviceStatVo> deviceStatVos = Arrays.stream(
Objects.requireNonNull(JacksonUtil.readValue(provinceCheckStat.getStatInfo(), CheckDeviceStatVo[].class))) Objects.requireNonNull(JacksonUtil.readValue(provinceCheckStat.getStatInfo(), CheckDeviceStatVo[].class)))
...@@ -208,7 +210,7 @@ public class DeviceCheckController { ...@@ -208,7 +210,7 @@ public class DeviceCheckController {
for (Units unit : checkedUnits) { for (Units unit : checkedUnits) {
//构建市的统计账单 //构建市的统计账单
String cityTitle = unit.getName() + "检查统计"; String cityTitle = unit.getName() + "检查统计";
DeviceCheckStat cityCheckStat = initStatData(cityTitle, ccVO.getRemark(), 0, 0, unit.getName(), Collections.emptyList()); DeviceCheckStat cityCheckStat = initStatData(cityTitle, ccVO.getRemark(), 0, 0, unit.getName(), Collections.emptyList(), ccVO.getEndTime().atStartOfDay());
Integer cityStatId = statRepo.save(cityCheckStat).getId(); Integer cityStatId = statRepo.save(cityCheckStat).getId();
log.info("[核查模块] {} 检查统计账单构建完毕,id 为 {}", unit.getName(), cityStatId); log.info("[核查模块] {} 检查统计账单构建完毕,id 为 {}", unit.getName(), cityStatId);
...@@ -219,7 +221,6 @@ public class DeviceCheckController { ...@@ -219,7 +221,6 @@ public class DeviceCheckController {
cityStatTask.setCustomInfo("exam"); cityStatTask.setCustomInfo("exam");
taskService.start(cityStatTask); taskService.start(cityStatTask);
} }
myWebSocket.sendMessage1();
return ResponseEntity.ok(ImmutableMap.of("msg", "发起核查成功")); return ResponseEntity.ok(ImmutableMap.of("msg", "发起核查成功"));
} }
...@@ -233,15 +234,9 @@ public class DeviceCheckController { ...@@ -233,15 +234,9 @@ public class DeviceCheckController {
*/ */
@ApiOperation(value = "发起检查", notes = "手动发起核查,需要指定参数") @ApiOperation(value = "发起检查", notes = "手动发起核查,需要指定参数")
@PostMapping("/startExam") @PostMapping("/startExam")
public ResponseEntity<ResultObj> startManualCheck(@RequestBody CheckExamVo ceVo) { public ResponseEntity<ResultObj> startExam(@RequestBody CheckExamVo ceVo) {
//初始化数据结构
List<Integer> detailIds = new ArrayList<>(); List<Integer> detailIds = new ArrayList<>();
// 1. 添加发起核查bill记录
// DeviceCheckBill billDo = transUtil.checkBillVo2Do(billVo);
// billRepo.save(billDo);
// 构建(设置)发起市的检查统计账单 - 检查统计任务
// 2 构建发起单位的 统计账单 与 统计任务
Integer startUnitId = ceVo.getUnitId(); Integer startUnitId = ceVo.getUnitId();
Units startUnit = unitsRepo.findById(startUnitId).get(); Units startUnit = unitsRepo.findById(startUnitId).get();
List<CheckExamDetailVo> examDetailVos = ceVo.getDetail(); List<CheckExamDetailVo> examDetailVos = ceVo.getDetail();
...@@ -258,7 +253,7 @@ public class DeviceCheckController { ...@@ -258,7 +253,7 @@ public class DeviceCheckController {
// 2-1 构建发起单位的 统计账单 // 2-1 构建发起单位的 统计账单
DeviceCheckStat provinceCheckStat; DeviceCheckStat provinceCheckStat;
//根据examStatId来判断是update还是create //根据examStatId来判断是update还是create
DeviceCheckStat initCheckStat = initStatData(ceVo.getTitle(), groupUserString, 0, 0, startUnit.getName(), checkedUnits); DeviceCheckStat initCheckStat = initStatData(ceVo.getTitle(), groupUserString, 0, 0, startUnit.getName(), checkedUnits, ceVo.getEndTime().atStartOfDay());
if (ceVo.getExamStatId() != 0) { if (ceVo.getExamStatId() != 0) {
DeviceCheckStat oriCheckStat = statRepo.findById(ceVo.getExamStatId()).get(); DeviceCheckStat oriCheckStat = statRepo.findById(ceVo.getExamStatId()).get();
oriCheckStat.setRemark(initCheckStat.getRemark()); oriCheckStat.setRemark(initCheckStat.getRemark());
...@@ -274,12 +269,13 @@ public class DeviceCheckController { ...@@ -274,12 +269,13 @@ public class DeviceCheckController {
// 2-2 构建发起单位的 统计任务 // 2-2 构建发起单位的 统计任务
// 根据examStatId来判断要不要重新创建任务 // 根据examStatId来判断要不要重新创建任务
Integer currentUserId = authenticationUtils.getAuthentication().getCurrentUserInfo().getUserId();
TaskBto cityStatTask; TaskBto cityStatTask;
if (ceVo.getExamStatId() == 0) { if (ceVo.getExamStatId() == 0) {
cityStatTask = new Task(CHECK_EXAM_STAT_0.id, CHECK_EXAM_STAT_0.name, 0, ".0.", CONFIRM_CHECK_STAT.id, statId, startUnitId) cityStatTask = new Task(CHECK_EXAM_STAT_0.id, CHECK_EXAM_STAT_0.name, 0, ".0.", CONFIRM_CHECK_STAT.id, statId, startUnitId)
.parse2Bto(); .parse2Bto();
cityStatTask.setCustomInfo("exam"); cityStatTask.setCustomInfo("exam");
cityStatTask.getInvolveUserIdList().add(authenticationUtils.getAuthentication().getCurrentUserInfo().getUserId()); cityStatTask.getInvolveUserIdList().add(currentUserId);
cityStatTask.getInvolveUserIdList().add(-1); cityStatTask.getInvolveUserIdList().add(-1);
cityStatTask.setCurrentPoint(1); cityStatTask.setCurrentPoint(1);
cityStatTask = taskService.start(cityStatTask); cityStatTask = taskService.start(cityStatTask);
...@@ -288,6 +284,7 @@ public class DeviceCheckController { ...@@ -288,6 +284,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(-1); cityStatTask.getInvolveUserIdList().add(-1);
cityStatTask.setCurrentPoint(cityStatTask.getCurrentPoint() + 1); cityStatTask.setCurrentPoint(cityStatTask.getCurrentPoint() + 1);
cityStatTask.setCreateUserId(currentUserId);
taskService.update(cityStatTask); taskService.update(cityStatTask);
} }
...@@ -330,7 +327,6 @@ public class DeviceCheckController { ...@@ -330,7 +327,6 @@ public class DeviceCheckController {
// 4. 重新设置并保存统计账单 // 4. 重新设置并保存统计账单
provinceCheckStat.setStatInfo(JacksonUtil.toJSon(deviceStatVos)); provinceCheckStat.setStatInfo(JacksonUtil.toJSon(deviceStatVos));
statRepo.save(provinceCheckStat); statRepo.save(provinceCheckStat);
myWebSocket.sendMessage1();
log.info("[核查模块] {}单位成功发起对 {} 单位的检查任务分发", startUnit.getName(), checkedUnitNames); log.info("[核查模块] {}单位成功发起对 {} 单位的检查任务分发", startUnit.getName(), checkedUnitNames);
return ResponseEntity.ok(new ResultObj<>( return ResponseEntity.ok(new ResultObj<>(
ImmutableMap.of("statIds", statId, "detailIds", detailIds), ImmutableMap.of("statIds", statId, "detailIds", detailIds),
...@@ -415,9 +411,8 @@ public class DeviceCheckController { ...@@ -415,9 +411,8 @@ public class DeviceCheckController {
} }
}); });
statRepo.save(provVo.toDo()); statRepo.save(provVo.toDo());
log.info("[核查模块 检测到是自动核查任务,将省级统计 id = {} 认为开启]", provStat.getId()); log.info("[核查模块] 检测到是自动核查任务,将省级统计 id = {} 认为开启", provStat.getId());
} }
myWebSocket.sendMessage1();
return ResponseEntity.ok(new ResultObj<>("专管员A操作成功")); return ResponseEntity.ok(new ResultObj<>("专管员A操作成功"));
} }
...@@ -461,15 +456,14 @@ public class DeviceCheckController { ...@@ -461,15 +456,14 @@ public class DeviceCheckController {
} else { } else {
// 如果是2流程的,则直接结束该任务 // 如果是2流程的,则直接结束该任务
log.info("[核查模块] 该详情任务是一个2流程任务,结束任务并统计数据..."); log.info("[核查模块] 该详情任务是一个2流程任务,结束任务并统计数据...");
taskService.moveToEnd(currentTask);
summaryDetail(currentTask, currentDetail); summaryDetail(currentTask, currentDetail);
taskService.moveToEnd(currentTask);
} }
} else { } else {
//不通过则回到第一阶段 //不通过则回到第一阶段
StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus()); StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus());
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId()); taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
} }
myWebSocket.sendMessage1();
log.info("[核查模块] 专管员B操作成功"); log.info("[核查模块] 专管员B操作成功");
return ResponseEntity.ok(new ResultObj<>("专管B操作成功")); return ResponseEntity.ok(new ResultObj<>("专管B操作成功"));
} }
...@@ -500,8 +494,8 @@ public class DeviceCheckController { ...@@ -500,8 +494,8 @@ public class DeviceCheckController {
} }
// 如果当前是第4步,则直接结束任务,并且进行结果汇总 // 如果当前是第4步,则直接结束任务,并且进行结果汇总
log.info("[核查模块] D 检查组成员A正在进行核查操作,核查详情账单id为 : {}", id); log.info("[核查模块] D 检查组成员A正在进行核查操作,核查详情账单id为 : {}", id);
currentTask = taskService.moveToEnd(currentTask);
summaryDetail(currentTask, currentDetail); summaryDetail(currentTask, currentDetail);
currentTask = taskService.moveToEnd(currentTask);
log.info("[核查模块] D 操作完毕"); log.info("[核查模块] D 操作完毕");
} }
} else { } else {
...@@ -509,10 +503,68 @@ public class DeviceCheckController { ...@@ -509,10 +503,68 @@ public class DeviceCheckController {
StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus()); StatusEnum firstStatus = getFirstStatus(currentTask.getBillStatus());
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId()); taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
} }
myWebSocket.sendMessage1();
return ResponseEntity.ok(new ResultObj<>("操作成功")); return ResponseEntity.ok(new ResultObj<>("操作成功"));
} }
/**
* @param taskId 待办任务id
* @param statId 市级统计的STAT ID
* @return
*/
@ApiOperation(value = "跟踪任务待办办结确认")
@PostMapping("/stat/done")
public ResponseEntity confirmDone(@RequestParam int taskId, @RequestParam int statId) {
log.info("[核查模块] 正在进行办结任务确认,任务id为 : {}", taskId);
TaskBto cityDoneTask = taskService.get(taskId);
//市的task 且statId保持一致 省待办 需要的是 市的统计taskId
Specification<Task> pred = Specifications.<Task>and()
.eq("billId", statId)
.eq("businessType", CONFIRM_CHECK_STAT.id)
.build();
// 找到child任务 -> 市级任务 如果是2级的则直接找自己
List<Task> tasks = taskRepo.findAll(pred);
Task cityTask = tasks.stream()
.filter(task -> task.getParentTaskId() != 0 && task.getParentTaskId() != null)
.findFirst()
.orElse(tasks.get(0));
// 如果没有父统计TASK 则证明是两级
boolean doubleLevel = cityTask.getParentTaskId() == 0 || cityTask.getParentTaskId() == null;
if (doubleLevel) {
log.info("[核查模块] 办结确认两级检查任务");
} else {
log.info("[核查模块] 办结确认三级检查任务");
//1.累加数据 累加市级数据数据到省级
CheckStatVo cityStat = transUtil.checkStatDo2Vo(statRepo.findById(statId).get());
Integer provStatId = taskService.get(cityTask.getParentTaskId()).getBillId();
CheckStatVo provinceStat = transUtil.checkStatDo2Vo(statRepo.findById(provStatId).get());
String cityName = areaCache.findById(unitsRepo.findAreaId(cityTask.getOwnUnit())).getName();
// 将区级信息合并到市中
List<CheckDeviceStatVo> mergedVo = cityStat.getDeviceStatVoList().stream()
.map(vo -> vo.combine(cityName, cityStat.getId()))
.collect(toList());
// 如果是第一个市,则替换,否则累加
boolean firstCity = taskService.TaskTreeIsStart(cityTask.getParentTaskId(),true);
if (firstCity){
provinceStat.setDeviceStatVoList(mergedVo);
log.info("[核查模块] 检测到该任务的合并状态为第一个市统计任务,因此直接替换省级统计数据");
}else {
provinceStat.cleanReduce(mergedVo);
log.info("[核查模块] 数据累加成功");
}
DeviceCheckStat dcs = provinceStat.toDo();
statRepo.save(dcs);
}
//2.办结待办
taskService.moveToEnd(cityDoneTask);
log.info("[核查模块] 办结统计待办操作成功");
return ResponseEntity.ok(new ResultObj<>("办结统计待办确认完毕"));
}
/** /**
* @param statId 统计账单主键id * @param statId 统计账单主键id
*/ */
...@@ -520,35 +572,23 @@ public class DeviceCheckController { ...@@ -520,35 +572,23 @@ public class DeviceCheckController {
@PostMapping("/stat/verify") @PostMapping("/stat/verify")
public ResponseEntity<ResultObj> statConfirm(@RequestParam int statId) { public ResponseEntity<ResultObj> statConfirm(@RequestParam int statId) {
log.info("[核查模块] 正在进行统计数据确认,统计账单id为 : {}", statId); log.info("[核查模块] 正在进行统计数据确认,统计账单id为 : {}", statId);
//将当前的统计task //将当前的统计task
TaskBto currentTask = taskService.get(statId, CONFIRM_CHECK_STAT.id); TaskBto currentTask = taskService.get(statId, CONFIRM_CHECK_STAT.id);
currentTask = taskService.moveToEnd(currentTask); currentTask = taskService.moveToEnd(currentTask);
//如果有上级统计任务 则累加当前地区数据
Integer parentTaskId = currentTask.getParentTaskId(); Integer parentTaskId = currentTask.getParentTaskId();
boolean hasParent = parentTaskId != 0; boolean hasParent = parentTaskId != 0;
if (hasParent) {
// 累加当前地区数据到上级(省级)
TaskBto parentTask = taskService.get(parentTaskId);
CheckStatVo cityStat = transUtil.checkStatDo2Vo(statRepo.findById(statId).get());
CheckStatVo provinceStat = transUtil.checkStatDo2Vo(statRepo.findById(parentTask.getBillId()).get());
String cityName = areaCache.findById(unitsRepo.findAreaId(currentTask.getOwnUnit())).getName();
// 将区级信息合并到市中
List<CheckDeviceStatVo> mergedVo = cityStat.getDeviceStatVoList().stream()
.map(vo -> vo.combine(cityName, cityStat.getId()))
.collect(toList());
provinceStat.cleanReduce(mergedVo);
statRepo.save(provinceStat.toDo());
// 如果所有子地区统计任务都已经完结,则推进父地区统计任务进度
boolean allOver = taskService.TaskTreeIsOver(parentTaskId);
if (allOver) {
TaskBto provTask = taskService.moveToNext(parentTask, 0);
log.info("[核查任务] 所有市的核查统计任务已经完毕,推进省级 id = {}的核查统计任务", provTask.getId());
}
if (hasParent) {
//市统计的办结 -> 开启对应市的待办任务
String areaName = auService.findOne(AuExample.UnitId, currentTask.getOwnUnit()).getName();
Integer provId = areaRepo.findAreasByType(1).get(0).getId();
TaskBto cityDoneTask = new TaskBto(CHECK_STAT_1.id, areaName + "统计确认待办任务", 0, ".", CONFIRM_CHECK_STAT.id, statId, provId, 0);
cityDoneTask = taskService.start(cityDoneTask);
log.info("[核查模块] 统计确认待办任务生成成功, id为 : {}", cityDoneTask.getId());
} }
log.info("[核查模块] 统计数据确认操作成功"); log.info("[核查模块] 统计数据确认操作成功");
myWebSocket.sendMessage1();
return ResponseEntity.ok(new ResultObj<>("统计数据确认完毕")); return ResponseEntity.ok(new ResultObj<>("统计数据确认完毕"));
} }
...@@ -564,11 +604,25 @@ public class DeviceCheckController { ...@@ -564,11 +604,25 @@ public class DeviceCheckController {
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);
// 获得当前城市的统计信息 以及 要汇总的地区信息 并累加保存 // 如果是第一个区域(通过判断所有的child节点没有结束),替换掉父级的统计,如果不是第一个区域,则累加
boolean firstArea = taskService.TaskTreeIsStart(fatherTaskId,false);
List<CheckDeviceStatVo> addVos = parseStatString2Vo(currentTask, currentDetail.getCheckDetail()); List<CheckDeviceStatVo> addVos = parseStatString2Vo(currentTask, currentDetail.getCheckDetail());
CheckStatVo resultVo = transUtil.checkStatDo2Vo(statRepo.findById(statId).get()); CheckStatVo cityStatVo = transUtil.checkStatDo2Vo(statRepo.findById(statId).get());
resultVo = resultVo.cleanReduce(addVos); //addVos在内部reduce一次
statRepo.save(resultVo.toDo()); addVos = addVos.stream()
.collect(groupingBy(v -> v.getDeviceModel() + v.getDeviceName()))
.values()
.stream()
.map(v -> v.stream().reduce(CheckDeviceStatVo::reduce).get())
.collect(toList());
// 第一个区域替换,否则累加
if (firstArea) {
cityStatVo.setDeviceStatVoList(addVos);
} else {
// 获得当前城市的统计信息 以及 要汇总的地区信息 并累加保存
cityStatVo = cityStatVo.cleanReduce(addVos);
}
statRepo.save(cityStatVo.toDo());
// 判断地区数据是否均汇总完毕 // 判断地区数据是否均汇总完毕
boolean over = taskService.TaskTreeIsOver(fatherTaskId); boolean over = taskService.TaskTreeIsOver(fatherTaskId);
...@@ -646,7 +700,7 @@ public class DeviceCheckController { ...@@ -646,7 +700,7 @@ public class DeviceCheckController {
* @param unitsList 被核查单位列表 * @param unitsList 被核查单位列表
* @return 一份初始化好统计数据(没有向上合并 , 只做了同级地区数据合并)的核查统计单 * @return 一份初始化好统计数据(没有向上合并 , 只做了同级地区数据合并)的核查统计单
*/ */
private DeviceCheckStat initStatData(String title, String remark, Integer checkAId, Integer checkBId, String startUnitName, List<Units> unitsList) { private DeviceCheckStat initStatData(String title, String remark, Integer checkAId, Integer checkBId, String startUnitName, List<Units> unitsList, LocalDateTime endTime) {
//获得要被统计的单位名列表 //获得要被统计的单位名列表
List<String> unitNameList = unitsList.stream() List<String> unitNameList = unitsList.stream()
.map(Units::getName) .map(Units::getName)
...@@ -660,22 +714,22 @@ public class DeviceCheckController { ...@@ -660,22 +714,22 @@ public class DeviceCheckController {
.stream() .stream()
.filter(dev -> unitNameList.contains(dev.getOwnUnit())) .filter(dev -> unitNameList.contains(dev.getOwnUnit()))
.map(transUtil::device2InitStatVo) .map(transUtil::device2InitStatVo)
.collect(toMap(CheckDeviceStatVo::getDeviceModel, Function.identity(), CheckDeviceStatVo::reduce)) .collect(toMap(d -> d.getDeviceModel() + d.getDeviceName(), Function.identity(), CheckDeviceStatVo::reduce))
.values(); .values();
//缺省地区数据补充 //缺省地区数据补充 下面这段代码意义不明 - - 先注释掉 ,后面想起来了再决定是用还是删除
for (CheckDeviceStatVo statVo : statVos) { // for (CheckDeviceStatVo statVo : statVos) {
if (statVo.getAreaStatList().size() < unitNameList.size()) { // if (statVo.getAreaStatList().size() < unitNameList.size()) {
List<String> existsAreaNames = statVo.getAreaStatList().stream() // List<String> existsAreaNames = statVo.getAreaStatList().stream()
.map(CheckAreaStatVo::getAreaName) // .map(CheckAreaStatVo::getAreaName)
.collect(toList()); // .collect(toList());
List<CheckAreaStatVo> supplementVos = auList.stream() // List<CheckAreaStatVo> supplementVos = auList.stream()
.filter(au -> !existsAreaNames.contains(au.getName())) // .filter(au -> !existsAreaNames.contains(au.getName()))
.map(au -> new CheckAreaStatVo(au.getName(), 0, 0, 0, 0, 0, 0)) // .map(au -> new CheckAreaStatVo(au.getName(), 0, 0, 0, 0, 0, 0))
.collect(toList()); // .collect(toList());
statVo.getAreaStatList().addAll(supplementVos); // statVo.getAreaStatList().addAll(supplementVos);
} // }
} // }
return new DeviceCheckStat( return new DeviceCheckStat(
CheckType.MANUAL_CHECK, CheckType.MANUAL_CHECK,
...@@ -684,7 +738,8 @@ public class DeviceCheckController { ...@@ -684,7 +738,8 @@ public class DeviceCheckController {
JacksonUtil.toJSon(new ArrayList<>(statVos)), JacksonUtil.toJSon(new ArrayList<>(statVos)),
checkAId, checkAId,
checkBId, checkBId,
remark); remark,
endTime);
} }
private String addNode(String originalNode, Integer fatherId) { private String addNode(String originalNode, Integer fatherId) {
......
...@@ -102,12 +102,12 @@ public class DeviceCheckStat extends BaseEntity { ...@@ -102,12 +102,12 @@ public class DeviceCheckStat extends BaseEntity {
this.remark = remark; this.remark = remark;
} }
public DeviceCheckStat(CheckType checkType, String title, String subtitle, String statInfo, Integer checkUserAId, Integer checkUserBId, String remark) { public DeviceCheckStat(CheckType checkType, String title, String subtitle, String statInfo, Integer checkUserAId, Integer checkUserBId, String remark,LocalDateTime endTime) {
this.checkType = checkType; this.checkType = checkType;
this.title = title; this.title = title;
this.subtitle = subtitle; this.subtitle = subtitle;
this.startTime = LocalDateTime.now(); this.startTime = LocalDateTime.now();
this.endTime = LocalDateTime.now().plusMonths(1); this.endTime = endTime;
this.statInfo = statInfo; this.statInfo = statInfo;
this.checkUserAId = checkUserAId; this.checkUserAId = checkUserAId;
this.checkUserBId = checkUserBId; this.checkUserBId = checkUserBId;
......
...@@ -70,7 +70,7 @@ public class CheckDeviceStatVo implements Cloneable { ...@@ -70,7 +70,7 @@ public class CheckDeviceStatVo implements Cloneable {
} }
/** /**
* 累加装备统计数据(相同型号),并将其下面各个地区的统计信息合并(次级地区会强制更改为{cityName}) * 累加装备统计数据(相同型号&名字),并将其下面各个地区的统计信息合并(次级地区会强制更改为{cityName})
* 多用于装备统计数据中既附带区又附带市的统计信息,想全部合并为市的操作(为了统一给省级单位查看统计数据) * 多用于装备统计数据中既附带区又附带市的统计信息,想全部合并为市的操作(为了统一给省级单位查看统计数据)
* <li>将所有地区全部改名为市级地区</li> * <li>将所有地区全部改名为市级地区</li>
* <li>合并所有数据</li> * <li>合并所有数据</li>
...@@ -80,8 +80,9 @@ public class CheckDeviceStatVo implements Cloneable { ...@@ -80,8 +80,9 @@ public class CheckDeviceStatVo implements Cloneable {
* @return 合并后的装备统计对象,基于深拷贝的新对象 * @return 合并后的装备统计对象,基于深拷贝的新对象
*/ */
public CheckDeviceStatVo reduce(CheckDeviceStatVo other, String cityName, Integer cityStatId) { public CheckDeviceStatVo reduce(CheckDeviceStatVo other, String cityName, Integer cityStatId) {
if (!deviceModel.equals(other.deviceModel)) { boolean flag = deviceModel.equals(other.deviceModel) && deviceName.equals(other.deviceName);
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号的装备"); if (!flag) {
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号与名字的装备");
} }
CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this); CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this);
mergeVo.deviceCount += other.deviceCount; mergeVo.deviceCount += other.deviceCount;
...@@ -95,11 +96,12 @@ public class CheckDeviceStatVo implements Cloneable { ...@@ -95,11 +96,12 @@ public class CheckDeviceStatVo implements Cloneable {
* *
* @param other 要合并的装备统计信息 * @param other 要合并的装备统计信息
* @return 合并后的装备统计信息对相关,基于深拷贝 * @return 合并后的装备统计信息对相关,基于深拷贝
* @throws IllegalArgumentException 累加的统计信息对象必须是相同型号的装备 * @throws IllegalArgumentException 累加的统计信息对象必须是相同型号与名字的装备
*/ */
public CheckDeviceStatVo reduce(CheckDeviceStatVo other) { public CheckDeviceStatVo reduce(CheckDeviceStatVo other) {
if (!deviceModel.equals(other.getDeviceModel())) { boolean flag = deviceModel.equals(other.getDeviceModel()) && deviceName.equals(other.getDeviceName());
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号的装备"); if (!flag) {
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号与名字的装备");
} }
CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this); CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this);
...@@ -130,11 +132,12 @@ public class CheckDeviceStatVo implements Cloneable { ...@@ -130,11 +132,12 @@ public class CheckDeviceStatVo implements Cloneable {
* *
* @param other 要合并的装备统计信息 * @param other 要合并的装备统计信息
* @return 合并后的装备统计信息对相关,基于深拷贝 * @return 合并后的装备统计信息对相关,基于深拷贝
* @throws IllegalArgumentException 累加的统计信息对象必须是相同型号的装备 * @throws IllegalArgumentException 累加的统计信息对象必须是相同型号与名字的装备
*/ */
public CheckDeviceStatVo cleanReduce(CheckDeviceStatVo other) { public CheckDeviceStatVo cleanReduce(CheckDeviceStatVo other) {
if (!deviceModel.equals(other.getDeviceModel())) { boolean flag = deviceModel.equals(other.getDeviceModel()) && deviceName.equals(other.getDeviceName());
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号的装备"); if (!flag) {
throw new IllegalArgumentException("累加的统计信息对象必须是相同型号且名称相同的装备");
} }
CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this); CheckDeviceStatVo mergeVo = new CheckDeviceStatVo(this);
......
...@@ -110,13 +110,14 @@ public class CheckStatVo { ...@@ -110,13 +110,14 @@ public class CheckStatVo {
return this; return this;
} }
//map key deviceModel+deviceName
Map<String, CheckDeviceStatVo> oriModelMap = deviceStatVoList.stream() Map<String, CheckDeviceStatVo> oriModelMap = deviceStatVoList.stream()
.collect(Collectors.toMap(CheckDeviceStatVo::getDeviceModel, Function.identity())); .collect(Collectors.toMap(d -> d.getDeviceModel()+d.getDeviceName(), Function.identity()));
//遍历要加入的LIST 如果在源数据map中寻找到了则累加,否则添加进去 //遍历要加入的LIST 如果在源数据map中寻找到了则累加,否则添加进去
for (CheckDeviceStatVo vo : otherList) { for (CheckDeviceStatVo vo : otherList) {
oriModelMap.computeIfPresent(vo.getDeviceModel(), (k, v) -> v.cleanReduce(vo)); oriModelMap.computeIfPresent(vo.getDeviceModel()+vo.getDeviceName(), (k, v) -> v.cleanReduce(vo));
oriModelMap.putIfAbsent(vo.getDeviceModel(), vo); oriModelMap.putIfAbsent(vo.getDeviceModel()+vo.getDeviceName(), vo);
} }
deviceStatVoList = new ArrayList<>(oriModelMap.values()); deviceStatVoList = new ArrayList<>(oriModelMap.values());
......
...@@ -251,17 +251,17 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine ...@@ -251,17 +251,17 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
List<CheckDeviceStatVo> countyVo = regionMap.get(true); List<CheckDeviceStatVo> countyVo = regionMap.get(true);
// 市级数据 // 市级数据
Map<String, CheckDeviceStatVo> map = regionMap.get(false).stream() Map<String, CheckDeviceStatVo> map = regionMap.get(false).stream()
.collect(toMap(CheckDeviceStatVo::getDeviceModel, Function.identity())); .collect(toMap(d -> d.getDeviceModel()+d.getDeviceName(), Function.identity()));
//查找区域数据内的父级地区(即市),将数据count数据add进去(通过两次get),将areaList数据也加进去 //查找区域数据内的父级地区(即市),将数据count数据add进去(通过两次get),将areaList数据也加进去
for (CheckDeviceStatVo v : countyVo) { for (CheckDeviceStatVo v : countyVo) {
String couName = v.getAreaStatList().get(0).getAreaName(); String couName = v.getAreaStatList().get(0).getAreaName();
String cityName = areaCache.findFatherByName(couName).getName(); String cityName = areaCache.findFatherByName(couName).getName();
//把相同型号的区级的数据merge到市级即可,没有的话改个名加进去 //把相同型号与名字的的区级的数据merge到市级即可,没有的话改个名加进去
Integer cityStatId = areaStatIdMap.get(cityName); Integer cityStatId = areaStatIdMap.get(cityName);
map.computeIfPresent(v.getDeviceModel(), (k, value) -> value.reduce(v, cityName, cityStatId)); map.computeIfPresent(v.getDeviceModel()+v.getDeviceName(), (k, value) -> value.reduce(v, cityName, cityStatId));
map.computeIfAbsent(v.getDeviceModel(), k -> { map.computeIfAbsent(v.getDeviceModel()+v.getDeviceName(), k -> {
v.getAreaStatList().forEach(area -> area.setAreaName(cityName)); v.getAreaStatList().forEach(area -> area.setAreaName(cityName));
return v; return v;
}); });
...@@ -288,7 +288,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine ...@@ -288,7 +288,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
List<CheckDeviceStatVo> cityStatVo = new ArrayList<>(); List<CheckDeviceStatVo> cityStatVo = new ArrayList<>();
statVoListCopy2.stream() statVoListCopy2.stream()
.filter(stat -> cityNames.contains(stat.getAreaStatList().get(0).getAreaName())) .filter(stat -> cityNames.contains(stat.getAreaStatList().get(0).getAreaName()))
.collect(Collectors.groupingBy(CheckDeviceStatVo::getDeviceModel, reducing(CheckDeviceStatVo::reduce))) .collect(Collectors.groupingBy(d -> d.getDeviceModel()+d.getDeviceName(), reducing(CheckDeviceStatVo::reduce)))
.forEach((k, v) -> cityStatVo.add(v.get())); .forEach((k, v) -> cityStatVo.add(v.get()));
csd.setStatInfo(JacksonUtil.toJSon(cityStatVo)); csd.setStatInfo(JacksonUtil.toJSon(cityStatVo));
} }
...@@ -487,8 +487,8 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine ...@@ -487,8 +487,8 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
@Override @Override
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
//开启计划任务 //开启计划任务
startAutoCheckCron(); // startAutoCheckCron();
log.info("[核查模块] 初始化开启任务成功"); // log.info("[核查模块] 初始化开启任务成功");
} }
} }
...@@ -149,6 +149,16 @@ public interface TaskService { ...@@ -149,6 +149,16 @@ public interface TaskService {
*/ */
boolean TaskTreeIsOver(int rootId); boolean TaskTreeIsOver(int rootId);
/**
* 判断该任务节点下的所有节点是否任意一个都没有处于完结状态(即用来判断该任务树是否是初始状态)
* @param rootId task的根节点id
* @param currentIsOver 当前的child节点是否处于完结状态
* @return Task Tree 是否是初始状态
*/
boolean TaskTreeIsStart(int rootId,boolean currentIsOver);
/** /**
* @param oldUserId 旧专管员id * @param oldUserId 旧专管员id
* @param newUserId 新交接专管员id * @param newUserId 新交接专管员id
......
...@@ -286,7 +286,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -286,7 +286,7 @@ public class TaskServiceImpl implements TaskService {
public TaskBto start(TaskBto taskBto) { public TaskBto start(TaskBto taskBto) {
Task task = taskDao.save(taskBto.toDo()); Task task = taskDao.save(taskBto.toDo());
myWebSocket.sendMessage1(); myWebSocket.sendMessage1();
CompletableFuture.runAsync(() ->{ CompletableFuture.runAsync(() -> {
try { try {
Thread.sleep(2000); Thread.sleep(2000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
...@@ -336,7 +336,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -336,7 +336,7 @@ public class TaskServiceImpl implements TaskService {
public Task update(TaskBto taskBto) { public Task update(TaskBto taskBto) {
taskBto.setUserReadDetailList(new ArrayList<>()); taskBto.setUserReadDetailList(new ArrayList<>());
Task task = taskDao.save(taskBto.toDo()); Task task = taskDao.save(taskBto.toDo());
CompletableFuture.runAsync(() -> blockChainUtil.appendHash(JacksonUtil.toJSon(taskBto.toDo()), taskBto.getRecordId()),TaskBeanConfig.getThreadPoolTaskScheduler()); CompletableFuture.runAsync(() -> blockChainUtil.appendHash(JacksonUtil.toJSon(taskBto.toDo()), taskBto.getRecordId()), TaskBeanConfig.getThreadPoolTaskScheduler());
return task; return task;
} }
...@@ -365,7 +365,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -365,7 +365,7 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
public List<TaskUserVo> getList(TaskSelectVo taskSelectVo) { public List<TaskUserVo> getList(TaskSelectVo taskSelectVo) {
List<TaskUserVo> taskEntities = getTaskUserVoList(taskSelectVo); List<TaskUserVo> taskEntities = getTaskUserVoList(taskSelectVo);
if (taskSelectVo.getOrders().size()>0) { if (taskSelectVo.getOrders().size() > 0) {
//根据vo待办和跟踪时间的查询顺序按顺序或降序排序输出 //根据vo待办和跟踪时间的查询顺序按顺序或降序排序输出
if (taskSelectVo.getSelectNum() == 2 && "trackingTime".equals(taskSelectVo.getOrders().get(0).getCoulmn())) { if (taskSelectVo.getSelectNum() == 2 && "trackingTime".equals(taskSelectVo.getOrders().get(0).getCoulmn())) {
if ("ASC".equals(taskSelectVo.getOrders().get(0).getDirection().toString())) { if ("ASC".equals(taskSelectVo.getOrders().get(0).getDirection().toString())) {
...@@ -406,7 +406,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -406,7 +406,7 @@ public class TaskServiceImpl implements TaskService {
.filter(taskUserVo -> find(taskUserVo.getId(), list) > -1) .filter(taskUserVo -> find(taskUserVo.getId(), list) > -1)
.collect(Collectors.toList()); .collect(Collectors.toList());
//判断是否需要按发起时间排序 //判断是否需要按发起时间排序
if (taskSelectVo.getOrders().size()>0) { if (taskSelectVo.getOrders().size() > 0) {
if ("createTime".equals(taskSelectVo.getOrders().get(0).getCoulmn())) { if ("createTime".equals(taskSelectVo.getOrders().get(0).getCoulmn())) {
if ("ASC".equals(taskSelectVo.getOrders().get(0).getDirection().toString())) { if ("ASC".equals(taskSelectVo.getOrders().get(0).getDirection().toString())) {
return taskUtils.orderByCreateTimeAsc2(taskUserVos); return taskUtils.orderByCreateTimeAsc2(taskUserVos);
...@@ -446,25 +446,24 @@ public class TaskServiceImpl implements TaskService { ...@@ -446,25 +446,24 @@ public class TaskServiceImpl implements TaskService {
if (taskUserVo.getInvolveUserIdList() != null && taskUserVo.getInvolveUserIdList().size() > 0) { if (taskUserVo.getInvolveUserIdList() != null && taskUserVo.getInvolveUserIdList().size() > 0) {
//获取涉及人员当前指针 //获取涉及人员当前指针
List<Integer> userIds = taskUserVo.getInvolveUserIdList(); List<Integer> userIds = taskUserVo.getInvolveUserIdList();
if (userIds.size() > 0 && taskUserVo.getCurrentPoint()<userIds.size()) { if (userIds.size() > 0 && taskUserVo.getCurrentPoint() < userIds.size()) {
Integer userId3 = userIds.get(taskUserVo.getCurrentPoint()); Integer userId3 = userIds.get(taskUserVo.getCurrentPoint());
//当前指针userId大于0,待办人即当前id //当前指针userId大于0,待办人即当前id
if (userId3>0) { if (userId3 > 0) {
taskUserVo.setProcessingUser(userCache.findById(userId3).getName()); taskUserVo.setProcessingUser(userCache.findById(userId3).getName());
} }
//当前指针userId等于0,待办人为所属单位下所有用户 //当前指针userId等于0,待办人为所属单位下所有用户
else if (userId3==0&&taskUserVo.getOwnUnit()!=null){ else if (userId3 == 0 && taskUserVo.getOwnUnit() != null) {
StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer = new StringBuffer();
List<User> users = userCache.findAll(); List<User> users = userCache.findAll();
users.stream().filter(user -> user.getUnitsId().equals(taskUserVo.getOwnUnit())).forEach(user -> { users.stream().filter(user -> user.getUnitsId().equals(taskUserVo.getOwnUnit())).forEach(user -> {
stringBuffer.append(user.getName()).append(","); stringBuffer.append(user.getName()).append(",");
}); });
if (stringBuffer.length()>0) { if (stringBuffer.length() > 0) {
stringBuffer.deleteCharAt(stringBuffer.length() - 1); stringBuffer.deleteCharAt(stringBuffer.length() - 1);
} }
taskUserVo.setProcessingUser(stringBuffer.toString()); taskUserVo.setProcessingUser(stringBuffer.toString());
} } else {
else {
taskUserVo.setProcessingUser(""); taskUserVo.setProcessingUser("");
} }
} }
...@@ -520,7 +519,6 @@ public class TaskServiceImpl implements TaskService { ...@@ -520,7 +519,6 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
public boolean TaskTreeIsOver(int rootId) { public boolean TaskTreeIsOver(int rootId) {
List<Task> taskList = taskDao.findAllByParentTaskId(rootId); List<Task> taskList = taskDao.findAllByParentTaskId(rootId);
if (CollectionUtils.isEmpty(taskList)) { if (CollectionUtils.isEmpty(taskList)) {
return true; return true;
} else { } else {
...@@ -529,6 +527,32 @@ public class TaskServiceImpl implements TaskService { ...@@ -529,6 +527,32 @@ public class TaskServiceImpl implements TaskService {
} }
} }
/**
* 判断该任务节点下的下一级节点是否任意一个都没有处于完结状态(即用来判断该任务树是否是初始状态)
*
* @param rootId task的根节点id
* @return Task Tree 是否是初始状态
*/
@Override
public boolean TaskTreeIsStart(int rootId, boolean currentIsOver) {
List<Task> taskList = taskDao.findAllByParentTaskId(rootId);
if (CollectionUtils.isEmpty(taskList)) {
return false;
} else {
long overJobCount = taskList.stream()
.filter(task -> task.getBillStatus().equals(StatusEnum.END.id))
.count();
//如果当前任务是完结的,那么完结数量等于1就证明是初始状态,否则必须为0
if (currentIsOver) {
return overJobCount == 1;
} else {
return overJobCount == 0;
}
}
}
/** /**
* @param oldUserId 旧专管员id * @param oldUserId 旧专管员id
* @param newUserId 新交接专管员id * @param newUserId 新交接专管员id
...@@ -639,7 +663,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -639,7 +663,7 @@ public class TaskServiceImpl implements TaskService {
boolean userConfirm2 = taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint()) == -1; boolean userConfirm2 = taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint()) == -1;
boolean pointExists = taskBto.getCurrentPoint() < taskBto.getInvolveUserIdList().size(); boolean pointExists = taskBto.getCurrentPoint() < taskBto.getInvolveUserIdList().size();
boolean userConfirm = userId.equals(taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint())); boolean userConfirm = userId.equals(taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint()));
boolean isDraft = taskBto.getBillStatus()==201||taskBto.getBillStatus()==333||taskBto.getBillStatus()==810||taskBto.getBillStatus()==322||taskBto.getBillStatus()==722; boolean isDraft = taskBto.getBillStatus() == 201 || taskBto.getBillStatus() == 333 || taskBto.getBillStatus() == 810 || taskBto.getBillStatus() == 322 || taskBto.getBillStatus() == 722;
boolean isCreateUser = userId.equals(taskBto.getCreateUserId()); boolean isCreateUser = userId.equals(taskBto.getCreateUserId());
return unitExists && pointExists && !userConfirm && !userConfirm2 && !isDraft && isCreateUser; return unitExists && pointExists && !userConfirm && !userConfirm2 && !isDraft && isCreateUser;
}) })
...@@ -652,7 +676,7 @@ public class TaskServiceImpl implements TaskService { ...@@ -652,7 +676,7 @@ public class TaskServiceImpl implements TaskService {
boolean userConfirm = taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint()) == -1; boolean userConfirm = taskBto.getInvolveUserIdList().get(taskBto.getCurrentPoint()) == -1;
boolean unitConfirm = taskBto.getOwnUnit().equals(unitId); boolean unitConfirm = taskBto.getOwnUnit().equals(unitId);
boolean isCreateUser = userId.equals(taskBto.getCreateUserId()); boolean isCreateUser = userId.equals(taskBto.getCreateUserId());
return pointExists && userConfirm && unitConfirm && isCreateUser; return pointExists && userConfirm && unitConfirm && isCreateUser;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
taskBtoList.addAll(taskBtos1); taskBtoList.addAll(taskBtos1);
...@@ -696,25 +720,24 @@ public class TaskServiceImpl implements TaskService { ...@@ -696,25 +720,24 @@ public class TaskServiceImpl implements TaskService {
if (taskUserVo.getInvolveUserIdList() != null && taskUserVo.getInvolveUserIdList().size() > 0) { if (taskUserVo.getInvolveUserIdList() != null && taskUserVo.getInvolveUserIdList().size() > 0) {
//获取涉及人员当前指针 //获取涉及人员当前指针
List<Integer> userIds = taskUserVo.getInvolveUserIdList(); List<Integer> userIds = taskUserVo.getInvolveUserIdList();
if (userIds.size() > 0 && taskUserVo.getCurrentPoint()<userIds.size()) { if (userIds.size() > 0 && taskUserVo.getCurrentPoint() < userIds.size()) {
Integer userId3 = userIds.get(taskUserVo.getCurrentPoint()); Integer userId3 = userIds.get(taskUserVo.getCurrentPoint());
//当前指针userId大于0,待办人即当前id //当前指针userId大于0,待办人即当前id
if (userId3>0) { if (userId3 > 0) {
taskUserVo.setProcessingUser(userCache.findById(userId3).getName()); taskUserVo.setProcessingUser(userCache.findById(userId3).getName());
} }
//当前指针userId等于0,待办人为所属单位下所有用户 //当前指针userId等于0,待办人为所属单位下所有用户
else if (userId3==0&&taskUserVo.getOwnUnit()!=null){ else if (userId3 == 0 && taskUserVo.getOwnUnit() != null) {
StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer = new StringBuffer();
List<User> users = userCache.findAll(); List<User> users = userCache.findAll();
users.stream().filter(user -> user.getUnitsId().equals(taskUserVo.getOwnUnit())).forEach(user -> { users.stream().filter(user -> user.getUnitsId().equals(taskUserVo.getOwnUnit())).forEach(user -> {
stringBuffer.append(user.getName()).append(","); stringBuffer.append(user.getName()).append(",");
}); });
if (stringBuffer.length()>0) { if (stringBuffer.length() > 0) {
stringBuffer.deleteCharAt(stringBuffer.length() - 1); stringBuffer.deleteCharAt(stringBuffer.length() - 1);
} }
taskUserVo.setProcessingUser(stringBuffer.toString()); taskUserVo.setProcessingUser(stringBuffer.toString());
} } else {
else {
taskUserVo.setProcessingUser(""); taskUserVo.setProcessingUser("");
} }
} }
...@@ -828,10 +851,10 @@ public class TaskServiceImpl implements TaskService { ...@@ -828,10 +851,10 @@ public class TaskServiceImpl implements TaskService {
* @param userIds 用户Id列表 * @param userIds 用户Id列表
* @return 返回存在这些用户的单位 * @return 返回存在这些用户的单位
*/ */
private Set<Integer> getUnitsByUsers(List<Integer> userIds){ private Set<Integer> getUnitsByUsers(List<Integer> userIds) {
Set<Integer> unitIds = new HashSet<>(); Set<Integer> unitIds = new HashSet<>();
userIds.forEach(integer -> { userIds.forEach(integer -> {
if (integer>0) { if (integer > 0) {
unitIds.add(userCache.findById(integer).getUnitsId()); unitIds.add(userCache.findById(integer).getUnitsId());
} }
}); });
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论