Browse Source

1.提单R20250520-2243,同步平台用户增加判空;
2.入职单工作流插件,自动生成工号;
3.入职单生成邮箱优化,新增多音字及生成条件判断;

Tyx 2 months ago
parent
commit
a0e8765325

+ 62 - 16
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hom/formplugin/OnbrdInfoEditEx.java

@@ -2,15 +2,23 @@ package nckd.jimin.jyyy.hr.hom.formplugin;
 
 import kd.bos.algo.DataSet;
 import kd.bos.algo.Row;
+import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.OrmLocaleValue;
 import kd.bos.dataentity.utils.ObjectUtils;
 import kd.bos.db.DB;
 import kd.bos.db.DBRoute;
+import kd.bos.entity.datamodel.IDataModel;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.fi.v2.fah.utils.StringUtils;
 import kd.hr.hom.common.util.PinyinUtil;
 import kd.sdk.plugin.Plugin;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -24,7 +32,7 @@ import java.util.regex.Pattern;
 public class OnbrdInfoEditEx extends AbstractFormPlugin implements Plugin {
 
     private static String email_ex = "@jeyoupharma.com";    //邮箱后缀
-
+    private static String homoPhone_entity = "nckd_homophone";
     /**
      * 值改变事件
      * @param e
@@ -32,41 +40,60 @@ public class OnbrdInfoEditEx extends AbstractFormPlugin implements Plugin {
     @Override
     public void propertyChanged(PropertyChangedArgs e) {
         super.propertyChanged(e);
+        String key = e.getProperty().getName();
+        IDataModel model = this.getModel();
         //姓名变化后,生成邮箱
-        if(e.getProperty().getName().equals("name")){
-            Object newValue = e.getChangeSet()[0].getNewValue();
-            if(ObjectUtils.isEmpty(newValue)) {
-                this.getModel().setValue("nckd_companyemail.zh_CN", null);
+        //2025-05-23 修改:个人性质为职能人员或学术代表 且 职级不等于O1-O4 才生成邮箱
+        if(key.equals("name") || key.equals("nckd_personproperty") || key.equals("ajoblevel")) {
+            Object oriName = model.getValue("name");
+            Object property = model.getValue("nckd_personproperty");
+            Object jobLevel = model.getValue("ajoblevel");
+            if (ObjectUtils.isEmpty(oriName) || ObjectUtils.isEmpty(property) || ObjectUtils.isEmpty(jobLevel)) {
+                this.getModel().setValue("nckd_companyemail", null);
+                return;
+            }
+            OrmLocaleValue orm = (OrmLocaleValue) this.getModel().getValue("name");
+            String name = orm.getLocaleValue_zh_CN().trim();
+            String propertyNo = ((DynamicObject) property).getString("number");
+            String jobLevelNo = ((DynamicObject) jobLevel).getString("name");
+            List propertyCon = Arrays.asList(new String[]{"A1","A2"});
+            List jobLevelCon = Arrays.asList(new String[]{"O1","O2","O3","O4"});
+            if(!propertyCon.contains(propertyNo) || jobLevelCon.contains(jobLevelNo)) {
+                this.getModel().setValue("nckd_companyemail", null);
+                return;
             }
             else {
-                OrmLocaleValue orm = (OrmLocaleValue) this.getModel().getValue("name");
-                String name = orm.getLocaleValue_zh_CN().trim();
                 try {
                     //转换成拼音
-                    String py = PinyinUtil.converterToSpell(name).replaceAll("\\s", "");
+                    //2025-05-23 处理多音字 只处理姓氏
+                    String surName = name.substring(0,1);
+                    //查询多音字基础资料上是否有维护该姓氏,有的话以维护的拼音为准;
+                    String py1 = getHomoPhoneChar(surName);
+                    String py2 = PinyinUtil.converterToSpell(name.substring(1, name.length())).replaceAll("\\s", "");
+                    String py = py1.concat(py2);
                     py = py.toLowerCase();
                     //查询是否有重复
-                    String sql = " /*dialect*/ select distinct fbusemail from t_hrpi_percontact where fbusemail like '"+py+"%"+email_ex+"'";
+                    String sql = " /*dialect*/ select distinct fbusemail from t_hrpi_percontact where fbusemail like '" + py + "%" + email_ex + "'";
                     DataSet dataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("hr"), sql);
                     String email = "";
                     int maxSerial = 0;
