Explorar el Código

JSA的编号生成规则

Zimo hace 5 días
padre
commit
1a41b34724

+ 14 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/qhse/ChineseLetterUtil.java

@@ -51,7 +51,21 @@ public class ChineseLetterUtil {
 
         return result.toString();
     }
+    public static String getFirstLetterPinyin(char ch) {
+        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
+        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
 
+        try {
+            String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(ch, format);
+            if (pinyin != null && pinyin.length > 0) {
+                return pinyin[0].substring(0, 1);
+            }
+        } catch (BadHanyuPinyinOutputFormatCombination e) {
+            // 转换失败时返回原字符
+        }
+        return String.valueOf(ch);
+    }
     // 判断是否为中文字符
     private static boolean isChinese(char c) {
         return Character.UnicodeScript.of(c) == Character.UnicodeScript.HAN;

+ 15 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/qhse/jsa/QhseJsaServiceImpl.java

@@ -22,7 +22,9 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.util.Objects;
 
+import static cn.hutool.extra.pinyin.PinyinUtil.isChinese;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.pms.service.qhse.ChineseLetterUtil.getFirstLetterPinyin;
 
 /**
  * QHSE_JSA工作安全分析 Service 实现类
@@ -58,8 +60,20 @@ public class QhseJsaServiceImpl implements QhseJsaService {
                 String company = deptUtil.getCompanyCode(loginUserDeptId).toUpperCase();
                 //获取项目部代码大写
                 String jsaNo = getJSANo(loginUserDeptId);
+                StringBuilder sb = new StringBuilder();
+                if (jsaNo != null && !jsaNo.trim().isEmpty()) {
+                    for (char c : jsaNo.toCharArray()) {
+                        if (isChinese(c)) {
+                            // 中文转拼音首字母(大写)
+                            sb.append(getFirstLetterPinyin(c));
+                        } else {
+                            // 非中文直接保留
+                            sb.append(c);
+                        }
+                    }
+                }
                 if (StringUtils.isBlank(jsaNo)){throw new ServiceException(new ErrorCode(2,"获取项目部编号失败"));}
-                qhseJsa.setJsaNo(company+"-"+jsaNo+"-"+convert);
+                qhseJsa.setJsaNo(company+"-"+sb.toString()+"-"+convert);
             }
         }
         qhseJsaMapper.insert(qhseJsa);