|
|
|
@ -201,6 +201,7 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
* @return 交接班成功标识 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public Boolean changeShift(ImsDutyRecDTO recDTO) { |
|
|
|
|
// 获取班组组长
|
|
|
|
|
Long managerId = this.getHandleGroupManagerByDuty(recDTO.getDutyId()); |
|
|
|
@ -214,14 +215,22 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
planVO.setRouteName(recDTO.getRouteName()); |
|
|
|
|
planVO.setPlanUsers(Lists.newArrayList(managerId)); |
|
|
|
|
Long inspectTaskId = this.createInspectPlan(planVO); |
|
|
|
|
ImsDutyRecEntity recEntity = BeanUtil.copy(recDTO,ImsDutyRecEntity.class); |
|
|
|
|
recEntity.setInspectTaskId(inspectTaskId); |
|
|
|
|
recDTO.setInspectTaskId(inspectTaskId); |
|
|
|
|
// 返回流程id写入业务表
|
|
|
|
|
recDTO.setExecTime(new Date()); |
|
|
|
|
recDTO.setStatus(DutyRecStatus.EXEC.getVal()); |
|
|
|
|
// 判断交接班是否延时
|
|
|
|
|
Long duration = this.changeShiftDuration(imsDutyMainService.getById(recDTO.getDutyId()), OperationalConstants.DutyRecTypeEnum.HAND_REC.getVal()); |
|
|
|
|
if(Func.isNotEmpty(duration) && duration > 0) { |
|
|
|
|
recDTO.setDelayStatus(DutyContants.DutyRecDelayStatusEnum.HAND_DELAY_STATUS.getStatus()); |
|
|
|
|
} |
|
|
|
|
ImsDutyRecEntity recEntity = BeanUtil.copy(recDTO,ImsDutyRecEntity.class); |
|
|
|
|
if (Func.isEmpty(recEntity.getId())) { |
|
|
|
|
save(recEntity); |
|
|
|
|
} |
|
|
|
|
// 开启值班交接班流程
|
|
|
|
|
BladeFlow bladeFlow = this.startDutyRecProcess(recEntity, managerId); |
|
|
|
|
recDTO.setProcessInstanceId(bladeFlow.getProcessInstanceId()); |
|
|
|
|
recEntity.setProcessInstanceId(bladeFlow.getProcessInstanceId()); |
|
|
|
|
return updateById(recEntity); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -234,28 +243,28 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
ImsDutyMainEntity dutyMain = imsDutyMainMapper.selectById(dutyId); |
|
|
|
|
// 判断是否已交班
|
|
|
|
|
List<ImsDutyRecEntity> dutyRecs = this.list(Wrappers.<ImsDutyRecEntity>lambdaQuery().eq(ImsDutyRecEntity::getDutyId, dutyId)); |
|
|
|
|
Assert.isTrue(CollectionUtil.isNotEmpty(dutyRecs),() -> { |
|
|
|
|
Assert.isTrue(CollectionUtil.isEmpty(dutyRecs),() -> { |
|
|
|
|
throw new ServiceException("您已交班,请勿重复交班!"); |
|
|
|
|
}); |
|
|
|
|
//根据上一班值班id查询值班信息
|
|
|
|
|
ImsDutyMainEntity preDutyMain = imsDutyMainMapper.selectOne(Wrappers.<ImsDutyMainEntity>lambdaQuery().eq(ImsDutyMainEntity::getPreDutyId, dutyId)); |
|
|
|
|
Assert.isTrue(ObjectUtil.isEmpty(preDutyMain),() -> { |
|
|
|
|
ImsDutyMainEntity carryDutyMain = imsDutyMainMapper.selectOne(Wrappers.<ImsDutyMainEntity>lambdaQuery().eq(ImsDutyMainEntity::getPreDutyId, dutyId)); |
|
|
|
|
Assert.isTrue(ObjectUtil.isNotEmpty(carryDutyMain),() -> { |
|
|
|
|
throw new ServiceException("当前时间没有接班人!"); |
|
|
|
|
}); |
|
|
|
|
//获取接班人班组组长
|
|
|
|
|
Long managerId; |
|
|
|
|
if (Func.isNotEmpty(dutyMain.getDutyGroupId())) { |
|
|
|
|
ImsDutyGroupEntity groupEntity = imsDutyGroupService.getById(dutyMain.getDutyGroupId()); |
|
|
|
|
ImsDutyGroupEntity groupEntity = imsDutyGroupService.getById(carryDutyMain.getDutyGroupId()); |
|
|
|
|
ImsDutyGroupPEntity groupPEntity = imsDutyGroupPService.getOne(new LambdaQueryWrapper<ImsDutyGroupPEntity>() {{ |
|
|
|
|
eq(ImsDutyGroupPEntity::getGroupId, groupEntity.getId()); |
|
|
|
|
eq(ImsDutyGroupPEntity::getPersonId, groupEntity.getManagerId()).last(" LIMIT 1"); |
|
|
|
|
}}); |
|
|
|
|
Assert.isTrue(ObjectUtil.isEmpty(groupPEntity), () -> { |
|
|
|
|
Assert.isTrue(ObjectUtil.isNotEmpty(groupPEntity), () -> { |
|
|
|
|
throw new ServiceException("接班班组长不存在,请指定班组长后进行交班!"); |
|
|
|
|
}); |
|
|
|
|
managerId = groupEntity.getManagerId(); |
|
|
|
|
} else { |
|
|
|
|
managerId = Optional.ofNullable(imsDutyMainPersonService.selectByMainId(dutyMain.getId())).filter(CollectionUtil::isNotEmpty) |
|
|
|
|
managerId = Optional.ofNullable(imsDutyMainPersonService.selectByMainId(carryDutyMain.getId())).filter(CollectionUtil::isNotEmpty) |
|
|
|
|
.map(list -> list.get(0)).map(ImsDutyMainPersonEntity::getDutyChargePerson).orElse(null); |
|
|
|
|
} |
|
|
|
|
R<User> manager = userClient.userInfoById(managerId); |
|
|
|
@ -272,16 +281,18 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
*/ |
|
|
|
|
private BladeFlow startDutyRecProcess(ImsDutyRecEntity recEntity ,Long managerId) { |
|
|
|
|
ImsDutyRecDTO recDTO = BeanUtil.copy(recEntity,ImsDutyRecDTO.class); |
|
|
|
|
ImsSchedulingVo currentDuty = imsDutyMainService.getByIdOneV2(recDTO.getId()); |
|
|
|
|
ImsSchedulingVo currentDuty = imsDutyMainService.getByIdOneV2(recDTO.getDutyId()); |
|
|
|
|
recDTO.setHeadDutyMainVo(currentDuty); |
|
|
|
|
List<ImsDutyMainEntity> carryDuties = imsDutyMainService.list(Wrappers.<ImsDutyMainEntity>lambdaQuery().eq(ImsDutyMainEntity::getPreDutyId, recDTO.getId())); |
|
|
|
|
List<ImsDutyMainEntity> carryDuties = imsDutyMainService.list(Wrappers.<ImsDutyMainEntity>lambdaQuery().eq(ImsDutyMainEntity::getPreDutyId, recDTO.getDutyId())); |
|
|
|
|
Assert.isTrue(carryDuties.size() <= 1,() -> { |
|
|
|
|
throw new ServiceException("交班失败,接班不唯一,接班数量为:" + carryDuties.size()); |
|
|
|
|
}); |
|
|
|
|
recDTO.setCarryDutyMainVo(imsDutyMainService.getByIdOneV2(carryDuties.get(0).getId())); |
|
|
|
|
Map<String,Object> variable = BeanUtil.toMap(recDTO); |
|
|
|
|
variable.put("taskId", recEntity.getId()); |
|
|
|
|
variable.put(DutyRecProcessConstant.TASK_VARIABLE_CARRY_USER, TaskUtil.getTaskUser(managerId.toString())); |
|
|
|
|
Map<String,Object> variable = new HashMap(){{ |
|
|
|
|
putAll(BeanUtil.toMap(recDTO)); |
|
|
|
|
put("taskId", recEntity.getId()); |
|
|
|
|
put(DutyRecProcessConstant.TASK_VARIABLE_CARRY_USER, TaskUtil.getTaskUser(managerId.toString())); |
|
|
|
|
}}; |
|
|
|
|
|
|
|
|
|
R<BladeFlow> flowResult = flowClient.startProcessInstanceByKey( |
|
|
|
|
DutyRecProcessConstant.DUTY_REC_FLOW_KEY, |
|
|
|
@ -1244,8 +1255,8 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
vo.setStartTime(startTime.toLocalDate()); |
|
|
|
|
vo.setEndTime(endTime.toLocalDate()); |
|
|
|
|
Map<String, Object> execTime = new HashMap(2){{ |
|
|
|
|
put("execStartTime",startTime.toLocalTime()); |
|
|
|
|
put("execEndTime", startTime.toLocalTime()); |
|
|
|
|
put("execStartTime",DateTimeFormatter.ofPattern(DateUtil.PATTERN_TIME).format(startTime.toLocalTime())); |
|
|
|
|
put("execEndTime", DateTimeFormatter.ofPattern(DateUtil.PATTERN_TIME).format(endTime.toLocalTime())); |
|
|
|
|
}}; |
|
|
|
|
List<Map<String, Object>> execTimeList = Lists.newArrayList(execTime); |
|
|
|
|
vo.setExecTimeJson(JSONObject.toJSONString(execTimeList)); |
|
|
|
@ -1356,16 +1367,24 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@Transactional |
|
|
|
|
public Boolean dealDutyRecFlow(ImsDutyRecDTO recDTO) { |
|
|
|
|
ImsDutyMainEntity headDutyMain = BeanUtil.copy(recDTO.getHeadDutyMainVo(), ImsDutyMainEntity.class); |
|
|
|
|
ImsDutyMainEntity carryDutyMain = BeanUtil.copy(recDTO.getCarryDutyMainVo(), ImsDutyMainEntity.class); |
|
|
|
|
ImsDutyRecEntity dutyRec = BeanUtil.copy(recDTO, ImsDutyRecEntity.class); |
|
|
|
|
|
|
|
|
|
if("接班确认".equals(recDTO.getDealChain())) { |
|
|
|
|
if(StringUtil.isBlank(recDTO.getDealChain())) { |
|
|
|
|
recDTO.setDealChain("结束"); |
|
|
|
|
// 接班确认-获取交接班延时状态
|
|
|
|
|
this.getChangeShiftStatus(carryDutyMain,dutyRec.getDelayStatus(),OperationalConstants.DutyRecTypeEnum.CARRY_REC.getVal()); |
|
|
|
|
recDTO.setDelayStatus(this.getChangeShiftStatus(carryDutyMain,recDTO.getDelayStatus(),OperationalConstants.DutyRecTypeEnum.CARRY_REC.getVal())); |
|
|
|
|
//修改交班人所在主表数据状态为 已完成
|
|
|
|
|
headDutyMain.setStatus(DutyMainStatus.ACCEPT.getVal()); |
|
|
|
|
//修改接班人所在主表数据状态为 值班中
|
|
|
|
|
carryDutyMain.setStatus(DutyMainStatus.EXEC.getVal()); |
|
|
|
|
// 交接班接班信息填充
|
|
|
|
|
recDTO.setStatus(DutyRecStatus.ACCEPT.getVal()); |
|
|
|
|
recDTO.setAcceptTime(new Date()); |
|
|
|
|
recDTO.setQrCodeContent(System.currentTimeMillis() + ""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ImsDutyRecEntity dutyRec = BeanUtil.copy(recDTO, ImsDutyRecEntity.class); |
|
|
|
|
// 更新交班值班
|
|
|
|
|
Assert.isTrue(imsDutyMainService.updateById(headDutyMain),() -> { |
|
|
|
|
throw new RuntimeException("更新交班状态失败,交班执行对象为:"+ JSON.toJSONString(recDTO.getHeadDutyMainVo())); |
|
|
|
@ -1375,9 +1394,7 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
throw new RuntimeException("更新接班状态失败,交班执行对象为:"+ JSON.toJSONString(recDTO.getHeadDutyMainVo())); |
|
|
|
|
}); |
|
|
|
|
// 更新交接班
|
|
|
|
|
Assert.isTrue(this.updateById(dutyRec),() -> { |
|
|
|
|
throw new RuntimeException("更新交接班失败,更新对象为:"+ JSON.toJSONString(recDTO.getHeadDutyMainVo())); |
|
|
|
|
}); |
|
|
|
|
this.updateById(dutyRec); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1403,14 +1420,14 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 交接班时间差 |
|
|
|
|
* @param duty 值班信息 |
|
|
|
|
* @param duty 值班信息 交班为当前值班 接班为下一值班 |
|
|
|
|
* @param type 判断交接班延时类型 - 依据 OperationalConstants.DutyRecTypeEnum 枚举类 |
|
|
|
|
* @return 延时时长 |
|
|
|
|
*/ |
|
|
|
|
private Long changeShiftDuration(ImsDutyMainEntity duty, int type) { |
|
|
|
|
LocalDateTime now = LocalDateTime.now(); |
|
|
|
|
// 获取当前值班班次
|
|
|
|
|
ImsDutyClassEntity dutyClass = imsDutyClassService.getById(duty.getId()); |
|
|
|
|
ImsDutyClassEntity dutyClass = imsDutyClassService.getById(duty.getClassId()); |
|
|
|
|
Assert.isTrue(ObjectUtil.isNotEmpty(dutyClass),()-> { |
|
|
|
|
throw new RuntimeException("接班获取班次失败!"); |
|
|
|
|
}); |
|
|
|
@ -1426,11 +1443,11 @@ public class ImsDutyRecServiceImpl extends BaseServiceImpl<ImsDutyRecMapper, Ims
|
|
|
|
|
} |
|
|
|
|
// 交班延时判断
|
|
|
|
|
if(type == OperationalConstants.DutyRecTypeEnum.HAND_REC.getVal()) { |
|
|
|
|
return Duration.between(now,endDateTime).toMinutes(); |
|
|
|
|
return Duration.between(endDateTime,now).toMinutes(); |
|
|
|
|
} |
|
|
|
|
// 接班延时判断
|
|
|
|
|
else if(type == OperationalConstants.DutyRecTypeEnum.CARRY_REC.getVal()) { |
|
|
|
|
return Duration.between(now,startDateTime).toMinutes(); |
|
|
|
|
return Duration.between(startDateTime,now).toMinutes(); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|