Commit 5095588b authored by 刘林's avatar 刘林

fix(jg):更名变更,单位变更三级审核业务处理

parent 6d886fd1
package com.yeejoin.amos.boot.module.jg.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.*;
/**
* 履历信息关系表(气瓶用)
*
* @author system_generator
* @date 2026-01-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="JgResumeInfoEqDto", description="")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class JgResumeInfoEqDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "履历主表ID")
private String resumeId;
@ApiModelProperty(value = "设备ID")
private String equId;
}
package com.yeejoin.amos.boot.module.jg.api.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 监管履历信息关系表
*
* @author system_generator
* @date 2024-05-29
*/
@Data
@Accessors(chain = true)
@TableName("tzs_jg_resume_info_eq")
@Builder
public class JgResumeInfoEq implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "sequence_nbr", type = IdType.ID_WORKER)
private Long sequenceNbr;
/**
* 履历主表id
*/
@TableField("resume_id")
private Long resumeId;
/**
* 设备ID
*/
@TableField("equ_id")
private String equId;
}
package com.yeejoin.amos.boot.module.jg.api.mapper;
import com.yeejoin.amos.boot.module.common.api.mapper.CustomBaseMapper;
import com.yeejoin.amos.boot.module.jg.api.entity.JgResumeInfoEq;
/**
* Mapper 接口
*
* @author system_generator
* @date 2026-01-26
*/
public interface JgResumeInfoEqMapper extends CustomBaseMapper<JgResumeInfoEq> {
}
\ No newline at end of file
......@@ -59,4 +59,6 @@ public interface JgUseRegistrationManageMapper extends BaseMapper<JgUseRegistrat
Integer checkUseRegCertInBusiness(@Param("useRegistrationCode")String useRegistrationCode);
Page<JgUseRegistrationManageDto> queryUseRegistrationManagePage(@Param("page") Page<JgUseRegistrationManageDto> page, @Param("dto") JgUseRegistrationManageDto dto, @Param("sort") SortVo sortMap);
void batchUpdateManageBySeq(@Param("newUseUnitName")String newUseUnitName, @Param("changeReason")String changeReason, @Param("receiveCompanyCode")String receiveCompanyCode, @Param("receiveOrgName")String receiveOrgName, @Param("seqBatch")List<String> seqBatch);
}
package com.yeejoin.amos.boot.module.jg.api.service;
/**
* 接口类
*
* @author system_generator
* @date 2026-01-26
*/
public interface IJgResumeInfoEqService {}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.jg.api.mapper.JgResumeInfoEqMapper">
</mapper>
......@@ -790,4 +790,21 @@
tjurm.create_date DESC
</where>
</select>
<update id="batchUpdateManageBySeq" parameterType="map">
<if test="seqBatch != null and seqBatch.size() > 0">
UPDATE tzs_jg_use_registration_manage
SET
use_unit_name = #{newUseUnitName},
audit_pass_date = CURRENT_DATE,
version = version + 1,
change_reason = #{changeReason},
receive_company_code = #{receiveCompanyCode},
receive_org_name = #{receiveOrgName}
WHERE sequence_nbr IN
<foreach collection="seqBatch" item="seq" open="(" close=")" separator=",">
#{seq}
</foreach>
</if>
</update>
</mapper>
......@@ -181,4 +181,16 @@ public class JgChangeRegistrationNameController extends BaseController {
return ResponseHelper.buildResponse(WorkFlowStatusEnum.getInfoList(code));
}
/**
* 处理更名变更流程结束,业务未结束单子问题
* @param applyNo 申请单号
* @return s
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/handleChangeRegistrationNameWrongData")
@ApiOperation(httpMethod = "POST", value = "处理更名变更流程结束,业务未结束单子问题", notes = "处理更名变更流程结束,业务未结束单子问题")
public ResponseModel<Object> handleChangeRegistrationNameWrongData(@RequestParam("applyNo") String applyNo) {
jgChangeRegistrationNameService.handleChangeRegistrationNameWrongData(applyNo);
return ResponseHelper.buildResponse("ok");
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -9,19 +10,26 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.dao.EsBaseEnterpriseInfoDao;
import com.yeejoin.amos.boot.module.common.api.dao.EsEquipmentDao;
import com.yeejoin.amos.boot.module.common.api.dao.EsUserInfoDao;
import com.yeejoin.amos.boot.module.common.api.entity.ESEquipmentInfo;
import com.yeejoin.amos.boot.module.common.api.entity.EsBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.common.api.entity.EsUserInfo;
import com.yeejoin.amos.boot.module.common.api.enums.CylinderTypeEnum;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.*;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgChangeRegistrationNameEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgChangeRegistrationNameMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgRegistrationHistoryMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.*;
import com.yeejoin.amos.boot.module.jg.api.service.IJgChangeRegistrationNameService;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest;
......@@ -33,11 +41,14 @@ import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.boot.module.common.api.service.ICompensateFlowDataOfRedis;
import com.yeejoin.amos.boot.module.ymt.api.common.StringUtil;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.UseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsBaseIndividuality;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
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.mapper.IdxBizJgUseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.UseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsBaseIndividualityMapper;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.ymt.flc.api.entity.RegUnitInfo;
import com.yeejoin.amos.boot.module.ymt.flc.api.feign.AccessFeignService;
import com.yeejoin.amos.boot.module.ymt.flc.api.mapper.RegUnitInfoMapper;
......@@ -66,10 +77,10 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
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.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
......@@ -113,10 +124,16 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
private RedissonClient redissonClient;
@Autowired
TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper;
private JgResumeInfoServiceImpl jgResumeInfoService;
@Autowired
private JgResumeInfoServiceImpl jgResumeInfoService;
private JgResumeInfoEqMapper jgResumeInfoEqMapper;
@Autowired
private EsBaseEnterpriseInfoDao enterpriseInfoDao;
@Autowired
private EsEquipmentDao esEquipmentDao;
@Autowired
private EsUserInfoDao esUserInfoDao;
public final static String CHANGE_NAME = "更名变更";
public final static String CHANGE_NAME_KEY = "changeName";
......@@ -132,17 +149,26 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
private JgUseRegistrationManageServiceImpl jgUseRegistrationManageService;
@Autowired
private UseInfoMapper useInfoMapper;
private TzsUserInfoMapper useInfoMapper;
@Autowired
private TzsBaseIndividualityMapper individualityMapper;
@Autowired
private IdxBizJgUseInfoMapper jgUseInfoMapper;
@Autowired
private JgCertificateChangeRecordServiceImpl jgCertificateChangeRecordService;
@Autowired
private JgCertificateChangeRecordEqServiceImpl jgCertificateChangeRecordEqService;
private JgCertificateChangeRecordEqMapper jgCertificateChangeRecordEqMapper;
@Autowired
private EventPublisher eventPublisher;
public static final int DB_BATCH_SIZE = 500;
public static final int ES_BATCH_SIZE = 200;
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 600000)
public List<JgChangeRegistrationName> save2(String submitType, JSONObject requestParam) {
......@@ -207,6 +233,12 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
objMap.put(item, param);
});
tzsServiceFeignClient.commonUpdateEsDataByIds(objMap);
Iterable<ESEquipmentInfo> newEsDtos = esEquipmentDao.findAllById(ids);
newEsDtos.forEach(dto -> {
dto.setUSE_UNIT_NAME(jgChangeRegistrationName.getNewUseUnitName());
dto.setREC_DATE(new Date().getTime());
});
esEquipmentDao.saveAll(newEsDtos);
}
@Transactional(rollbackFor = Exception.class)
......@@ -287,7 +319,9 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
} else {
dto.setAuditStatus(String.valueOf(WorkFlowStatusEnum.UNIT_RENAME_SUBMIT.getPass()));
}
dto.setUseUnitCreditCode(reginParams.getCompany().getCompanyCode());
dto.setUseUnitCreditCode(CompanyTypeEnum.INDIVIDUAL.getName().equals(reginParams.getCompany().getCompanyType()) ?
reginParams.getCompany().getCompanyCode().split("_")[1] :
reginParams.getCompany().getCompanyCode());
dto.setCreateUserId(RequestContext.getExeUserId());
dto.setCreateUserName(reginParams.getUserModel().getRealName());
this.save(dto);
......@@ -696,7 +730,6 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
}
}
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000)
public void flowExecute(Long id, String instanceId, String operate, String comment, String nextTaskId) {
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
......@@ -729,7 +762,7 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
//执行流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(taskId, dto, operate);
// 更新下一步执行人、创建待办
updateExecuteIds(instanceId, id, operate, processTaskDTO);
updateExecuteIds(instanceId, jgChangeRegistrationName, operate, processTaskDTO);
this.delRepeatUseEquipData(jgChangeRegistrationName);
} catch (InterruptedException e) {
e.printStackTrace();
......@@ -756,14 +789,13 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
return jgChangeRegistrationName.getReceiveCompanyCode();
}
public void updateExecuteIds(String instanceId, Long sequenceNbr, String operate, ProcessTaskDTO processTaskDTO) {
public void updateExecuteIds(String instanceId, JgChangeRegistrationName jgChangeRegistrationName, String operate, ProcessTaskDTO processTaskDTO) {
List<String> roleListNext = new ArrayList<>();
List<String> roleListAll = new ArrayList<>();
String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName();
String taskName = "";
String nextTaskId = "";
JgChangeRegistrationName jgChangeRegistrationName = this.getBaseMapper().selectById(sequenceNbr);
if (processTaskDTO != null && processTaskDTO.getNextTask() != null && processTaskDTO.getNextTask().size() > 0) {
if (processTaskDTO != null && processTaskDTO.getNextTask() != null && !processTaskDTO.getNextTask().isEmpty()) {
taskCode = processTaskDTO.getNextTask().get(0).getKey();
taskName = processTaskDTO.getNextTask().get(0).getName();
nextTaskId = processTaskDTO.getNextTask().get(0).getId();
......@@ -803,7 +835,6 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
TaskV2Model taskV2Model = updateTaskModel(jgChangeRegistrationName, operate);
// 修改业务信息
updateInfoOther(taskV2Model, jgChangeRegistrationName);
this.sendDataRefreshMsg(jgChangeRegistrationName);
}
// 保存redis最新流程数据
commonService.saveExecuteFlowData2Redis(jgChangeRegistrationName.getInstanceId(), this.buildInstanceRuntimeData(jgChangeRegistrationName));
......@@ -849,45 +880,6 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
}
public void updateInfoOther(TaskV2Model taskV2Model, JgChangeRegistrationName jgChangeRegistrationName) {
// LambdaQueryWrapper<JgChangeRegistrationNameEq> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(JgChangeRegistrationNameEq::getNameChangeRegistrationId, jgChangeRegistrationName.getSequenceNbr());
// List<String> collect = jgChangeRegistrationNameEqService.list(wrapper).stream().map(JgChangeRegistrationNameEq::getEquId).collect(Collectors.toList());
// if (CollUtil.isNotEmpty(collect)) {
// LambdaUpdateWrapper<JgChangeRegistrationReformEq> updateWrapper1 = new LambdaUpdateWrapper<>();
// updateWrapper1.in(JgChangeRegistrationReformEq::getEquId, collect);
// updateWrapper1.ne(JgChangeRegistrationReformEq::getEquipTransferId, jgChangeRegistrationName.getSequenceNbr());
// JgChangeRegistrationReformEq jgChangeRegistrationReformEq = new JgChangeRegistrationReformEq();
// jgChangeRegistrationReformEq.setIsInvalid(Boolean.TRUE);
// jgChangeRegistrationReformEqMapper.update(jgChangeRegistrationReformEq, updateWrapper1);
//
// LambdaUpdateWrapper<JgChangeRegistrationTransferEq> updateWrapper2 = new LambdaUpdateWrapper<>();
// updateWrapper2.in(JgChangeRegistrationTransferEq::getEquId, collect);
// updateWrapper2.ne(JgChangeRegistrationTransferEq::getEquipTransferId, jgChangeRegistrationName.getSequenceNbr());
// JgChangeRegistrationTransferEq jgChangeRegistrationTransferEq = new JgChangeRegistrationTransferEq();
// jgChangeRegistrationReformEq.setIsInvalid(Boolean.TRUE);
// jgChangeRegistrationTransferEqMapper.update(jgChangeRegistrationTransferEq, updateWrapper2);
//
// LambdaUpdateWrapper<JgUseRegistrationEq> updateWrapper3 = new LambdaUpdateWrapper<>();
// updateWrapper3.in(JgUseRegistrationEq::getEquId, collect);
// updateWrapper3.ne(JgUseRegistrationEq::getEquipTransferId, jgChangeRegistrationName.getSequenceNbr());
// JgUseRegistrationEq jgUseRegistrationEq = new JgUseRegistrationEq();
// jgUseRegistrationEq.setIsInvalid(Boolean.TRUE);
// jgUseRegistrationEqMapper.update(jgUseRegistrationEq, updateWrapper3);
//
// LambdaUpdateWrapper<JgChangeRegistrationUnitEq> updateWrapper4 = new LambdaUpdateWrapper<>();
// updateWrapper4.in(JgChangeRegistrationUnitEq::getEquId, collect);
// updateWrapper4.ne(JgChangeRegistrationUnitEq::getUnitChangeRegistrationId, jgChangeRegistrationName.getSequenceNbr());
// JgChangeRegistrationUnitEq jgChangeRegistrationUnitEq = new JgChangeRegistrationUnitEq();
// jgChangeRegistrationUnitEq.setIsInvalid("1");
// jgChangeRegistrationUnitEqMapper.update(jgChangeRegistrationUnitEq, updateWrapper4);
//
// LambdaUpdateWrapper<JgChangeRegistrationNameEq> updateWrapper5 = new LambdaUpdateWrapper<>();
// updateWrapper5.in(JgChangeRegistrationNameEq::getEquId, collect);
// updateWrapper5.ne(JgChangeRegistrationNameEq::getNameChangeRegistrationId, jgChangeRegistrationName.getSequenceNbr());
// JgChangeRegistrationNameEq jgChangeRegistrationNameEq = new JgChangeRegistrationNameEq();
// jgChangeRegistrationNameEq.setIsInvalid("1");
// jgChangeRegistrationNameEqMapper.update(jgChangeRegistrationNameEq, updateWrapper5);
// }
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
LambdaUpdateWrapper<RegUnitInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(RegUnitInfo::getUnitCode, jgChangeRegistrationName.getUseUnitCreditCode());
......@@ -900,6 +892,8 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
.eq(JgChangeRegistrationNameEq::getNameChangeRegistrationId, jgChangeRegistrationName.getSequenceNbr())
.list();
Map<String,String> recordProjectContraptionIdMap = new HashMap<>();
Set<String> cylinderEquipIds = new HashSet<>();
List<String> allEquipIds = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {
Set<String> equipIds = new HashSet<>();
Set<String> certificateSeqList = new HashSet<>();
......@@ -910,134 +904,174 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
.forEach(info -> {
JSONObject json = JSONObject.parseObject(info.toString());
if (json.containsKey("SEQUENCE_NBR")) {
equipIds.add(json.getString("SEQUENCE_NBR"));
// record 装置id map
recordProjectContraptionIdMap.put(json.getString("SEQUENCE_NBR"), json.getString("PROJECT_CONTRAPTION_ID"));
String categoryCode = json.getString("EQU_CATEGORY_CODE");
String seqNbr = json.getString("SEQUENCE_NBR");
if (!ObjectUtils.isEmpty(categoryCode) && !ObjectUtils.isEmpty(seqNbr)) {
(CylinderTypeEnum.CYLINDER.getCode().equals(categoryCode) ? cylinderEquipIds : equipIds).add(seqNbr);
}
}
});
if (item.getCertificateSeq() != null) {
certificateSeqList.add(item.getCertificateSeq());
}
});
if (!CollectionUtils.isEmpty(equipIds)) {
useInfoMapper.update(
new UseInfo().setUseUnitName(jgChangeRegistrationName.getNewUseUnitName()),
Wrappers.<UseInfo>lambdaQuery()
.eq(UseInfo::getUseUnitCreditCode, jgChangeRegistrationName.getUseUnitCreditCode())
.in(UseInfo::getRecord, equipIds)
);
updateEsData(new ArrayList<>(equipIds), jgChangeRegistrationName);
if (CollectionUtil.isNotEmpty(equipIds)) {
allEquipIds.addAll(equipIds);
}
if (CollectionUtil.isNotEmpty(cylinderEquipIds)) {
allEquipIds.addAll(cylinderEquipIds);
}
// 批量更新使用信息
if (CollectionUtil.isNotEmpty(allEquipIds)) {
final String useUnitName = jgChangeRegistrationName.getNewUseUnitName();
final String creditCode = jgChangeRegistrationName.getUseUnitCreditCode();
final List<String> recordList = new ArrayList<>(allEquipIds);
Lists.partition(recordList, DB_BATCH_SIZE)
.forEach(batch -> jgUseInfoMapper.updateUseUnitNameByRecords(useUnitName, creditCode, batch));
Lists.partition(recordList, ES_BATCH_SIZE)
.forEach(batch -> updateEsData(batch, jgChangeRegistrationName));
}
if (!CollectionUtils.isEmpty(certificateSeqList)) {
List<JgUseRegistrationManage> manages = jgUseRegistrationManageService.list(
Wrappers.<JgUseRegistrationManage>lambdaQuery()
.in(JgUseRegistrationManage::getSequenceNbr, certificateSeqList)
);
if (!CollectionUtils.isEmpty(manages)) {
Date now = new Date();
manages.forEach(manage -> manage
.setUseUnitName(jgChangeRegistrationName.getNewUseUnitName())
.setAuditPassDate(now)
.setVersion(manage.getVersion() + 1)
.setReceiveCompanyCode(ValidationUtil.isEmpty(manage.getReceiveCompanyCode())
? jgChangeRegistrationName.getReceiveCompanyCode() : manage.getReceiveCompanyCode()
)
.setReceiveOrgName(ValidationUtil.isEmpty(manage.getReceiveOrgName())
? jgChangeRegistrationName.getReceiveOrgName() : manage.getReceiveOrgName()
)
.setChangeReason(BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName()));
jgUseRegistrationManageService.updateBatchById(manages);
}
final String newUseUnitName = jgChangeRegistrationName.getNewUseUnitName();
final String receiveCompanyCode = jgChangeRegistrationName.getReceiveCompanyCode();
final String receiveOrgName = jgChangeRegistrationName.getReceiveOrgName();
final String changeReason = BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName();
List<String> seqList = new ArrayList<>(certificateSeqList);
Lists.partition(seqList, DB_BATCH_SIZE).forEach(v -> jgUseRegistrationManageService.batchUpdateManageBySeq(newUseUnitName, changeReason,
receiveCompanyCode, receiveOrgName, v));
}
}
// 业务流水生成
JgRegistrationHistory jgRegistrationHistory = jgRegistrationHistoryService.lambdaQuery()
.select(JgRegistrationHistory::getCurrentDocumentId, JgRegistrationHistory::getChangeData)
.eq(JgRegistrationHistory::getCurrentDocumentId, jgChangeRegistrationName.getSequenceNbr())
.eq(JgRegistrationHistory::getIsDelete, false)
.one();
JSONObject jsonObject = JSONObject.parseObject(jgRegistrationHistory.getChangeData());
JSONObject dataList = JSONObject.parseObject(jsonObject.get("jgRegistrationInfo").toString());
JSONArray objects = JSONObject.parseArray(dataList.get("dataList").toString());
ArrayList<JgCertificateChangeRecordEq> jgCertificateChangeRecordEqs = new ArrayList<>();
objects.forEach(useRegistration -> {
JSONObject object = JSONObject.parseObject(useRegistration.toString());
JgCertificateChangeRecord jgCertificateChangeRecord = new JgCertificateChangeRecord();
jgCertificateChangeRecord.setApplyNo(jgChangeRegistrationName.getApplyNo());
jgCertificateChangeRecord.setReceiveOrgName(jgChangeRegistrationName.getReceiveOrgName());
jgCertificateChangeRecord.setAuditPassDate(new Date());
jgCertificateChangeRecord.setRegType(CHANGE_NAME);
jgCertificateChangeRecord.setRegDate(jgChangeRegistrationName.getApplyDate());
FeignClientResult<AgencyUserModel> agencyUserModelFeignClientResult = Privilege.agencyUserClient.queryByUserId(jgChangeRegistrationName.getCreateUserId());
jgCertificateChangeRecord.setChangeContent(jgChangeRegistrationName.getUseUnitName()+"的"+agencyUserModelFeignClientResult.getResult().getRealName() + "办理了【" + CHANGE_NAME + "】," + "单号【" + jgChangeRegistrationName.getApplyNo() +
"】,原" + jgChangeRegistrationName.getUseUnitName() + "变更为" + jgChangeRegistrationName.getNewUseUnitName() + ",办理日期" + sdf.format(jgChangeRegistrationName.getAuditPassDate()));
jgCertificateChangeRecord.setRecUserId(jgChangeRegistrationName.getRecUserId());
jgCertificateChangeRecord.setRecDate(new Date());
jgCertificateChangeRecord.setCreateDate(new Date());
jgCertificateChangeRecord.setCreateUserId(jgChangeRegistrationName.getCreateUserId());
jgCertificateChangeRecord.setUseRegistrationCode(!ObjectUtils.isEmpty(object.get("useRegistrationCode")) ? object.get("useRegistrationCode").toString() : null);
jgCertificateChangeRecord.setCertificateNo(!ObjectUtils.isEmpty(object.get("certificateNo")) ? object.get("certificateNo").toString() : null);
jgCertificateChangeRecord.setUseUnitCreditCode(jgChangeRegistrationName.getUseUnitCreditCode());
jgCertificateChangeRecord.setUseUnitName(jgChangeRegistrationName.getUseUnitName());
jgCertificateChangeRecord.setEquCategory(!ObjectUtils.isEmpty(object.get("equCategoryCode")) ? object.get("equCategoryCode").toString() : null);
jgCertificateChangeRecord.setReceiveCompanyCode(jgChangeRegistrationName.getReceiveOrgCode());
jgCertificateChangeRecord.setRoutePath(taskV2Model.getRoutePath());
// 保存证流水信息
jgCertificateChangeRecordService.save(jgCertificateChangeRecord);
// 生成证下设备流水信息
List<JgChangeRegistrationNameEq> record = list.stream().filter(a -> a.getCertificateSeq().equals(object.get("sequenceNbr"))).collect(Collectors.toList());
record.forEach(item -> {
if (!ObjectUtils.isEmpty(item.getEquipInfo())) {
JSONArray equList = JSONObject.parseArray(item.getEquipInfo());
equList.forEach(info -> {
JSONObject equInfo = JSONObject.parseObject(info.toString());
JgCertificateChangeRecordEq jgCertificateChangeRecordEq = new JgCertificateChangeRecordEq();
jgCertificateChangeRecordEq.setEquId(Objects.isNull(equInfo.get("SEQUENCE_NBR"))? null : equInfo.get("SEQUENCE_NBR").toString());
jgCertificateChangeRecordEq.setChangeRecordId(jgCertificateChangeRecord.getSequenceNbr().toString());
jgCertificateChangeRecordEq.setProductCode(Objects.isNull(equInfo.get("FACTORY_NUM"))? null : equInfo.get("FACTORY_NUM").toString());
jgCertificateChangeRecordEqs.add(jgCertificateChangeRecordEq);
Date now = new Date();
String realName = Privilege.agencyUserClient
.queryByUserId(jgChangeRegistrationName.getCreateUserId())
.getResult()
.getRealName();
Map<String, JgChangeRegistrationNameEq> certMap = list.stream()
.collect(Collectors.toMap(JgChangeRegistrationNameEq::getCertificateSeq, Function.identity()));
JSONArray certificateList = JSONObject.parseArray(dataList.get("dataList").toString());
List<JgCertificateChangeRecord> changeRecords = certificateList.stream()
.map(obj -> (JSONObject) obj)
.map(object -> {
JgCertificateChangeRecord record = new JgCertificateChangeRecord();
record.setApplyNo(jgChangeRegistrationName.getApplyNo());
record.setReceiveOrgName(jgChangeRegistrationName.getReceiveOrgName());
record.setAuditPassDate(now);
record.setRegDate(jgChangeRegistrationName.getApplyDate());
record.setChangeContent(String.format("%s的%s办理了【%s】,单号【%s】,原%s变更为%s,办理日期%s",
jgChangeRegistrationName.getUseUnitName(),
realName,
CHANGE_NAME,
jgChangeRegistrationName.getApplyNo(),
jgChangeRegistrationName.getUseUnitName(),
jgChangeRegistrationName.getNewUseUnitName(),
sdf.format(jgChangeRegistrationName.getAuditPassDate())
));
record.setRecUserId(jgChangeRegistrationName.getRecUserId());
record.setUseRegistrationCode(object.getString("useRegistrationCode"));
record.setCertificateNo(object.getString("certificateNo"));
record.setUseUnitCreditCode(jgChangeRegistrationName.getUseUnitCreditCode());
record.setUseUnitName(jgChangeRegistrationName.getUseUnitName());
record.setEquCategory(object.getString("equCategoryCode"));
record.setReceiveCompanyCode(jgChangeRegistrationName.getReceiveOrgCode());
record.setRoutePath(taskV2Model.getRoutePath());
return record;
})
.collect(Collectors.toList());
Lists.partition(changeRecords, DB_BATCH_SIZE).forEach(batch -> jgCertificateChangeRecordService.saveBatch(batch));
List<JgCertificateChangeRecordEq> eqRecords = certificateList.stream()
.map(obj -> (JSONObject) obj)
.flatMap(object -> {
JgChangeRegistrationNameEq eqItem = certMap.get(object.getString("sequenceNbr"));
if (eqItem == null || StringUtils.isEmpty(eqItem.getEquipInfo())) {
return Stream.empty();
}
JSONArray equList = JSONObject.parseArray(eqItem.getEquipInfo());
return equList.stream().map(info -> {
JSONObject equInfo = (JSONObject) info;
JgCertificateChangeRecordEq eqRecord = new JgCertificateChangeRecordEq();
eqRecord.setEquId(equInfo.getString("SEQUENCE_NBR"));
eqRecord.setProductCode(equInfo.getString("FACTORY_NUM"));
JgCertificateChangeRecord record = changeRecords.stream()
.filter(r -> Objects.equals(r.getCertificateNo(), object.getString("certificateNo")))
.findFirst()
.orElse(null);
eqRecord.setChangeRecordId(record != null ? String.valueOf(record.getSequenceNbr()) : null);
return eqRecord;
});
}
});
});
// 保存设备流水信息
jgCertificateChangeRecordEqService.saveBatch(jgCertificateChangeRecordEqs);
})
.collect(Collectors.toList());
Lists.partition(eqRecords, DB_BATCH_SIZE).forEach(batch -> jgCertificateChangeRecordEqMapper.insertBatchSomeColumn(batch));
// 当企业下所有使用登记证单位信息都改为最新的时候再去修改系统中单位信息
Integer count = jgUseRegistrationManageService.lambdaQuery()
.eq(JgUseRegistrationManage::getUseUnitCreditCode, jgChangeRegistrationName.getUseUnitCreditCode())
.eq(JgUseRegistrationManage::getIsDelete,0)
.eq(JgUseRegistrationManage::getUseUnitName, jgChangeRegistrationName.getUseUnitName()).count();
if (count == 0) {
// 修改企业信息
LambdaUpdateWrapper<TzBaseEnterpriseInfo> updateWrapper2 = new LambdaUpdateWrapper<>();
updateWrapper2.eq(TzBaseEnterpriseInfo::getUseCode, jgChangeRegistrationName.getUseUnitCreditCode());
TzBaseEnterpriseInfo tzBaseEnterpriseInfo = tzBaseEnterpriseInfoMapper.selectOne(updateWrapper2);
if (!ValidationUtil.isEmpty(tzBaseEnterpriseInfo)) {
String unitType = tzBaseEnterpriseInfo.getUnitType();
tzBaseEnterpriseInfo.setUseUnit(jgChangeRegistrationName.getNewUseUnitName());
tzBaseEnterpriseInfoMapper.update(tzBaseEnterpriseInfo, updateWrapper2);
//修改平台机构名称
try {
Optional.ofNullable(tzBaseEnterpriseInfoMapper.selectOne(
Wrappers.<TzBaseEnterpriseInfo>lambdaQuery()
.eq(TzBaseEnterpriseInfo::getUseUnitCode, jgChangeRegistrationName.getUseUnitCreditCode())
))
.ifPresent(enterprise -> {
String newName = jgChangeRegistrationName.getNewUseUnitName();
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(unitType)) {
newName = String.format("%s_%s", jgChangeRegistrationName.getUseUnitCreditCode().split("_")[1], jgChangeRegistrationName.getNewUseUnitName());
enterprise.setUseUnit(newName);
tzBaseEnterpriseInfoMapper.updateById(enterprise);
EsBaseEnterpriseInfo esBaseEnterpriseInfo = new EsBaseEnterpriseInfo();
BeanUtil.copyProperties(enterprise, esBaseEnterpriseInfo);
enterpriseInfoDao.save(esBaseEnterpriseInfo);
// 人员更新冗余的单位信息
List<TzsUserInfo> userOfOneUnit = useInfoMapper.selectList(new LambdaQueryWrapper<TzsUserInfo>().eq(TzsUserInfo::getUnitCode, enterprise.getUseUnitCode()).eq(BaseEntity::getIsDelete, false).select(BaseEntity::getSequenceNbr));
Iterable<EsUserInfo> userInfosEs = esUserInfoDao.findAllById(userOfOneUnit.stream().map(u -> String.valueOf(u.getSequenceNbr())).collect(Collectors.toList()));
userInfosEs.forEach(esUserInfo -> {
esUserInfo.setUnitType(esBaseEnterpriseInfo.getUnitType());
esUserInfo.setSuperviseOrgName(esBaseEnterpriseInfo.getSuperviseOrgName());
esUserInfo.setSuperviseOrgCode(esBaseEnterpriseInfo.getSuperviseOrgCode());
esUserInfo.setOfficeRegion(esBaseEnterpriseInfo.getOfficeRegion());
});
if (userInfosEs.iterator().hasNext()) {
esUserInfoDao.saveAll(userInfosEs);
}
Privilege.companyClient.updateCompanyName(jgChangeRegistrationName.getUseUnitCreditCode(), newName);
} catch (InnerInvokException e) {
throw new RuntimeException();
}
}
}
// 记录履历
this.createResumeBatch(recordProjectContraptionIdMap, jgChangeRegistrationName, taskV2Model.getRoutePath());
String platformName = CompanyTypeEnum.INDIVIDUAL.getName().equals(enterprise.getUnitType())
? jgChangeRegistrationName.getUseUnitCreditCode() + "_" + newName
: newName;
if (CompanyTypeEnum.INDIVIDUAL.getName().equals(enterprise.getUnitType())){
useInfoMapper.updateBatchUnitName(userOfOneUnit, platformName);
// 更新tz_base_individuality信息
TzsBaseIndividuality individuality = new TzsBaseIndividuality();
individuality.setRealName(jgChangeRegistrationName.getNewUseUnitName());
individualityMapper.update(individuality, new LambdaUpdateWrapper<TzsBaseIndividuality>().eq(TzsBaseIndividuality::getEnterpriseId, enterprise.getSequenceNbr()));
FeignClientResult<AgencyUserModel> agencyUserModel = Privilege.agencyUserClient.queryByUserId(jgChangeRegistrationName.getCreateUserId());
AgencyUserModel userModel = agencyUserModel.getResult();
if (!ObjectUtils.isEmpty(userModel)) {
userModel.setRealName(jgChangeRegistrationName.getNewUseUnitName());
Privilege.agencyUserClient.update(userModel, userModel.getUserId());
}
}
try {
Privilege.companyClient.updateCompanyName(enterprise.getUseCode(), platformName);
} catch (InnerInvokException e) {
throw new RuntimeException(e);
}
});
this.createResumeBatch(recordProjectContraptionIdMap, cylinderEquipIds, jgChangeRegistrationName, taskV2Model.getRoutePath());
}
private void createResumeBatch(Map<String, String> recordProjectContraptionIdMap, JgChangeRegistrationName jgChangeRegistrationName, String routePath) {
private void createResumeBatch(Map<String, String> recordProjectContraptionIdMap, Set<String> cylinderEquipIds, JgChangeRegistrationName jgChangeRegistrationName, String routePath) {
Set<String> projectContraptionIds = new HashSet<>();
Set<String> notPipelineRecords = new HashSet<>();
recordProjectContraptionIdMap.forEach((k,v)->{
......@@ -1049,6 +1083,33 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
notPipelineRecords.add(k);
}
});
if (!cylinderEquipIds.isEmpty()) {
JgResumeInfoDto resumeInfo = JgResumeInfoDto.builder()
.businessType(BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName())
.applyNo(jgChangeRegistrationName.getApplyNo())
.businessId(String.valueOf(jgChangeRegistrationName.getSequenceNbr()))
.status("正常")
.approvalUnitCode(jgChangeRegistrationName.getReceiveCompanyCode())
.approvalUnit(jgChangeRegistrationName.getReceiveOrgName())
.changeContent(BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName() + "业务办理")
.routePath(routePath)
.build();
JgResumeInfo info = new JgResumeInfo();
BeanUtils.copyProperties(resumeInfo, info);
jgResumeInfoService.save(info);
List<JgResumeInfoEq> list = cylinderEquipIds.stream()
.map(e -> JgResumeInfoEq.builder()
.resumeId(info.getSequenceNbr())
.equId(e)
.build())
.collect(Collectors.toList());
for (int i = 0; i < list.size(); i += DB_BATCH_SIZE) {
jgResumeInfoEqMapper.insertBatchSomeColumn(
list.subList(i, Math.min(i + DB_BATCH_SIZE, list.size()))
);
}
}
List<JgResumeInfoDto> resumeInfoDtos = Stream.concat(projectContraptionIds.stream(), notPipelineRecords.stream()).map(e-> JgResumeInfoDto.builder()
.businessType(BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName())
.applyNo(jgChangeRegistrationName.getApplyNo())
......@@ -1063,7 +1124,6 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
jgResumeInfoService.saveBatchResume(resumeInfoDtos);
}
public Map<String, Object> getTableData(JgUseRegistrationManageDto dto) {
HashMap<String, Object> data = new HashMap<>();
List<JgUseRegistrationManageDto> jgUseRegistrationManageDtos = jgUseRegistrationManageService.queryByUseUnitCreditCode(dto);
......@@ -1089,7 +1149,9 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
dtoMap.put("isInProvince", false);
}
} else {
jgChangeRegistrationName.setUseUnitCreditCode(reginParams.getCompany().getCompanyCode());
jgChangeRegistrationName.setUseUnitCreditCode(CompanyTypeEnum.INDIVIDUAL.getName().equals(reginParams.getCompany().getCompanyType()) ?
reginParams.getCompany().getCompanyCode().split("_")[1] :
reginParams.getCompany().getCompanyCode());
jgChangeRegistrationName.setNewUseUnitName(unitName);
jgChangeRegistrationName.setUseUnitName(reginParams.getCompany().getCompanyName());
// 初始时:返回当前登录人的公司信息,用来判断是否新名称是否可编辑
......@@ -1113,7 +1175,7 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
}
private Boolean justIsInProvince(String companyCode) {
TzBaseEnterpriseInfo baseEnterpriseInfo = baseEnterpriseInfoMapper.selectOne(new LambdaQueryWrapper<TzBaseEnterpriseInfo>().eq(TzBaseEnterpriseInfo::getUseCode, companyCode));
TzBaseEnterpriseInfo baseEnterpriseInfo = tzBaseEnterpriseInfoMapper.selectOne(new LambdaQueryWrapper<TzBaseEnterpriseInfo>().eq(TzBaseEnterpriseInfo::getUseCode, companyCode));
if (baseEnterpriseInfo == null) {
log.warn(companyCode + "无企业信息");
return false;
......@@ -1149,4 +1211,26 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
commonService.saveExecuteFlowData2Redis(jgChangeRegistrationName.getInstanceId(), this.buildInstanceRuntimeData(jgChangeRegistrationName));
}
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000)
public void handleChangeRegistrationNameWrongData(String applyNo) {
JgChangeRegistrationName jgChangeRegistrationName = this.baseMapper.selectOne(new LambdaQueryWrapper<JgChangeRegistrationName>()
.in(JgChangeRegistrationName::getApplyNo, applyNo)
.eq(JgChangeRegistrationName::getIsDelete, 0));
WorkflowResultDto workflowResultDto = new WorkflowResultDto();
workflowResultDto.setNextExecutorRoleIds(jgChangeRegistrationName.getNextExecutorIds());
workflowResultDto.setNextTaskCode("已完成");
workflowResultDto.setNextTaskId(jgChangeRegistrationName.getNextTaskId());
workflowResultDto.setNextExecutorUserIds(jgChangeRegistrationName.getNextExecuteUserIds());
jgChangeRegistrationName.setAuditStatus(FlowStatusEnum.TO_BE_FINISHED.getName());
jgChangeRegistrationName.setAuditPassDate(new Date());
// 完成时 下一步骤可执行人清空
jgChangeRegistrationName.setNextExecuteUserIds("");
// 更新代办
TaskV2Model taskV2Model = updateTaskModel(jgChangeRegistrationName, "0");
// 修改业务信息
updateInfoOther(taskV2Model, jgChangeRegistrationName);
commonService.saveExecuteFlowData2Redis(jgChangeRegistrationName.getInstanceId(), this.buildInstanceRuntimeData(jgChangeRegistrationName));
this.getBaseMapper().updateById(jgChangeRegistrationName);
}
}
......@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.olym.shaded.org.apache.commons.collections4.MapUtils;
import com.yeejoin.amos.boot.biz.common.annotation.ResultFieldMapping;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
......@@ -52,7 +53,6 @@ import com.yeejoin.amos.boot.module.ymt.api.mapper.*;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import com.yeejoin.amos.feign.workflow.Workflow;
import com.yeejoin.amos.feign.workflow.model.*;
......@@ -81,9 +81,10 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yeejoin.amos.boot.module.jg.biz.service.impl.JgChangeRegistrationNameServiceImpl.DB_BATCH_SIZE;
import static com.yeejoin.amos.boot.module.jg.biz.service.impl.JgUseRegistrationServiceImpl.getAuditPassedDate;
/**
......@@ -100,7 +101,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
private static final String RECORD = "record";
private static final String SEQUENCE_NBR = "sequenceNbr";
private static final String EQU_CODE_CC = "5000";
private static final int ONCE_MAX_SUBMIT = 2000;
private static final int ONCE_MAX_SUBMIT = 20000;
private static final int ONE_BATCH_SIZE = 1000;
private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废", "已完成");
......@@ -225,6 +226,8 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
private PieLineDataChangeServiceImpl pipelineDataChangeService;
@Autowired
private JgUseRegistrationServiceImpl jgUseRegistrationService;
@Autowired
private JgResumeInfoEqMapper jgResumeInfoEqMapper;
/**
* 根据sequenceNbr查询:1、查询单位变更信息,2、查询使用登记证列表
......@@ -909,9 +912,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
if (CollectionUtils.isEmpty(deviceList)) {
throw new BadRequest("请选择设备后提交");
}
if (deviceList.size() > ONCE_MAX_SUBMIT) {
throw new BadRequest("单次提交最多允许 " + ONCE_MAX_SUBMIT + " 条数据,请分批提交!");
}
String applyNo = changeRegistrationUnitDto.getApplyNo();
List<String> applyNoList = ValidationUtil.isEmpty(applyNo)
? Optional.ofNullable(tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.DWBG.getCode(), 1))
......@@ -1317,6 +1318,8 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
List<JgCertificateChangeRecord> changeRecordList = new ArrayList<>();
List<JgCertificateChangeRecordEq> changeRecordEqList = new ArrayList<>();
JSONArray historyJson = JSON.parseArray(historyList.get(0).getChangeData());
FeignClientResult<AgencyUserModel> agencyUserModelFeignClientResult = Privilege.agencyUserClient.queryByUserId(registrationUnit.getCreateUserId());
registrationUnit.setCreateUserName(agencyUserModelFeignClientResult.getResult().getRealName());
for (Object object : historyJson) {
JgCertificateChangeRecord changeRecord = new JgCertificateChangeRecord();
long nextId = sequence.nextId();
......@@ -1811,7 +1814,6 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
* @date 2024/7/18 11:00
**/
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000)
@Transactional(rollbackFor = Exception.class)
public void accept(JgChangeRegistrationUnitDto dto, String op) {
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(dto.getInstanceId());
RLock lock = redissonClient.getLock(lockKey);
......@@ -2123,6 +2125,53 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
}
}
private void extractDeviceBaseInfo(List<Map<String, Object>> deviceList, JgChangeRegistrationUnit registration) {
if (CollUtil.isEmpty(deviceList)) {
return;
}
Map<String, Object> first = deviceList.get(0);
registration.setEquCategory(MapUtils.getString(first, "equCategoryName"));
registration.setEquDefine(MapUtils.getString(first, "equDefineName"));
registration.setEquDefineCode(MapUtils.getString(first, "equDefine"));
}
private IdxBizJgUseInfo buildUseInfo(JgChangeRegistrationUnitDto dto, JgChangeRegistrationUnit registration) {
IdxBizJgUseInfo useInfo = new IdxBizJgUseInfo();
Map<String, String> propertyUnitInfo =
commonServiceImpl.queryTcmUnitInfoBySeq(dto.getEstateUnitSeq(), TcmUnitTypeEnum.CQ.getCode());
if (!ValidationUtil.isEmpty(propertyUnitInfo)) {
useInfo.setEstateUnitCreditCode(propertyUnitInfo.get("unitCode"));
useInfo.setEstateUnitName(propertyUnitInfo.get("unitName"));
}
// 安全管理员
String safetyManager = Optional.ofNullable(registration.getSafetyManager())
.map(s -> s.split("_"))
.filter(arr -> arr.length > 1)
.map(arr -> arr[1])
.orElse("");
// 使用单位信息
useInfo.setPhone(registration.getPhone());
useInfo.setUseUnitCreditCode(registration.getNewUseUnitCreditCode());
useInfo.setUseUnitName(registration.getNewUseUnitName());
useInfo.setSafetyManager(safetyManager);
useInfo.setUsePlace(registration.getUsePlace());
useInfo.setProvinceName("陕西省");
useInfo.setProvince(dto.getProvince());
useInfo.setCity(dto.getCity());
useInfo.setCityName(getRegionNameByCode("city", dto.getCity()));
useInfo.setCounty(dto.getCounty());
useInfo.setCountyName(getRegionNameByCode("region", dto.getCounty()));
useInfo.setFactoryUseSiteStreet(dto.getStreet());
useInfo.setStreetName(getRegionNameByCode("street", dto.getStreet()));
useInfo.setAddress(dto.getFullAddress());
useInfo.setUseDate(dto.getUseDate());
return useInfo;
}
/**
* 处理气瓶单位变更三级审核完成后数据
*/
......@@ -2140,59 +2189,77 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
AtomicReference<Boolean> existedRegistrationFlag = new AtomicReference<>(Boolean.FALSE);
String useRegistrationCode = findOrGenerateUseRegistrationCode(dto, registration, deviceList, existedRegistrationFlag);
// 3. ES批量更新参数 & 需要变更的设备列表
List<String> records = new ArrayList<>(deviceList.size());
Map<String, Map<String, Object>> esUpdateMap = new HashMap<>();
// 4. 更新产权单位信息
Map<String, String> propertyUnitInfo = commonServiceImpl.queryTcmUnitInfoBySeq(dto.getEstateUnitSeq(), TcmUnitTypeEnum.CQ.getCode());
// 提取设备信息(只取第一个)
if (CollUtil.isNotEmpty(deviceList)) {
Map<String, Object> first = deviceList.get(0);
registration.setEquCategory(MapUtils.getString(first, "equCategoryName"));
registration.setEquDefine(MapUtils.getString(first, "equDefineName"));
registration.setEquDefineCode(MapUtils.getString(first, "equDefine"));
}
// 5.更新useInfo、属地、注册信息,准备ES更新内容
for (Map<String, Object> device : deviceList) {
String record = MapUtils.getString(device, RECORD);
records.add(record);
IdxBizJgUseInfo useInfo = fetchUseInfoByRecord(record);
if (useInfo != null) {
updateUseInfoFields(useInfo, dto, registration, propertyUnitInfo);
useInfoMapper.updateById(useInfo);
}
Map<String, Map<String, Object>> esUpdateMap = new HashMap<>(deviceList.size());
// 更新属地
if (!ObjectUtils.isEmpty(dto.getOrgBranchCode())) {
updateSupervisionInfo(record, registration);
}
// 更新注册表中 useOrgCode
updateRegisterInfo(record, useRegistrationCode);
// 准备 ES 更新参数
Map<String, Object> esParams = buildEsUpdateParams(useInfo, registration, useRegistrationCode);
esUpdateMap.put(record, esParams);
}
this.extractDeviceBaseInfo(deviceList, registration);
IdxBizJgUseInfo useInfo = this.buildUseInfo(dto, registration);
Map<String, Object> esParams = this.buildEsUpdateParams(useInfo, registration, useRegistrationCode);
// 6. 批量调用ES更新
if (!esUpdateMap.isEmpty()) {
tzsServiceFeignClient.commonUpdateEsDataByIds(esUpdateMap);
}
deviceList.stream()
.map(device -> MapUtils.getString(device, RECORD))
.filter(ObjectUtils::isNotEmpty)
.forEach(record -> {
records.add(record);
esUpdateMap.put(record, esParams);
});
Lists.partition(records, DB_BATCH_SIZE).forEach(batch -> {
useInfoMapper.batchUpdateUseInfoByRecords(useInfo, batch);
registerInfoMapper.batchUpdateUseOrgCodeByRecord(useRegistrationCode, batch);
idxBizJgSupervisionInfoMapper.batchUpdateSupervisionInfo(
registration.getOrgBranchCode(),
registration.getOrgBranchName(),
batch
);
// ===== ES 分批 =====
Map<String, Map<String, Object>> esBatchMap = batch.stream()
.filter(esUpdateMap::containsKey)
.collect(Collectors.toMap(
Function.identity(),
esUpdateMap::get,
(a, b) -> a
));
if (!esBatchMap.isEmpty()) {
tzsServiceFeignClient.commonUpdateEsDataByIds(esBatchMap);
}
});
// 7. 新增或更新使用登记证管理表
upsertUseRegistrationManage(registration, useRegistrationCode, existedRegistrationFlag.get());
this.upsertUseRegistrationManage(registration, useRegistrationCode, existedRegistrationFlag.get());
this.createResumeForCylinder(records, registration, taskV2Model.getRoutePath());
}
private void createResumeForCylinder(List<String> records, JgChangeRegistrationUnit registration, String routePath) {
if (!records.isEmpty()) {
JgResumeInfoDto resumeInfo = JgResumeInfoDto.builder()
.businessType(BusinessTypeEnum.JG_NAME_CHANGE_REGISTRATION.getName())
.applyNo(registration.getApplyNo())
.businessId(String.valueOf(registration.getSequenceNbr()))
.status("正常")
.approvalUnitCode(registration.getReceiveCompanyCode())
.approvalUnit(registration.getReceiveOrgName())
.changeContent(BusinessTypeEnum.JG_COMPANY_CHANGE_REGISTRATION.getName() + "业务办理")
.routePath(routePath)
.build();
JgResumeInfo info = new JgResumeInfo();
BeanUtils.copyProperties(resumeInfo, info);
jgResumeInfoService.save(info);
List<JgResumeInfoEq> list = records.stream()
.map(e -> JgResumeInfoEq.builder()
.resumeId(info.getSequenceNbr())
.equId(e)
.build())
.collect(Collectors.toList());
// // 8. 发送变更消息、保存变更记录、创建设备履历等后置处理
// this.sendDataRefreshMsg(registration);
// this.saveRecord(registration);
this.createResume(records, registration, taskV2Model.getRoutePath());
//
// // 9. 更新主表并刷新 redis 实时流程数据
// JgChangeRegistrationUnitMapper.updateById(registration);
// commonServiceImpl.saveExecuteFlowData2Redis(dto.getInstanceId(), this.buildInstanceRuntimeData(registration));
//
// // 10. 删除重复使用标识
// this.delRepeatUseEquipData(registration.getApplyNo(), registration.getStatus(), registration.getNewUseUnitCreditCode());
for (int i = 0; i < list.size(); i += DB_BATCH_SIZE) {
jgResumeInfoEqMapper.insertBatchSomeColumn(
list.subList(i, Math.min(i + DB_BATCH_SIZE, list.size()))
);
}
}
}
private String findOrGenerateUseRegistrationCode(JgChangeRegistrationUnitDto dto, JgChangeRegistrationUnit registration,
......@@ -2256,21 +2323,6 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
.setUseDate(dto.getUseDate());
}
private void updateSupervisionInfo(String record, JgChangeRegistrationUnit registration) {
// 查询上级公司信息(保留原逻辑)
HashMap<String, Object> parentMessage = (HashMap<String, Object>) Privilege.companyClient.queryByOrgcode(registration.getOrgBranchCode()).getResult();
CompanyModel parentModel = JSON.parseObject(JSON.toJSONString(parentMessage.get("compnay")), CompanyModel.class);
IdxBizJgSupervisionInfo supervision = new IdxBizJgSupervisionInfo();
supervision.setOrgBranchCode(registration.getOrgBranchCode());
supervision.setOrgBranchName(registration.getOrgBranchName());
supervision.setCompanyOrgBranchCode(parentModel.getCompanyCode());
LambdaQueryWrapper<IdxBizJgSupervisionInfo> eq = new QueryWrapper<IdxBizJgSupervisionInfo>().lambda()
.eq(IdxBizJgSupervisionInfo::getRecord, record);
idxBizJgSupervisionInfoMapper.update(supervision, eq);
}
private void updateRegisterInfo(String record, String useRegistrationCode) {
LambdaUpdateWrapper<IdxBizJgRegisterInfo> update = new UpdateWrapper<IdxBizJgRegisterInfo>().lambda()
.eq(IdxBizJgRegisterInfo::getRecord, record)
......@@ -3102,11 +3154,9 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
}
private String buildRecordContent(JgChangeRegistrationUnit obj) {
FeignClientResult<AgencyUserModel> agencyUserModelFeignClientResult = Privilege.agencyUserClient.queryByUserId(obj.getCreateUserId());
//张三办理了【单位变更】 ,单号【DWBG202407050001】,原恒星电梯单位变更为新恒星电梯有限公司,办理日期2024-07-05
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
return obj.getNewUseUnitName() + "的" + agencyUserModelFeignClientResult.getResult().getRealName() + "办理了【单位变更登记】,单号【"
return obj.getNewUseUnitName() + "的" + obj.getCreateUserName() + "办理了【单位变更登记】,单号【"
+ obj.getApplyNo() + "】,原" + obj.getUseUnitName() + "变更为新"
+ obj.getNewUseUnitName() + ",申请日期" + simpleDateFormat.format(obj.getCreateDate());
}
......@@ -3743,6 +3793,7 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
return resultMap;
}
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 6000000)
public void handleChangeRegistrationUnitWrongData(String applyNo) {
String[] taskName = new String[]{"已完成"};
JgChangeRegistrationUnit registration = this.baseMapper.selectOne(new LambdaQueryWrapper<JgChangeRegistrationUnit>()
......
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.yeejoin.amos.boot.module.jg.api.entity.JgResumeInfoEq;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgResumeInfoEqMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgResumeInfoEqService;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 服务实现类
*
* @author system_generator
* @date 2026-01-26
*/
@Service
public class JgResumeInfoEqServiceImpl extends BaseService<JgResumeInfoEq,JgResumeInfoEq,JgResumeInfoEqMapper> implements IJgResumeInfoEqService {
/**
* 分页查询
*/
public Page<JgResumeInfoEq> queryForJgResumeInfoEqPage(Page<JgResumeInfoEq> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<JgResumeInfoEq> queryForJgResumeInfoEqList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
......@@ -1080,4 +1080,8 @@ public class JgUseRegistrationManageServiceImpl extends BaseService<JgUseRegistr
}
return projectContraptionPage;
}
public void batchUpdateManageBySeq(String newUseUnitName, String changeReason, String receiveCompanyCode, String receiveOrgName, List<String> seqBatch) {
this.baseMapper.batchUpdateManageBySeq(newUseUnitName, changeReason, receiveCompanyCode, receiveOrgName, seqBatch);
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.ymt.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
*
*
* @author system_generator
* @date 2023-08-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_base_individuality")
public class TzsBaseIndividuality extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableField("credentials_type")
private String credentialsType;
/**
*
*/
@TableField("credentials_num")
private String credentialsNum;
/**
*
*/
@TableField("real_name")
private String realName;
/**
*
*/
@TableField("expiration_date_start")
private String expirationDateStart;
/**
*
*/
@TableField("expiration_date_end")
private String expirationDateEnd;
/**
*
*/
@TableField("expiration_date_type")
private String expirationDateType;
/**
*
*/
@TableField("create_date")
private Date createDate;
/**
*
*/
@TableField("enterprise_id")
private Long enterpriseId;
/**
* 证件照片
*/
@TableField("identification_photo")
private String identificationPhoto;
}
......@@ -82,4 +82,7 @@ public interface IdxBizJgRegisterInfoMapper extends CustomBaseMapper<IdxBizJgReg
List<IdxBizJgRegisterInfo> selectDeleteEquipIsNotClaimed(@Param("useUnitCreditCode") String useUnitCreditCode,
@Param("equList")String equList,
@Param("dataSource")String dataSource);
Integer batchUpdateUseOrgCodeByRecord(@Param("useOrgCode") String useOrgCode, @Param("records") List<String> records);
}
......@@ -16,4 +16,7 @@ import java.util.List;
public interface IdxBizJgSupervisionInfoMapper extends CustomBaseMapper<IdxBizJgSupervisionInfo> {
void updateOrgBranchCodeBatch(@Param("dtos") List<ESEquipmentCategoryDto> esEquipmentCategoryDtos);
int batchUpdateSupervisionInfo(@Param("orgBranchCode") String orgBranchCode,@Param("orgBranchName") String orgBranchName,@Param("recordList") List<String> recordList);
}
......@@ -60,4 +60,8 @@ public interface IdxBizJgUseInfoMapper extends CustomBaseMapper<IdxBizJgUseInfo>
List<String> selectUseInfoOfOneVersionWithParams(@Param("version") Integer version,@Param("params") Map<String, Object> params);
List<String> selectRecordList(@Param("shard") Integer shard, @Param("slots") Integer slots);
int batchUpdateUseInfoByRecords(@Param("useInfo") IdxBizJgUseInfo useInfo, @Param("records") List<String> records);
void updateUseUnitNameByRecords(@Param("useUnitName") String useUnitName, @Param("useUnitCreditCode") String useUnitCreditCode, @Param("records") List<String> records);
}
package com.yeejoin.amos.boot.module.ymt.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsBaseIndividuality;
/**
* Mapper 接口
*
* @author system_generator
* @date 2023-08-31
*/
public interface TzsBaseIndividualityMapper extends BaseMapper<TzsBaseIndividuality> {
}
......@@ -21,4 +21,6 @@ public interface TzsUserInfoMapper extends BaseMapper<TzsUserInfo> {
List<TzsUserInfoDto> selectUserPermission(@Param("operator") String operator, @Param("posts") List<String> posts);
List<Map<String, String>> getUserInfoWithExport(@Param("isAdmin") String isAdmin, @Param("ids") List<String> userInfoSeqs);
void updateBatchUnitName(@Param("userInfoList") List<TzsUserInfo> userInfoList, @Param("unitName") String unitName);
}
......@@ -77,6 +77,16 @@
AND jui.DATA_SOURCE = #{dataSource}
AND jui.USE_UNIT_CREDIT_CODE = #{useUnitCreditCode}
</select>
<update id="batchUpdateUseOrgCodeByRecord">
UPDATE idx_biz_jg_register_info
SET "USE_ORG_CODE" = #{useOrgCode}
WHERE "RECORD" IN
<foreach collection="records" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</update>
</mapper>
......@@ -13,6 +13,18 @@
) AS temp_table("ORG_BRANCH_CODE", "ORG_BRANCH_NAME", "RECORD")
WHERE idx_biz_jg_supervision_info."RECORD" = temp_table."RECORD"
</update>
<update id="batchUpdateSupervisionInfo">
UPDATE idx_biz_jg_supervision_info
SET
"ORG_BRANCH_CODE" = #{orgBranchCode},
"ORG_BRANCH_NAME" = #{orgBranchName}
WHERE "RECORD" IN
<foreach collection="recordList" item="record" open="(" separator="," close=")">
#{record}
</foreach>
</update>
</mapper>
......@@ -336,4 +336,48 @@
ABS(MOD(hashtext("RECORD"), #{slots})) = #{shard}
</select>
<update id="batchUpdateUseInfoByRecords">
UPDATE IDX_BIZ_JG_USE_INFO
<set>
<if test="useInfo.estateUnitCreditCode != null">
ESTATE_UNIT_CREDIT_CODE = #{useInfo.estateUnitCreditCode},
</if>
<if test="useInfo.estateUnitName != null">
ESTATE_UNIT_NAME = #{useInfo.estateUnitName},
</if>
phone = #{useInfo.phone},
USE_UNIT_CREDIT_CODE = #{useInfo.useUnitCreditCode},
USE_UNIT_NAME = #{useInfo.useUnitName},
SAFETY_MANAGER = #{useInfo.safetyManager},
USE_PLACE = #{useInfo.usePlace},
PROVINCE_NAME = #{useInfo.provinceName},
PROVINCE = #{useInfo.province},
CITY = #{useInfo.city},
CITY_NAME = #{useInfo.cityName},
COUNTY = #{useInfo.county},
COUNTY_NAME = #{useInfo.countyName},
FACTORY_USE_SITE_STREET = #{useInfo.factoryUseSiteStreet},
STREET_NAME = #{useInfo.streetName},
ADDRESS = #{useInfo.address},
USE_DATE = #{useInfo.useDate}
</set>
WHERE RECORD IN
<foreach collection="records" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</update>
<update id="updateUseUnitNameByRecords">
UPDATE
idx_biz_jg_use_info
SET
USE_UNIT_NAME = #{useUnitName}
WHERE
USE_UNIT_CREDIT_CODE = #{useUnitCreditCode}
and RECORD in
<foreach item="item" collection="records" open="(" close=")" separator=",">
#{item}
</foreach>
</update>
</mapper>
......@@ -129,4 +129,13 @@
</if>
</where>
</select>
<update id="updateBatchUnitName">
UPDATE tzs_user_info
SET unit_name = #{unitName}
WHERE sequence_nbr IN
<foreach item="item" collection="userInfoList" separator="," close=")" open="(">
#{item.sequenceNbr}
</foreach>
</update>
</mapper>
\ No newline at end of file
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