提交 09a3b44c authored 作者: Matrix's avatar Matrix

[核查模块] 修复BUG

上级 ab2d5952
......@@ -16,11 +16,11 @@ public enum CheckType {
/**
* 自动核查
*/
AUTO_CHECK(1, "自动核查"),
CT_CHECK(1, "核查"),
/**
* 手动核查
*/
MANUAL_CHECK(2, "手动核查");
CT_EXAM(2, "检查");
private final Integer id;
private final String name;
......
......@@ -113,7 +113,7 @@ public class DeviceCheckController {
@ApiOperation(value = "查询默认的可以被核查单位的清单(省本直,省直属,市局)")
public ResponseEntity findDefaultUnits() {
return ResponseEntity.ok(new ResultObj<>(unitsRepo.findAllByLevelIn(Lists.newArrayList(0, 1, 2))));
return ResponseEntity.ok(new ResultObj<>(unitsRepo.findAllByTypeNotIn(Lists.newArrayList(3))));
}
@ApiOperation(value = "根据id查询核查统计数据", notes = "可以通过这个接口查询核查统计数据")
......@@ -216,6 +216,7 @@ public class DeviceCheckController {
// 构建省的统计账单,所有的checkedUnits都要被包含到统计中去
DeviceCheckStat provinceCheckStat = initStatData(ccVO.getTitle(), ccVO.getRemark(), 0, 0, startUnit.getName(), checkedUnits, ccVO.getEndTime().atStartOfDay());
provinceCheckStat.setCheckType(CheckType.CT_CHECK);
Integer statId = statRepo.save(provinceCheckStat).getId();
List<CheckDeviceStatVo> deviceStatVos = Arrays.stream(
Objects.requireNonNull(JacksonUtil.readValue(provinceCheckStat.getStatInfo(), CheckDeviceStatVo[].class)))
......@@ -241,6 +242,7 @@ public class DeviceCheckController {
//构建市的统计账单
String cityTitle = unit.getName() + "检查统计";
DeviceCheckStat cityCheckStat = initStatData(cityTitle, ccVO.getRemark(), 0, 0, unit.getName(), Collections.emptyList(), ccVO.getEndTime().atStartOfDay());
cityCheckStat.setCheckType(CheckType.CT_EXAM);
Integer cityStatId = statRepo.save(cityCheckStat).getId();
log.info("[核查模块] {} 检查统计账单构建完毕,id 为 {}", unit.getName(), cityStatId);
......@@ -257,7 +259,7 @@ public class DeviceCheckController {
// 构建自查任务(levl = 1,2) tpye = 2
List<Units> selfCheckUnits = checkedUnits.stream()
.filter(units -> Arrays.asList(0, 1, 2).contains(units.getLevel()) || units.getType() == 2)
.filter(units -> Arrays.asList(0, 1).contains(units.getLevel()) || units.getType() == 2)
.collect(toList());
// 获取所有在库装备与不在库装备
......@@ -276,7 +278,7 @@ public class DeviceCheckController {
//核查组成员名称用当前登录用户
String names = loginUser.getName();
// 3-1 构建被查单位的 自查账单
DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + "默认备注", "默认标题", 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>()));
DeviceCheckDetail unitDetailDoc = DeviceCheckDetail.EmptyWithChecker(names + "|" + "默认备注", "", 0, 0, 0, 0, unit.getName(), devInLib.getOrDefault(unit.getName(), new ArrayList<>()), devNotInLib.getOrDefault(unit.getName(), new ArrayList<>()));
DeviceCheckDetail detail = detailRepo.save(unitDetailDoc);
// 将id放入统计中去 model -> areaName -> detailId
String areaName = auService.findOne(AuExample.UnitId, unit.getUnitId()).getName();
......@@ -298,6 +300,7 @@ public class DeviceCheckController {
fatherId = provStatTask.getId();
}
//处理ownUnit的代码 - 用于处理没有账号的单位的可见性
Integer ownUnitId = 0;
if (unit.getType() == 2) {
ownUnitId = 1;
......@@ -330,16 +333,25 @@ public class DeviceCheckController {
Integer startUnitId = ceVo.getUnitId();
Units startUnit = unitsRepo.findById(startUnitId).get();
List<CheckExamDetailVo> examDetailVos = ceVo.getDetail();
Integer uAreaId = auService.findOne(AuExample.UnitId, startUnitId).getId();
//如果是create检查,那么不需要添加自己单位的自查,如果是update检查,那么需要添加单位的自查
if (ceVo.getExamStatId() != 0) {
//update
log.info("[核查模块] update核查,自动添加id = {}市的自核查任务", startUnitId);
examDetailVos.add(examDetailVos.get(0).copy(uAreaId, "市自查"));
}
List<String> tmpString = new ArrayList<>();
for (CheckExamDetailVo vo : examDetailVos) {
tmpString.add(vo.getGroupName() + "," + vo.getUserNames().stream().collect(joining(",")));
}
String groupUserString = tmpString.stream().collect(joining("|"));
List<Integer> areaIds = examDetailVos.stream().map(CheckExamDetailVo::getAreaId).collect(toList());
List<Units> checkedUnits = unitsRepo.findByAreaIdIn(areaIds);
List<String> checkedUnitNames = checkedUnits.stream().map(Units::getName).collect(toList());
log.info("[核查模块]发起手动核查,发起单位为{},被查单位为{}", startUnit.getName(), checkedUnitNames);
// 2-1 构建发起单位的 统计账单
DeviceCheckStat provinceCheckStat;
//根据examStatId来判断是update还是create 此时初始化的为指定检查区域的数据
......@@ -352,6 +364,11 @@ public class DeviceCheckController {
} else {
provinceCheckStat = initCheckStat;
}
log.info("[核查模块]发起手动核查,发起单位为{},被查单位为{}", startUnit.getName(), checkedUnitNames);
provinceCheckStat.setCheckType(CheckType.CT_EXAM);
Integer statId = statRepo.save(provinceCheckStat).getId();
List<CheckDeviceStatVo> deviceStatVos = Arrays.stream(
Objects.requireNonNull(JacksonUtil.readValue(provinceCheckStat.getStatInfo(), CheckDeviceStatVo[].class)))
......@@ -457,8 +474,10 @@ public class DeviceCheckController {
Integer fatherId = currentTask.getParentTaskId();
Task cityTask = taskRepo.findById(fatherId).get();
Integer cityStatId = cityTask.getBillId();
Integer cityId = currentTask.getOwnUnit();
AreaUnit areaUnit = auService.findOne(AuExample.UnitId, cityId);
//这里是为了修正特殊的直属单位改为从detail里拿单位(城市)名
String unitName = detailRepo.findById(id).get().getCheckUnit();
AreaUnit areaUnit = auService.findOne(AuExample.UnitName, unitName);
String cityName = areaUnit.getName();
DeviceCheckStat cityStat = statRepo.findById(cityStatId).get();
......@@ -679,7 +698,7 @@ public class DeviceCheckController {
//市统计的办结 -> 开启对应市的待办任务
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);
TaskBto cityDoneTask = new TaskBto(CHECK_STAT_1.id, areaName + "统计确认待办任务", parentTaskId, ".", CONFIRM_CHECK_STAT.id, statId, provId, 0);
cityDoneTask = taskService.start(cityDoneTask);
log.info("[核查模块] 统计确认待办任务生成成功, id为 : {}", cityDoneTask.getId());
}
......@@ -702,7 +721,7 @@ public class DeviceCheckController {
// 如果是第一个区域(通过判断所有的child节点没有结束),替换掉父级的统计,如果不是第一个区域,则累加
boolean firstArea = taskService.TaskTreeIsStart(fatherTaskId, false);
List<CheckDeviceStatVo> addVos = parseStatString2Vo(currentTask, currentDetail.getCheckDetail());
List<CheckDeviceStatVo> addVos = parseStatString2Vo(currentTask, currentDetail);
CheckStatVo cityStatVo = transUtil.checkStatDo2Vo(statRepo.findById(statId).get());
//addVos在内部reduce一次
addVos = addVos.stream()
......@@ -712,7 +731,6 @@ public class DeviceCheckController {
.map(v -> v.stream().reduce(CheckDeviceStatVo::reduce).get())
.collect(toList());
//直接替换
cityStatVo = cityStatVo.cleanReduce(addVos);
......@@ -722,9 +740,11 @@ public class DeviceCheckController {
String areaName = areaRepo.findById(areaId).orElse(new Area(0, "省直属", 9999, "9999", 0, ""))
.getName();
// 完结任务,设置detailId
for (CheckDeviceStatVo v : cityStatVo.getDeviceStatVoList()) {
for (CheckAreaStatVo v1 : v.getAreaStatList()) {
if (v1.getAreaName().equals(areaName)) {
v1.setAreaDetailId(currentDetail.getId());
v1.end();
}
}
......@@ -762,15 +782,15 @@ public class DeviceCheckController {
return GlobalMap.getStatusEnumMap().get(currentStatusId - remainder);
}
public List<CheckDeviceStatVo> parseStatString2Vo(TaskBto task, String statString) {
public List<CheckDeviceStatVo> parseStatString2Vo(TaskBto task, DeviceCheckDetail detail) {
String statString = detail.getCheckDetail();
List<CheckDeviceStatVo> statVoList = new ArrayList<>();
//分为 id - status 的数组 其中status 0缺失 1无误 2新增 3不在库
String[] statArray = statString.split(",");
//将 id - status 转化为 model - count - status(只统计新增和无误的作为数量)
// 根据unitId 查到 areaId 根据 areaId 查询到 areaName
int areaId = unitsRepo.findAreaId(task.getOwnUnit());
String areaName = areaRepo.findNameById(areaId);
// 根这里uuid可以从detail里拿,根据unitId 查到 areaId 根据 areaId 查询到 areaName
String areaName = auService.findOne(AuExample.UnitName, detail.getCheckUnit()).getName();
for (String s : statArray) {
String[] device = s.split("-");
......@@ -786,9 +806,13 @@ public class DeviceCheckController {
CheckAreaStatVo checkAreaStatVo;
// proofResult 9=(1,1) 1=(2,0) other=(2,1)
if (proofResult == 9) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 1, 1, statId, detailId);
} else if (proofResult == 1) {
} else if (proofResult ==3){
//跳过非在库的统计
continue;
}else if (proofResult == 1) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 0, statId, detailId);
} else {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 2, 1, statId, detailId);
......@@ -798,8 +822,6 @@ public class DeviceCheckController {
areaStatVoList.add(checkAreaStatVo);
statVoList.add(new CheckDeviceStatVo(checkDevice.getModel(), checkDevice.getName(), 1, areaStatVoList));
//这里直接跳过非在库装备
break;
}
return statVoList;
......@@ -829,7 +851,7 @@ public class DeviceCheckController {
.values();
return new DeviceCheckStat(
CheckType.MANUAL_CHECK,
CheckType.CT_EXAM,
title,
startUnitName + "待核查装备统计单",
JacksonUtil.toJSon(new ArrayList<>(statVos)),
......@@ -884,7 +906,7 @@ public class DeviceCheckController {
// }
return new DeviceCheckStat(
CheckType.MANUAL_CHECK,
CheckType.CT_EXAM,
title,
startUnitName + "待核查装备统计单",
JacksonUtil.toJSon(new ArrayList<>(statVos)),
......
......@@ -9,9 +9,7 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.SQLDelete;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.*;
import java.time.LocalDateTime;
/**
......@@ -57,10 +55,11 @@ public class DeviceCheckStat extends BaseEntity {
private String statInfo;
/**
* 检查类型,数据库里的数据结构是int类型,其中1为自动,2为手动
* 检查类型,数据库里的数据结构是int类型,其中1为核查,2为检查
*
* @see com.tykj.dev.device.confirmcheck.common.CheckTypeConvert
*/
@Enumerated(EnumType.ORDINAL)
private CheckType checkType;
/**
......
......@@ -70,8 +70,10 @@ public class CheckAreaStatVo implements Cloneable {
}
public void start() {
if (this.comProgress !=2){
this.comProgress = 1;
}
}
public void end() {
this.comProgress = 2;
......@@ -120,12 +122,13 @@ public class CheckAreaStatVo implements Cloneable {
if (!this.areaName.equals(other.areaName) || this.areaStatId != other.areaStatId) {
//初始化账单的话则不用抛出异常,将other的detailId赋予即可
if (this.areaDetailId == 0) {
this.areaDetailId = other.areaStatId;
this.areaDetailId = other.areaDetailId;
// this.areaStatId = other.areaStatId;
} else {
throw new IllegalArgumentException(String.format(
"要合并的两个地区统计数据的areaName与areaDetailId必须保持一致," +
"你提供的分别是areaName = %s 与 %s , areaDetailId = %d 与 %d %n",
this.areaName, other.areaName, this.areaStatId, other.areaStatId));
this.areaName, other.areaName, this.areaDetailId, other.areaDetailId));
}
}
......
......@@ -2,7 +2,9 @@ package com.tykj.dev.device.confirmcheck.entity.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
......@@ -14,6 +16,8 @@ import java.util.List;
*/
@Data
@ApiModel("核查发起细节")
@AllArgsConstructor
@NoArgsConstructor
public class CheckExamDetailVo {
@ApiModelProperty(name = "核查组名称")
......@@ -27,4 +31,8 @@ public class CheckExamDetailVo {
@ApiModelProperty(name = "备注")
private String remark;
public CheckExamDetailVo copy(Integer areaId,String remark) {
return new CheckExamDetailVo(this.groupName, this.userNames, areaId, remark);
}
}
......@@ -42,5 +42,8 @@ public class CheckStatTableVo {
@ApiModelProperty("完成情况")
private String completion;
@ApiModelProperty("检查类型,0-核查,1-检查")
private Integer checkType;
private String queryField;
}
......@@ -20,6 +20,7 @@ import com.tykj.dev.device.confirmcheck.service.ConfirmCheckService;
import com.tykj.dev.device.confirmcheck.utils.ObjTransUtil;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.task.repository.TaskDao;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.task.subject.bto.TaskBto;
import com.tykj.dev.device.task.subject.domin.Task;
......@@ -135,7 +136,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
// 构建省的统计账单
DeviceCheckStat provStatDo = new DeviceCheckStat(
CheckType.AUTO_CHECK,
CheckType.CT_CHECK,
baseTitle + provUnit.getName() + "核查统计单",
"核查统计单",
"系统发起的统计|" + provUnit.getName() + "|" + provUnit.getAreaId());
......@@ -169,7 +170,7 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
// 构建市统账单
DeviceCheckStat cityStatDo = new DeviceCheckStat(
CheckType.AUTO_CHECK,
CheckType.CT_CHECK,
baseTitle + cityUnit.getName() + "核查统计单",
"核查统计单",
"系统发起的统计|" + cityUnit.getName() + "|" + cityUnit.getAreaId()
......@@ -304,10 +305,21 @@ public class ConfirmCheckServiceImpl implements ConfirmCheckService, CommandLine
*/
@Override
public Page<CheckStatTableVo> findAllStatTable(CheckBillSelectVo checkBillSelectVo) {
//过滤出顶级节点
List<TaskBto> topStatList = taskService.findBillType(7);
List<TaskBto> topDetailList = taskService.findBillType(8);
topStatList.addAll(topDetailList);
List<Integer> topIdList = topStatList.stream()
.filter(taskBto -> taskBto.getParentTaskId().equals(0) || taskBto.getParentTaskId() == null)
.map(TaskBto::getBillId)
.collect(toList());
List<CheckStatTableVo> tableVos = statDao.findAll(checkBillSelectVo.getPageable().getSort()).stream()
.filter(deviceCheckStat -> !"[]".equals(deviceCheckStat.getStatInfo()))
.map(objTransUtil::stat2TableVo)
.filter(vo -> keywordFilter(vo, checkBillSelectVo.getKeyword()))
.filter(v->topIdList.contains(v.getId()))
.collect(Collectors.toList());
return PageUtil.getPerPage(checkBillSelectVo.getPage(),checkBillSelectVo.getSize(),tableVos,checkBillSelectVo.getPageable());
......
......@@ -155,6 +155,7 @@ public class ObjTransUtil {
checkUserNames,
stat.getCreateTime(),
completion,
stat.getCheckType().CT_CHECK.getId(),
joiner.toString()
);
......
......@@ -18,6 +18,8 @@ public interface UnitsDao extends JpaRepository<Units, Integer>, JpaSpecificatio
List<Units> findAllByLevelGreaterThanEqual(Integer level);
List<Units> findAllByTypeNotIn(List<Integer> ids);
List<Units> findByAreaIdIn(List<Integer> areaIds);
List<Units> findAllByAreaIdIn(List<Integer> ids);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论