Commit 27a26a7d authored by 刘林's avatar 刘林

fix(jg):修改使用登记作废-气瓶导入作废,删除设备,修改气瓶导入,详情显示错误,修改导入日期校验,添加出厂编码校验

parent 30c86784
......@@ -123,6 +123,16 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
Integer checkFactoryNumUniquenessForVehicleCylinder(String factoryNum,String sequenceNbr);
/**
* 查询出厂编码是否重复
* @param factoryNum 出厂编码
* @param sequenceNbr id
* @return Integer
*/
Integer checkFactoryNumUnique(@Param("factoryNum") String factoryNum,
@Param("sequenceNbr") String sequenceNbr,
@Param("useUnitCreditCode") String useUnitCreditCode);
/**
* 使用登记证编号全库唯一校验
* @param useRegistrationCode
* @return
......
......@@ -903,6 +903,20 @@
</if>
</select>
<select id="checkFactoryNumUnique" resultType="java.lang.Integer">
SELECT
count(1)
FROM
"idx_biz_jg_factory_info" ibjfi
JOIN idx_biz_jg_register_info ibjri ON ibjfi."RECORD" = ibjri."RECORD"
LEFT JOIN idx_biz_jg_use_info ibjui ON ibjri."RECORD" = ibjui."RECORD"
WHERE
ibjri."EQU_LIST" = '2000'
AND ibjri."EQU_CATEGORY" = '2300'
AND ibjfi."FACTORY_NUM" = #{factoryNum}
AND ibjui."USE_UNIT_CREDIT_CODE" = #{useUnitCreditCode}
</select>
<select id="useRegistrationCertificateAccountUnique" resultType="java.lang.Integer">
SELECT COUNT( 1 )
FROM idx_biz_jg_register_info jri
......
......@@ -448,6 +448,13 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
}
}
private void checkFactoryNumUnique(String factoryNum, String useUnitCreditCode, StringBuilder result) {
// 车用气瓶业务里面的 出厂编号/产品编码 校验唯一性(产品编号在车用气瓶范围内全局唯一)
if (commonMapper.checkFactoryNumUnique(factoryNum, null, useUnitCreditCode) > 0) {
result.append("出厂编号/产品编码在该企业中已存在!");
}
}
private void handleError(Exception e, String record) {
log.error("处理异常: " + e.getMessage(), e);
// 删除数据库数据和ES数据
......@@ -2758,25 +2765,30 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
@Override
public Object importPressureData(MultipartFile multipartFile) throws Exception {
List<EquipInfoCylinderExcelDto> aircraftList = new ArrayList<>();
List<String> errorList = new ArrayList<>(); // 临时错误列表,用于批量插入
List<String> innerCodeList = new ArrayList<>(); // 临时列表
List<String> codeList = new ArrayList<>();
List<String> factoryList = new ArrayList<>();
resultError.clear();
useInnerCodeList.clear();
equCodeList.clear();
factoryNumList.clear();
try {
EasyExcel.read(multipartFile.getInputStream(), EquipInfoCylinderExcelDto.class, new AnalysisEventListener<EquipInfoCylinderExcelDto>() {
// 每读取一行就调用该方法
// 每读取一行时调用
@Override
public void invoke(EquipInfoCylinderExcelDto data, AnalysisContext context) {
EquipInfoCylinderExcelDto fireExperts = new EquipInfoCylinderExcelDto();
BeanUtils.copyProperties(data, fireExperts);
resultError.add(checkExcelData(data, context).toString());
aircraftList.add(fireExperts);
useInnerCodeList.add(data.getUseInnerCode());
equCodeList.add(data.getEquCode());
factoryNumList.add("0".equals(data.getWhetherVehicleCylinder()) ? data.getFactoryNum() : null);
// 直接操作原数据,避免不必要的对象复制
errorList.add(checkExcelData(data, context).toString());
aircraftList.add(data); // 直接加入原对象,而不是复制
innerCodeList.add(data.getUseInnerCode());
codeList.add(data.getEquCode());
factoryList.add("0".equals(data.getWhetherVehicleCylinder()) ? data.getFactoryNum() : null);
}
// 全部读取完成就调用该方法
// 全部读取完成后调用
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (CollectionUtils.isEmpty(aircraftList)) {
......@@ -2784,13 +2796,23 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
resultError.add("你上传了一个空数据的Excel文档!");
throw new BadRequest("你上传了一个空数据的Excel文档!");
}
// 批量添加,减少集合操作的次数
resultError.addAll(errorList);
useInnerCodeList.addAll(innerCodeList);
equCodeList.addAll(codeList);
factoryNumList.addAll(factoryList);
}
}).headRowNumber(4).sheet().doRead();
// 检查错误
if (resultError.stream().anyMatch(input -> !input.isEmpty())) {
throw new BadRequest("上传失败!");
}
return aircraftList;
} catch (Exception e) {
// 处理并抛出所有错误
throw new Exception(resultError.stream()
.filter(s -> !s.isEmpty())
.collect(Collectors.joining("<br/>")));
......@@ -3059,11 +3081,20 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
.put("equDefineName", equipInfoDto.getEquDefine())
.put("factoryNum", factoryInfo.getFactoryNum())
.put("chargingMedium", data.getChargingMedium())
.put("productName", data.getProductName())
.put("produceUnitName", factoryInfo.getProduceUnitName())
.put("produceDate", esEquipmentDto.getPRODUCE_DATE())
.put("nominalWorkingPressure", data.getNominalWorkingPressure())
.put("singleBottleVolume", data.getSingleBottleVolume())
.put("singleBottleVolume", data.getSingleBottleVolume())
.put("inspectDate", data.getInspectDate())
.put("equList", equipInfoDto.getEquListCode())
.put("equListName", equipInfoDto.getEquList())
.put("equDefine", equipInfoDto.getEquDefineCode())
.put("equDefineName", equipInfoDto.getEquDefine())
.put("equCategoryName", equipInfoDto.getEquCategory())
.put("manageType", "unit")
.put("equCategory", equipInfoDto.getEquCategoryCode())
.put("record", esEquipmentDto.getSEQUENCE_NBR())
.put("nextInspectDate", inspectionDetectionInfo.getNextInspectDate().toInstant()
.atZone(ZoneId.systemDefault())
......@@ -3082,14 +3113,17 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
.eq(JgUseRegistrationManage::getIsDelete, 0)
.eq(JgUseRegistrationManage::getCertificateStatus, "已登记");
JgUseRegistrationManage jgUseRegistrationManage = jgUseRegistrationManageService.getBaseMapper().selectOne(queryWrapper);
// 使用登记信息
JgUseRegistration jgUseRegistration = new JgUseRegistration();
//历史增补
if (!ValidationUtil.isEmpty(jgUseRegistrationManage)) {
jgUseRegistration.setIsAddEquip("1");
if (jgUseRegistrationManage.getUseUnitCreditCode().equals(company.getCompanyCode())) {
jgUseRegistrationManage.setUseUnitName(company.getCompanyName());
jgUseRegistrationManage.setReceiveOrgName(equipInfoDto.getReceiveOrgName());
jgUseRegistrationManage.setAuditPassDate(new Date());
jgUseRegistrationManage.setRegDate(new Date());
jgUseRegistrationManage.setManageType("unit");
jgUseRegistrationManage.setApplyNo(this.getApplicationNo());
jgUseRegistrationManage.setUseUnitCreditCode(company.getCompanyCode());
jgUseRegistrationManage.setReceiveCompanyCode(equipInfoDto.getReceiveOrgCode());
......@@ -3098,16 +3132,17 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
throw new BadRequest("该使用登记证编号系统已存在,请核对使用登记证编号后,重新上传!");
}
} else {
jgUseRegistration.setIsAddEquip("0");
jgUseRegistrationManage = this.saveRegistrationManage(equipInfoDto, company);
}
// 生成一条tzs_jg_certificate_change_record记录
generateCertificateChangeRecord(jgUseRegistrationManage, changeRecordId);
// 使用登记信息
JgUseRegistration jgUseRegistration = new JgUseRegistration();
jgUseRegistration.setRegDate(new Date());
jgUseRegistration.setReceiveCompanyCode(equipInfoDto.getReceiveOrgCode());
jgUseRegistration.setReceiveOrgName(equipInfoDto.getReceiveOrgName());
jgUseRegistration.setManageType("unit");
jgUseRegistration.setCylinderCategory(registerInfoList.get(0).getCylinderCategory());
jgUseRegistration.setReceiveCompanyOrgCode(commonService.getOneCompany(jgUseRegistration.getReceiveCompanyCode()).getOrgCode());
//使用单位提交
jgUseRegistration.setUseUnitName(CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType()) ?
......@@ -3128,6 +3163,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
JSONObject objectHashMap = new JSONObject();
BeanUtil.beanToMap(jgUseRegistration, objectHashMap, false, false);
objectHashMap.put("equipmentLists", equipmentLists);
objectHashMap.put("EQU_CATEGORY_CODE", equipInfoDto.getEquCategoryCode());
updateHistory(objectHashMap, String.valueOf(jgUseRegistration.getSequenceNbr()));
}
......@@ -3268,6 +3304,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
}
public StringBuilder checkExcelData(EquipInfoCylinderExcelDto data, AnalysisContext context) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
CompanyBo company = reginParams.getCompany();
StringBuilder result = new StringBuilder();
ReadRowHolder readRowHolder = context.readRowHolder();
int rowIndex = readRowHolder.getRowIndex() + 1;
......@@ -3316,8 +3355,10 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
result.append("出厂编号/产品编码不能重复;");
}
checkNotBlank(data.getCylinderCategory(), "气瓶分类不能为空;", result);
checkFactoryNumUnique(data.getFactoryNum(), company.getCompanyCode(), result);
}else{
checkFactoryNumUniquenessForVehicleCylinder(data.getFactoryNum(), result);
}
checkFactoryNumUniqueness(data.getFactoryNum(), null, result);
checkNotBlank(data.getProduceDate(), "制造日期不能为空;", result);
Optional.ofNullable(data.getProduceDate()).ifPresent(v -> checkDateFormatCorrect(v, "制造日期格式不正确;", result));
checkNotBlank(data.getInspectOrgName(), "检测机构名称不能为空;", result);
......@@ -3361,7 +3402,7 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 检查上传Excel中的日期格式是否正确
private void checkDateFormatCorrect(String date, String errorMessage, StringBuilder result) {
if (!date.matches("\\d{4}-\\d{2}-\\d{2}")) {
if (!date.matches("(?!1905)\\d{4}-\\d{2}-\\d{2}")) {
result.append(errorMessage);
}
}
......@@ -3380,9 +3421,9 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
}
}
private void checkFactoryNumUniqueness(String factoryNum, String sequenceNbr, StringBuilder result) {
private void checkFactoryNumUniquenessForVehicleCylinder(String factoryNum, StringBuilder result) {
// 车用气瓶业务里面的 出厂编号/产品编码 校验唯一性(产品编号在车用气瓶范围内全局唯一)
if (commonService.checkFactoryNumUniquenessForVehicleCylinder(factoryNum, sequenceNbr) > 0) {
if (commonService.checkFactoryNumUniquenessForVehicleCylinder(factoryNum, null) > 0) {
result.append("出厂编号/产品编码系统中已存在!");
}
}
......
......@@ -204,6 +204,8 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
private JgInstallationNoticeServiceImpl jgInstallationNoticeService;
@Autowired
private IdxBizJgConstructionInfoMapper constructionInfoMapper;
@Autowired
private SuperviseInfoMapper superviseInfoMapper;
/**
* @param auditPassDate 通过时间
......@@ -2423,16 +2425,40 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
jgUseRegistration.setNextExecuteUserIds("");
jgUseRegistration.setPromoter("");
this.updateById(jgUseRegistration);
// 2.更新关联的业务
processElseDataByStatus(oldStatus, jgUseRegistration);
List<JgUseRegistrationEq> eqList = getJgUseRegistrationEqs(jgUseRegistration);
List<String> records = eqList.stream().map(JgUseRegistrationEq::getEquId).collect(Collectors.toList());
//判断是否为批量导入数据,作废后删除设备信息
if("1".equals(jgUseRegistration.getRegType()) && "unit".equals(jgUseRegistration.getManageType())){
// 构建设备删除的 DTO 列表
List<ESEquipmentCategoryDto> esDtoList = records.stream().map(v -> {
ESEquipmentCategoryDto esDto = new ESEquipmentCategoryDto();
esDto.setSEQUENCE_NBR(v);
return esDto;
}).collect(Collectors.toList());
//删除涉及的19张表的数据
superviseInfoMapper.deleteDataAll(records);
//删除es中的数据
esEquipmentCategory.deleteAll(esDtoList);
}else{
// 处理非批量导入数据,更新关联业务状态
processElseDataByStatus(oldStatus, jgUseRegistration);
// 注册事务提交后的操作
registerAfterCommitTask(records);
}
return jgUseRegistration;
}
/**
* 注册事务提交后的同步操作
*/
private void registerAfterCommitTask(List<String> records) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
eventPublisher.publish(new CancellationEvent(this, eqList.stream().map(JgUseRegistrationEq::getEquId).collect(Collectors.toList())));
// 发布作废事件
eventPublisher.publish(new CancellationEvent(this, records));
}
});
return jgUseRegistration;
}
private void clearUseInfoOfEquip(JgUseRegistration jgUseRegistration) {
......
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