Browse Source

Merge remote-tracking branch 'origin/master'

wangming 1 năm trước cách đây
mục cha
commit
7195e3e6a6

+ 13 - 10
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxApiServiceImpl.java

@@ -99,7 +99,7 @@ public class ZhcxApiServiceImpl implements ZhcxApiService {
             return R.error("501","未获取到手机号,请联系系统管理员");
         }
         String redisKeyName = loginType + phone;
-        String redisLabelName = loginType + account;
+        String redisLabelName = CxConstants.LOGIN_SEND_CODE_PREFIX+loginType + account;
         return sendSmsCode(null, redisKeyName, phone, redisLabelName);
     }
 
@@ -185,16 +185,18 @@ public class ZhcxApiServiceImpl implements ZhcxApiService {
     private R sendSmsCode(String templateId, String redisKeyName, String mobile, String redisLabelName) {
         boolean exists = redisService.hasKey(redisKeyName);
         String sendCodeTimeObj = (String) redisService.getRedisCatchObj(redisKeyName);
-        if (StringUtils.isBlank(sendCodeTimeObj)) {
-            sendCodeTimeObj = "0";
-        }
-        int sendCodeTime = Integer.parseInt(sendCodeTimeObj);
+        int sendCodeTime = StringUtils.isBlank(sendCodeTimeObj) ? 0 : Integer.parseInt(sendCodeTimeObj);
         if( exists && sendCodeTime >= 20 ){
-            sendCodeTime += 1;
-            redisService.redisCatchInit(redisKeyName,String.valueOf(sendCodeTime),CxConstants.SEND_CODE_INTERVAL);
+            //sendCodeTime += 1;
+            //redisService.redisCatchInit(redisKeyName,String.valueOf(sendCodeTime),CxConstants.SEND_CODE_INTERVAL);
             return R.error("验证发送次数频繁,请过5分钟后再尝试");
         }
-        String code = SmsCodeGenerateUtils.getInstance().generateVerificationCode();
+        String code = null;
+        try {
+            code = SmsCodeGenerateUtils.generateVerificationCode(6);
+        } catch (Exception e) {
+           log.info("生成短信验证码失败"+e);
+        }
         try {
             JSONObject jsonObject = HwSmsUtil.sendSms(templateId,null, code, mobile);
             String returnCode = jsonObject.getString("code");
@@ -204,13 +206,14 @@ public class ZhcxApiServiceImpl implements ZhcxApiService {
                 }
                 sendCodeTime += 1;
                 redisService.redisCatchInit(redisKeyName,String.valueOf(sendCodeTime),CxConstants.SEND_CODE_INTERVAL);
-                redisService.redisCatchInit(redisLabelName,code.toString(),CxConstants.VERIFICATION_CODE_EXPIRATION);
+                redisService.redisCatchInit(redisLabelName,code,CxConstants.VERIFICATION_CODE_EXPIRATION);
                 JSONObject json = new JSONObject();
                 json.put("phone",mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
                 return R.ok("发送成功").putData(json);
             }
+            log.info("华为云短信接口调用返回:"+jsonObject);
         } catch (Exception e) {
-            e.printStackTrace();
+            log.info("发送短信失败"+e);
         }
         return R.error("获取账号信息失败, 请联系管理员!");
     }

+ 16 - 4
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpTemplateNodesServiceImpl.java

@@ -88,9 +88,11 @@ public class ZhcxItpTemplateNodesServiceImpl extends ServiceImpl<ZhcxItpTemplate
             for (String projectid : zhcxItpTemplateNodeSyncProjectVo.getProjectids()) {
                 // 根据名称判断
                 String sql1 = "select a.NODENAME AS \"NAMEONE\",a.ID AS \"IDONE\",b.NODENAME AS \"NAMETWO\",b.ID AS \"IDTWO\",c.NODENAME AS \"NAMETHREE\",c.ID AS \"IDTHREE\"\n" +
+                        ",e.ID AS \"PNODEID\",e.NODENAME AS \"PNODENAME\"" +
                         "from ZHCX_ITP_TEMPLATE_NODES a \n" +
                         "left join ZHCX_ITP_TEMPLATE_NODES b on a.pid=b.id\n" +
                         "left join ZHCX_ITP_TEMPLATE_NODES c on b.pid=c.id\n" +
+                        "left join ZHCX_ITP_TEMPLATE_NODES e on a.PNODEID=e.id\n" +
                         "where a.ID='"+zhcxItpTemplateNodeSyncProjectVo.getNodeid()+"'";
                 List<Map<String, Object>> nodes = commonSqlDao.sqlExecutu(sql1);
                 // 1级
@@ -105,12 +107,22 @@ public class ZhcxItpTemplateNodesServiceImpl extends ServiceImpl<ZhcxItpTemplate
                         zhcxItpProjectNodesService.updateById(node1);
                     }
 
-                    // 2级
+                    // 2级,构件需要考虑归属大构件的名称是否也一样
                     List<String> a = new ArrayList<>();
                     a.add(CxConstants.ITP_NODETYPE_SMALL);a.add(CxConstants.ITP_NODETYPE_BIG);
-                    List<ZhcxItpProjectNodesDo> nametwo = zhcxItpProjectNodesService.list(new LambdaQueryWrapper<ZhcxItpProjectNodesDo>()
-                            .eq(ZhcxItpProjectNodesDo::getProjectid, projectid).in(ZhcxItpProjectNodesDo::getNodetype,a)
-                            .eq(ZhcxItpProjectNodesDo::getNodename, nodes.get(0).get("NAMETWO")).eq(ZhcxItpProjectNodesDo::getPid,namethree.get(0).getId()));
+                    List<ZhcxItpProjectNodesDo> nametwo = null;
+                    if(nodes.get(0).get("PNODENAME") != null && nodes.get(0).get("PNODENAME") != null){
+                        nametwo = zhcxItpProjectNodesService.list(new LambdaQueryWrapper<ZhcxItpProjectNodesDo>()
+                                .eq(ZhcxItpProjectNodesDo::getProjectid, projectid).in(ZhcxItpProjectNodesDo::getNodetype,a)
+                                .eq(ZhcxItpProjectNodesDo::getPnodename,nodes.get(0).get("PNODENAME"))
+                                .eq(ZhcxItpProjectNodesDo::getNodename, nodes.get(0).get("NAMETWO")).eq(ZhcxItpProjectNodesDo::getPid,namethree.get(0).getId()));
+                    }else{
+                        nametwo = zhcxItpProjectNodesService.list(new LambdaQueryWrapper<ZhcxItpProjectNodesDo>()
+                                .eq(ZhcxItpProjectNodesDo::getProjectid, projectid).in(ZhcxItpProjectNodesDo::getNodetype,a)
+                                .isNull(ZhcxItpProjectNodesDo::getPnodename).isNull(ZhcxItpProjectNodesDo::getPnodeid)
+                                .eq(ZhcxItpProjectNodesDo::getNodename, nodes.get(0).get("NAMETWO")).eq(ZhcxItpProjectNodesDo::getPid,namethree.get(0).getId()));
+                    }
+
                     if(nametwo != null && nametwo.size()>0){
                         if(!nametwo.get(0).getItpnodeid().equals(nodes.get(0).get("IDTWO"))){
                             ZhcxItpProjectNodesDo node2 = new ZhcxItpProjectNodesDo();

+ 3 - 2
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxLoginServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.rongwei.bscommon.sys.feign.RwAdminServerFeignService;
 import com.rongwei.bscommon.sys.service.ZhcxLoginService;
+import com.rongwei.bscommon.sys.utils.CxConstants;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.domain.UserLoginVo;
@@ -66,14 +67,14 @@ public class ZhcxLoginServiceImpl implements ZhcxLoginService {
             return R.error("用户名密码不正确");
         }
 
-        boolean exist = redisService.hasKey(loginType + account);
+        boolean exist = redisService.hasKey(CxConstants.LOGIN_SEND_CODE_PREFIX+loginType + account);
         String remark = sysUserDo.getRemark();
         boolean contains = false;
         if(StringUtils.isNotBlank(remark)){
             contains = "skip".equals(sysUserDo.getRemark());
         }
         if(exist || contains){
-            Object yzmObj = redisService.getRedisCatchObj(loginType + account);
+            Object yzmObj = redisService.getRedisCatchObj(CxConstants.LOGIN_SEND_CODE_PREFIX+loginType + account);
             if(ObjectUtil.isEmpty(yzmObj) && !contains){
                 return R.error("未获取到验证码或验证码已过期,请获取验证码");
             }else{

+ 1 - 1
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxRegisterServiceImpl.java

@@ -134,7 +134,7 @@ public class ZhcxRegisterServiceImpl implements ZhcxRegisterService {
         if (exists && sendCodeTime >= CxConstants.MAX_SEND_CODE_TIME) {
             return R.error("501", "验证码发送频繁,请过5分钟后再尝试");
         }
-        String code = SmsCodeGenerateUtils.getInstance().generateVerificationCode();
+        String code = SmsCodeGenerateUtils.generateVerificationCode(6);
         try {
             JSONObject jsonObject = HwSmsUtil.sendSms(null,null, code.toString(), mobile);
             String returnCode = jsonObject.getString("code");

+ 58 - 31
business-common/src/main/java/com/rongwei/bscommon/sys/utils/SmsCodeGenerateUtils.java

@@ -1,53 +1,80 @@
 package com.rongwei.bscommon.sys.utils;
 
 import java.security.SecureRandom;
+import java.util.concurrent.ThreadLocalRandom;
 
 /**
  * @author zhuang
  */
 public class SmsCodeGenerateUtils {
 
-    private static final SecureRandom secureRandom = new SecureRandom();
-    private static final StringBuilder codeStringBuilder = new StringBuilder();
+//    private static final SecureRandom secureRandom = new SecureRandom();
+//    private static final StringBuilder codeStringBuilder = new StringBuilder();
+//    /**
+//     * 采用单例模式以重用StringBuilder,同时提供一个方法来生成指定长度的验证码
+//     */
+//    private static final SmsCodeGenerateUtils INSTANCE = new SmsCodeGenerateUtils();
+//
+//    /**
+//     * 私有化构造方法防止外部实例化
+//     */
+//    private SmsCodeGenerateUtils() {
+//        // 初始化6位
+//        codeStringBuilder.setLength(CxConstants.CODE_LENGTH);
+//    }
+//
+//    /**
+//     * 提供一个接口来获取验证码生成器实例,这样也使得未来如果有需要,可以轻松地修改生成逻辑
+//     * @return
+//     */
+//    public static SmsCodeGenerateUtils getInstance() {
+//        return INSTANCE;
+//    }
+//
+//    /**
+//     * 生成6位验证码方法
+//     * @return
+//     */
+//    public String generateVerificationCode() {
+//        codeStringBuilder.setLength(0);
+//        for (int i = 0; i < CxConstants.CODE_LENGTH; i++) {
+//            codeStringBuilder.append(generateRandomDigit());
+//        }
+//        return codeStringBuilder.toString();
+//    }
+//
+//
+//    /**
+//     * 生成一个随机数字,0到9之间的整数
+//     * @return
+//     */
+//    private int generateRandomDigit() {
+//        return secureRandom.nextInt(10) + 1;
+//    }
     /**
-     * 采用单例模式以重用StringBuilder,同时提供一个方法来生成指定长度的验证码
+     * 采用静态方法直接提供服务,避免单例模式。
+     * 使用ThreadLocal<StringBuilder>确保每个线程都有自己的StringBuilder实例,从而保证线程安全。
      */
-    private static final SmsCodeGenerateUtils INSTANCE = new SmsCodeGenerateUtils();
+    public static String generateVerificationCode(int codeLength) {
+        StringBuilder codeStringBuilder = new ThreadLocal<StringBuilder>() {
+            @Override
+            protected StringBuilder initialValue() {
+                return new StringBuilder(codeLength);
+            }
+        }.get();
 
-    /**
-     * 私有化构造方法防止外部实例化
-     */
-    private SmsCodeGenerateUtils() {
-        // 初始化6位
-        codeStringBuilder.setLength(CxConstants.CODE_LENGTH);
-    }
-
-    /**
-     * 提供一个接口来获取验证码生成器实例,这样也使得未来如果有需要,可以轻松地修改生成逻辑
-     * @return
-     */
-    public static SmsCodeGenerateUtils getInstance() {
-        return INSTANCE;
-    }
-
-    /**
-     * 生成6位验证码方法
-     * @return
-     */
-    public String generateVerificationCode() {
-        codeStringBuilder.setLength(0);
-        for (int i = 0; i < CxConstants.CODE_LENGTH; i++) {
+        for (int i = 0; i < codeLength; i++) {
             codeStringBuilder.append(generateRandomDigit());
         }
         return codeStringBuilder.toString();
     }
 
-
     /**
-     * 生成一个随机数字,0到9之间的整数
+     * 生成一个随机数字,0到9之间的整数。
+     * 移除了多余的+1操作。
      * @return
      */
-    private int generateRandomDigit() {
-        return secureRandom.nextInt(10) + 1;
+    private static int generateRandomDigit() {
+        return ThreadLocalRandom.current().nextInt(1,10);
     }
 }