提交 6a0652bf authored 作者: Matrix's avatar Matrix

[核查模块] 添加退回中 以及不同意功能

上级 883b6fbd
......@@ -147,6 +147,10 @@ public enum LogType {
CONFIRM_CHECK_EXAM_STAT_3(420, CONFIRM_CHECK_DETAIL.id, CHECK_EXAM_STAT_0.id, END.id, "检查统计任务数据已确认完毕,任务完结"),
CONFIRM_CHECK_SELF_ROLLBACK(421, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_EXAM_DETAIL_0.id, "自查任务已退回至等待专管员A处理状态"),
CONFIRM_CHECK_EXAM_ROLLBACK(422, CONFIRM_CHECK_DETAIL.id, END.id,CHECK_EXAM_STAT_1.id, "检查任务已退回至等待确认状态"),
ALLOT_BACK_1(57, ALLOT_BACK.id, ORIGIN_STATUS.id, ALLOT_BACKING.id, "发起装备退回"),
ALLOT_BACK_2(58,ALLOT_BACK.id, ALLOT_BACKING.id, END.id, "接收退回装备并上传退回签收单"),
......
......@@ -407,7 +407,9 @@ public class DeviceCheckController {
lcd.setId(task.getBillId());
//核查情况 无误/有误/逾期
if (revAreaStat.getComSituation() == 1) {
if (revAreaStat.getComSituation() == -1) {
lcd.setCheckSituation("重新检查");
} else if (revAreaStat.getComSituation() == 1) {
lcd.setCheckSituation("有误");
} else if (revAreaStat.getComSituation() == 0) {
if (revAreaStat.getComProgress() == 0) {
......@@ -435,6 +437,8 @@ public class DeviceCheckController {
} else {
lcd.setCheckResult("完成");
}
} else if (revAreaStat.getComProgress() == 3) {
lcd.setCheckResult("已退回");
} else if (revAreaStat.getComProgress() == 0) {
lcd.setCheckResult("未开始");
} else if (revAreaStat.getComProgress() == 1) {
......@@ -464,8 +468,10 @@ public class DeviceCheckController {
LinkExamDetail led = new LinkExamDetail();
led.setId(task.getBillId());
//核查情况 无误/有误/逾期
if (revAreaStat.getComSituation() == 1) {
//核查情况 重新检查/无误/有误/逾期
if (revAreaStat.getComSituation() == -1) {
led.setCheckSituation("重新检查");
} else if (revAreaStat.getComSituation() == 1) {
led.setCheckSituation("有误");
} else if (revAreaStat.getComSituation() == 0) {
if (revAreaStat.getComProgress() == 0) {
......@@ -484,6 +490,8 @@ public class DeviceCheckController {
} else {
led.setCheckResult("完成");
}
} else if (revAreaStat.getComProgress() == 3) {
led.setCheckResult("已退回");
} else if (revAreaStat.getComProgress() == 0) {
led.setCheckResult("未开始");
} else if (revAreaStat.getComProgress() == 1) {
......@@ -550,6 +558,12 @@ public class DeviceCheckController {
return ImmutableMap.of("currentTaskPeriod", periodName);
}
/**
* 发起检查时获取核查的标题
*
* @param examJobId
* @return
*/
@GetMapping("/title/{examJobId}")
public ResponseEntity getNames(@PathVariable Integer examJobId) {
// 根据检查的主键id 查询到prov city Stat的title
......@@ -792,15 +806,20 @@ public class DeviceCheckController {
if (ceVo.getExamStatId() == 0) {
cityStatTask = new Task(CHECK_EXAM_STAT_1.id, CHECK_EXAM_STAT_0.name, 0, ".0.", CONFIRM_CHECK_STAT.id, statId, startUnitId)
.parse2Bto();
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask.setCustomInfo("exam");
cityStatTask.getInvolveUserIdList().add(currentUserId);
cityStatTask.getInvolveUserIdList().add(-1);
// 检查变为待办
cityStatTask.getInvolveUserIdList().add(0);
cityStatTask.setCurrentPoint(1);
cityStatTask = taskService.start(cityStatTask);
} else {
// 将原来的待办改为跟踪
cityStatTask = taskRepo.findByBillIdAndBusinessType(ceVo.getExamStatId(), CONFIRM_CHECK_STAT.id).get().parse2Bto();
cityStatTask.getInvolveUserIdList().add(-1);
//检查变为待办
cityStatTask.getInvolveUserIdList().add(0);
cityStatTask.setRemark(String.valueOf(CHECK_EXAM_STAT_1.id));
cityStatTask.setCustomInfo("exam");
cityStatTask.setCurrentPoint(cityStatTask.getCurrentPoint() + 1);
cityStatTask.setCreateUserId(currentUserId);
cityStatTask.setBillStatus(CHECK_EXAM_STAT_1.id);
......@@ -842,6 +861,7 @@ public class DeviceCheckController {
// 3-2 构建被查单位的 自查任务 (根据被查单位的级别来区分是县级状态是市级状态)
TaskBto checkedTask = new TaskBto(CHECK_EXAM_DETAIL_0.id, "自核查任务", cityStatTask.getId(), addNode(cityStatTask.getNodeIdDetail(), cityStatTask.getId()), CONFIRM_CHECK_DETAIL.id, detail.getId(), unit.getUnitId(), 0);
checkedTask.setRemark(String.valueOf(CHECK_EXAM_DETAIL_0.id));
checkedTask.setCustomInfo("manual");
checkedTask = taskService.start(checkedTask);
desBillMap.put(detail.getId(), ed.getRemark());
......@@ -927,8 +947,8 @@ public class DeviceCheckController {
currentTask.getInvolveUserIdList().set(0, authenticationUtils.getAuthentication().getCurrentUserInfo().getUserId());
taskService.moveToNext(currentTask, assignUserId);
log.info("[核查模块] A岗核查操作成功");
//3.将父级以及父级的父级的状态更改为正在进行 找到父级的stat对象
//3.将父级以及父级的父级的状态更改为正在进行 找到父级的stat对象
Integer fatherId = currentTask.getParentTaskId();
Task cityTask = taskRepo.findById(fatherId).get();
Integer cityStatId = cityTask.getBillId();
......@@ -1060,6 +1080,104 @@ public class DeviceCheckController {
return ResponseEntity.ok(new ResultObj<>("专管B操作成功"));
}
/**
* 用于核查的回退接口
*
* @param id 办结的done接口id
* @return
*/
@ApiOperation(value = "核查回退")
@PutMapping("/check/rollback/{id}")
@Transactional(rollbackFor = Exception.class)
public ResponseEntity checkRollback(@PathVariable Integer id) {
log.info("[核查模块] 将id = {} 的检查任务进行回退", id);
Specification<Task> donePred = Specifications.<Task>and()
.eq("billStatus", CONFIRM_STAT_0.id)
.eq("billId", id)
.eq("businessType", CONFIRM_CHECK_STAT.id)
.build();
TaskBto doneTask = taskRepo.findOne(donePred).get().parse2Bto();
Specification<Task> checkPred = Specifications.<Task>and()
.eq("customInfo", "exam")
.eq("billId", id)
.eq("businessType", CONFIRM_CHECK_STAT.id)
.build();
Task checkTask = taskRepo.findOne(checkPred).get();
//1.将市检查的任务节点回退到等待办结的状态
taskService.moveToSpecial(checkTask.parse2Bto(), CHECK_EXAM_STAT_1);
//2.删除掉省的办结任务
if (Objects.isNull(doneTask)) {
log.info("[核查模块] 没有找到对应的办结任务");
} else {
log.info("[核查模块] 删除id = {}的办结任务", doneTask.getId());
taskRepo.deleteById(doneTask.getId());
}
return ResponseEntity.ok(new ResultObj<>("核查回退操作成功!"));
}
/**
* 用于检查页面的回退接口
*
* @param id 自查的detail id
* @return
*/
@ApiOperation(value = "检查回退")
@PutMapping("/exam/rollback/{id}")
@Transactional(rollbackFor = Exception.class)
public ResponseEntity examRollback(@PathVariable Integer id) {
log.info("[核查模块] 进行检查回退操作,要回退的检查detail id为 {}", id);
//1. 回退device-detail数据 包括 detail String,checkResult,userAId,userBid,checkedCount
// 将原来的checkDetail 的检查状态统一更改为 8 - 已退回
String detail = detailRepo.getOne(id).getCheckDetail();
String updateDetail = Arrays.stream(detail.split(","))
.map(s -> s.split("-")[0] + "-" + "8")
.collect(joining(","));
detailRepo.updateCheckDetail(id, updateDetail, "", 0, 0, 0);
//2. 回退任务Task
TaskBto currentTask = taskService.get(id, CONFIRM_CHECK_DETAIL.id);
StatusEnum firstStatus = GlobalMap.getStatusEnumMap().get(Integer.valueOf(currentTask.getRemark()));
taskService.moveToSpecial(currentTask, firstStatus, currentTask.getFirstUserId());
//3.如果父级任务状态已经到确认阶段,则同样回退一个阶段
TaskBto fatherTask = taskService.get(currentTask.getParentTaskId());
// log.info("[核查模块] 父级统计节点的task id = {} , bill id = {}", fatherTask.getId(), fatherTask.getBillId());
// if (fatherTask.getBillStatus().equals(CHECK_EXAM_STAT_1.id)) {
// log.info("[核查模块] 检测到父级节点已经进入确认阶段,回滚父级节点");
// taskService.moveToSpecial(fatherTask, CHECK_EXAM_STAT_0, fatherTask.getFirstUserId());
// }
//3. 回退合并上去的数据
String unitName = detailRepo.findById(id).get().getCheckUnit();
AreaUnit areaUnit = auService.findOne(AuExample.UnitName, unitName);
String cityName = areaUnit.getName();
resetStatByCity(fatherTask.getBillId(), cityName);
return ResponseEntity.ok(new ResultObj<>("检查回退操作成功!"));
}
/**
* 将统计数据中指定城市的统计数据重置
*
* @param statId stat主键id
* @param cityName 要重置的城市名称
*/
private void resetStatByCity(Integer statId, String cityName) {
DeviceCheckStat stat = statRepo.findById(statId).get();
CheckStatVo statVo = transUtil.checkStatDo2Vo(stat);
for (CheckDeviceStatVo vo : statVo.getDeviceStatVoList()) {
for (CheckAreaStatVo cas : vo.getAreaStatList()) {
if (cas.getAreaName().equals(cityName)) {
cas.reset();
}
}
}
statRepo.save(statVo.toDo());
}
@ApiOperation(value = "核查组A/B确认核查详情单")
@PutMapping("/detail/C/{id}")
......@@ -1320,10 +1438,12 @@ public class DeviceCheckController {
CheckAreaStatVo checkAreaStatVo;
// 十位数 1 人工 2 自动
// 0缺失1无误2新增3不在库9未检查
// 0缺失1无误2新增3不在库 8已退回 9未检查
int digits = proofResult % 10;
if (digits == 9) {
if (digits == 8) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 3, -1, statId, detailId);
} else if (digits == 9) {
checkAreaStatVo = new CheckAreaStatVo(areaName, 1, 1, 0, 0, statId, detailId);
} else if (digits == 3) {
//跳过非在库的统计
......@@ -1476,22 +1596,37 @@ public class DeviceCheckController {
comSituationCount += v.getComSituation();
}
//comprogress合并逻辑 if all 0->0 2->2 else 1
for (CheckAreaStatVo v : casList) {
if (v.getComSituation() == -1) {
comSituationCount = -1;
}
}
//comprogress合并逻辑 if all 0->0 2->2 3->3 else 1
boolean isDone = casList.stream()
.mapToInt(CheckAreaStatVo::getComProgress)
.allMatch(value -> value == 2);
boolean isRollbakck = casList.stream()
.mapToInt(CheckAreaStatVo::getComProgress)
.anyMatch(value -> value == 3);
if (progressCount == 0) {
finalProgress = 0;
} else if (isDone) {
finalProgress = 2;
} else if (isRollbakck) {
finalProgress = 3;
} else {
finalProgress = 1;
}
// comsitution 合并逻辑 0->0 , 1->1 , 0,1->1
if (comSituationCount == 0) {
// comsitution 合并逻辑 0->0 , 1->1 , 0,1->1
if (comSituationCount == -1) {
finalSituation = -1;
} else if (comSituationCount == 0) {
finalSituation = 0;
} else {
finalSituation = 1;
......
......@@ -4,10 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.objenesis.ObjenesisHelper;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* CheckAreaStatVo.
......@@ -75,8 +73,20 @@ public class CheckAreaStatVo implements Cloneable {
return this;
}
/**
* 重置该地区的统计数据
*/
public void reset() {
this.actualCount = 0;
this.supposeCount = 0;
this.comProgress = 3;
this.comSituation = -1;
this.areaStatId = 0;
this.areaDetailId = 0;
}
public void start() {
if (this.comProgress !=2){
if (this.comProgress != 2) {
this.comProgress = 1;
}
}
......@@ -194,8 +204,7 @@ public class CheckAreaStatVo implements Cloneable {
}
public RevAreaStat reverse(){
public RevAreaStat reverse() {
return new RevAreaStat(areaName, actualCount, supposeCount, comProgress, comSituation);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论