Commit 85731866 authored by 王果's avatar 王果

21052 车用气瓶变更登记校验设备是否在流程中

parent 84ee23f0
package com.yeejoin.amos.boot.module.jg.api.mapper;
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.JgChangeVehicleRegistrationUnitDto;
import com.yeejoin.amos.boot.module.jg.api.entity.JgChangeVehicleRegistrationUnit;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
......@@ -25,4 +26,6 @@ public interface JgChangeVehicleRegistrationUnitMapper extends BaseMapper<JgChan
@Param("orgCode") String orgCode,
@Param("currentUserId") String currentUserId,
@Param("roleIds") List<String> roleIds);
List<CompanyEquipCountDto> queryForFlowingEquipList();
}
......@@ -96,5 +96,14 @@
order by cru.rec_date desc
</select>
<select id="queryForFlowingEquipList" resultType="com.yeejoin.amos.boot.module.jg.api.dto.CompanyEquipCountDto">
select a.use_unit_credit_code as companyCode,
group_concat(b.equ_id) as records
from tzs_jg_change_vehicle_registration_unit a,
tzs_jg_change_vehicle_registration_unit_eq b
where a.sequence_nbr = b.unit_change_id
and a.status in ('三级待受理', '二级待受理', '一级待受理')
GROUP BY a.use_unit_credit_code
</select>
</mapper>
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.JgChangeVehicleRegistrationUnitMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgVehicleInformationMapper;
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 JgChangeVehicleRegistrationUnitEquipUsedCheckImpl extends BaseEquipUsedCheckService {
private RedissonClient redissonClient;
private String bizType = "vehicleGasCylinderChange";
private JgChangeVehicleRegistrationUnitMapper mapper;
public JgChangeVehicleRegistrationUnitEquipUsedCheckImpl(RedissonClient redissonClient, JgChangeVehicleRegistrationUnitMapper mapper) {
this.redissonClient = redissonClient;
this.mapper = mapper;
}
@Override
public RedissonClient getRedisClient() {
return redissonClient;
}
@Override
public String getApplyBizType() {
return bizType;
}
@Override
public void init() {
// 初始化已经完成或者在流程中安装告知的设备数据
List<CompanyEquipCountDto> companyEquipCountDtos = mapper.queryForFlowingEquipList();
companyEquipCountDtos.forEach(c -> {
RBucket<Set<String>> rBucket = redissonClient.getBucket(getFlowingEquipRedisKey(c.getCompanyCode(), bizType));
rBucket.set(Arrays.stream(c.getRecords().split(",")).collect(Collectors.toSet()));
});
}
}
......@@ -17,6 +17,9 @@ import com.yeejoin.amos.boot.module.jg.api.enums.VehicleApanageEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgChangeVehicleRegistrationUnitMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgChangeVehicleRegistrationUnitService;
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.service.ICommonService;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgOtherInfo;
......@@ -43,10 +46,12 @@ import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.yeejoin.amos.boot.module.jg.api.enums.VehicleApanageEnum.XIAN_YANG;
import static com.yeejoin.amos.boot.module.jg.api.enums.VehicleApanageEnum.XI_XIAN;
......@@ -60,6 +65,7 @@ import static com.yeejoin.amos.boot.module.jg.api.enums.VehicleApanageEnum.XI_XI
public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgChangeVehicleRegistrationUnitDto, JgChangeVehicleRegistrationUnit, JgChangeVehicleRegistrationUnitMapper> implements IJgChangeVehicleRegistrationUnitService {
private static final String SUBMIT_TYPE_FLOW = "1";
private static final String PROCESS_DEFINITION_KEY = "vehicleGasCylinderChange";
private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废", "已完成");
private static final String BUSINESS_NAME = "车用气瓶变更";
private static final String template = "发起【车用气瓶变更登记】业务申请,【申请单号:%s】";
@Autowired
......@@ -125,93 +131,145 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 600000)
public List<JgChangeVehicleRegistrationUnit> saveMessage(JSONObject map, ReginParams reginParams) {
JgChangeVehicleRegistrationUnit dto = new JgChangeVehicleRegistrationUnit();
if (!map.containsKey("sequenceNbr")) {
// 新增
BeanUtil.copyProperties(map, dto);
dto.setCreateDate(new Date());
dto.setCreateUserId(reginParams.getUserModel().getUserId());
dto.setCreateUserName(reginParams.getUserModel().getRealName());
dto.setRecDate(new Date());
dto.setRecUserId(reginParams.getUserModel().getUserId());
changeData(dto);
if (map.containsKey("useRegistrationCode") && !ObjectUtils.isEmpty(map.get("useRegistrationCode"))) {
dto.setUseRegistCode(map.get("useRegistrationCode").toString());
try {
JgChangeVehicleRegistrationUnit dto = new JgChangeVehicleRegistrationUnit();
if (!ObjectUtils.isEmpty(map.get("submit")) && SUBMIT_TYPE_FLOW.equals(map.get("submit").toString())) {
if (map.containsKey("dataList")) {
List<Map<String, Object>> equipList = new ArrayList<>();
JSONArray objects = JSONObject.parseArray(JSON.toJSONString(map.get("dataList")));
objects.forEach(data -> {
Map<String, Object> equ = new HashMap<>();
JSONObject object = JSONObject.parseObject(data.toString());
equ.put("record", object.get("record"));
equipList.add(equ);
});
this.repeatUsedEquipCheck(equipList, reginParams.getCompany().getCompanyCode());
}
}
ResponseModel<List<String>> listResponseModel = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.getCode.get(String.valueOf(map.get("businessCode"))), 1);
if (!ObjectUtils.isEmpty(listResponseModel)) {
dto.setApplyNo(listResponseModel.getResult().get(0));
dto.setApplyDate(new Date());
if (!map.containsKey("sequenceNbr")) {
// 新增
BeanUtil.copyProperties(map, dto);
dto.setCreateDate(new Date());
dto.setCreateUserId(reginParams.getUserModel().getUserId());
dto.setCreateUserName(reginParams.getUserModel().getRealName());
dto.setRecDate(new Date());
dto.setRecUserId(reginParams.getUserModel().getUserId());
changeData(dto);
if (map.containsKey("useRegistrationCode") && !ObjectUtils.isEmpty(map.get("useRegistrationCode"))) {
dto.setUseRegistCode(map.get("useRegistrationCode").toString());
}
ResponseModel<List<String>> listResponseModel = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.getCode.get(String.valueOf(map.get("businessCode"))), 1);
if (!ObjectUtils.isEmpty(listResponseModel)) {
dto.setApplyNo(listResponseModel.getResult().get(0));
dto.setApplyDate(new Date());
}
dto.setStatus("使用单位待提交");
this.save(dto);
} else {
// 更新
JgChangeVehicleRegistrationUnit updateDto = this.getById(Long.parseLong(map.get("sequenceNbr").toString()));
BeanUtil.copyProperties(map, updateDto);
changeData(updateDto);
this.updateById(updateDto);
BeanUtil.copyProperties(updateDto, dto);
}
dto.setStatus("使用单位待提交");
this.save(dto);
} else {
// 更新
JgChangeVehicleRegistrationUnit updateDto = this.getById(Long.parseLong(map.get("sequenceNbr").toString()));
BeanUtil.copyProperties(map, updateDto);
changeData(updateDto);
this.updateById(updateDto);
BeanUtil.copyProperties(updateDto, dto);
}
// 更新业务关联设备表
saveChangeVehicleEq(dto, map);
// 更新历史表信息
saveHistory(dto, map);
// 是否发起流程
if (!ObjectUtils.isEmpty(map.get("submit")) && SUBMIT_TYPE_FLOW.equals(map.get("submit").toString())) {
// 删除暂存代办
commonServiceImpl.deleteTasksByRelationId(String.valueOf(dto.getSequenceNbr()));
String instanceId = "";
if (!ObjectUtils.isEmpty(map.get("instanceId"))) {
instanceId = map.get("instanceId").toString();
// 更新业务关联设备表
saveChangeVehicleEq(dto, map);
// 更新历史表信息
saveHistory(dto, map);
// 是否发起流程
if (!ObjectUtils.isEmpty(map.get("submit")) && SUBMIT_TYPE_FLOW.equals(map.get("submit").toString())) {
// 删除暂存代办
commonServiceImpl.deleteTasksByRelationId(String.valueOf(dto.getSequenceNbr()));
String instanceId = "";
if (!ObjectUtils.isEmpty(map.get("instanceId"))) {
instanceId = map.get("instanceId").toString();
} else {
// 启动并执行流程
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO workflowDto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
workflowDto.setProcessDefinitionKey(PROCESS_DEFINITION_KEY);
workflowDto.setBusinessKey("1");
workflowDto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
workflowDto.setNextExecuteUserCompanyCode(dto.getReceiveCompanyCode());
list.add(workflowDto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
updateData(dto.getSequenceNbr(), "0", workflowResultDto, Boolean.TRUE);
}
}
if (!ObjectUtils.isEmpty(instanceId)) {
// 执行流程
flowExecute(dto.getSequenceNbr(), instanceId, "0", "", String.valueOf(map.get("nextTaskId")));
}
} else {
// 启动并执行流程
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO workflowDto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
workflowDto.setProcessDefinitionKey(PROCESS_DEFINITION_KEY);
workflowDto.setBusinessKey("1");
workflowDto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
workflowDto.setNextExecuteUserCompanyCode(dto.getReceiveCompanyCode());
list.add(workflowDto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
updateData(dto.getSequenceNbr(), "0", workflowResultDto, Boolean.TRUE);
if (ObjectUtils.isEmpty(map.get("instanceId"))) {
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto taskDto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(dto, taskMessageDto);
// 数据参数
taskDto.setModel(taskMessageDto);
// 摘要
taskDto.setTaskContent(String.format(template, dto.getApplyNo()));
// 申请单号
taskDto.setTaskCode(dto.getApplyNo());
// 业务类型
taskDto.setTaskType(String.valueOf(BusinessTypeEnum.JG_VEHICLE_GAS_CYLINDER_CHANGE.getCode()));
// 业务主键
taskDto.setRelationId(String.valueOf(dto.getSequenceNbr()));
taskDto.setNextExecuteUser("");
list.add(taskDto);
commonServiceImpl.buildTaskModel(list);
}
}
if (!ObjectUtils.isEmpty(instanceId)) {
// 执行流程
flowExecute(dto.getSequenceNbr(), instanceId, "0", "", String.valueOf(map.get("nextTaskId")));
}
} else {
if (ObjectUtils.isEmpty(map.get("instanceId"))) {
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto taskDto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(dto, taskMessageDto);
// 数据参数
taskDto.setModel(taskMessageDto);
// 摘要
taskDto.setTaskContent(String.format(template, dto.getApplyNo()));
// 申请单号
taskDto.setTaskCode(dto.getApplyNo());
// 业务类型
taskDto.setTaskType(String.valueOf(BusinessTypeEnum.JG_VEHICLE_GAS_CYLINDER_CHANGE.getCode()));
// 业务主键
taskDto.setRelationId(String.valueOf(dto.getSequenceNbr()));
taskDto.setNextExecuteUser("");
list.add(taskDto);
commonServiceImpl.buildTaskModel(list);
}
return Collections.singletonList(dto);
} 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("record")), companyCode));
}
/**
* 删除 redis校验重复引用设备的数据
*/
private void delRepeatUseEquipData(JgChangeVehicleRegistrationUnit notice) {
if (NOT_FLOWING_STATE.contains(notice.getStatus())) {
LambdaQueryWrapper<JgChangeVehicleRegistrationUnitEq> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(JgChangeVehicleRegistrationUnitEq::getUnitChangeId, notice.getSequenceNbr());
List<JgChangeVehicleRegistrationUnitEq> noticeEqList = jgChangeVehicleRegistrationUnitEqService.list(queryWrapper);
noticeEqList.forEach(noticeEq -> EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.delDataForCheckEquipRepeatUsed(Collections.singletonList(noticeEq.getEquId()), notice.getNewUseUnitCreditCode()));
}
return Collections.singletonList(dto);
}
public Page<Map<String, Object>> getPage(Page<JgChangeVehicleRegistrationUnit> page, JgChangeVehicleRegistrationUnitDto dto, String type, ReginParams reginParams) {
private void rollBackForDelRedisData() {
FlowingEquipRedisContext.getContext().forEach(e -> {
EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.delDataForCheckWithKey(e.getData(), e.getRedisKey());
});
}
public Page<Map<String, Object>> getPage
(Page<JgChangeVehicleRegistrationUnit> page, JgChangeVehicleRegistrationUnitDto dto, String type, ReginParams
reginParams) {
String orgCode = reginParams.getCompany().getCompanyCode();
String currentUserId = reginParams.getUserModel().getUserId();
return this.getBaseMapper().getPage(page, dto, type, orgCode, currentUserId, dto.getRoleIds());
......@@ -257,6 +315,7 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
WorkflowResultDto workflowResultDto = resultDto.get(0);
updateData(jgChangeVehicleRegistrationUnit.getSequenceNbr(), operate, workflowResultDto, Boolean.FALSE);
}
this.delRepeatUseEquipData(jgChangeVehicleRegistrationUnit);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
......@@ -267,7 +326,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
}
public JgChangeVehicleRegistrationUnit updateData(Long sequenceNbr, String operate, WorkflowResultDto workflowResultDto, Boolean isFirst) {
public JgChangeVehicleRegistrationUnit updateData(Long sequenceNbr, String operate, WorkflowResultDto
workflowResultDto, Boolean isFirst) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
String role = workflowResultDto.getNextExecutorRoleIds();
String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName();
......@@ -351,7 +411,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
return jgChangeVehicleRegistrationUnit;
}
public void updateEsData(List<String> ids, JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit, String useRegistCode) {
public void updateEsData(List<String> ids, JgChangeVehicleRegistrationUnit
jgChangeVehicleRegistrationUnit, String useRegistCode) {
// 更新es
HashMap<String, Map<String, Object>> objMap = new HashMap<>();
ids.forEach(item -> {
......@@ -452,7 +513,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
/**
* 生成监管码
*/
public void createCode(JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit, String equCategory, String record) {
public void createCode(JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit, String
equCategory, String record) {
Map<String, Object> map = new HashMap<>();
map.put("cityCode", XI_XIAN.getCode().equals(jgChangeVehicleRegistrationUnit.getVehicleApanage()) ? XIAN_YANG.getCode() : jgChangeVehicleRegistrationUnit.getVehicleApanage());
map.put("isXiXian", XI_XIAN.getCode().equals(jgChangeVehicleRegistrationUnit.getVehicleApanage()) ? "1" : "0");
......@@ -487,7 +549,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
return stringResponseModel.getResult();
}
public InstanceRuntimeData buildInstanceRuntimeData(JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit) {
public InstanceRuntimeData buildInstanceRuntimeData(JgChangeVehicleRegistrationUnit
jgChangeVehicleRegistrationUnit) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jgChangeVehicleRegistrationUnit.getNextExecuteUserIds())
.promoter(jgChangeVehicleRegistrationUnit.getPromoter())
......@@ -509,7 +572,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
return commonServiceImpl.updateTaskModel(params);
}
public void buildTask(JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit, WorkflowResultDto workflowResultDto) {
public void buildTask(JgChangeVehicleRegistrationUnit jgChangeVehicleRegistrationUnit, WorkflowResultDto
workflowResultDto) {
// 代办消息
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto();
......@@ -588,7 +652,8 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
/**
* 分页查询
*/
public Page<JgChangeVehicleRegistrationUnitDto> queryForJgChangeVehicleRegistrationUnitPage(Page<JgChangeVehicleRegistrationUnitDto> page) {
public Page<JgChangeVehicleRegistrationUnitDto> queryForJgChangeVehicleRegistrationUnitPage
(Page<JgChangeVehicleRegistrationUnitDto> page) {
return this.queryForPage(page, null, false);
}
......@@ -714,6 +779,7 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
commonServiceImpl.rollbackTask(instanceId, jsonObject);
// redis流程实时数据更新
commonServiceImpl.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(data));
this.delRepeatUseEquipData(data);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
......
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