Commit df59f087 authored by 刘林's avatar 刘林

fix:(jg) 使用登记证编号规则修改

parent b1ba28be
......@@ -250,9 +250,10 @@ public class CommonServiceImpl implements ICommonService {
EquipTechParamPipelineMapper equipTechParamPipelineMapper;
@Autowired
private JgChangeVehicleRegistrationUnitServiceImpl jgChangeVehicleRegistrationUnitService;
@Autowired
private CodeGenServiceImpl codeGenService;
private JgUseRegistrationManageServiceImpl jgUseRegistrationManageService;
@Autowired
private CodeGenServiceImpl codeGenService;
@Value("${qrcode.prefix:https://sxtzsb.sxsei.com:19435/tzs}")
private String qrcodePrefix;
......@@ -1840,13 +1841,38 @@ public class CommonServiceImpl implements ICommonService {
city = specialRegionCode.getName();
}
}
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(equCategoryAbbrName + equipType2MidDigits + "陕" + city);
return stringResponseModel.getResult();
return generateUniqueUseRegistrationCode(equCategoryAbbrName, equipType2MidDigits, city);
}
}
return null;
}
/**
* 生成唯一使用登记编号
*
* @param equCategoryAbbrName 设备种类简称
* @param equipType2MidDigits 设备代码中间两位
* @param city 登记机关代号
* @return 唯一使用登记编号
*/
String generateUniqueUseRegistrationCode(String equCategoryAbbrName, String equipType2MidDigits, String city) {
String useRegistrationCode;
JgUseRegistrationManage jgUseRegistrationManage;
do {
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(equCategoryAbbrName + equipType2MidDigits + "陕" + city);
useRegistrationCode = stringResponseModel.getResult();
// 查询是否已有相同登记证号的记录
jgUseRegistrationManage = jgUseRegistrationManageService.getBaseMapper().selectOne(
new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, useRegistrationCode)
.eq(JgUseRegistrationManage::getIsDelete, 0)
.eq(JgUseRegistrationManage::getCertificateStatus, "已登记")
);
} while (jgUseRegistrationManage != null);
return useRegistrationCode;
}
/**
* 生成使用登记编号
*
......@@ -1896,8 +1922,7 @@ public class CommonServiceImpl implements ICommonService {
city = specialRegionCode.getName();
}
}
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(equCategoryAbbrName + equipType2MidDigits + "陕" + city);
return stringResponseModel.getResult();
return generateUniqueUseRegistrationCode(equCategoryAbbrName, equipType2MidDigits, city);
}
}
return null;
......
......@@ -892,22 +892,6 @@ public class JgChangeRegistrationReformServiceImpl extends BaseService<JgChangeR
return result;
}
/**
* @param supervisoryCode
* @return
* @deprecated 根据监管码或者新的使用登记编码
*/
public String getCode(String supervisoryCode) {
if (!ObjectUtils.isEmpty(supervisoryCode) && supervisoryCode.length() > 5) {
String name = EquipTypeEnum.getMessage(supervisoryCode.substring(1, 2));
String type = supervisoryCode.substring(2, 4);
String city = supervisoryCode.substring(0, 1);
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(name + type + "陕" + city);
return stringResponseModel.getResult();
}
return null;
}
@Override
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
......
......@@ -1321,8 +1321,7 @@ public class JgChangeRegistrationTransferServiceImpl extends BaseService<JgChang
String name = EquipTypeEnum.getMessage(supervisoryCode.substring(1, 2));
String type = supervisoryCode.substring(2, 4);
String city = supervisoryCode.substring(0, 1);
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(name + type + "陕" + city);
return stringResponseModel.getResult();
return commonServiceImpl.generateUniqueUseRegistrationCode(name, type, city);
}
return null;
}
......
......@@ -604,6 +604,15 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
}
List<JSONObject> deviceList = registrationManageService.queryEquByCertificateSeqList(registrationIdList);
if (SUBMIT_TYPE_FLOW.equals(submitType)) {//放在最后面防止前面有异常
//如果是提交,用于校验设备是否已经在流程中,如果不在标记设备已经在流程中
CompanyBo company = reginParams.getCompany();
deviceList.forEach(jsonObject -> EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.equipRepeatUsedCheck(String.valueOf(jsonObject.get("SEQUENCE_NBR")),
CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType()) ?
company.getCompanyCode().split("_")[1] :
company.getCompanyCode()));
}
// 获取单位变更设备列表
if (CollectionUtils.isEmpty(deviceList)) {
throw new BadRequest("使用登记证下无设备");
......@@ -752,16 +761,6 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
registrationHistoryService.getBaseMapper().delete(new LambdaQueryWrapper<JgRegistrationHistory>()
.eq(JgRegistrationHistory::getCurrentDocumentId, registrationUnit.getApplyNo()));
registrationHistoryService.save(jgRegistrationHistory);
if (SUBMIT_TYPE_FLOW.equals(submitType)) {//放在最后面防止前面有异常
//如果是提交,用于校验设备是否已经在流程中,如果不在标记设备已经在流程中
CompanyBo company = reginParams.getCompany();
deviceList.forEach(jsonObject -> EquipUsedCheckStrategyContext.getUsedStrategy(PROCESS_DEFINITION_KEY)
.equipRepeatUsedCheck(String.valueOf(jsonObject.get("SEQUENCE_NBR")),
CompanyTypeEnum.INDIVIDUAL.getName().equals(company.getCompanyType()) ?
company.getCompanyCode().split("_")[1] :
company.getCompanyCode()));
}
return Collections.singletonList(model);
}
......@@ -1133,19 +1132,6 @@ public class JgChangeRegistrationUnitServiceImpl extends BaseService<JgChangeReg
jgChangeRegistrationNameEqMapper.updateEquipIsVaildByEquipIdAndCurrentDocumentId(equId, equipTransferId);
}
public String getCode(String supervisoryCode) {
if (!ObjectUtils.isEmpty(supervisoryCode) && supervisoryCode.length() > 5) {
String name = EquipTypeEnum.getMessage(supervisoryCode.substring(1, 2));
String type = supervisoryCode.substring(2, 4);
String city = supervisoryCode.substring(0, 1);
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(name + type + "陕" + city);
return stringResponseModel.getResult();
}
return null;
}
/**
* 导出使用登记证
*
......
......@@ -603,9 +603,20 @@ public class JgChangeVehicleRegistrationUnitServiceImpl extends BaseService<JgCh
private String generateVehicleUseRegistrationCode(String receiveCompanyCode, String equDefineCode) {
// 构建设备种类简称
String useRegistration = String.format("瓶%s%s", equDefineCode.substring(1, 3), VehicleApanageEnum.of(receiveCompanyCode));
// 调用服务端获取注册码
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(useRegistration);
return stringResponseModel.getResult();
String useRegistrationCode;
JgUseRegistrationManage jgUseRegistrationManage;
do {
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(useRegistration);
useRegistrationCode = stringResponseModel.getResult();
// 查询是否已有相同登记证号的记录
jgUseRegistrationManage = jgUseRegistrationManageService.getBaseMapper().selectOne(
new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, useRegistrationCode)
.eq(JgUseRegistrationManage::getIsDelete, 0)
.eq(JgUseRegistrationManage::getCertificateStatus, "已登记")
);
} while (jgUseRegistrationManage != null);
return useRegistrationCode;
}
public InstanceRuntimeData buildInstanceRuntimeData(JgChangeVehicleRegistrationUnit
......
......@@ -1972,8 +1972,10 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
// 查询管道设备详情
jsonObject.put("equipmentLists", jgUseRegistrationMapper.queryForUnitPipelineEquipment(records));
}
} else {
this.setPieLineInspectInfo(jgUseRegistration.getProjectContraptionId(), jsonObject);
this.setConstructionInfo(jgUseRegistration.getProjectContraptionId(), jsonObject);
}
this.fillLastEquipDetail(jsonObject, record);//历史管道信息,查询详情
}
jsonObject.put("useRegistrationCode", jgUseRegistration.getUseRegistrationCode());
// 转化 附件 字段
......@@ -2036,9 +2038,6 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
return result;
}
public Map<String, Object> getDetailByIdx(String record) {
// 基本信息 + 制造信息
Map<String, Object> detail = this.baseMapper.getDetail(record);
......@@ -2174,23 +2173,6 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
return permissionInspectTypes;
}
/**
* 参数为监管码
*
* @param supervisoryCode
* @return
*/
public String getCode(String supervisoryCode) {
if (!ObjectUtils.isEmpty(supervisoryCode) && supervisoryCode.length() > 5) {
String name = EquipTypeEnum.getMessage(supervisoryCode.substring(1, 2));
String type = supervisoryCode.substring(2, 4);
String city = supervisoryCode.substring(0, 1);
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(name + type + "陕" + city);
return stringResponseModel.getResult();
}
return null;
}
public void exportUseRegistrationCertificate(String sequenceNbr, HttpServletResponse response, String printType) {
Map<String, Object> exportParamsMap = new HashMap<>();
// 查询使用登记详情
......
......@@ -1119,11 +1119,20 @@ public class JgVehicleInformationServiceImpl extends BaseService<JgVehicleInform
* @return String
*/
private String generateVehicleUseRegistrationCode(String receiveCompanyCode, String equDefineCode) {
// 构建设备种类简称
String useRegistration = String.format("瓶%s%s", equDefineCode.substring(1, 3), VehicleApanageEnum.of(receiveCompanyCode));
// 调用服务端获取注册码
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(useRegistration);
return stringResponseModel.getResult();
String useRegistrationCode;
JgUseRegistrationManage jgUseRegistrationManage;
do {
ResponseModel<String> stringResponseModel = tzsServiceFeignClient.useRegistrationCode(useRegistration);
useRegistrationCode = stringResponseModel.getResult();
jgUseRegistrationManage = jgUseRegistrationManageService.getBaseMapper().selectOne(
new LambdaQueryWrapper<JgUseRegistrationManage>()
.eq(JgUseRegistrationManage::getUseRegistrationCode, useRegistrationCode)
.eq(JgUseRegistrationManage::getIsDelete, 0)
.eq(JgUseRegistrationManage::getCertificateStatus, "已登记")
);
} while (jgUseRegistrationManage != null);
return useRegistrationCode;
}
/**
......
......@@ -84,7 +84,7 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
@Override
public String createUseRegistrationCode(String key) {
rulePrefix = "(" + LocalDate.now().format(DateTimeFormatter.ofPattern("yy")) + ")";
return (key.length() == 5) ? generateSequence(key, SEQUENCE_TYPE_UR, LOCK_KEY_UR) : "生成码规则不对!";
return (key.length() == 5) ? generateUseRegistrationSequence(key, LOCK_KEY_UR) : "生成码规则不对!";
}
@Override
......@@ -318,6 +318,109 @@ public class GenerateCodeServiceImpl implements IGenerateCodeService {
}
/**
* 生成使用登记证编号(13位,起11陕C00001(23))
*
* @param sequenceKey key(起11陕C)
* @return 顺序编号(value(00001,或者A0001,B0001))
* rulePrefix (年份24)
*/
public String generateUseRegistrationSequence(String sequenceKey, String lockKey) {
// 使用分布式锁,确保在并发情况下只有一个线程能够生成顺序码
RLock lock = redissonClient.getLock(lockKey);
try {
// 尝试获取锁,最多等待 10 秒,锁自动释放时间为 30 秒
if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
log.info("成功获取锁: {}", lockKey);
// 获取当前顺序码
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
String currentSequenceStr = valueOps.get(sequenceKey);
String formattedSequence;
// 判断当前顺序码是字母+数字形式还是纯数字形式
if (isAlphaNumericSequence(currentSequenceStr)) {
// 如果是字母+数字形式
formattedSequence = generateAlphaNumericSequence(currentSequenceStr);
} else {
// 如果是纯数字形式
formattedSequence = generateNumericToAlphaSequence(currentSequenceStr);
}
log.info("===================>更新《{}》顺序码:{}<===================", sequenceKey, formattedSequence);
// 更新顺序码
setValueWithoutExpiration(sequenceKey, formattedSequence);
// 返回生成的顺序码
String generatedSequence = sequenceKey + formattedSequence;
String result = generatedSequence + rulePrefix;
log.info("===================>返回《{}》顺序码:{}<===================", sequenceKey, result);
return result;
} else {
throw new RuntimeException("Failed to acquire lock for sequence generation");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 保持中断状态
throw new RuntimeException("Thread interrupted while acquiring lock", e);
} finally {
// 释放锁
lock.unlock();
log.info("释放锁");
}
}
/**
* 判断当前顺序码是否为字母+数字形式
*/
private boolean isAlphaNumericSequence(String sequence) {
return sequence != null && sequence.matches("^[A-Za-z]{1}\\d{4}$");
}
/**
* 生成字母+数字形式的顺序码(如 A0001)
*/
private String generateAlphaNumericSequence(String sequenceKey) {
char letter = sequenceKey.charAt(0); // 提取字母部分
int numberPart = Integer.parseInt(sequenceKey.substring(1)); // 提取数字部分
numberPart++; // 数字部分递增
// 检查是否超过了 Z9999
if (letter == 'Z' && numberPart > 9999) {
throw new RuntimeException("顺序码已用尽,请联系管理员");
}
if (numberPart > 9999) {
// 如果数字部分大于 9999,字母部分递增,数字部分重置为 0000
numberPart = 0;
letter = (char) (letter + 1);
}
return String.format("%c%04d", letter, numberPart); // 格式化字母+数字顺序码
}
/**
* 生成纯数字顺序码到字母+数字的转换(仅从99999到A0001)
*/
private String generateNumericToAlphaSequence(String sequenceStr) {
// 如果是纯数字顺序码
Long currentSequence = (sequenceStr != null) ? Long.parseLong(sequenceStr) : 0L;
currentSequence++; // 数字部分递增
// 如果递增后的值大于 99999,转换为字母+数字形式
if (currentSequence > 99999) {
// 从数字转换到字母+数字形式,假设从 100000 转到 A0001
char letter = 'A'; // 从 A 开始
int numericPart = 0; // 数字部分为 0000
return String.format("%c%04d", letter, numericPart);
} else {
// 继续保持纯数字形式
return String.format("%05d", currentSequence);
}
}
/**
* 回退顺序码
*
* @param sequenceKey redisKey
......
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