Commit 69eb8a3f authored by 王果's avatar 王果

21052 改造告知限制设备不能多次出现在执行的流程中

parent a9f7b20e
package com.yeejoin.amos.boot.module.jg.api.mapper; package com.yeejoin.amos.boot.module.jg.api.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jg.api.dto.CompanyEquipCountDto;
import com.yeejoin.amos.boot.module.jg.api.dto.JgReformNoticeDto; import com.yeejoin.amos.boot.module.jg.api.dto.JgReformNoticeDto;
import com.yeejoin.amos.boot.module.jg.api.entity.JgReformNotice; import com.yeejoin.amos.boot.module.jg.api.entity.JgReformNotice;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo; import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
...@@ -40,4 +41,6 @@ public interface JgReformNoticeMapper extends CustomBaseMapper<JgReformNotice> { ...@@ -40,4 +41,6 @@ public interface JgReformNoticeMapper extends CustomBaseMapper<JgReformNotice> {
List<Map<String, Object>> queryEquipInformation(@Param("sequenceNbr") long sequenceNbr); List<Map<String, Object>> queryEquipInformation(@Param("sequenceNbr") long sequenceNbr);
void updatePromoter(@Param("id") Long id); void updatePromoter(@Param("id") Long id);
List<CompanyEquipCountDto> queryForFlowingEquipList();
} }
...@@ -203,4 +203,16 @@ ...@@ -203,4 +203,16 @@
set promoter = null set promoter = null
where sequence_nbr = #{id} where sequence_nbr = #{id}
</update> </update>
<select id="queryForFlowingEquipList" resultType="com.yeejoin.amos.boot.module.jg.api.dto.CompanyEquipCountDto">
select
a.install_unit_credit_code as companyCode,
group_concat(b.equ_id) as records
from
tzs_jg_reform_notice a,
tzs_jg_reform_notice_eq b
where
a.sequence_nbr = b.equip_transfer_id
and a.notice_status not in('6614','6615','6610','6617','6616')
GROUP BY a.install_unit_credit_code
</select>
</mapper> </mapper>
...@@ -13,22 +13,26 @@ import com.yeejoin.amos.boot.biz.common.utils.DateUtils; ...@@ -13,22 +13,26 @@ import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey; import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jg.api.dto.*; import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.JgReformNotice; import com.yeejoin.amos.boot.module.jg.api.entity.*;
import com.yeejoin.amos.boot.module.jg.api.entity.JgReformNoticeEq;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum; import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgReformNoticeEqMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgReformNoticeEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgReformNoticeMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgReformNoticeMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgRegistrationHistoryMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgRegistrationHistoryMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgReformNoticeService; import com.yeejoin.amos.boot.module.jg.api.service.IJgReformNoticeService;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo; import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest;
import com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.context.FlowingEquipRedisContext;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient; import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgRegisterInfoService; import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgRegisterInfoService;
import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils; import com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils;
import com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.*; import com.yeejoin.amos.boot.module.ymt.api.mapper.EquipmentCategoryMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.OtherInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.RegistrationInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.SupervisoryCodeInfoMapper;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model; import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO; import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO; import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
...@@ -175,86 +179,99 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -175,86 +179,99 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
*/ */
@SuppressWarnings({"rawtypes", "Duplicates"}) @SuppressWarnings({"rawtypes", "Duplicates"})
public JgReformNoticeDto updateInstallationNotice(String submitType, JgReformNoticeDto noticeDto, String op) { public JgReformNoticeDto updateInstallationNotice(String submitType, JgReformNoticeDto noticeDto, String op) {
if (Objects.isNull(noticeDto) || StringUtils.isEmpty(submitType)) { try {
throw new IllegalArgumentException("参数不能为空"); if (Objects.isNull(noticeDto) || StringUtils.isEmpty(submitType)) {
} throw new IllegalArgumentException("参数不能为空");
// 字段转换 }
this.convertField(noticeDto); // 字段转换
JgReformNotice notice = this.getById(noticeDto.getSequenceNbr()); this.convertField(noticeDto);
if (SUBMIT_TYPE_FLOW.equals(submitType)) { JgReformNotice notice = this.getById(noticeDto.getSequenceNbr());
// 发起流程 this.checkRepeatUsed(submitType, notice);
if (!StringUtils.hasText(noticeDto.getInstanceId())) { if (SUBMIT_TYPE_FLOW.equals(submitType)) {
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO(); // 发起流程
List<ActWorkflowStartDTO> list = new ArrayList<>(); if (!StringUtils.hasText(noticeDto.getInstanceId())) {
ActWorkflowStartDTO dto = new ActWorkflowStartDTO(); ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
dto.setBusinessKey(noticeDto.getSequenceNbr().toString()); List<ActWorkflowStartDTO> list = new ArrayList<>();
dto.setCompleteFirstTask(Boolean.TRUE); ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
dto.setProcessDefinitionKey(PROCESS_DEFINITION_KEY); dto.setBusinessKey(noticeDto.getSequenceNbr().toString());
dto.setNextExecuteUserCompanyCode(noticeDto.getReceiveCompanyCode()); dto.setCompleteFirstTask(Boolean.TRUE);
list.add(dto); dto.setProcessDefinitionKey(PROCESS_DEFINITION_KEY);
actWorkflowBatchDTO.setProcess(list); dto.setNextExecuteUserCompanyCode(noticeDto.getReceiveCompanyCode());
ProcessTaskDTO processTaskDTO = cmWorkflowService.startBatch(actWorkflowBatchDTO).get(0); list.add(dto);
// 提取节点等信息 actWorkflowBatchDTO.setProcess(list);
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0); ProcessTaskDTO processTaskDTO = cmWorkflowService.startBatch(actWorkflowBatchDTO).get(0);
BeanUtils.copyProperties(noticeDto, notice); // 提取节点等信息
if (!ObjectUtils.isEmpty(notice.getInstanceStatus())) { WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0);
notice.setInstanceStatus(notice.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds()); BeanUtils.copyProperties(noticeDto, notice);
if (!ObjectUtils.isEmpty(notice.getInstanceStatus())) {
notice.setInstanceStatus(notice.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds());
} else {
notice.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds());
}
notice.setPromoter(RequestContext.getExeUserId());
notice.setNextExecuteIds(String.join(",", workflowResultDto.getNextExecutorRoleIds()));
notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
notice.setInstanceId(workflowResultDto.getInstanceId());
notice.setNextTaskId(workflowResultDto.getNextTaskId());
notice.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
jgReformNoticeMapper.updateById(notice);
// 删除暂存
commonService.deleteTasksByRelationId(notice.getSequenceNbr() + "");
// 如果为保存并提交,则创建代办
this.buildTask(Collections.singletonList(notice), Collections.singletonList(workflowResultDto));
} else { } else {
notice.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds()); TaskResultDTO dto = new TaskResultDTO();
dto.setResultCode("approvalStatus");
dto.setTaskId(notice.getNextTaskId());
HashMap<String, Object> commMap = new HashMap<>();
if (notice.getNoticeStatus().equals("6614") || notice.getNoticeStatus().equals("6615")) {
commMap.put("approvalStatus", "提交");
} else {
commMap.put("approvalStatus", op);
}
dto.setNextExecuteUserCompanyCode(notice.getReceiveCompanyCode());
dto.setVariable(commMap);
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(notice.getNextTaskId(), dto, op);
// 提取节点等信息
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0);
BeanUtils.copyProperties(noticeDto, notice);
if (!org.apache.commons.lang3.ObjectUtils.isEmpty(notice.getInstanceStatus())) {
notice.setInstanceStatus(notice.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds());
} else {
notice.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds());
}
notice.setPromoter(RequestContext.getExeUserId());
notice.setNextExecuteIds(String.join(",", workflowResultDto.getNextExecutorRoleIds()));
notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
notice.setNextTaskId(workflowResultDto.getNextTaskId());
notice.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
updateById(notice);
// 上个代办改为已办
TaskV2Model taskV2Model = this.updateLastTodo(notice, FlowStatusEnum.TO_BE_PROCESSED);
// 创建新的代办
this.createNewTodo(notice, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED);
} }
notice.setPromoter(RequestContext.getExeUserId()); commonService.saveExecuteFlowData2Redis(notice.getInstanceId(), this.buildInstanceRuntimeData(notice));
notice.setNextExecuteIds(String.join(",", workflowResultDto.getNextExecutorRoleIds()));
notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
notice.setInstanceId(workflowResultDto.getInstanceId());
notice.setNextTaskId(workflowResultDto.getNextTaskId());
notice.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
jgReformNoticeMapper.updateById(notice);
// 删除暂存
commonService.deleteTasksByRelationId(notice.getSequenceNbr() + "");
// 如果为保存并提交,则创建代办
this.buildTask(Collections.singletonList(notice), Collections.singletonList(workflowResultDto));
} else { } else {
TaskResultDTO dto = new TaskResultDTO(); JgReformNotice bean = new JgReformNotice();
dto.setResultCode("approvalStatus"); BeanUtils.copyProperties(noticeDto, bean);
dto.setTaskId(notice.getNextTaskId()); jgReformNoticeMapper.updateById(bean);
HashMap<String, Object> commMap = new HashMap<>();
if (notice.getNoticeStatus().equals("6614") || notice.getNoticeStatus().equals("6615")) {
commMap.put("approvalStatus", "提交");
} else {
commMap.put("approvalStatus", op);
}
dto.setNextExecuteUserCompanyCode(notice.getReceiveCompanyCode());
dto.setVariable(commMap);
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(notice.getNextTaskId(), dto, op);
// 提取节点等信息
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0);
BeanUtils.copyProperties(noticeDto, notice);
if (!org.apache.commons.lang3.ObjectUtils.isEmpty(notice.getInstanceStatus())) {
notice.setInstanceStatus(notice.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds());
} else {
notice.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds());
}
notice.setPromoter(RequestContext.getExeUserId());
notice.setNextExecuteIds(String.join(",", workflowResultDto.getNextExecutorRoleIds()));
notice.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
notice.setNextTaskId(workflowResultDto.getNextTaskId());
notice.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
updateById(notice);
// 上个代办改为已办
TaskV2Model taskV2Model = this.updateLastTodo(notice, FlowStatusEnum.TO_BE_PROCESSED);
// 创建新的代办
this.createNewTodo(notice, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED);
} }
commonService.saveExecuteFlowData2Redis(notice.getInstanceId(), this.buildInstanceRuntimeData(notice)); return noticeDto;
} else { } catch (BadRequest | LocalBadRequest e) {
JgReformNotice bean = new JgReformNotice(); log.error(e.getMessage(), e);
BeanUtils.copyProperties(noticeDto, bean); this.rollBackForDelRedisData();
jgReformNoticeMapper.updateById(bean); throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
this.rollBackForDelRedisData();
throw new BadRequest("安装告知保存失败!");
} finally {
FlowingEquipRedisContext.clean();
} }
return noticeDto;
} }
...@@ -307,7 +324,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -307,7 +324,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
Collection<JgReformNotice> JgReformNotices = this.listByIds(Arrays.asList(sequenceNbrs)); Collection<JgReformNotice> JgReformNotices = this.listByIds(Arrays.asList(sequenceNbrs));
JgReformNotices.forEach(notice -> { JgReformNotices.forEach(notice -> {
// 删除代办 + 中止流程 // 删除代办 + 中止流程
commonService.deleteTaskModel(String.valueOf(notice.getSequenceNbr()),notice.getInstanceId()); commonService.deleteTaskModel(String.valueOf(notice.getSequenceNbr()), notice.getInstanceId());
// 删除单子 // 删除单子
this.baseMapper.deleteById(notice.getSequenceNbr()); this.baseMapper.deleteById(notice.getSequenceNbr());
// 删除对应eq // 删除对应eq
...@@ -354,94 +371,139 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -354,94 +371,139 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
@SuppressWarnings({"Duplicates", "rawtypes"}) @SuppressWarnings({"Duplicates", "rawtypes"})
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public List<JgReformNotice> saveNotice(String submitType, Map<String, Object> JgReformNoticeDtoMap, ReginParams reginParams) { public List<JgReformNotice> saveNotice(String submitType, Map<String, Object> JgReformNoticeDtoMap, ReginParams reginParams) {
JgReformNoticeDto model = JSON.parseObject(JSONObject.toJSONString(JgReformNoticeDtoMap.get(TABLE_PAGE_ID)), JgReformNoticeDto.class); try {
convertField(model); JgReformNoticeDto model = JSON.parseObject(JSONObject.toJSONString(JgReformNoticeDtoMap.get(TABLE_PAGE_ID)), JgReformNoticeDto.class);
// 获取告知设备列表 convertField(model);
List<Map<String, Object>> deviceList = model.getDeviceList(); // 获取告知设备列表
if (CollectionUtils.isEmpty(deviceList)) { List<Map<String, Object>> deviceList = model.getDeviceList();
throw new BadRequest("请选择设备!"); if (CollectionUtils.isEmpty(deviceList)) {
} throw new BadRequest("请选择设备!");
// 获取告知单号 }
ResponseModel<List<String>> codeResult = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.GZGZ.getCode(), deviceList.size()); // 提交时对设备状态进行校验(处理并发问题,一个未被使用的设备同时被多个使用这打开,同时提交发起申请) todo 回滚异常未写
List<String> applyNoList = null;
if (codeResult != null && !ValidationUtil.isEmpty(codeResult.getResult())) {
applyNoList = codeResult.getResult();
}
if (CollectionUtils.isEmpty(applyNoList)) {
throw new BadRequest("申请单编号生成失败,请稍后重试!");
}
// 启动工作流
List<WorkflowResultDto> workflowResultList = this.startWorkFlow(model.getReceiveCompanyCode(), submitType, deviceList);
List<JgReformNotice> list = new ArrayList<>();
List<JgReformNoticeEq> equipList = new ArrayList<>();
List<String> finalApplyNoList = applyNoList;
CompanyBo companyBo = commonService.getOneCompany(model.getReceiveCompanyCode());
deviceList.forEach(obj -> {
JgReformNoticeEq jgRelationEquip = new JgReformNoticeEq();
JgReformNotice dto = new JgReformNotice();
BeanUtils.copyProperties(model, dto);
int i = deviceList.indexOf(obj);
String applyNo = finalApplyNoList.get(i);
dto.setApplyNo(applyNo);
dto.setNoticeDate(new Date());
dto.setCreateUserName(reginParams.getUserModel().getRealName());
dto.setCreateUserId(reginParams.getUserModel().getUserId());
dto.setCreateUserCompanyName(reginParams.getCompany().getCompanyName());
dto.setEquCategory(Objects.toString(obj.get("EQU_CATEGORY"), ""));
dto.setEquListCode(Objects.toString(obj.get("EQU_DEFINE"), ""));
dto.setSupervisoryCode(Objects.toString(obj.get("SUPERVISORY_CODE"), ""));
dto.setEquList(Objects.toString(obj.get("EQU_LIST"), ""));
dto.setFullAddress(Objects.toString(obj.get("ADDRESS"), ""));
// 统计用
dto.setReceiveCompanyOrgCode(companyBo.getOrgCode());
if (SUBMIT_TYPE_FLOW.equals(submitType)) { if (SUBMIT_TYPE_FLOW.equals(submitType)) {
WorkflowResultDto workflowResult = workflowResultList.get(i); this.repeatUsedEquipCheck(deviceList, reginParams.getCompany().getCompanyCode());
dto.setNextExecuteIds(workflowResult.getNextExecutorRoleIds());
dto.setInstanceStatus(workflowResult.getNextExecutorRoleIds() + "," + workflowResult.getExecutorRoleIds());
dto.setPromoter(reginParams.getUserModel().getUserId());
dto.setNextTaskId(workflowResult.getNextTaskId());
dto.setNextExecuteUserIds(workflowResult.getNextExecutorUserIds());
} else {
dto.setNextExecuteUserIds(RequestContext.getExeUserId());
} }
dto.setInstallUnitName(reginParams.getCompany().getCompanyName()); // 获取告知单号
dto.setInstallUnitCreditCode(reginParams.getCompany().getCompanyCode()); ResponseModel<List<String>> codeResult = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.GZGZ.getCode(), deviceList.size());
dto.setEntrustingUnitName(reginParams.getCompany().getCompanyName()); List<String> applyNoList = null;
dto.setEntrustingUnitCreditCode(reginParams.getCompany().getCompanyCode()); if (codeResult != null && !ValidationUtil.isEmpty(codeResult.getResult())) {
jgRelationEquip.setEquId(String.valueOf(obj.get("SEQUENCE_NBR"))); applyNoList = codeResult.getResult();
jgRelationEquip.setEquipTransferId(applyNo);
if (!CollectionUtils.isEmpty(workflowResultList)) {
dto.setInstanceId(workflowResultList.get(i).getInstanceId());
dto.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
} else {
dto.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_SUBMITTED.getCode()));
} }
dto.setCreateUserId(reginParams.getUserModel().getUserId()); if (CollectionUtils.isEmpty(applyNoList)) {
list.add(dto); throw new BadRequest("申请单编号生成失败,请稍后重试!");
equipList.add(jgRelationEquip); }
});
// 启动工作流
List<WorkflowResultDto> workflowResultList = this.startWorkFlow(model.getReceiveCompanyCode(), submitType, deviceList);
List<JgReformNotice> list = new ArrayList<>();
List<JgReformNoticeEq> equipList = new ArrayList<>();
List<String> finalApplyNoList = applyNoList;
CompanyBo companyBo = commonService.getOneCompany(model.getReceiveCompanyCode());
deviceList.forEach(obj -> {
JgReformNoticeEq jgRelationEquip = new JgReformNoticeEq();
JgReformNotice dto = new JgReformNotice();
BeanUtils.copyProperties(model, dto);
int i = deviceList.indexOf(obj);
String applyNo = finalApplyNoList.get(i);
dto.setApplyNo(applyNo);
dto.setNoticeDate(new Date());
dto.setCreateUserName(reginParams.getUserModel().getRealName());
dto.setCreateUserId(reginParams.getUserModel().getUserId());
dto.setCreateUserCompanyName(reginParams.getCompany().getCompanyName());
dto.setEquCategory(Objects.toString(obj.get("EQU_CATEGORY"), ""));
dto.setEquListCode(Objects.toString(obj.get("EQU_DEFINE"), ""));
dto.setSupervisoryCode(Objects.toString(obj.get("SUPERVISORY_CODE"), ""));
dto.setEquList(Objects.toString(obj.get("EQU_LIST"), ""));
dto.setFullAddress(Objects.toString(obj.get("ADDRESS"), ""));
// 统计用
dto.setReceiveCompanyOrgCode(companyBo.getOrgCode());
if (SUBMIT_TYPE_FLOW.equals(submitType)) {
WorkflowResultDto workflowResult = workflowResultList.get(i);
dto.setNextExecuteIds(workflowResult.getNextExecutorRoleIds());
dto.setInstanceStatus(workflowResult.getNextExecutorRoleIds() + "," + workflowResult.getExecutorRoleIds());
dto.setPromoter(reginParams.getUserModel().getUserId());
dto.setNextTaskId(workflowResult.getNextTaskId());
dto.setNextExecuteUserIds(workflowResult.getNextExecutorUserIds());
} else {
dto.setNextExecuteUserIds(RequestContext.getExeUserId());
}
dto.setInstallUnitName(reginParams.getCompany().getCompanyName());
dto.setInstallUnitCreditCode(reginParams.getCompany().getCompanyCode());
dto.setEntrustingUnitName(reginParams.getCompany().getCompanyName());
dto.setEntrustingUnitCreditCode(reginParams.getCompany().getCompanyCode());
jgRelationEquip.setEquId(String.valueOf(obj.get("SEQUENCE_NBR")));
jgRelationEquip.setEquipTransferId(applyNo);
if (!CollectionUtils.isEmpty(workflowResultList)) {
dto.setInstanceId(workflowResultList.get(i).getInstanceId());
dto.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
} else {
dto.setNoticeStatus(String.valueOf(FlowStatusEnum.TO_BE_SUBMITTED.getCode()));
}
dto.setCreateUserId(reginParams.getUserModel().getUserId());
list.add(dto);
equipList.add(jgRelationEquip);
});
jgReformNoticeMapper.insertBatchSomeColumn(list); jgReformNoticeMapper.insertBatchSomeColumn(list);
if (SUBMIT_TYPE_FLOW.equals(submitType)) {
this.buildTask(list, workflowResultList);
} else {
this.saveTempReformNotice(list);
}
List<JgReformNoticeEq> jgRelationEquipList = equipList.stream().map(jgRelationEquip -> {
List<JgReformNotice> collect = list.stream().filter(JgReformNotice -> jgRelationEquip.getEquipTransferId().equals(JgReformNotice.getApplyNo())).collect(Collectors.toList());
Long sequenceNbr = collect.get(0).getSequenceNbr();
return jgRelationEquip.setEquipTransferId(String.valueOf(sequenceNbr));
}).collect(Collectors.toList());
jgReformNoticeEqMapper.insertBatchSomeColumn(jgRelationEquipList);
this.updateRedisBatch(list);
return list;
} catch (BadRequest | LocalBadRequest e) {
log.error(e.getMessage(), e);
this.rollBackForDelRedisData();
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
this.rollBackForDelRedisData();
throw new BadRequest("安装告知保存失败!");
} finally {
FlowingEquipRedisContext.clean();
}
}
private void repeatUsedEquipCheck(List<Map<String, Object>> equipList, String companyCode) {
equipList.forEach(equipMap -> EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY).equipRepeatUsedCheck(String.valueOf(equipMap.get("SEQUENCE_NBR")), companyCode));
}
private void checkRepeatUsed(String submitType, JgReformNotice jgReformNotice) {
if (SUBMIT_TYPE_FLOW.equals(submitType)) { if (SUBMIT_TYPE_FLOW.equals(submitType)) {
this.buildTask(list, workflowResultList); // 流程中校验
} else { LambdaQueryWrapper<JgReformNoticeEq> queryWrapper = new LambdaQueryWrapper<>();
this.saveTempReformNotice(list); queryWrapper.eq(JgReformNoticeEq::getEquipTransferId, jgReformNotice.getSequenceNbr());
JgReformNoticeEq jgRelationEquip = jgReformNoticeEqMapper.selectOne(queryWrapper);
EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.equipRepeatUsedCheck(jgRelationEquip.getEquId(), jgReformNotice.getInstallUnitCreditCode());
} }
List<JgReformNoticeEq> jgRelationEquipList = equipList.stream().map(jgRelationEquip -> { }
List<JgReformNotice> collect = list.stream().filter(JgReformNotice -> jgRelationEquip.getEquipTransferId().equals(JgReformNotice.getApplyNo())).collect(Collectors.toList()); /**
Long sequenceNbr = collect.get(0).getSequenceNbr(); * 删除 redis校验重复引用设备的数据
return jgRelationEquip.setEquipTransferId(String.valueOf(sequenceNbr)); */
}).collect(Collectors.toList()); private void delRepeatUseEquipData(JgReformNotice notice) {
jgReformNoticeEqMapper.insertBatchSomeColumn(jgRelationEquipList); LambdaQueryWrapper<JgReformNoticeEq> queryWrapper = new LambdaQueryWrapper<>();
this.updateRedisBatch(list); queryWrapper.eq(JgReformNoticeEq::getEquipTransferId, notice.getSequenceNbr());
return list; JgReformNoticeEq jgRelationEquip = jgReformNoticeEqMapper.selectOne(queryWrapper);
EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.delDataForCheckEquipRepeatUsed(Collections.singletonList(jgRelationEquip.getEquId()), notice.getInstallUnitCreditCode());
}
private void rollBackForDelRedisData() {
FlowingEquipRedisContext.getContext().forEach(e -> {
EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.delDataForCheckWithKey(e.getData(), e.getRedisKey());
});
} }
private void updateRedisBatch(List<JgReformNotice> jgReformNotices) { private void updateRedisBatch(List<JgReformNotice> jgReformNotices) {
...@@ -680,6 +742,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -680,6 +742,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName()); jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
commonService.rollbackTask(notice.getInstanceId(), jsonObject); commonService.rollbackTask(notice.getInstanceId(), jsonObject);
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(notice)); commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(notice));
this.delRepeatUseEquipData(notice);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
...@@ -788,6 +851,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg ...@@ -788,6 +851,7 @@ public class JgReformNoticeServiceImpl extends BaseService<JgReformNoticeDto, Jg
taskV2Model = this.updateLastTodo(jgReformNotice, FlowStatusEnum.REJECTED); taskV2Model = this.updateLastTodo(jgReformNotice, FlowStatusEnum.REJECTED);
this.createNewTodo(jgReformNotice, workflowResultDto, taskV2Model, FlowStatusEnum.REJECTED); this.createNewTodo(jgReformNotice, workflowResultDto, taskV2Model, FlowStatusEnum.REJECTED);
jgReformNoticeMapper.updateById(jgReformNotice); jgReformNoticeMapper.updateById(jgReformNotice);
this.delRepeatUseEquipData(jgReformNotice);
} }
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jgReformNotice)); commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jgReformNotice));
} catch (InterruptedException e) { } catch (InterruptedException e) {
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.dto.CompanyEquipCountDto;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgReformNoticeMapper;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Component
@Slf4j
public class ReformNoticeEquipUsedCheckImpl extends BaseEquipUsedCheckService {
private RedissonClient redissonClient;
private String bizType = "renovationNoticeNew";
private JgReformNoticeMapper reformNoticeMapper;
public ReformNoticeEquipUsedCheckImpl(RedissonClient redissonClient, JgReformNoticeMapper reformNoticeMapper) {
this.redissonClient = redissonClient;
this.reformNoticeMapper = reformNoticeMapper;
}
@Override
public RedissonClient getRedisClient() {
return redissonClient;
}
@Override
public String getApplyBizType() {
return bizType;
}
@Override
public void init() {
// 初始化已经完成或者在流程中安装告知的设备数据
List<CompanyEquipCountDto> companyEquipCountDtos = reformNoticeMapper.queryForFlowingEquipList();
companyEquipCountDtos.forEach(c -> {
RBucket<Set<String>> rBucket = redissonClient.getBucket(getFlowingEquipRedisKey(c.getCompanyCode(), bizType));
rBucket.set(Arrays.stream(c.getRecords().split(",")).collect(Collectors.toSet()));
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment