|
@@ -76,7 +76,6 @@ import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 初始化控制器
|
|
|
*
|
|
@@ -89,1016 +88,1101 @@ import java.util.stream.Collectors;
|
|
|
@RequestMapping(value = "/init", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
|
public class InitController {
|
|
|
|
|
|
- private final InitMapper initMapper;
|
|
|
- private final WmTaskContentService taskContentService;
|
|
|
- private final WmTaskService taskService;
|
|
|
- private final SysLogService logService;
|
|
|
- private final WmTaskTypeMapper wmTaskTypeMapper;
|
|
|
- private final SysDeptMapper sysDeptMapper;
|
|
|
- private final WmDaDrugEntMapper wmDaDrugEntMapper;
|
|
|
- private final SysDeptRelationMapper sysDeptRelationMapper;
|
|
|
- private final WmDaAgentMapper wmDaAgentMapper;
|
|
|
- private final SysUserAreaService userAreaService;
|
|
|
- private final SysAreaEntityService areaEntityService;
|
|
|
- private final SysUserService userService;
|
|
|
- private final RedisTemplate<String, Object> redisTemplate;
|
|
|
- private final ApplicationEventPublisher applicationEventPublisher;
|
|
|
- private final WmPackageTaskTypeQtyService packageTaskTypeQtyService;
|
|
|
- private final SysCheckChainNodeCheckHistoryService checkChainNodeCheckHistoryService;
|
|
|
-
|
|
|
- @Inner(value = false)
|
|
|
- @GetMapping(value = "/cnbg/task/check/stat")
|
|
|
- public R<List<Map<String, Object>>> taskCheckStat(){
|
|
|
- List<Map<String, Object>> maps = initMapper.taskCheckStat();
|
|
|
- return R.ok(maps);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Inner(value = false)
|
|
|
- @GetMapping(value = "/cnbg/test")
|
|
|
- public R<String> cnbgInitTest() {
|
|
|
- return R.ok("TEST:" + System.currentTimeMillis());
|
|
|
+ private final InitMapper initMapper;
|
|
|
+ private final WmTaskContentService taskContentService;
|
|
|
+ private final WmTaskService taskService;
|
|
|
+ private final SysLogService logService;
|
|
|
+ private final WmTaskTypeMapper wmTaskTypeMapper;
|
|
|
+ private final SysDeptMapper sysDeptMapper;
|
|
|
+ private final WmDaDrugEntMapper wmDaDrugEntMapper;
|
|
|
+ private final SysDeptRelationMapper sysDeptRelationMapper;
|
|
|
+ private final WmDaAgentMapper wmDaAgentMapper;
|
|
|
+ private final SysUserAreaService userAreaService;
|
|
|
+ private final SysAreaEntityService areaEntityService;
|
|
|
+ private final SysUserService userService;
|
|
|
+ private final RedisTemplate<String, Object> redisTemplate;
|
|
|
+ private final ApplicationEventPublisher applicationEventPublisher;
|
|
|
+ private final WmPackageTaskTypeQtyService packageTaskTypeQtyService;
|
|
|
+ private final SysCheckChainNodeCheckHistoryService checkChainNodeCheckHistoryService;
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @GetMapping(value = "/cnbg/task/check/stat")
|
|
|
+ public R<List<Map<String, Object>>> taskCheckStat() {
|
|
|
+ List<Map<String, Object>> maps =
|
|
|
+ initMapper.taskCheckStat1().stream()
|
|
|
+ .filter(m -> !"其他".equals(m.get("node_sum_info").toString()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ return R.ok(maps);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @GetMapping(value = "/cnbg/test")
|
|
|
+ public R<String> cnbgInitTest() {
|
|
|
+ return R.ok("TEST:" + System.currentTimeMillis());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量同步指定的任务类型给所有企业
|
|
|
+ *
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/tasktype")
|
|
|
+ public R<?> taskTypeInit() {
|
|
|
+
|
|
|
+ List<WmTaskType> tempList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery().eq(WmTaskType::getTaskTypeLevel, "1"));
|
|
|
+
|
|
|
+ // List<WmTaskType> tempList = wmTaskTypeMapper.selectBatchIds(wmTaskTypes);
|
|
|
+
|
|
|
+ // 1.第一级是药企的情况
|
|
|
+ // List<SysDept> deptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
+ // .eq(SysDept::getLevel, 2));
|
|
|
+ List<SysDept> sysDepts1 = sysDeptMapper.listAllDept();
|
|
|
+ List<SysDept> deptList = new ArrayList<>();
|
|
|
+ if (CollectionUtil.isNotEmpty(sysDepts1)) {
|
|
|
+ deptList =
|
|
|
+ sysDepts1.stream()
|
|
|
+ .filter(sysDept -> sysDept.getLevel().equals(2))
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量同步指定的任务类型给所有企业
|
|
|
- *
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/tasktype")
|
|
|
- public R<?> taskTypeInit() {
|
|
|
-
|
|
|
- List<WmTaskType> tempList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery().eq(WmTaskType::getTaskTypeLevel, "1"));
|
|
|
-
|
|
|
- // List<WmTaskType> tempList = wmTaskTypeMapper.selectBatchIds(wmTaskTypes);
|
|
|
-
|
|
|
- // 1.第一级是药企的情况
|
|
|
-// List<SysDept> deptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
-// .eq(SysDept::getLevel, 2));
|
|
|
- List<SysDept> sysDepts1 = sysDeptMapper.listAllDept();
|
|
|
- List<SysDept> deptList = new ArrayList<>();
|
|
|
- if (CollectionUtil.isNotEmpty(sysDepts1)) {
|
|
|
- deptList = sysDepts1.stream()
|
|
|
- .filter(sysDept -> sysDept.getLevel().equals(2))
|
|
|
- .collect(Collectors.toList());
|
|
|
- }
|
|
|
- // 遍历药企
|
|
|
- for (SysDept dept : deptList) {
|
|
|
- // 生成药企任务类型
|
|
|
- WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntMapper.selectOne(Wrappers.<WmDaDrugEnt>lambdaQuery()
|
|
|
- .eq(WmDaDrugEnt::getDeptId, dept.getDeptId())
|
|
|
-// .eq(WmDaDrugEnt::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
- .eq(WmDaDrugEnt::getDelFlag, DelEnum.NOT_DEL.getVal()));
|
|
|
- if (wmDaDrugEnt == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (WmTaskType wmTaskType1 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setDurgentId(wmDaDrugEnt.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setTaskEntId(wmDaDrugEnt.getId());
|
|
|
- newOne.setDeptId(wmDaDrugEnt.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType1.getId());
|
|
|
- newOne.setRuleId(String.valueOf(wmDaDrugEnt.getId()));
|
|
|
- newOne.setParentId(wmTaskType1.getParentId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType1.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
- .eq(WmTaskType::getTaskTypeName, wmTaskType1.getTaskTypeName())
|
|
|
- .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
- .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
- .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 查询一级CSO
|
|
|
- List<SysDeptRelation> deptRelationList = sysDeptRelationMapper.selectList(Wrappers.<SysDeptRelation>lambdaQuery()
|
|
|
- .eq(SysDeptRelation::getAncestor, dept.getDeptId())
|
|
|
- .ne(SysDeptRelation::getDescendant, dept.getDeptId()));
|
|
|
- if (CollectionUtil.isEmpty(deptRelationList)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- List<Integer> oneCSODeptIdList = deptRelationList.stream()
|
|
|
- .map(SysDeptRelation::getDescendant)
|
|
|
- .collect(Collectors.toList());
|
|
|
- List<SysDept> oneCSODeptList = sysDeptMapper.selectByIds(oneCSODeptIdList);
|
|
|
-// List<SysDept> oneCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
-// .eq(SysDept::getParentId, dept.getDeptId())
|
|
|
-// .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
-// .eq(SysDept::getLevel, 3));
|
|
|
- for (SysDept oneCSODept : oneCSODeptList) {
|
|
|
- // 生成药企给一级CSO的任务类型
|
|
|
- WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
- .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
-// .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
- .eq(WmDaAgent::getDeptId, oneCSODept.getDeptId()));
|
|
|
- if (wmDaAgent == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (WmTaskType wmTaskType1 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
- newOne.setDurgentId(wmDaDrugEnt.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setRuleId("" + wmDaDrugEnt.getId() + wmDaAgent.getId());
|
|
|
- newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
- newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType1.getId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType1.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
- .eq(WmTaskType::getTaskTypeName, wmTaskType1.getTaskTypeName())
|
|
|
- .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
- .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
- .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
- // 生成一级CSO的任务类型
|
|
|
- for (WmTaskType wmTaskType2 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
- newOne.setRuleId(String.valueOf(wmDaAgent.getId()));
|
|
|
- newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType2.getId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
- .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
- .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
- .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
- .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 查询二级CSO
|
|
|
- List<SysDept> twoCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
- .eq(SysDept::getParentId, oneCSODept.getDeptId())
|
|
|
-// .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
- .eq(SysDept::getLevel, 4));
|
|
|
- for (SysDept twoCSODept : twoCSODeptList) {
|
|
|
- // 生成二级CSO任务类型
|
|
|
- WmDaAgent wmDaAgent2 = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
- .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
-// .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
- .eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
|
|
|
- if (wmDaAgent2 == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (WmTaskType wmTaskType2 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setLevel1Id(wmDaAgent2.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setTaskEntId(wmDaAgent2.getId());
|
|
|
- newOne.setRuleId(String.valueOf(wmDaAgent2.getId()));
|
|
|
- newOne.setDeptId(wmDaAgent2.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType2.getId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
- .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
- .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
- .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
- .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // 2.第一级是CSO的情况
|
|
|
-// List<SysDept> deptList2 = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
-// .eq(SysDept::getLevel, 3)
|
|
|
-// .isNull(SysDept::getParentId));
|
|
|
- List<SysDept> sysDepts = sysDeptMapper.listAllDept();
|
|
|
- List<SysDept> deptList2 = new ArrayList<>();
|
|
|
- if (CollectionUtil.isNotEmpty(sysDepts)) {
|
|
|
- deptList2 = sysDepts.stream()
|
|
|
- .filter(sysDept -> sysDept.getLevel().equals(3) && sysDept.getParentId() == null)
|
|
|
- .collect(Collectors.toList());
|
|
|
+ // 遍历药企
|
|
|
+ for (SysDept dept : deptList) {
|
|
|
+ // 生成药企任务类型
|
|
|
+ WmDaDrugEnt wmDaDrugEnt =
|
|
|
+ wmDaDrugEntMapper.selectOne(
|
|
|
+ Wrappers.<WmDaDrugEnt>lambdaQuery()
|
|
|
+ .eq(WmDaDrugEnt::getDeptId, dept.getDeptId())
|
|
|
+ // .eq(WmDaDrugEnt::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ .eq(WmDaDrugEnt::getDelFlag, DelEnum.NOT_DEL.getVal()));
|
|
|
+ if (wmDaDrugEnt == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (WmTaskType wmTaskType1 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setDurgentId(wmDaDrugEnt.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setTaskEntId(wmDaDrugEnt.getId());
|
|
|
+ newOne.setDeptId(wmDaDrugEnt.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType1.getId());
|
|
|
+ newOne.setRuleId(String.valueOf(wmDaDrugEnt.getId()));
|
|
|
+ newOne.setParentId(wmTaskType1.getParentId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType1.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeName, wmTaskType1.getTaskTypeName())
|
|
|
+ .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
+ .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
+ .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
}
|
|
|
- // 查询一级CSO
|
|
|
- for (SysDept oneCSODept : deptList2) {
|
|
|
- // 生成药企给一级CSO的任务类型
|
|
|
- WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询一级CSO
|
|
|
+ List<SysDeptRelation> deptRelationList =
|
|
|
+ sysDeptRelationMapper.selectList(
|
|
|
+ Wrappers.<SysDeptRelation>lambdaQuery()
|
|
|
+ .eq(SysDeptRelation::getAncestor, dept.getDeptId())
|
|
|
+ .ne(SysDeptRelation::getDescendant, dept.getDeptId()));
|
|
|
+ if (CollectionUtil.isEmpty(deptRelationList)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<Integer> oneCSODeptIdList =
|
|
|
+ deptRelationList.stream()
|
|
|
+ .map(SysDeptRelation::getDescendant)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<SysDept> oneCSODeptList = sysDeptMapper.selectByIds(oneCSODeptIdList);
|
|
|
+ // List<SysDept> oneCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
+ // .eq(SysDept::getParentId, dept.getDeptId())
|
|
|
+ // .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ // .eq(SysDept::getLevel, 3));
|
|
|
+ for (SysDept oneCSODept : oneCSODeptList) {
|
|
|
+ // 生成药企给一级CSO的任务类型
|
|
|
+ WmDaAgent wmDaAgent =
|
|
|
+ wmDaAgentMapper.selectOne(
|
|
|
+ Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
-// .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ // .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
.eq(WmDaAgent::getDeptId, oneCSODept.getDeptId()));
|
|
|
- if (wmDaAgent == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 生成一级CSO的任务类型
|
|
|
- for (WmTaskType wmTaskType2 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
- newOne.setRuleId(String.valueOf(wmDaAgent.getId()));
|
|
|
- newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType2.getId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ if (wmDaAgent == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (WmTaskType wmTaskType1 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
+ newOne.setDurgentId(wmDaDrugEnt.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setRuleId("" + wmDaDrugEnt.getId() + wmDaAgent.getId());
|
|
|
+ newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
+ newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType1.getId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType1.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeName, wmTaskType1.getTaskTypeName())
|
|
|
+ .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
+ .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
+ .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 生成一级CSO的任务类型
|
|
|
+ for (WmTaskType wmTaskType2 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
+ newOne.setRuleId(String.valueOf(wmDaAgent.getId()));
|
|
|
+ newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType2.getId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
+ .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
+ .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
+ .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询二级CSO
|
|
|
+ List<SysDept> twoCSODeptList =
|
|
|
+ sysDeptMapper.selectList(
|
|
|
+ Wrappers.<SysDept>lambdaQuery()
|
|
|
+ .eq(SysDept::getParentId, oneCSODept.getDeptId())
|
|
|
+ // .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ .eq(SysDept::getLevel, 4));
|
|
|
+ for (SysDept twoCSODept : twoCSODeptList) {
|
|
|
+ // 生成二级CSO任务类型
|
|
|
+ WmDaAgent wmDaAgent2 =
|
|
|
+ wmDaAgentMapper.selectOne(
|
|
|
+ Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
+ .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ // .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ .eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
|
|
|
+ if (wmDaAgent2 == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (WmTaskType wmTaskType2 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setLevel1Id(wmDaAgent2.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setTaskEntId(wmDaAgent2.getId());
|
|
|
+ newOne.setRuleId(String.valueOf(wmDaAgent2.getId()));
|
|
|
+ newOne.setDeptId(wmDaAgent2.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType2.getId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
.eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
.eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
.eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
.eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 查询二级CSO
|
|
|
- List<SysDept> twoCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
- .eq(SysDept::getParentId, oneCSODept.getDeptId())
|
|
|
-// .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
- .eq(SysDept::getLevel, 4));
|
|
|
- for (SysDept twoCSODept : twoCSODeptList) {
|
|
|
- // 生成二级CSO任务类型
|
|
|
- WmDaAgent wmDaAgent2 = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
- .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
-// .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
- .eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
|
|
|
- if (wmDaAgent2 == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (WmTaskType wmTaskType2 : tempList) {
|
|
|
- WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
- newOne.setCreateTime(null);
|
|
|
- newOne.setId(null);
|
|
|
- newOne.setLevel1Id(wmDaAgent2.getId());
|
|
|
- newOne.setTaskTypeLevel("2");
|
|
|
- newOne.setTaskEntId(wmDaAgent2.getId());
|
|
|
- newOne.setRuleId(String.valueOf(wmDaAgent2.getId()));
|
|
|
- newOne.setDeptId(wmDaAgent2.getDeptId());
|
|
|
- newOne.setStatus("0");
|
|
|
- newOne.setBaseId(wmTaskType2.getId());
|
|
|
- newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
- List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
- .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
- .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
- .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
- .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
- if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
- newOne.setCreateTime(LocalDateTime.now());
|
|
|
- wmTaskTypeMapper.insert(newOne);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
- return R.ok();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/user/area/{userId}")
|
|
|
- public R<Boolean> initUserArea(@PathVariable(value = "userId") Long userId) {
|
|
|
- List<SysAreaEntity> list = areaEntityService.list(Wrappers.<SysAreaEntity>lambdaQuery().eq(SysAreaEntity::getAreaStatus, true));
|
|
|
-
|
|
|
-
|
|
|
- Set<Long> collect = list.stream().mapToLong(SysAreaEntity::getAreaId).boxed().collect(Collectors.toSet());
|
|
|
-
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
- List<SysUserArea> collect1 = collect.stream().map(aId -> {
|
|
|
- SysUserArea userArea = new SysUserArea();
|
|
|
- userArea.setUserId(userId);
|
|
|
- userArea.setAreaId(aId);
|
|
|
- userArea.setCreateTime(now);
|
|
|
- return userArea;
|
|
|
-
|
|
|
- }).collect(Collectors.toList());
|
|
|
-
|
|
|
- userAreaService.saveBatch(collect1);
|
|
|
- return R.ok();
|
|
|
+ // 2.第一级是CSO的情况
|
|
|
+ // List<SysDept> deptList2 = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
|
|
|
+ // .eq(SysDept::getLevel, 3)
|
|
|
+ // .isNull(SysDept::getParentId));
|
|
|
+ List<SysDept> sysDepts = sysDeptMapper.listAllDept();
|
|
|
+ List<SysDept> deptList2 = new ArrayList<>();
|
|
|
+ if (CollectionUtil.isNotEmpty(sysDepts)) {
|
|
|
+ deptList2 =
|
|
|
+ sysDepts.stream()
|
|
|
+ .filter(sysDept -> sysDept.getLevel().equals(3) && sysDept.getParentId() == null)
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
-
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/user/area/batch")
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public R<Boolean> initUserArea() {
|
|
|
-
|
|
|
- List<SysUser> users = userService.list(Wrappers.<SysUser>lambdaQuery().gt(SysUser::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN)));
|
|
|
-
|
|
|
-
|
|
|
- List<SysAreaEntity> list = areaEntityService.list(Wrappers.<SysAreaEntity>lambdaQuery().eq(SysAreaEntity::getAreaStatus, true));
|
|
|
-
|
|
|
-
|
|
|
- Set<Long> collect = list.stream().mapToLong(SysAreaEntity::getAreaId).boxed().collect(Collectors.toSet());
|
|
|
-
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
-
|
|
|
- for (SysUser user : users) {
|
|
|
-
|
|
|
- List<SysUserArea> collect1 = collect.stream().map(aId -> {
|
|
|
- SysUserArea userArea = new SysUserArea();
|
|
|
- userArea.setUserId((long) user.getUserId());
|
|
|
- userArea.setAreaId(aId);
|
|
|
- userArea.setCreateTime(now);
|
|
|
- return userArea;
|
|
|
-
|
|
|
- }).collect(Collectors.toList());
|
|
|
- userAreaService.saveBatch(collect1);
|
|
|
+ // 查询一级CSO
|
|
|
+ for (SysDept oneCSODept : deptList2) {
|
|
|
+ // 生成药企给一级CSO的任务类型
|
|
|
+ WmDaAgent wmDaAgent =
|
|
|
+ wmDaAgentMapper.selectOne(
|
|
|
+ Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
+ .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ // .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ .eq(WmDaAgent::getDeptId, oneCSODept.getDeptId()));
|
|
|
+ if (wmDaAgent == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 生成一级CSO的任务类型
|
|
|
+ for (WmTaskType wmTaskType2 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setLevel1Id(wmDaAgent.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setTaskEntId(wmDaAgent.getId());
|
|
|
+ newOne.setRuleId(String.valueOf(wmDaAgent.getId()));
|
|
|
+ newOne.setDeptId(wmDaAgent.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType2.getId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
+ .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
+ .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
+ .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
}
|
|
|
-
|
|
|
- return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询二级CSO
|
|
|
+ List<SysDept> twoCSODeptList =
|
|
|
+ sysDeptMapper.selectList(
|
|
|
+ Wrappers.<SysDept>lambdaQuery()
|
|
|
+ .eq(SysDept::getParentId, oneCSODept.getDeptId())
|
|
|
+ // .eq(SysDept::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ .eq(SysDept::getLevel, 4));
|
|
|
+ for (SysDept twoCSODept : twoCSODeptList) {
|
|
|
+ // 生成二级CSO任务类型
|
|
|
+ WmDaAgent wmDaAgent2 =
|
|
|
+ wmDaAgentMapper.selectOne(
|
|
|
+ Wrappers.<WmDaAgent>lambdaQuery()
|
|
|
+ .eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.getVal())
|
|
|
+ // .eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ .eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
|
|
|
+ if (wmDaAgent2 == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (WmTaskType wmTaskType2 : tempList) {
|
|
|
+ WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
|
|
|
+ newOne.setCreateTime(null);
|
|
|
+ newOne.setId(null);
|
|
|
+ newOne.setLevel1Id(wmDaAgent2.getId());
|
|
|
+ newOne.setTaskTypeLevel("2");
|
|
|
+ newOne.setTaskEntId(wmDaAgent2.getId());
|
|
|
+ newOne.setRuleId(String.valueOf(wmDaAgent2.getId()));
|
|
|
+ newOne.setDeptId(wmDaAgent2.getDeptId());
|
|
|
+ newOne.setStatus("0");
|
|
|
+ newOne.setBaseId(wmTaskType2.getId());
|
|
|
+ newOne.setTaskReceiverType(wmTaskType2.getTaskReceiverType());
|
|
|
+ List<WmTaskType> taskTypeList =
|
|
|
+ wmTaskTypeMapper.selectList(
|
|
|
+ Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeName, wmTaskType2.getTaskTypeName())
|
|
|
+ .eq(WmTaskType::getRuleId, newOne.getRuleId())
|
|
|
+ .eq(WmTaskType::getDeptId, newOne.getDeptId())
|
|
|
+ .eq(WmTaskType::getTaskEntId, newOne.getTaskEntId()));
|
|
|
+ if (CollectionUtil.isEmpty(taskTypeList)) {
|
|
|
+ newOne.setCreateTime(LocalDateTime.now());
|
|
|
+ wmTaskTypeMapper.insert(newOne);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/user/area/{userId}")
|
|
|
+ public R<Boolean> initUserArea(@PathVariable(value = "userId") Long userId) {
|
|
|
+ List<SysAreaEntity> list =
|
|
|
+ areaEntityService.list(
|
|
|
+ Wrappers.<SysAreaEntity>lambdaQuery().eq(SysAreaEntity::getAreaStatus, true));
|
|
|
+
|
|
|
+ Set<Long> collect =
|
|
|
+ list.stream().mapToLong(SysAreaEntity::getAreaId).boxed().collect(Collectors.toSet());
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ List<SysUserArea> collect1 =
|
|
|
+ collect.stream()
|
|
|
+ .map(
|
|
|
+ aId -> {
|
|
|
+ SysUserArea userArea = new SysUserArea();
|
|
|
+ userArea.setUserId(userId);
|
|
|
+ userArea.setAreaId(aId);
|
|
|
+ userArea.setCreateTime(now);
|
|
|
+ return userArea;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ userAreaService.saveBatch(collect1);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/user/area/batch")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R<Boolean> initUserArea() {
|
|
|
+
|
|
|
+ List<SysUser> users =
|
|
|
+ userService.list(
|
|
|
+ Wrappers.<SysUser>lambdaQuery()
|
|
|
+ .gt(SysUser::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN)));
|
|
|
+
|
|
|
+ List<SysAreaEntity> list =
|
|
|
+ areaEntityService.list(
|
|
|
+ Wrappers.<SysAreaEntity>lambdaQuery().eq(SysAreaEntity::getAreaStatus, true));
|
|
|
+
|
|
|
+ Set<Long> collect =
|
|
|
+ list.stream().mapToLong(SysAreaEntity::getAreaId).boxed().collect(Collectors.toSet());
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+
|
|
|
+ for (SysUser user : users) {
|
|
|
+
|
|
|
+ List<SysUserArea> collect1 =
|
|
|
+ collect.stream()
|
|
|
+ .map(
|
|
|
+ aId -> {
|
|
|
+ SysUserArea userArea = new SysUserArea();
|
|
|
+ userArea.setUserId((long) user.getUserId());
|
|
|
+ userArea.setAreaId(aId);
|
|
|
+ userArea.setCreateTime(now);
|
|
|
+ return userArea;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ userAreaService.saveBatch(collect1);
|
|
|
}
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/cache/clean")
|
|
|
- public R<Boolean> clean(@RequestBody Map<String, Object> params) {
|
|
|
-
|
|
|
-
|
|
|
- Object o = params.get("username");
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
|
|
|
- final String errorKey = "login:error:lock:" + o;
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/cache/clean")
|
|
|
+ public R<Boolean> clean(@RequestBody Map<String, Object> params) {
|
|
|
|
|
|
- if (Boolean.TRUE.equals(redisTemplate.hasKey(errorKey))) {
|
|
|
- Boolean delete = redisTemplate.delete(errorKey);
|
|
|
+ Object o = params.get("username");
|
|
|
|
|
|
- return R.ok(delete);
|
|
|
- } else {
|
|
|
- return R.ok(false, "key:" + errorKey + ",不存在");
|
|
|
- }
|
|
|
+ final String errorKey = "login:error:lock:" + o;
|
|
|
|
|
|
+ if (Boolean.TRUE.equals(redisTemplate.hasKey(errorKey))) {
|
|
|
+ Boolean delete = redisTemplate.delete(errorKey);
|
|
|
|
|
|
+ return R.ok(delete);
|
|
|
+ } else {
|
|
|
+ return R.ok(false, "key:" + errorKey + ",不存在");
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/pkg/contract/create")
|
|
|
- public R<Boolean> sendPkgContractEvent(@RequestBody Map<String, Object> params) {
|
|
|
- Integer pkgId = (Integer) params.get("pkgId");
|
|
|
-
|
|
|
- List<WmPackageTaskTypeQty> list = packageTaskTypeQtyService.list(Wrappers.<WmPackageTaskTypeQty>lambdaQuery().eq(WmPackageTaskTypeQty::getPackageId, pkgId).orderByDesc(WmPackageTaskTypeQty::getCreateTime));
|
|
|
-
|
|
|
- if (CollectionUtil.isEmpty(list)) {
|
|
|
- return R.failed(Boolean.FALSE, "不存在任务数量明细");
|
|
|
- }
|
|
|
-
|
|
|
- Map<LocalDateTime, List<WmPackageTaskTypeQty>> collect = list.stream().collect(Collectors.groupingBy(WmPackageTaskTypeQty::getCreateTime));
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
- LocalDateTime localDateTime = collect.keySet().stream().max(Comparator.comparing(item -> Math.abs(LocalDateTimeUtil.between(now, item).getSeconds()))).orElse(null);
|
|
|
-
|
|
|
- PackageContractEvent event = new PackageContractEvent();
|
|
|
- event.setPackageId(pkgId);
|
|
|
- event.setTaskTypeQtiyList(collect.get(localDateTime));
|
|
|
- event.setCreator("admin");
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/pkg/contract/create")
|
|
|
+ public R<Boolean> sendPkgContractEvent(@RequestBody Map<String, Object> params) {
|
|
|
+ Integer pkgId = (Integer) params.get("pkgId");
|
|
|
|
|
|
- applicationEventPublisher.publishEvent(event);
|
|
|
+ List<WmPackageTaskTypeQty> list =
|
|
|
+ packageTaskTypeQtyService.list(
|
|
|
+ Wrappers.<WmPackageTaskTypeQty>lambdaQuery()
|
|
|
+ .eq(WmPackageTaskTypeQty::getPackageId, pkgId)
|
|
|
+ .orderByDesc(WmPackageTaskTypeQty::getCreateTime));
|
|
|
|
|
|
- return R.ok(Boolean.TRUE, "合同生成事件已发送");
|
|
|
+ if (CollectionUtil.isEmpty(list)) {
|
|
|
+ return R.failed(Boolean.FALSE, "不存在任务数量明细");
|
|
|
}
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @GetMapping(value = "/cnbg/task/content/update")
|
|
|
- public R<Boolean> init1() {
|
|
|
-
|
|
|
- List<SysLog> logs = logService.list(Wrappers.<SysLog>lambdaQuery()
|
|
|
+ Map<LocalDateTime, List<WmPackageTaskTypeQty>> collect =
|
|
|
+ list.stream().collect(Collectors.groupingBy(WmPackageTaskTypeQty::getCreateTime));
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ LocalDateTime localDateTime =
|
|
|
+ collect.keySet().stream()
|
|
|
+ .max(
|
|
|
+ Comparator.comparing(
|
|
|
+ item -> Math.abs(LocalDateTimeUtil.between(now, item).getSeconds())))
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ PackageContractEvent event = new PackageContractEvent();
|
|
|
+ event.setPackageId(pkgId);
|
|
|
+ event.setTaskTypeQtiyList(collect.get(localDateTime));
|
|
|
+ event.setCreator("admin");
|
|
|
+
|
|
|
+ applicationEventPublisher.publishEvent(event);
|
|
|
+
|
|
|
+ return R.ok(Boolean.TRUE, "合同生成事件已发送");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @GetMapping(value = "/cnbg/task/content/update")
|
|
|
+ public R<Boolean> init1() {
|
|
|
+
|
|
|
+ List<SysLog> logs =
|
|
|
+ logService.list(
|
|
|
+ Wrappers.<SysLog>lambdaQuery()
|
|
|
.ge(SysLog::getCreateTime, LocalDateTime.of(2024, 11, 10, 0, 0, 0))
|
|
|
.eq(SysLog::getTitle, "新增任务内容表"));
|
|
|
|
|
|
+ if (CollUtil.isEmpty(logs)) {
|
|
|
+ return R.ok(Boolean.TRUE, "不存在日志");
|
|
|
+ }
|
|
|
|
|
|
- if (CollUtil.isEmpty(logs)) {
|
|
|
- return R.ok(Boolean.TRUE, "不存在日志");
|
|
|
- }
|
|
|
-
|
|
|
- List<String> collect = logs.stream().map(SysLog::getParams).filter(StrUtil::isNotBlank).collect(Collectors.toList());
|
|
|
-
|
|
|
-
|
|
|
- if (CollUtil.isEmpty(collect)) {
|
|
|
-
|
|
|
- return R.ok(Boolean.TRUE, "日志参数不存在");
|
|
|
- }
|
|
|
-
|
|
|
- Set<String> ttIds = Set.of("2", "3", "4");
|
|
|
- Map<String, WmTaskContent> tempContent = collect.stream()
|
|
|
- // json 2 bean
|
|
|
- .map(p -> JSONUtil.toBean(p, WmTaskContent.class))
|
|
|
- // 获取修复的类型
|
|
|
- .filter(tc -> ttIds.contains(tc.getTemp30()))
|
|
|
- // temp10分组
|
|
|
- .collect(Collectors.toMap(WmTaskContent::getTemp10, Function.identity(), (v1, v2) -> v2));
|
|
|
+ List<String> collect =
|
|
|
+ logs.stream()
|
|
|
+ .map(SysLog::getParams)
|
|
|
+ .filter(StrUtil::isNotBlank)
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
+ if (CollUtil.isEmpty(collect)) {
|
|
|
|
|
|
- // List<String> tcIds = taskService.list(Wrappers.<WmTask>lambdaQuery().ge(WmTask::getCreateTime, LocalDateTime.of(2024, 11, 10, 0, 0, 0)))
|
|
|
- // .stream().map(WmTask::getTaskContentId).sorted().collect(Collectors.toList());
|
|
|
+ return R.ok(Boolean.TRUE, "日志参数不存在");
|
|
|
+ }
|
|
|
|
|
|
- List<WmTaskContent> taskContents = taskContentService.list(Wrappers.<WmTaskContent>lambdaQuery()
|
|
|
+ Set<String> ttIds = Set.of("2", "3", "4");
|
|
|
+ Map<String, WmTaskContent> tempContent =
|
|
|
+ collect.stream()
|
|
|
+ // json 2 bean
|
|
|
+ .map(p -> JSONUtil.toBean(p, WmTaskContent.class))
|
|
|
+ // 获取修复的类型
|
|
|
+ .filter(tc -> ttIds.contains(tc.getTemp30()))
|
|
|
+ // temp10分组
|
|
|
+ .collect(
|
|
|
+ Collectors.toMap(WmTaskContent::getTemp10, Function.identity(), (v1, v2) -> v2));
|
|
|
+
|
|
|
+ // List<String> tcIds =
|
|
|
+ // taskService.list(Wrappers.<WmTask>lambdaQuery().ge(WmTask::getCreateTime,
|
|
|
+ // LocalDateTime.of(2024, 11, 10, 0, 0, 0)))
|
|
|
+ // .stream().map(WmTask::getTaskContentId).sorted().collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<WmTaskContent> taskContents =
|
|
|
+ taskContentService.list(
|
|
|
+ Wrappers.<WmTaskContent>lambdaQuery()
|
|
|
// .in(WmTaskContent::getId, tcIds)
|
|
|
.in(WmTaskContent::getTemp30, ttIds));
|
|
|
|
|
|
+ List<WmTaskContent> updateed = new LinkedList<>();
|
|
|
|
|
|
- List<WmTaskContent> updateed = new LinkedList<>();
|
|
|
+ for (WmTaskContent taskContent : taskContents) {
|
|
|
|
|
|
- for (WmTaskContent taskContent : taskContents) {
|
|
|
+ String temp10 = taskContent.getTemp10();
|
|
|
|
|
|
- String temp10 = taskContent.getTemp10();
|
|
|
+ WmTaskContent params = tempContent.get(temp10);
|
|
|
|
|
|
- WmTaskContent params = tempContent.get(temp10);
|
|
|
-
|
|
|
- if (params == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- String temp17 = params.getTemp17();
|
|
|
+ if (params == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String temp17 = params.getTemp17();
|
|
|
|
|
|
+ if (StrUtil.isBlank(temp17)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ WmTaskContent newOne = new WmTaskContent();
|
|
|
+ newOne.setId(taskContent.getId());
|
|
|
+ newOne.setTemp27(temp17);
|
|
|
+ updateed.add(newOne);
|
|
|
+ }
|
|
|
|
|
|
- if (StrUtil.isBlank(temp17)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- WmTaskContent newOne = new WmTaskContent();
|
|
|
- newOne.setId(taskContent.getId());
|
|
|
- newOne.setTemp27(temp17);
|
|
|
- updateed.add(newOne);
|
|
|
+ taskContentService.updateBatchById(updateed);
|
|
|
|
|
|
- }
|
|
|
+ log.info("updateed:{}", JSONUtil.toJsonStr(updateed));
|
|
|
+ return R.ok(Boolean.TRUE, updateed.size() + "");
|
|
|
+ }
|
|
|
|
|
|
+ @Inner(value = false)
|
|
|
+ @PostMapping(value = "/cnbg/del/dup/task")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R<Map<String, Collection<String>>> delDupTaskContent(
|
|
|
+ @RequestExcel(ignoreEmptyRow = true) List<WmTaskDupModel> dup) {
|
|
|
|
|
|
- taskContentService.updateBatchById(updateed);
|
|
|
-
|
|
|
- log.info("updateed:{}", JSONUtil.toJsonStr(updateed));
|
|
|
- return R.ok(Boolean.TRUE, updateed.size() + "");
|
|
|
+ if (CollUtil.isEmpty(dup)) {
|
|
|
+ return R.ok(Collections.EMPTY_MAP, "重复数据集为空");
|
|
|
}
|
|
|
|
|
|
+ List<WmTask> targetTasks = new LinkedList<>();
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @PostMapping(value = "/cnbg/del/dup/task")
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public R<Map<String, Collection<String>>> delDupTaskContent(@RequestExcel(ignoreEmptyRow = true) List<WmTaskDupModel> dup) {
|
|
|
+ // 排序去重 && 获取重复的任务记录
|
|
|
+ List<String> taskNumbers =
|
|
|
+ dup.stream()
|
|
|
+ .map(WmTaskDupModel::getTaskNumber)
|
|
|
+ .distinct()
|
|
|
+ .sorted()
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
+ List<List<String>> partition = Lists.partition(taskNumbers, 100);
|
|
|
|
|
|
- if (CollUtil.isEmpty(dup)) {
|
|
|
- return R.ok(Collections.EMPTY_MAP, "重复数据集为空");
|
|
|
- }
|
|
|
+ for (List<String> numberList : partition) {
|
|
|
|
|
|
+ List<WmTask> temp =
|
|
|
+ taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getTaskNumber, numberList));
|
|
|
+ targetTasks.addAll(temp);
|
|
|
+ }
|
|
|
|
|
|
- List<WmTask> targetTasks = new LinkedList<>();
|
|
|
+ Map<String, WmTask> tcIds2TaskMap =
|
|
|
+ targetTasks.stream()
|
|
|
+ .collect(Collectors.toMap(WmTask::getTaskContentId, Function.identity()));
|
|
|
+ Map<String, WmTask> tIds2TaskMap =
|
|
|
+ targetTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
|
|
|
- // 排序去重 && 获取重复的任务记录
|
|
|
- List<String> taskNumbers = dup.stream().map(WmTaskDupModel::getTaskNumber).distinct().sorted().collect(Collectors.toList());
|
|
|
+ // 获取重复任务的任务内容
|
|
|
+ List<WmTaskContent> taskContents = new LinkedList<>();
|
|
|
|
|
|
- List<List<String>> partition = Lists.partition(taskNumbers, 100);
|
|
|
+ List<List<String>> partition1 = Lists.partition(new ArrayList<>(tcIds2TaskMap.keySet()), 100);
|
|
|
|
|
|
- for (List<String> numberList : partition) {
|
|
|
+ for (List<String> numberList : partition1) {
|
|
|
+ List<WmTaskContent> byId = taskContentService.listByIds(numberList);
|
|
|
+ taskContents.addAll(byId);
|
|
|
+ }
|
|
|
|
|
|
- List<WmTask> temp = taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getTaskNumber, numberList));
|
|
|
- targetTasks.addAll(temp);
|
|
|
+ Map<String, List<WmTaskContent>> collect =
|
|
|
+ taskContents.stream().collect(Collectors.groupingBy(this::getContentStr));
|
|
|
+
|
|
|
+ // 要保留的数据
|
|
|
+ Set<String> tIds = new HashSet<>();
|
|
|
+ Set<String> tcIds = new HashSet<>();
|
|
|
+ for (Map.Entry<String, List<WmTaskContent>> entry : collect.entrySet()) {
|
|
|
+ List<WmTaskContent> value = entry.getValue();
|
|
|
+
|
|
|
+ if (value.size() < 2) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<WmTask> tempTasks = new LinkedList<>();
|
|
|
+ for (WmTaskContent taskContent : value) {
|
|
|
+
|
|
|
+ String tcId = taskContent.getId().toString();
|
|
|
+ WmTask task = tcIds2TaskMap.get(tcId);
|
|
|
+
|
|
|
+ tempTasks.add(task);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Boolean, List<WmTask>> statusMap =
|
|
|
+ tempTasks.stream()
|
|
|
+ .collect(
|
|
|
+ Collectors.partitioningBy(
|
|
|
+ t -> UpmsState.TaskState.REJECTED.getState().equals(t.getTaskStatus())));
|
|
|
+ List<WmTask> rejected = statusMap.get(true);
|
|
|
+ List<WmTask> others = statusMap.get(false);
|
|
|
+ // 如果全是拒绝的
|
|
|
+ if (CollUtil.isEmpty(others)) {
|
|
|
+ tIds.add(rejected.get(0).getId());
|
|
|
+ tcIds.add(rejected.get(0).getTaskContentId());
|
|
|
+ }
|
|
|
+ // 部分拒绝的
|
|
|
+ else {
|
|
|
+ Map<Boolean, List<WmTask>> passedAndPending =
|
|
|
+ others.stream()
|
|
|
+ .collect(
|
|
|
+ Collectors.partitioningBy(
|
|
|
+ t -> UpmsState.TaskState.PASSED.getState().equals(t.getTaskStatus())));
|
|
|
+ List<WmTask> passed = passedAndPending.get(true);
|
|
|
+ List<WmTask> pending = passedAndPending.get(false);
|
|
|
+ if (CollUtil.isNotEmpty(passed)) {
|
|
|
+ tIds.add(passed.get(0).getId());
|
|
|
+ tcIds.add(passed.get(0).getTaskContentId());
|
|
|
+ } else {
|
|
|
+ if (CollUtil.isNotEmpty(pending)) {
|
|
|
+ tIds.add(pending.get(0).getId());
|
|
|
+ tcIds.add(pending.get(0).getTaskContentId());
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- Map<String, WmTask> tcIds2TaskMap = targetTasks.stream().collect(Collectors.toMap(WmTask::getTaskContentId, Function.identity()));
|
|
|
- Map<String, WmTask> tIds2TaskMap = targetTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
-
|
|
|
-
|
|
|
- // 获取重复任务的任务内容
|
|
|
- List<WmTaskContent> taskContents = new LinkedList<>();
|
|
|
-
|
|
|
- List<List<String>> partition1 = Lists.partition(new ArrayList<>(tcIds2TaskMap.keySet()), 100);
|
|
|
-
|
|
|
- for (List<String> numberList : partition1) {
|
|
|
- List<WmTaskContent> byId = taskContentService.listByIds(numberList);
|
|
|
- taskContents.addAll(byId);
|
|
|
+ Collection<String> disForTask = CollUtil.disjunction(tIds, tIds2TaskMap.keySet());
|
|
|
+ Collection<String> disForTaskContent = CollUtil.disjunction(tcIds, tcIds2TaskMap.keySet());
|
|
|
+
|
|
|
+ Map<String, Collection<String>> rest = new LinkedHashMap<>(4);
|
|
|
+
|
|
|
+ rest.put("disForTask", disForTask);
|
|
|
+ rest.put("availForTask", tIds);
|
|
|
+ rest.put("availForTaskContent", tcIds);
|
|
|
+ rest.put("disForTaskContent", disForTaskContent);
|
|
|
+
|
|
|
+ return R.ok(rest, Boolean.TRUE.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getContentStr(WmTaskContent content) {
|
|
|
+
|
|
|
+ return content.getTemp1()
|
|
|
+ + content.getTemp2()
|
|
|
+ + content.getTemp3()
|
|
|
+ + content.getTemp4()
|
|
|
+ + content.getTemp5()
|
|
|
+ + content.getTemp6()
|
|
|
+ + content.getTemp7()
|
|
|
+ + content.getTemp8()
|
|
|
+ + content.getTemp9()
|
|
|
+ + content.getTemp10()
|
|
|
+ + content.getTemp11()
|
|
|
+ + content.getTemp12()
|
|
|
+ + content.getTemp13()
|
|
|
+ + content.getTemp14()
|
|
|
+ + content.getTemp15()
|
|
|
+ + content.getTemp16()
|
|
|
+ + content.getTemp17()
|
|
|
+ + content.getTemp18()
|
|
|
+ + content.getTemp19()
|
|
|
+ + content.getTemp20()
|
|
|
+ + content.getTemp21()
|
|
|
+ + content.getTemp22()
|
|
|
+ + content.getTemp23()
|
|
|
+ + content.getTemp24()
|
|
|
+ + content.getTemp25()
|
|
|
+ + content.getTemp26()
|
|
|
+ + content.getTemp27()
|
|
|
+ + content.getTemp28()
|
|
|
+ + content.getTemp29()
|
|
|
+ + content.getTemp30()
|
|
|
+ + content.getTemp31()
|
|
|
+ + content.getTemp32();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @GetMapping(value = "/cnbg/del/dup/task/check-rec1")
|
|
|
+ public R<List<Integer>> delDupTaskCheck1() {
|
|
|
+
|
|
|
+ List<SysCheckChainNodeCheckHistory> all = checkChainNodeCheckHistoryService.list();
|
|
|
+
|
|
|
+ // 任务ID2List
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> collect =
|
|
|
+ all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
+
|
|
|
+ List<Integer> dupHis = new LinkedList<>();
|
|
|
+
|
|
|
+ for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> entry : collect.entrySet()) {
|
|
|
+
|
|
|
+ // 任务的审核节点记录
|
|
|
+ List<SysCheckChainNodeCheckHistory> value = entry.getValue();
|
|
|
+
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeColl =
|
|
|
+ value.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
+
|
|
|
+ for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> nodeEntry :
|
|
|
+ nodeColl.entrySet()) {
|
|
|
+ List<SysCheckChainNodeCheckHistory> nodes = nodeEntry.getValue();
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(nodes)) {
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- Map<String, List<WmTaskContent>> collect = taskContents.stream().collect(Collectors.groupingBy(this::getContentStr));
|
|
|
-
|
|
|
- // 要保留的数据
|
|
|
- Set<String> tIds = new HashSet<>();
|
|
|
- Set<String> tcIds = new HashSet<>();
|
|
|
- for (Map.Entry<String, List<WmTaskContent>> entry : collect.entrySet()) {
|
|
|
- List<WmTaskContent> value = entry.getValue();
|
|
|
-
|
|
|
- if (value.size() < 2) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- List<WmTask> tempTasks = new LinkedList<>();
|
|
|
- for (WmTaskContent taskContent : value) {
|
|
|
-
|
|
|
- String tcId = taskContent.getId().toString();
|
|
|
- WmTask task = tcIds2TaskMap.get(tcId);
|
|
|
-
|
|
|
- tempTasks.add(task);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- Map<Boolean, List<WmTask>> statusMap = tempTasks.stream().collect(Collectors.partitioningBy(t -> UpmsState.TaskState.REJECTED.getState().equals(t.getTaskStatus())));
|
|
|
- List<WmTask> rejected = statusMap.get(true);
|
|
|
- List<WmTask> others = statusMap.get(false);
|
|
|
- // 如果全是拒绝的
|
|
|
- if (CollUtil.isEmpty(others)) {
|
|
|
- tIds.add(rejected.get(0).getId());
|
|
|
- tcIds.add(rejected.get(0).getTaskContentId());
|
|
|
- }
|
|
|
- // 部分拒绝的
|
|
|
- else {
|
|
|
- Map<Boolean, List<WmTask>> passedAndPending = others.stream().collect(Collectors.partitioningBy(t -> UpmsState.TaskState.PASSED.getState().equals(t.getTaskStatus())));
|
|
|
- List<WmTask> passed = passedAndPending.get(true);
|
|
|
- List<WmTask> pending = passedAndPending.get(false);
|
|
|
- if (CollUtil.isNotEmpty(passed)) {
|
|
|
- tIds.add(passed.get(0).getId());
|
|
|
- tcIds.add(passed.get(0).getTaskContentId());
|
|
|
- } else {
|
|
|
- if (CollUtil.isNotEmpty(pending)) {
|
|
|
- tIds.add(pending.get(0).getId());
|
|
|
- tcIds.add(pending.get(0).getTaskContentId());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ if (nodes.size() == 1) {
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- Collection<String> disForTask = CollUtil.disjunction(tIds, tIds2TaskMap.keySet());
|
|
|
- Collection<String> disForTaskContent = CollUtil.disjunction(tcIds, tcIds2TaskMap.keySet());
|
|
|
-
|
|
|
- Map<String, Collection<String>> rest = new LinkedHashMap<>(4);
|
|
|
-
|
|
|
- rest.put("disForTask", disForTask);
|
|
|
- rest.put("availForTask", tIds);
|
|
|
- rest.put("availForTaskContent", tcIds);
|
|
|
- rest.put("disForTaskContent", disForTaskContent);
|
|
|
-
|
|
|
- return R.ok(rest, Boolean.TRUE.toString());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private String getContentStr(WmTaskContent content) {
|
|
|
-
|
|
|
- return content.getTemp1() +
|
|
|
- content.getTemp2() +
|
|
|
- content.getTemp3() +
|
|
|
- content.getTemp4() +
|
|
|
- content.getTemp5() +
|
|
|
- content.getTemp6() +
|
|
|
- content.getTemp7() +
|
|
|
- content.getTemp8() +
|
|
|
- content.getTemp9() +
|
|
|
- content.getTemp10() +
|
|
|
- content.getTemp11() +
|
|
|
- content.getTemp12() +
|
|
|
- content.getTemp13() +
|
|
|
- content.getTemp14() +
|
|
|
- content.getTemp15() +
|
|
|
- content.getTemp16() +
|
|
|
- content.getTemp17() +
|
|
|
- content.getTemp18() +
|
|
|
- content.getTemp19() +
|
|
|
- content.getTemp20() +
|
|
|
- content.getTemp21() +
|
|
|
- content.getTemp22() +
|
|
|
- content.getTemp23() +
|
|
|
- content.getTemp24() +
|
|
|
- content.getTemp25() +
|
|
|
- content.getTemp26() +
|
|
|
- content.getTemp27() +
|
|
|
- content.getTemp28() +
|
|
|
- content.getTemp29() +
|
|
|
- content.getTemp30() +
|
|
|
- content.getTemp31() +
|
|
|
- content.getTemp32();
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Inner(value = false)
|
|
|
- @GetMapping(value = "/cnbg/del/dup/task/check-rec1")
|
|
|
- public R<List<Integer>> delDupTaskCheck1() {
|
|
|
-
|
|
|
- List<SysCheckChainNodeCheckHistory> all = checkChainNodeCheckHistoryService.list();
|
|
|
-
|
|
|
- // 任务ID2List
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> collect = all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
-
|
|
|
-
|
|
|
- List<Integer> dupHis = new LinkedList<>();
|
|
|
-
|
|
|
- for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> entry : collect.entrySet()) {
|
|
|
-
|
|
|
- // 任务的审核节点记录
|
|
|
- List<SysCheckChainNodeCheckHistory> value = entry.getValue();
|
|
|
-
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeColl = value.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
-
|
|
|
- for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> nodeEntry : nodeColl.entrySet()) {
|
|
|
- List<SysCheckChainNodeCheckHistory> nodes = nodeEntry.getValue();
|
|
|
-
|
|
|
- if (CollUtil.isEmpty(nodes)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (nodes.size() == 1) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- for (int i = 0, size = nodes.size(); i < size; i++) {
|
|
|
- if (i == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- dupHis.add(nodes.get(i).getHistoryId());
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ for (int i = 0, size = nodes.size(); i < size; i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ dupHis.add(nodes.get(i).getHistoryId());
|
|
|
}
|
|
|
-
|
|
|
- // checkChainNodeCheckHistoryService.removeByIds(dupHis.stream().sorted().collect(Collectors.toList()));
|
|
|
-
|
|
|
- return R.ok(dupHis.stream().sorted().collect(Collectors.toList()));
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- @Inner(value = false)
|
|
|
- @GetMapping(value = "/cnbg/del/dup/task/check-rec2")
|
|
|
- public R<Map<String, Object>> delDupTaskCheck2() {
|
|
|
+ // checkChainNodeCheckHistoryService.removeByIds(dupHis.stream().sorted().collect(Collectors.toList()));
|
|
|
|
|
|
- List<SysCheckChainNodeCheckHistory> all = checkChainNodeCheckHistoryService.list();
|
|
|
+ return R.ok(dupHis.stream().sorted().collect(Collectors.toList()));
|
|
|
+ }
|
|
|
|
|
|
- // 任务ID2List
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> collect = all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
+ @Inner(value = false)
|
|
|
+ @GetMapping(value = "/cnbg/del/dup/task/check-rec2")
|
|
|
+ public R<Map<String, Object>> delDupTaskCheck2() {
|
|
|
|
|
|
+ List<SysCheckChainNodeCheckHistory> all = checkChainNodeCheckHistoryService.list();
|
|
|
|
|
|
- // 需要保存的审核节点
|
|
|
- List<Integer> keep = new LinkedList<>();
|
|
|
- // 需要改掉状态的任务
|
|
|
- List<String> rejTaskId = new LinkedList<>();
|
|
|
+ // 任务ID2List
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> collect =
|
|
|
+ all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
|
|
|
- for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> entry : collect.entrySet()) {
|
|
|
+ // 需要保存的审核节点
|
|
|
+ List<Integer> keep = new LinkedList<>();
|
|
|
+ // 需要改掉状态的任务
|
|
|
+ List<String> rejTaskId = new LinkedList<>();
|
|
|
|
|
|
- String taskId = entry.getKey().toString();
|
|
|
+ for (Map.Entry<Integer, List<SysCheckChainNodeCheckHistory>> entry : collect.entrySet()) {
|
|
|
|
|
|
- List<SysCheckChainNodeCheckHistory> value = entry.getValue().stream().sorted(Comparator.comparingInt(SysCheckChainNodeCheckHistory::getHistoryId)).collect(Collectors.toList());
|
|
|
+ String taskId = entry.getKey().toString();
|
|
|
|
|
|
- for (SysCheckChainNodeCheckHistory history : value) {
|
|
|
+ List<SysCheckChainNodeCheckHistory> value =
|
|
|
+ entry.getValue().stream()
|
|
|
+ .sorted(Comparator.comparingInt(SysCheckChainNodeCheckHistory::getHistoryId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- keep.add(history.getHistoryId());
|
|
|
+ for (SysCheckChainNodeCheckHistory history : value) {
|
|
|
|
|
|
- if (!history.getCheckResult()) {
|
|
|
- rejTaskId.add(taskId);
|
|
|
- break;
|
|
|
- }
|
|
|
+ keep.add(history.getHistoryId());
|
|
|
|
|
|
- }
|
|
|
+ if (!history.getCheckResult()) {
|
|
|
+ rejTaskId.add(taskId);
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
- // 取节点差集(要删除的)
|
|
|
- Set<Integer> allHisIds = all.stream().mapToInt(SysCheckChainNodeCheckHistory::getHistoryId).boxed().collect(Collectors.toSet());
|
|
|
- Collection<Integer> need2Del = CollUtil.subtract(allHisIds, keep);
|
|
|
- // checkChainNodeCheckHistoryService.removeByIds(need2Del.stream().distinct().sorted().collect(Collectors.toList()));
|
|
|
-
|
|
|
- // taskService.update(Wrappers.<WmTask>lambdaUpdate().set(WmTask::getTaskStatus, UpmsState.TaskState.REJECTED.getState()).in(WmTask::getId, rejTaskId));
|
|
|
-
|
|
|
-
|
|
|
- Map<String, Object> res = new HashMap<>(2);
|
|
|
- res.put("need2Del", need2Del);
|
|
|
- res.put("rejTaskId", rejTaskId);
|
|
|
-
|
|
|
- return R.ok(res);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- @Inner(value = false)
|
|
|
- @ResponseExcel(name = "taskCheckExcel", sheets = {@Sheet(sheetName = "汇总信息")})
|
|
|
- @GetMapping(value = "/cnbg/init/task/check/export")
|
|
|
- public List<TaskCheckExcelModel> exportTaskCheckExcel() {
|
|
|
-
|
|
|
- LocalDateTime endTime = LocalDateTime.of(2025, 1, 6, 8, 0, 0);
|
|
|
-
|
|
|
- // 任务数量
|
|
|
- List<WmTask> total = taskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
- .between(WmTask::getCreateTime,
|
|
|
- LocalDateTime.of(2024, 10, 14, 0, 0, 0),
|
|
|
- endTime));
|
|
|
-
|
|
|
- int taskCount = total.size();
|
|
|
-
|
|
|
- // 积分包数量
|
|
|
- Set<String> pkgIds = total.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
|
|
|
-
|
|
|
- int pkgCount = pkgIds.size();
|
|
|
-
|
|
|
-
|
|
|
- // 审核信息
|
|
|
- List<SysCheckChainNodeCheckHistory> all = checkChainNodeCheckHistoryService.list(Wrappers.<SysCheckChainNodeCheckHistory>lambdaQuery().orderByAsc(SysCheckChainNodeCheckHistory::getHistoryId));
|
|
|
-
|
|
|
-
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> taskId2HisMap = all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
-
|
|
|
-
|
|
|
- int vendorUnfinishedCount = 0;
|
|
|
- long vendorUnfinishedTime = 0L;
|
|
|
-
|
|
|
- int cityUnfinishedCount = 0;
|
|
|
- long cityUnfinishedTime = 0L;
|
|
|
-
|
|
|
- int provUnfinishedCount = 0;
|
|
|
- long provUnfinishedTime = 0L;
|
|
|
-
|
|
|
- int deptUnfinishedCount = 0;
|
|
|
- long deptUnfinishedTime = 0L;
|
|
|
-
|
|
|
-
|
|
|
- int marketUnfinishedCount = 0;
|
|
|
- long marketUnfinishedTime = 0L;
|
|
|
-
|
|
|
- int bizUnfinishedCount = 0;
|
|
|
- long bizUnfinishedTime = 0L;
|
|
|
-
|
|
|
-
|
|
|
- int leaderUnfinishedCount = 0;
|
|
|
- long leaderUnfinishedTime = 0L;
|
|
|
-
|
|
|
- int mgrUnfinishedCount = 0;
|
|
|
- long mgrUnfinishedTime = 0L;
|
|
|
-
|
|
|
-
|
|
|
- // 循环遍历任务
|
|
|
- for (WmTask task : total) {
|
|
|
-
|
|
|
- Integer tId = Integer.valueOf(task.getId());
|
|
|
-
|
|
|
- // 获取当前任务的审核记录
|
|
|
- List<SysCheckChainNodeCheckHistory> sysCheckChainNodeCheckHistories = taskId2HisMap.get(tId);
|
|
|
-
|
|
|
- // 不存在审核历史说明卡在服务商管理员
|
|
|
- if (CollUtil.isEmpty(sysCheckChainNodeCheckHistories)) {
|
|
|
- vendorUnfinishedCount++;
|
|
|
- vendorUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- }
|
|
|
- // 判断其他节点
|
|
|
- else {
|
|
|
-
|
|
|
- // 按节点分组
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeId2HisMap = sysCheckChainNodeCheckHistories.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
-
|
|
|
- // // 最大的节点
|
|
|
- // int maxNodeId = nodeId2HisMap.keySet().stream().max(Comparator.comparingInt(Integer::valueOf)).get();
|
|
|
- //
|
|
|
- // // 地市没有审核
|
|
|
- // if (maxNodeId == 1) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // cityUnfinishedCount++;
|
|
|
- // cityUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- // // 区域没有审核
|
|
|
- // if (maxNodeId == 2) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // provUnfinishedCount++;
|
|
|
- // provUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- // // 商务组或者市场组审核
|
|
|
- // if (maxNodeId == 3 ) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // deptUnfinishedCount++;
|
|
|
- // deptUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- // // 特殊处理
|
|
|
- // if (maxNodeId == 4) {
|
|
|
- // deptUnfinishedCount++;
|
|
|
- // deptUnfinishedCount += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- //
|
|
|
- // // 地市没有审核
|
|
|
- // if (maxNodeId == 5) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // mgrUnfinishedCount++;
|
|
|
- // mgrUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- //
|
|
|
- // if (maxNodeId == 8) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // bizUnfinishedCount++;
|
|
|
- // bizUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- // if (maxNodeId == 9) {
|
|
|
- // List<SysCheckChainNodeCheckHistory> market = nodeId2HisMap.get(8);
|
|
|
- // // 市场组审核完毕
|
|
|
- // if (CollUtil.isNotEmpty(market)) {
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any1 = nodeId2HisMap.get(8).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent() && any1.isPresent()) {
|
|
|
- // leaderUnfinishedCount++;
|
|
|
- // leaderUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // // 市场组没有审核
|
|
|
- // else{
|
|
|
- // Optional<SysCheckChainNodeCheckHistory> any = nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
- // if (any.isPresent()) {
|
|
|
- // marketUnfinishedCount++;
|
|
|
- // marketUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- // }
|
|
|
- // }
|
|
|
- //
|
|
|
- //
|
|
|
- //
|
|
|
- // }
|
|
|
-
|
|
|
- // 待服务商审核 node=1
|
|
|
- List<SysCheckChainNodeCheckHistory> vendorCheckHis = nodeId2HisMap.get(1);
|
|
|
- Map<String, Object> vendorCheck = getCheckData(vendorCheckHis, task, endTime);
|
|
|
- boolean vendorFlag = (boolean) vendorCheck.get("nextFlag");
|
|
|
-
|
|
|
- if (vendorFlag) {
|
|
|
- // 判断地市 node=2
|
|
|
- List<SysCheckChainNodeCheckHistory> cityCheckHis = nodeId2HisMap.get(2);
|
|
|
- Map<String, Object> cityCheck = getCheckData(cityCheckHis, task, endTime);
|
|
|
- cityUnfinishedCount += (int) cityCheck.get("count");
|
|
|
- cityUnfinishedTime += (long) cityCheck.get("time");
|
|
|
- boolean prvFlag = (boolean) cityCheck.get("nextFlag");
|
|
|
-
|
|
|
- // 继续判断区域 node=3
|
|
|
- if (prvFlag) {
|
|
|
- List<SysCheckChainNodeCheckHistory> provCheckHis = nodeId2HisMap.get(3);
|
|
|
- Map<String, Object> provCheck = getCheckData(provCheckHis, task, endTime);
|
|
|
- provUnfinishedCount += (int) provCheck.get("count");
|
|
|
- provUnfinishedTime += (long) provCheck.get("time");
|
|
|
- boolean bizDeptFlag = (boolean) provCheck.get("nextFlag");
|
|
|
-
|
|
|
- // 判断事业部 node=4
|
|
|
- if (bizDeptFlag) {
|
|
|
- List<SysCheckChainNodeCheckHistory> bizDeptHis = nodeId2HisMap.get(4);
|
|
|
-
|
|
|
- // 市场组和商务组都没有审核
|
|
|
- if (CollUtil.isNotEmpty(bizDeptHis)) {
|
|
|
-
|
|
|
- deptUnfinishedCount += bizDeptHis.size();
|
|
|
- long seconds = Duration.between(task.getCreateTime(), endTime).getSeconds();
|
|
|
- deptUnfinishedTime += seconds;
|
|
|
- }
|
|
|
-
|
|
|
- // 判断市场组是否审核
|
|
|
- List<SysCheckChainNodeCheckHistory> marketHis = nodeId2HisMap.get(8);
|
|
|
- Map<String, Object> marketCheck = getCheckData(marketHis, task, endTime);
|
|
|
- marketUnfinishedCount += (int) marketCheck.get("count");
|
|
|
- marketUnfinishedTime += (long) marketCheck.get("time");
|
|
|
- boolean marketFlag = (boolean) marketCheck.get("nextFlag");
|
|
|
-
|
|
|
- // 判断商务组是否审核
|
|
|
- List<SysCheckChainNodeCheckHistory> bizHis = nodeId2HisMap.get(9);
|
|
|
- Map<String, Object> bizCheck = getCheckData(bizHis, task, endTime);
|
|
|
- bizUnfinishedCount += (int) bizCheck.get("count");
|
|
|
- bizUnfinishedTime += (long) bizCheck.get("time");
|
|
|
- boolean bizFlag = (boolean) bizCheck.get("nextFlag");
|
|
|
-
|
|
|
- // 判断分管领导 node=5
|
|
|
- if (marketFlag && bizFlag) {
|
|
|
- List<SysCheckChainNodeCheckHistory> leaderHis = nodeId2HisMap.get(5);
|
|
|
- Map<String, Object> leaderCheck = getCheckData(leaderHis, task, endTime);
|
|
|
- leaderUnfinishedCount += (int) leaderCheck.get("count");
|
|
|
- leaderUnfinishedTime += (long) leaderCheck.get("time");
|
|
|
- boolean mgrFlag = (boolean) leaderCheck.get("nextFlag");
|
|
|
- // 判断总经理 node=6
|
|
|
- if (mgrFlag) {
|
|
|
- // 判断总经理
|
|
|
- List<SysCheckChainNodeCheckHistory> mgrHis = nodeId2HisMap.get(6);
|
|
|
- Map<String, Object> mgrCheck = getCheckData(mgrHis, task, endTime);
|
|
|
- mgrUnfinishedCount += (int) mgrCheck.get("count");
|
|
|
- mgrUnfinishedTime += (long) mgrCheck.get("time");
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // 取节点差集(要删除的)
|
|
|
+ Set<Integer> allHisIds =
|
|
|
+ all.stream()
|
|
|
+ .mapToInt(SysCheckChainNodeCheckHistory::getHistoryId)
|
|
|
+ .boxed()
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ Collection<Integer> need2Del = CollUtil.subtract(allHisIds, keep);
|
|
|
+ // checkChainNodeCheckHistoryService.removeByIds(need2Del.stream().distinct().sorted().collect(Collectors.toList()));
|
|
|
+
|
|
|
+ // taskService.update(Wrappers.<WmTask>lambdaUpdate().set(WmTask::getTaskStatus,
|
|
|
+ // UpmsState.TaskState.REJECTED.getState()).in(WmTask::getId, rejTaskId));
|
|
|
+
|
|
|
+ Map<String, Object> res = new HashMap<>(2);
|
|
|
+ res.put("need2Del", need2Del);
|
|
|
+ res.put("rejTaskId", rejTaskId);
|
|
|
+
|
|
|
+ return R.ok(res);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Inner(value = false)
|
|
|
+ @ResponseExcel(
|
|
|
+ name = "taskCheckExcel",
|
|
|
+ sheets = {@Sheet(sheetName = "汇总信息")})
|
|
|
+ @GetMapping(value = "/cnbg/init/task/check/export")
|
|
|
+ public List<TaskCheckExcelModel> exportTaskCheckExcel() {
|
|
|
+
|
|
|
+ LocalDateTime endTime = LocalDateTime.of(2025, 1, 6, 8, 0, 0);
|
|
|
+
|
|
|
+ // 任务数量
|
|
|
+ List<WmTask> total =
|
|
|
+ taskService.list(
|
|
|
+ Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .between(WmTask::getCreateTime, LocalDateTime.of(2024, 10, 14, 0, 0, 0), endTime));
|
|
|
+
|
|
|
+ int taskCount = total.size();
|
|
|
+
|
|
|
+ // 积分包数量
|
|
|
+ Set<String> pkgIds = total.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ int pkgCount = pkgIds.size();
|
|
|
+
|
|
|
+ // 审核信息
|
|
|
+ List<SysCheckChainNodeCheckHistory> all =
|
|
|
+ checkChainNodeCheckHistoryService.list(
|
|
|
+ Wrappers.<SysCheckChainNodeCheckHistory>lambdaQuery()
|
|
|
+ .orderByAsc(SysCheckChainNodeCheckHistory::getHistoryId));
|
|
|
+
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> taskId2HisMap =
|
|
|
+ all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
|
|
|
+
|
|
|
+ int vendorUnfinishedCount = 0;
|
|
|
+ long vendorUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int cityUnfinishedCount = 0;
|
|
|
+ long cityUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int provUnfinishedCount = 0;
|
|
|
+ long provUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int deptUnfinishedCount = 0;
|
|
|
+ long deptUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int marketUnfinishedCount = 0;
|
|
|
+ long marketUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int bizUnfinishedCount = 0;
|
|
|
+ long bizUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int leaderUnfinishedCount = 0;
|
|
|
+ long leaderUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ int mgrUnfinishedCount = 0;
|
|
|
+ long mgrUnfinishedTime = 0L;
|
|
|
+
|
|
|
+ // 循环遍历任务
|
|
|
+ for (WmTask task : total) {
|
|
|
+
|
|
|
+ Integer tId = Integer.valueOf(task.getId());
|
|
|
+
|
|
|
+ // 获取当前任务的审核记录
|
|
|
+ List<SysCheckChainNodeCheckHistory> sysCheckChainNodeCheckHistories = taskId2HisMap.get(tId);
|
|
|
+
|
|
|
+ // 不存在审核历史说明卡在服务商管理员
|
|
|
+ if (CollUtil.isEmpty(sysCheckChainNodeCheckHistories)) {
|
|
|
+ vendorUnfinishedCount++;
|
|
|
+ vendorUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ }
|
|
|
+ // 判断其他节点
|
|
|
+ else {
|
|
|
+
|
|
|
+ // 按节点分组
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeId2HisMap =
|
|
|
+ sysCheckChainNodeCheckHistories.stream()
|
|
|
+ .collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
+
|
|
|
+ // // 最大的节点
|
|
|
+ // int maxNodeId =
|
|
|
+ // nodeId2HisMap.keySet().stream().max(Comparator.comparingInt(Integer::valueOf)).get();
|
|
|
+ //
|
|
|
+ // // 地市没有审核
|
|
|
+ // if (maxNodeId == 1) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // cityUnfinishedCount++;
|
|
|
+ // cityUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 区域没有审核
|
|
|
+ // if (maxNodeId == 2) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // provUnfinishedCount++;
|
|
|
+ // provUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 商务组或者市场组审核
|
|
|
+ // if (maxNodeId == 3 ) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // deptUnfinishedCount++;
|
|
|
+ // deptUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 特殊处理
|
|
|
+ // if (maxNodeId == 4) {
|
|
|
+ // deptUnfinishedCount++;
|
|
|
+ // deptUnfinishedCount += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 地市没有审核
|
|
|
+ // if (maxNodeId == 5) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // mgrUnfinishedCount++;
|
|
|
+ // mgrUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // if (maxNodeId == 8) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // bizUnfinishedCount++;
|
|
|
+ // bizUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if (maxNodeId == 9) {
|
|
|
+ // List<SysCheckChainNodeCheckHistory> market = nodeId2HisMap.get(8);
|
|
|
+ // // 市场组审核完毕
|
|
|
+ // if (CollUtil.isNotEmpty(market)) {
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any1 =
|
|
|
+ // nodeId2HisMap.get(8).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent() && any1.isPresent()) {
|
|
|
+ // leaderUnfinishedCount++;
|
|
|
+ // leaderUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // // 市场组没有审核
|
|
|
+ // else{
|
|
|
+ // Optional<SysCheckChainNodeCheckHistory> any =
|
|
|
+ // nodeId2HisMap.get(maxNodeId).stream().filter(SysCheckChainNodeCheckHistory::getCheckResult).findAny();
|
|
|
+ // if (any.isPresent()) {
|
|
|
+ // marketUnfinishedCount++;
|
|
|
+ // marketUnfinishedTime += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 待服务商审核 node=1
|
|
|
+ List<SysCheckChainNodeCheckHistory> vendorCheckHis = nodeId2HisMap.get(1);
|
|
|
+ Map<String, Object> vendorCheck = getCheckData(vendorCheckHis, task, endTime);
|
|
|
+ boolean vendorFlag = (boolean) vendorCheck.get("nextFlag");
|
|
|
+
|
|
|
+ if (vendorFlag) {
|
|
|
+ // 判断地市 node=2
|
|
|
+ List<SysCheckChainNodeCheckHistory> cityCheckHis = nodeId2HisMap.get(2);
|
|
|
+ Map<String, Object> cityCheck = getCheckData(cityCheckHis, task, endTime);
|
|
|
+ cityUnfinishedCount += (int) cityCheck.get("count");
|
|
|
+ cityUnfinishedTime += (long) cityCheck.get("time");
|
|
|
+ boolean prvFlag = (boolean) cityCheck.get("nextFlag");
|
|
|
+
|
|
|
+ // 继续判断区域 node=3
|
|
|
+ if (prvFlag) {
|
|
|
+ List<SysCheckChainNodeCheckHistory> provCheckHis = nodeId2HisMap.get(3);
|
|
|
+ Map<String, Object> provCheck = getCheckData(provCheckHis, task, endTime);
|
|
|
+ provUnfinishedCount += (int) provCheck.get("count");
|
|
|
+ provUnfinishedTime += (long) provCheck.get("time");
|
|
|
+ boolean bizDeptFlag = (boolean) provCheck.get("nextFlag");
|
|
|
+
|
|
|
+ // 判断事业部 node=4
|
|
|
+ if (bizDeptFlag) {
|
|
|
+ List<SysCheckChainNodeCheckHistory> bizDeptHis = nodeId2HisMap.get(4);
|
|
|
+
|
|
|
+ // 市场组和商务组都没有审核
|
|
|
+ if (CollUtil.isNotEmpty(bizDeptHis)) {
|
|
|
+
|
|
|
+ deptUnfinishedCount += bizDeptHis.size();
|
|
|
+ long seconds = Duration.between(task.getCreateTime(), endTime).getSeconds();
|
|
|
+ deptUnfinishedTime += seconds;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断市场组是否审核
|
|
|
+ List<SysCheckChainNodeCheckHistory> marketHis = nodeId2HisMap.get(8);
|
|
|
+ Map<String, Object> marketCheck = getCheckData(marketHis, task, endTime);
|
|
|
+ marketUnfinishedCount += (int) marketCheck.get("count");
|
|
|
+ marketUnfinishedTime += (long) marketCheck.get("time");
|
|
|
+ boolean marketFlag = (boolean) marketCheck.get("nextFlag");
|
|
|
+
|
|
|
+ // 判断商务组是否审核
|
|
|
+ List<SysCheckChainNodeCheckHistory> bizHis = nodeId2HisMap.get(9);
|
|
|
+ Map<String, Object> bizCheck = getCheckData(bizHis, task, endTime);
|
|
|
+ bizUnfinishedCount += (int) bizCheck.get("count");
|
|
|
+ bizUnfinishedTime += (long) bizCheck.get("time");
|
|
|
+ boolean bizFlag = (boolean) bizCheck.get("nextFlag");
|
|
|
+
|
|
|
+ // 判断分管领导 node=5
|
|
|
+ if (marketFlag && bizFlag) {
|
|
|
+ List<SysCheckChainNodeCheckHistory> leaderHis = nodeId2HisMap.get(5);
|
|
|
+ Map<String, Object> leaderCheck = getCheckData(leaderHis, task, endTime);
|
|
|
+ leaderUnfinishedCount += (int) leaderCheck.get("count");
|
|
|
+ leaderUnfinishedTime += (long) leaderCheck.get("time");
|
|
|
+ boolean mgrFlag = (boolean) leaderCheck.get("nextFlag");
|
|
|
+ // 判断总经理 node=6
|
|
|
+ if (mgrFlag) {
|
|
|
+ // 判断总经理
|
|
|
+ List<SysCheckChainNodeCheckHistory> mgrHis = nodeId2HisMap.get(6);
|
|
|
+ Map<String, Object> mgrCheck = getCheckData(mgrHis, task, endTime);
|
|
|
+ mgrUnfinishedCount += (int) mgrCheck.get("count");
|
|
|
+ mgrUnfinishedTime += (long) mgrCheck.get("time");
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- TaskCheckExcelModel taskCheckExcelModel = new TaskCheckExcelModel();
|
|
|
- taskCheckExcelModel.setPkgCount(String.valueOf(pkgCount));
|
|
|
- taskCheckExcelModel.setTaskCount(String.valueOf(taskCount));
|
|
|
-
|
|
|
- Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeId2HisMap = all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
- long okCount = nodeId2HisMap.get(6).stream().mapToInt(SysCheckChainNodeCheckHistory::getTargetId).distinct().count();
|
|
|
-
|
|
|
- int unfinishedCount = vendorUnfinishedCount + cityUnfinishedCount + provUnfinishedCount + marketUnfinishedCount + bizUnfinishedCount + leaderUnfinishedCount + mgrUnfinishedCount;
|
|
|
- taskCheckExcelModel.setFinishTaskCount(String.valueOf(okCount));
|
|
|
- taskCheckExcelModel.setUnfinishedTaskCount(String.valueOf(unfinishedCount));
|
|
|
-
|
|
|
- // 服务商
|
|
|
- taskCheckExcelModel.setVendorUnfinishedTaskCount(String.valueOf(vendorUnfinishedCount));
|
|
|
- taskCheckExcelModel.setVendorUnfinishedAvgTime(String.format("%.2f", vendorUnfinishedTime * 1.0 / (60L * 60 * 24 * vendorUnfinishedCount)));
|
|
|
-
|
|
|
- // 地市
|
|
|
- taskCheckExcelModel.setCityUnfinishedTaskCount(String.valueOf(cityUnfinishedCount));
|
|
|
- taskCheckExcelModel.setCityUnfinishedAvgTime(String.format("%.2f", cityUnfinishedTime * 1.0 / (60L * 60 * 24 * cityUnfinishedCount)));
|
|
|
-
|
|
|
- // 区域
|
|
|
- taskCheckExcelModel.setProvinceUnfinishedTaskCount(String.valueOf(provUnfinishedCount));
|
|
|
- taskCheckExcelModel.setProvinceUnfinishedAvgTime(String.format("%.2f", provUnfinishedTime * 1.0 / (60L * 60 * 24 * provUnfinishedCount)));
|
|
|
-
|
|
|
- taskCheckExcelModel.setDeptUnfinishedTaskCount(String.valueOf(deptUnfinishedCount));
|
|
|
- taskCheckExcelModel.setDeptUnfinishedAvgTime(String.format("%.2f", deptUnfinishedTime * 1.0 / (60L * 60 * 24 * deptUnfinishedCount)));
|
|
|
-
|
|
|
- // 市场
|
|
|
- taskCheckExcelModel.setMarketUnfinishedTaskCount(String.valueOf(marketUnfinishedCount));
|
|
|
- taskCheckExcelModel.setMarketUnfinishedAvgTime(String.format("%.2f", marketUnfinishedTime * 1.0 / (60L * 60 * 24 * marketUnfinishedCount)));
|
|
|
-
|
|
|
- // 商务
|
|
|
- taskCheckExcelModel.setBizUnfinishedTaskCount(String.valueOf(bizUnfinishedCount));
|
|
|
- taskCheckExcelModel.setBizUnfinishedAvgTime(String.format("%.2f", bizUnfinishedTime * 1.0 / (60L * 60 * 24 * bizUnfinishedCount)));
|
|
|
-
|
|
|
- // 分管领导
|
|
|
- taskCheckExcelModel.setLeaderUnfinishedTaskCount(String.valueOf(leaderUnfinishedCount));
|
|
|
- taskCheckExcelModel.setLeaderUnfinishedAvgTime(String.format("%.2f", leaderUnfinishedTime * 1.0 / (60L * 60 * 24 * leaderUnfinishedCount)));
|
|
|
-
|
|
|
- // 总经理
|
|
|
- taskCheckExcelModel.setManagerUnfinishedTaskCount(String.valueOf(mgrUnfinishedCount));
|
|
|
- taskCheckExcelModel.setManagerUnfinishedAvgTime(String.format("%.2f", mgrUnfinishedTime * 1.0 / (60L * 60 * 24 * mgrUnfinishedCount)));
|
|
|
- return Collections.singletonList(taskCheckExcelModel);
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- private Map<String, Object> getCheckData(List<SysCheckChainNodeCheckHistory> target, WmTask task, LocalDateTime endTime) {
|
|
|
-
|
|
|
- int count = 0;
|
|
|
- long time = 0L;
|
|
|
- boolean nextFlag = true;
|
|
|
-
|
|
|
- // 改节点尚未审核
|
|
|
- if (CollUtil.isEmpty(target)) {
|
|
|
- count++;
|
|
|
- time += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
- nextFlag = false;
|
|
|
- } else {
|
|
|
- for (SysCheckChainNodeCheckHistory his : target) {
|
|
|
- // 当前节点审核节点拒绝则流程完毕
|
|
|
- if (!his.getCheckResult()) {
|
|
|
- nextFlag = false;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ TaskCheckExcelModel taskCheckExcelModel = new TaskCheckExcelModel();
|
|
|
+ taskCheckExcelModel.setPkgCount(String.valueOf(pkgCount));
|
|
|
+ taskCheckExcelModel.setTaskCount(String.valueOf(taskCount));
|
|
|
+
|
|
|
+ Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeId2HisMap =
|
|
|
+ all.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
|
|
|
+ long okCount =
|
|
|
+ nodeId2HisMap.get(6).stream()
|
|
|
+ .mapToInt(SysCheckChainNodeCheckHistory::getTargetId)
|
|
|
+ .distinct()
|
|
|
+ .count();
|
|
|
+
|
|
|
+ int unfinishedCount =
|
|
|
+ vendorUnfinishedCount
|
|
|
+ + cityUnfinishedCount
|
|
|
+ + provUnfinishedCount
|
|
|
+ + marketUnfinishedCount
|
|
|
+ + bizUnfinishedCount
|
|
|
+ + leaderUnfinishedCount
|
|
|
+ + mgrUnfinishedCount;
|
|
|
+ taskCheckExcelModel.setFinishTaskCount(String.valueOf(okCount));
|
|
|
+ taskCheckExcelModel.setUnfinishedTaskCount(String.valueOf(unfinishedCount));
|
|
|
+
|
|
|
+ // 服务商
|
|
|
+ taskCheckExcelModel.setVendorUnfinishedTaskCount(String.valueOf(vendorUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setVendorUnfinishedAvgTime(
|
|
|
+ String.format(
|
|
|
+ "%.2f", vendorUnfinishedTime * 1.0 / (60L * 60 * 24 * vendorUnfinishedCount)));
|
|
|
+
|
|
|
+ // 地市
|
|
|
+ taskCheckExcelModel.setCityUnfinishedTaskCount(String.valueOf(cityUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setCityUnfinishedAvgTime(
|
|
|
+ String.format("%.2f", cityUnfinishedTime * 1.0 / (60L * 60 * 24 * cityUnfinishedCount)));
|
|
|
+
|
|
|
+ // 区域
|
|
|
+ taskCheckExcelModel.setProvinceUnfinishedTaskCount(String.valueOf(provUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setProvinceUnfinishedAvgTime(
|
|
|
+ String.format("%.2f", provUnfinishedTime * 1.0 / (60L * 60 * 24 * provUnfinishedCount)));
|
|
|
+
|
|
|
+ taskCheckExcelModel.setDeptUnfinishedTaskCount(String.valueOf(deptUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setDeptUnfinishedAvgTime(
|
|
|
+ String.format("%.2f", deptUnfinishedTime * 1.0 / (60L * 60 * 24 * deptUnfinishedCount)));
|
|
|
+
|
|
|
+ // 市场
|
|
|
+ taskCheckExcelModel.setMarketUnfinishedTaskCount(String.valueOf(marketUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setMarketUnfinishedAvgTime(
|
|
|
+ String.format(
|
|
|
+ "%.2f", marketUnfinishedTime * 1.0 / (60L * 60 * 24 * marketUnfinishedCount)));
|
|
|
+
|
|
|
+ // 商务
|
|
|
+ taskCheckExcelModel.setBizUnfinishedTaskCount(String.valueOf(bizUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setBizUnfinishedAvgTime(
|
|
|
+ String.format("%.2f", bizUnfinishedTime * 1.0 / (60L * 60 * 24 * bizUnfinishedCount)));
|
|
|
+
|
|
|
+ // 分管领导
|
|
|
+ taskCheckExcelModel.setLeaderUnfinishedTaskCount(String.valueOf(leaderUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setLeaderUnfinishedAvgTime(
|
|
|
+ String.format(
|
|
|
+ "%.2f", leaderUnfinishedTime * 1.0 / (60L * 60 * 24 * leaderUnfinishedCount)));
|
|
|
+
|
|
|
+ // 总经理
|
|
|
+ taskCheckExcelModel.setManagerUnfinishedTaskCount(String.valueOf(mgrUnfinishedCount));
|
|
|
+ taskCheckExcelModel.setManagerUnfinishedAvgTime(
|
|
|
+ String.format("%.2f", mgrUnfinishedTime * 1.0 / (60L * 60 * 24 * mgrUnfinishedCount)));
|
|
|
+ return Collections.singletonList(taskCheckExcelModel);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> getCheckData(
|
|
|
+ List<SysCheckChainNodeCheckHistory> target, WmTask task, LocalDateTime endTime) {
|
|
|
+
|
|
|
+ int count = 0;
|
|
|
+ long time = 0L;
|
|
|
+ boolean nextFlag = true;
|
|
|
+
|
|
|
+ // 改节点尚未审核
|
|
|
+ if (CollUtil.isEmpty(target)) {
|
|
|
+ count++;
|
|
|
+ time += getDurationSecond(task.getCreateTime(), endTime);
|
|
|
+ nextFlag = false;
|
|
|
+ } else {
|
|
|
+ for (SysCheckChainNodeCheckHistory his : target) {
|
|
|
+ // 当前节点审核节点拒绝则流程完毕
|
|
|
+ if (!his.getCheckResult()) {
|
|
|
+ nextFlag = false;
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- Map<String, Object> r = new HashMap<>(3);
|
|
|
- r.put("count", count);
|
|
|
- r.put("time", time);
|
|
|
- r.put("nextFlag", nextFlag);
|
|
|
-
|
|
|
- return r;
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ Map<String, Object> r = new HashMap<>(3);
|
|
|
+ r.put("count", count);
|
|
|
+ r.put("time", time);
|
|
|
+ r.put("nextFlag", nextFlag);
|
|
|
|
|
|
- private long getDurationSecond(LocalDateTime start, LocalDateTime end) {
|
|
|
- long seconds = Duration.between(start, end).getSeconds();
|
|
|
+ return r;
|
|
|
+ }
|
|
|
|
|
|
- return Math.max(seconds, 0L);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public void export1() {
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
+ private long getDurationSecond(LocalDateTime start, LocalDateTime end) {
|
|
|
+ long seconds = Duration.between(start, end).getSeconds();
|
|
|
|
|
|
+ return Math.max(seconds, 0L);
|
|
|
+ }
|
|
|
|
|
|
+ public void export1() {}
|
|
|
}
|