-                    while(dataSet.hasNext()) {
+                    while (dataSet.hasNext()) {
                         Row rowData = dataSet.next();
                         email = rowData.getString("fbusemail");
-                        Pattern pat = Pattern.compile(py + "([0-9]+)"+email_ex);
+                        Pattern pat = Pattern.compile(py + "([0-9]+)" + email_ex);
                         Matcher matcher = pat.matcher(email);
-                        while(matcher.find()) {
+                        while (matcher.find()) {
                             String serial = email.substring(matcher.start(1), matcher.end(1));
-                            if(maxSerial < java.lang.Integer.valueOf(serial)){
+                            if (maxSerial < java.lang.Integer.valueOf(serial)) {
                                 maxSerial = java.lang.Integer.valueOf(serial);
                             }
                         }
-                        if(maxSerial == 0){
+                        if (maxSerial == 0) {
                             //找到了一个同名,但是没有序号的邮箱
-                            maxSerial ++;
+                            maxSerial++;
                         }
                     }
-                    if(maxSerial > 0){
+                    if (maxSerial > 0) {
                         maxSerial++;
                         py = py + maxSerial;
                     }
@@ -77,4 +104,23 @@ public class OnbrdInfoEditEx extends AbstractFormPlugin implements Plugin {
             }
         }
     }
+
+
+    /**
+     * 获取多音字拼音
+     * @param surName
+     * @return
+     * @throws Exception
+     */
+    public String getHomoPhoneChar(String surName) throws Exception {
+        QFilter filter = new QFilter("name", QCP.equals, surName);
+        boolean isExists = QueryServiceHelper.exists(homoPhone_entity, new QFilter[]{filter});
+        if(isExists) {
+            DynamicObject dyn = QueryServiceHelper.queryOne(homoPhone_entity,"nckd_pinyin",new QFilter[]{filter});
+            return dyn.getString("nckd_pinyin");
+        }
+        else {
+            return PinyinUtil.converterToSpell(surName).replaceAll("\\s", "");
+        }
+    }
 }

+ 62 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hom/workflow/OnbrdInfoWorkflowPlugin.java

@@ -0,0 +1,62 @@
+package nckd.jimin.jyyy.hr.hom.workflow;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.workflow.api.AgentExecution;
+import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hom.business.application.utils.RuleCodeUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * 工作流:江盐-正式员工入职流程  单据:入职办理单
+ * 需求:入职办理完成审批时,自动生成员工工号
+ * author: Tyx
+ * date: 2025-05-23
+ */
+public class OnbrdInfoWorkflowPlugin implements IWorkflowPlugin {
+    private static final Log logger = LogFactory.getLog(OnbrdInfoWorkflowPlugin.class);
+
+    // 正向流转触发
+    @Override
+    public void notify(AgentExecution execution) {
+        IWorkflowPlugin.super.notify(execution);
+        // 1)获取单据的业务fid
+        String businessKey = execution.getBusinessKey();
+        // 2)生成工号
+        // 2.1) 入职单据基础资料 构建一个实例对象
+        HRBaseServiceHelper baseServiceHelper = new HRBaseServiceHelper("hom_onbrdbillbase"); // 入职单据基础资料
+        DynamicObject baseDy = baseServiceHelper.generateEmptyDynamicObject();
+        // 查询入职单数据 H20240828011050:2026895654906770432L
+        DynamicObject ruzhidata = BusinessDataServiceHelper.loadSingle(businessKey,"hom_onbrdbillbase");
+        // laborreltype 基础资料,用工关系类型:1010  劳动合同 雇佣员工
+        baseDy.set("laborreltype", ruzhidata.get("laborreltype"));
+
+        // 2.2) 工号编码规则 构建一个实例对象
+        HRBaseServiceHelper serviceHelper = new HRBaseServiceHelper("hom_employeeno");
+        DynamicObject dy = serviceHelper.generateEmptyDynamicObject();
+        dy.set("onbrdbill", baseDy); // 工号编码规则 的 入职单 字段: onbrdbill,把 入职单据基础资料实例 放入规则中
+
+        // 2.3) 调编码规则生成工号
+        List<String> numberList = new ArrayList(1);
+        logger.error("before调用编码规则");
+        RuleCodeUtils.codeRuleHandler(dy, numberList, 1, 1);
+        String newNumber = "";
+        if (!numberList.isEmpty()) {
+            newNumber = (String)numberList.get(0);
+        }
+        logger.error("after调用编码规则newNumber:{}", newNumber);
+        // 3)入职办理单更新工号
+        ruzhidata.set("employeeno",newNumber);
+
+        ArrayList<DynamicObject> dyList = new ArrayList<>();
+        dyList.add(ruzhidata);
+
+        SaveServiceHelper.save(dyList.toArray(new DynamicObject[dyList.size()]));
+        logger.error("保存完成");
+    }
+}

+ 1 - 1
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hrmp/hbpm/task/SyncPersonTask.java

@@ -79,7 +79,7 @@ public class SyncPersonTask extends AbstractTask implements Plugin {
             }
             //处理组织长名称
             data.put("EMP_W_DEPLNAME", orgDyxMap.get(rowData.getLong("orgid")).getString("structure.fullname"));
-            data.put("EMP_W_EMPLOYNUMBER", "test-20250401-0011");
+            //data.put("EMP_W_EMPLOYNUMBER", "test-20250401-0011");
             changePersonSet.add(rowData.getLong("PERSONID"));
 
             //处理兼职

+ 6 - 3
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hrmp/hrpi/explugin/SyncUserServiceEx.java

@@ -1,5 +1,6 @@
 package nckd.jimin.jyyy.hr.hrmp.hrpi.explugin;
 
+import kd.bos.dataentity.utils.ObjectUtils;
 import kd.bos.permission.model.UserParam;
 import kd.hr.hbp.business.service.ext.ISyncUserService;
 import kd.hr.hbp.common.ext.SyncParamModel;
@@ -17,7 +18,9 @@ public class SyncUserServiceEx implements ISyncUserService {
     public void updateSyncUserParam(SyncParamModel syncParamModel) {
         UserParam userParam = syncParamModel.getUserParam();
         Map<String, Object> dataMap = userParam.getDataMap();
-        String number = syncParamModel.getPersonDy().getString("number");   //人员工号
-        dataMap.put("username", number);
+        if(!ObjectUtils.isEmpty(dataMap)) {
+            String number = syncParamModel.getPersonDy().getString("number");   //人员工号
+            dataMap.put("username", number);
+        }
     }
-}
+}