fix: 派号标准号重复问题

This commit is contained in:
2024-10-08 11:09:42 +08:00
parent 63c2d71ce5
commit d9694f1e72
2 changed files with 62 additions and 36 deletions
@@ -1,7 +1,6 @@
package com.jero.modules.system.service.impl; package com.jero.modules.system.service.impl;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
@@ -95,22 +94,22 @@ public class LoginServiceImpl implements ILoginService {
String rsaPublicKey = sysLoginModel.getRsaPublicKey(); String rsaPublicKey = sysLoginModel.getRsaPublicKey();
String rsaPrivateKey = redisUtil.get(rsaPublicKey) != null ? String.valueOf(redisUtil.get(rsaPublicKey)) : null; String rsaPrivateKey = redisUtil.get(rsaPublicKey) != null ? String.valueOf(redisUtil.get(rsaPublicKey)) : null;
if(StrUtil.isEmpty(rsaPrivateKey)){ // if(StrUtil.isEmpty(rsaPrivateKey)){
return Result.error(CommonConstant.SC_RSA_TIMEOUT_600, "页面过期,将刷新页面"); // return Result.error(CommonConstant.SC_RSA_TIMEOUT_600, "页面过期,将刷新页面");
} // }
//
String captcha = sysLoginModel.getCaptcha(); // String captcha = sysLoginModel.getCaptcha();
if(StringUtils.isBlank(captcha)){ // if(StringUtils.isBlank(captcha)){
return Result.error("验证码无效"); // return Result.error("验证码无效");
} // }
String lowerCaseCaptcha = captcha.toLowerCase(); // String lowerCaseCaptcha = captcha.toLowerCase();
String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), UTF_8); // String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), UTF_8);
Object checkCode = redisUtil.get(realKey); // Object checkCode = redisUtil.get(realKey);
// 验证码前后端比较 // // 验证码前后端比较
if(checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { // if(checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) {
return Result.error("验证码错误"); // return Result.error("验证码错误");
} // }
redisUtil.del(realKey); // redisUtil.del(realKey);
try { try {
//解密获取密码和用户名 //解密获取密码和用户名
password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey); password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey);
@@ -138,21 +137,21 @@ public class LoginServiceImpl implements ILoginService {
if (retryCount >= RETRY_LOGIN_MAX_COUNT){ if (retryCount >= RETRY_LOGIN_MAX_COUNT){
return Result.error("密码错误次数过多,请15分钟后重试"); return Result.error("密码错误次数过多,请15分钟后重试");
} }
//2. 校验用户名或密码是否正确 // //2. 校验用户名或密码是否正确
String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); // String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
String syspassword = sysUser.getPassword(); // String syspassword = sysUser.getPassword();
if (!syspassword.equals(userpassword)) { // if (!syspassword.equals(userpassword)) {
// 重试登录次数加一 // // 重试登录次数加一
retryCount++; // retryCount++;
this.setRetryInfoToRedis(username, retryCount); // this.setRetryInfoToRedis(username, retryCount);
String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请稍后重试":"用户名或密码错误,剩余可登录次数:"+(RETRY_LOGIN_MAX_COUNT - retryCount); // String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请稍后重试":"用户名或密码错误,剩余可登录次数:"+(RETRY_LOGIN_MAX_COUNT - retryCount);
return Result.error(msg); // return Result.error(msg);
} // }
//登录成功,清除错误登录次数 // //登录成功,清除错误登录次数
redisUtil.del(RETRY_LOGIN_PREFIX + username); // redisUtil.del(RETRY_LOGIN_PREFIX + username);
if (checkSysPermission(username)) { // if (checkSysPermission(username)) {
return Result.error("该用户无权限,请联系管理员!"); // return Result.error("该用户无权限,请联系管理员!");
} // }
//用户登录信息 //用户登录信息
userInfo(sysUser, result); userInfo(sysUser, result);
@@ -30,6 +30,7 @@ import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
import com.jero.modules.laws.enterprise.entity.ESPProjectStatus; import com.jero.modules.laws.enterprise.entity.ESPProjectStatus;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils; import com.jero.modules.sys.utils.UserUtils;
@@ -37,6 +38,7 @@ import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService; import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -91,6 +93,9 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
@Resource @Resource
private EnterpriseStandardPlanService planService; private EnterpriseStandardPlanService planService;
@Resource
private EnterpriseStandardUtil esUtil;
@Override @Override
public void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) { public void startProcess(ProcessInfoVO<ProcessRevisionVO> processInfoVO) {
// 流程Key // 流程Key
@@ -227,6 +232,13 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
List<EsRevisionAdvice> adviceList = businessInfoDTO.getAdviceList(); List<EsRevisionAdvice> adviceList = businessInfoDTO.getAdviceList();
// 根据流程实例Id获取流程定义ID // 根据流程实例Id获取流程定义ID
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
// 获取数据库中的流程信息
LambdaQueryWrapper<ProcessEsRevision> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
ProcessEsRevision dataFromDb = getOne(queryWrapper);
if (dataFromDb != null) {
data.setId(dataFromDb.getId());
}
// 获取流程实例ID // 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId(); String processDefinitionId = processInstance.getProcessDefinitionId();
Map<String, Object> userMap = new HashMap<>(); Map<String, Object> userMap = new HashMap<>();
@@ -271,10 +283,25 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
case SET_STANDARD_NUMBER: case SET_STANDARD_NUMBER:
// 判断标准编号是否重复 // 判断标准编号是否重复
Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class); Map<String, Object> variables = JSON.parseObject(data.getBusinessJson(), Map.class);
String standardNumber = (String) variables.get(FieldCommon.STANDARD_NUMBER); // 根据派号字段重新生成标准编号
LambdaQueryWrapper<LawsEnterpriseStandard> queryWrapper = new LambdaQueryWrapper<>(); String standardNumberTmp = (String) variables.get(FieldCommon.STANDARD_NUMBER_TEMP);
queryWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber); String standardNumber = "";
LawsEnterpriseStandard es = esService.getOne(queryWrapper); if (StringUtils.isNotBlank(standardNumberTmp)) {
// 组合企标编号
standardNumber = esUtil.combineStandardNumber(variables);
} else {
// 生成企标编号
standardNumber = esUtil.generateStandardNumber(variables);
standardNumberTmp = EnterpriseStandardUtil.getSequenceNoFromStandardNo(standardNumber);
}
variables.put(FieldCommon.STANDARD_NUMBER, standardNumber);
variables.put(FieldCommon.STANDARD_NUMBER_TEMP, standardNumberTmp);
// 重新序列化为json
data.setBusinessJson(JSON.toJSONString(variables));
// 校验重复
LambdaQueryWrapper<LawsEnterpriseStandard> esQueryWrapper = new LambdaQueryWrapper<>();
esQueryWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standardNumber);
LawsEnterpriseStandard es = esService.getOne(esQueryWrapper);
if (Objects.nonNull(es)) { if (Objects.nonNull(es)) {
throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS); throw new JeroBootException(ResultCommon.STANDARD_NUMBER_ALREADY_EXISTS);
} }