Просмотр исходного кода

feat(transfer): 增加调动申请单功能扩展

- 添加拟调动日期、调令号、调档函地址、邮编、联系人、电话等常量定义
- 添加是否生成调令顺序号和调令顺序号常量
- 实现调动申请单表单插件的afterBindData和afterCreateNewData方法
- 添加调令顺序号生成逻辑和相关业务处理
- 更新岗位变动单权限查询使用OrgViewTypeConst.HR_OD常量
- 新增法律实体变更相关常量和表单插件
- 添加hr云init应用通用常量类
jtd 3 дней назад
Родитель
Сommit
23ee7b919a
25 измененных файлов с 312 добавлено и 6 удалено
  1. 16 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/common/transfer/TransferApplyBillConstant.java
  2. 104 0
      code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/plugin/form/transfer/TransferApplyBillFormPlugin.java
  3. 3 3
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillBeforeBindDataService.java
  4. 2 1
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PositionBillFormPlugin.java
  5. 2 2
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PositionBillListPlugin.java
  6. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/business/.gitkeep
  7. 22 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/common/AppflgConstant.java
  8. 24 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/common/bd/LawEntityConstant.java
  9. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/mservice/.gitkeep
  10. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/form/.gitkeep
  11. 117 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/form/bd/LawEntityChgFormPlugin.java
  12. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/operate/.gitkeep
  13. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/other/.gitkeep
  14. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/report/.gitkeep
  15. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/workflow/.gitkeep
  16. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/webapi/.gitkeep
  17. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/business/.gitkeep
  18. 22 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/common/AppflgConstant.java
  19. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/mservice/.gitkeep
  20. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/form/.gitkeep
  21. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/operate/.gitkeep
  22. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/other/.gitkeep
  23. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/report/.gitkeep
  24. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/workflow/.gitkeep
  25. 0 0
      code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/webapi/.gitkeep

+ 16 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/common/transfer/TransferApplyBillConstant.java

@@ -90,6 +90,8 @@ public class TransferApplyBillConstant extends FormConstant {
     public static final String ORGMODEL_KEY = "orgmodel";
     /** 岗位 */
     public static final String POSITIONMODEL_KEY = "positionmodel";
+    /** 拟调动日期 */
+    public static final String PLANDATE_KEY = "plandate";
 
 
 
@@ -131,6 +133,20 @@ public class TransferApplyBillConstant extends FormConstant {
     public static final String CURJOB_KEY = "curjob";
     /** 任职序号 */
     public static final String ORGRELSEQ_KEY = "orgrelseq";
+    /** 调令号 */
+    public static final String NCKD_TRANSFERNO_KEY = "nckd_transferno";
+    /** 调档函地址 */
+    public static final String NCKD_TRANSFERADDR_KEY = "nckd_transferaddr";
+    /** 调档函邮编 */
+    public static final String NCKD_TRANSFERZIP_KEY = "nckd_transferzip";
+    /** 调档函联系人 */
+    public static final String NCKD_TRANSFERCONT_KEY = "nckd_transfercont";
+    /** 调档函电话 */
+    public static final String NCKD_TRANSFERTEL_KEY = "nckd_transfertel";
+    /** 是否生成调令顺序号 */
+    public static final String NCKD_GEN_SERIALNO_KEY = "nckd_gen_serialno";
+    /** 调令顺序号 */
+    public static final String NCKD_TRANSFER_SERIALNO_KEY = "nckd_transfer_serialno";
 
     /** 续签次数(续签用) */
     public static final String RENEWCOUNT_KEY = "renewcount";

+ 104 - 0
code/hr/nckd-jxccl-hr/src/main/java/nckd/jxccl/hr/hdm/plugin/form/transfer/TransferApplyBillFormPlugin.java

@@ -1,26 +1,40 @@
 package nckd.jxccl.hr.hdm.plugin.form.transfer;
 
+
+import kd.bos.coderule.api.CodeRuleInfo;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.metadata.IDataEntityProperty;
 import kd.bos.entity.QueryEntityType;
+import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.form.ConfirmCallBackListener;
 import kd.bos.form.ConfirmTypes;
 import kd.bos.form.MessageBoxOptions;
 import kd.bos.form.MessageBoxResult;
+import kd.bos.form.events.AfterDoOperationEventArgs;
 import kd.bos.form.events.BeforeDoOperationEventArgs;
 import kd.bos.form.events.MessageBoxClosedEvent;
 import kd.bos.form.operate.FormOperate;
 import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.MetadataServiceHelper;
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.user.UserServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
 import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
 import kd.hr.hbp.common.util.HRDynamicObjectUtils;
+import kd.hr.hbp.common.util.HRObjectUtils;
 import kd.hr.hbp.common.util.HRStringUtils;
+import kd.sdk.hr.hdm.common.enums.reg.RegBillStatusEnum;
 import nckd.jxccl.base.common.utils.QueryFieldBuilder;
 import nckd.jxccl.hr.hdm.common.transfer.TransferApplyBillConstant;
 
 import java.util.ArrayList;
+import java.util.EventObject;
 import java.util.List;
 
 /**
@@ -30,6 +44,57 @@ import java.util.List;
  * @date: 2026/1/4 15:34
  */
 public class TransferApplyBillFormPlugin extends AbstractFormPlugin {
+    Log log = LogFactory.getLog(TransferApplyBillFormPlugin.class);
+
+    private static final HRBaseServiceHelper transferApplyHelper = HRBaseServiceHelper.create(TransferApplyBillConstant.HDM_TRANSFERAPPLY);
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+
+        DynamicObject dataEntity = getModel().getDataEntity();
+        String billStatus = dataEntity.getString(TransferApplyBillConstant.BILL_STATUS_KEY);
+        // 如果不是已提交或审批中
+        if (!HRStringUtils.equalsAny(billStatus, RegBillStatusEnum.ALREADYSUBMIT.getCode(), RegBillStatusEnum.APPROVING.getCode())) {
+            return;
+        }
+
+        // 获取当前登录用户
+        long currentUserId = UserServiceHelper.getCurrentUserId();
+        String selectFields = QueryFieldBuilder.create()
+                .add(TransferApplyBillConstant.ID_KEY)
+                .add(TransferApplyBillConstant.NCKD_TRANSFERADDR_KEY)
+                .add(TransferApplyBillConstant.NCKD_TRANSFERZIP_KEY)
+                .add(TransferApplyBillConstant.NCKD_TRANSFERCONT_KEY)
+                .add(TransferApplyBillConstant.NCKD_TRANSFERTEL_KEY)
+                .buildSelect();
+        // 查询最近一笔调动单修改人是该用户的数据
+        DynamicObject transferApplyDy = transferApplyHelper.queryOriginalOne(selectFields, new QFilter[]{new QFilter(TransferApplyBillConstant.BILL_STATUS_KEY, QCP.equals, RegBillStatusEnum.APPROVEPASSED.getCode()).and(TransferApplyBillConstant.MODIFIER_KEY, QCP.equals, currentUserId)}, String.format("%s desc", TransferApplyBillConstant.MODIFY_TIME_KEY));
+        if (HRObjectUtils.isEmpty(transferApplyDy)) {
+            return;
+        }
+
+        getModel().setValue(TransferApplyBillConstant.NCKD_TRANSFERADDR_KEY, transferApplyDy.get(TransferApplyBillConstant.NCKD_TRANSFERADDR_KEY));
+        getModel().setValue(TransferApplyBillConstant.NCKD_TRANSFERZIP_KEY, transferApplyDy.get(TransferApplyBillConstant.NCKD_TRANSFERZIP_KEY));
+        getModel().setValue(TransferApplyBillConstant.NCKD_TRANSFERCONT_KEY, transferApplyDy.get(TransferApplyBillConstant.NCKD_TRANSFERCONT_KEY));
+        getModel().setValue(TransferApplyBillConstant.NCKD_TRANSFERTEL_KEY, transferApplyDy.get(TransferApplyBillConstant.NCKD_TRANSFERTEL_KEY));
+    }
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+
+        // 获取当前登录用户
+        long currentUserId = UserServiceHelper.getCurrentUserId();
+        // 查询最近一笔调动单创建人是该用户的数据
+        DynamicObject transferApplyDy = transferApplyHelper.queryOriginalOne(String.join(",", TransferApplyBillConstant.ID_KEY, TransferApplyBillConstant.NCKD_TRANSFERNO_KEY), new QFilter[]{new QFilter(TransferApplyBillConstant.BILL_STATUS_KEY, QCP.equals, RegBillStatusEnum.APPROVEPASSED.getCode()).and(TransferApplyBillConstant.CREATOR_KEY, QCP.equals, currentUserId)}, String.format("%s desc", TransferApplyBillConstant.MODIFY_TIME_KEY));
+        if (HRObjectUtils.isEmpty(transferApplyDy)) {
+            return;
+        }
+
+        // 设置调令号
+        getModel().setValue(TransferApplyBillConstant.NCKD_TRANSFERNO_KEY, transferApplyDy.get(TransferApplyBillConstant.NCKD_TRANSFERNO_KEY));
+    }
 
     @Override
     public void beforeDoOperation(BeforeDoOperationEventArgs args) {
@@ -42,7 +107,46 @@ public class TransferApplyBillFormPlugin extends AbstractFormPlugin {
                 if (!HRStringUtils.equals(Boolean.TRUE.toString(), getView().getPageCache().get(TransferApplyBillConstant.FAMILY_RELATION_CONFIRM_PAGE_CACHE))) {
                     validateFamilyRelation(args);
                 }
+
+                // 判断变更的属性是否影响调令顺序号生成
+                List<IDataEntityProperty> dataEntityProperties = getModel().getDataEntity().getDataEntityState().GetDirtyProperties();
+                for (IDataEntityProperty property : dataEntityProperties) {
+                    if (HRStringUtils.equalsAny(property.getName(), TransferApplyBillConstant.PLANDATE_KEY, TransferApplyBillConstant.NCKD_TRANSFERNO_KEY)) {
+                        getModel().setValue(TransferApplyBillConstant.NCKD_GEN_SERIALNO_KEY, true);
+                        break;
+                    }
+                }
+        }
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+
+        String operateKey = afterDoOperationEventArgs.getOperateKey();
+        switch (operateKey){
+            case TransferApplyBillConstant.SAVE_OP:
+                OperationResult operationResult = afterDoOperationEventArgs.getOperationResult();
+                if (!operationResult.isSuccess() || operationResult.getSuccessPkIds().isEmpty() || !HRStringUtils.equals("true", getModel().getDataEntity().getString(TransferApplyBillConstant.NCKD_GEN_SERIALNO_KEY))) {
+                    break;
+                }
+
+                generateTransferSerialNo();
+        }
+    }
+
+    /**
+     * 生成调令顺序号
+     */
+    private void generateTransferSerialNo() {
+        DynamicObject dataEntity = getModel().getDataEntity();
+        CodeRuleInfo codeRuleInfo = CodeRuleServiceHelper.getCodeRule(dataEntity.getDataEntityType().getName(), dataEntity, dataEntity.getString(String.join(".", TransferApplyBillConstant.ORG_KEY, TransferApplyBillConstant.ID_KEY)));
+        if (HRObjectUtils.isEmpty(codeRuleInfo) || !HRStringUtils.equals("调令号生成规则", codeRuleInfo.getName())) {
+            dataEntity.set(TransferApplyBillConstant.NCKD_TRANSFER_SERIALNO_KEY, null);
+        } else {
+            dataEntity.set(TransferApplyBillConstant.NCKD_TRANSFER_SERIALNO_KEY, CodeRuleServiceHelper.getNumber(codeRuleInfo, dataEntity));
         }
+        SaveServiceHelper.save(new DynamicObject[]{dataEntity});
     }
 
     private void validateFamilyRelation(BeforeDoOperationEventArgs args) {

+ 3 - 3
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/business/hr/service/impl/PositionBillBeforeBindDataService.java

@@ -1,6 +1,7 @@
 package nckd.jxccl.hrmp.hbpm.business.hr.service.impl;
 
 import kd.bos.common.enums.EnableEnum;
+import kd.bos.consts.OrgViewTypeConst;
 import kd.bos.context.RequestContext;
 import kd.bos.form.IFormView;
 import kd.bos.form.container.Container;
@@ -9,7 +10,6 @@ import kd.bos.logging.LogFactory;
 import kd.bos.permission.api.HasPermOrgResult;
 import kd.bos.servicehelper.model.PermissionStatus;
 import kd.bos.servicehelper.org.OrgUnitServiceHelper;
-import kd.bos.servicehelper.org.OrgViewType;
 import kd.bos.servicehelper.permission.PermissionServiceHelper;
 import kd.hr.hbp.common.util.HRStringUtils;
 import kd.sdk.hr.hdm.common.enums.reg.RegBillStatusEnum;
@@ -63,7 +63,7 @@ public class PositionBillBeforeBindDataService extends PositionBillBaseService {
             if (businessUnit != null) {
                 getModel().setValue(PositionBillConstant.ORG_KEY, businessUnit);
             } else if (!Boolean.TRUE.toString().equals(getView().getFormShowParameter().getCustomParam(PositionBillConstant.CP_ISFROMBILLCLICK))) {
-                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), "21", PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
+                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), OrgViewTypeConst.HR_OD, PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
                 List<Long> hasPermOrgs = hrPermOrg.getHasPermOrgs();
                 if (!Objects.isNull(hasPermOrgs) && hasPermOrgs.size() != 0) {
                     if (hasPermOrgs.contains(RequestContext.get().getOrgId())) {
@@ -78,7 +78,7 @@ public class PositionBillBeforeBindDataService extends PositionBillBaseService {
             getView().cacheFormShowParameter();
         } else if (Boolean.TRUE.toString().equals(getView().getPageCache().get(PositionBillConstant.PC_ISFROMIMPORT)) || getView().getParentView() != null && (PositionBillConstant.NCKD_POSTMGR_APPHOME_ENTITY.equals(getView().getParentView().getEntityId()) || getView().getParentView().getEntityId().startsWith("wf_"))) {
             if (getView().getParentView() != null && PositionBillConstant.NCKD_POSTMGR_APPHOME_ENTITY.equals(getView().getParentView().getEntityId()) && getView().getPageCache().get(PositionBillConstant.PC_ISFROMHOMEPAGE) == null) {
-                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), "21", PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
+                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), OrgViewTypeConst.HR_OD, PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
                 List<Long> hasPermOrgs = hrPermOrg.getHasPermOrgs();
                 if (!Objects.isNull(hasPermOrgs) && hasPermOrgs.size() != 0) {
                     if (hasPermOrgs.contains(RequestContext.get().getOrgId())) {

+ 2 - 1
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PositionBillFormPlugin.java

@@ -6,6 +6,7 @@ import com.google.common.collect.Sets;
 import kd.bos.bill.BillOperationStatus;
 import kd.bos.bill.BillShowParameter;
 import kd.bos.bill.OperationStatus;
+import kd.bos.consts.OrgViewTypeConst;
 import kd.bos.context.RequestContext;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
@@ -105,7 +106,7 @@ public class PositionBillFormPlugin extends AbstractFormPlugin implements Before
         DynamicObject org = getModel().getDataEntity().getDynamicObject(PositionBillConstant.ORG_KEY);
         if (org == null) {
             // 获取是否有查询权限
-            HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), "21", PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, true);
+            HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), OrgViewTypeConst.HR_OD, PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, true);
             List<Long> hasPermOrgs = hrPermOrg.getHasPermOrgs();
             if (!Objects.isNull(hasPermOrgs) && hasPermOrgs.size() != 0) {
                 if (hasPermOrgs.contains(RequestContext.get().getOrgId())) {

+ 2 - 2
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbpm/plugin/form/hr/PositionBillListPlugin.java

@@ -1,5 +1,6 @@
 package nckd.jxccl.hrmp.hbpm.plugin.form.hr;
 
+import kd.bos.consts.OrgViewTypeConst;
 import kd.bos.context.RequestContext;
 import kd.bos.form.events.FilterContainerSearchClickArgs;
 import kd.bos.form.events.SetFilterEvent;
@@ -7,7 +8,6 @@ import kd.bos.list.events.BeforeShowBillFormEvent;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.permission.api.HasPermOrgResult;
 import kd.bos.servicehelper.model.PermissionStatus;
-import kd.bos.servicehelper.org.OrgViewType;
 import kd.bos.servicehelper.permission.PermissionServiceHelper;
 import nckd.jxccl.hrmp.hbpm.common.hr.PositionBillConstant;
 
@@ -38,7 +38,7 @@ public class PositionBillListPlugin extends AbstractListPlugin {
                 getView().getPageCache().remove(PositionBillConstant.PC_ISFROMBILLCLICK);
                 e.getParameter().setCustomParam(PositionBillConstant.CP_ISFROMBILLCLICK, Boolean.TRUE.toString());
             } else {
-                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), "21", PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
+                HasPermOrgResult hrPermOrg = PermissionServiceHelper.getAllPermOrgs(RequestContext.get().getCurrUserId(), OrgViewTypeConst.HR_OD, PositionBillConstant.HOMS_APP, PositionBillConstant.HAOS_ADMINORGDETAIL_ENTITY, PermissionStatus.View, false);
                 List<Long> hasPermOrgs = hrPermOrg.getHasPermOrgs();
                 if (!Objects.isNull(hasPermOrgs) && hasPermOrgs.size() != 0) {
                     if (hasPermOrgs.contains(RequestContext.get().getOrgId())) {

+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/business/.gitkeep


+ 22 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/common/AppflgConstant.java

@@ -0,0 +1,22 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin. 
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2025-05-26 16:28:10
+ */
+package nckd.jxccl.hrmp.hbss.common;
+
+/**
+ * hr云init应用-通用常量类<br>
+ * 代码中不能存在硬编码敏感信息,如账号、密码、http外链、ftp外链、邮箱等。<br>
+ * 标识或缓存的常量,需以"KEY_"、"FID_"、"ENTRY_"或"SUBENTRY_"作为变量的前缀。<br>
+ *
+ * @author nckd
+ * @date 2025-05-26 16:28:10
+ */
+public class AppflgConstant {
+	
+	public static final String KEY_APP_NAME = "hr-init";
+
+}

+ 24 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/common/bd/LawEntityConstant.java

@@ -0,0 +1,24 @@
+package nckd.jxccl.hrmp.hbss.common.bd;
+
+import nckd.jxccl.base.common.constant.FormConstant;
+
+/**
+ * 法律实体常量类
+ * @author: jtd
+ * @date: 2026/1/8 21:22
+ */
+public class LawEntityConstant extends FormConstant {
+
+    /** 法律实体变更-实体标识 */
+    public static final String HBSS_LAWENTITYCHG_ENTITY = "hbss_lawentitychg";
+
+    /** 变更类型 */
+    public static final String TYPE_KEY = "type";
+
+    /** 显示法律实体变更标识-页面自定义参数 */
+    public static final String SHOWCHGFLAG_CUSTOM_PARAM = "showChgFlag";
+
+    /** 初始化-页面缓存参数 */
+    public static final String INIT_PAGECACHE = "init";
+
+}

+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/mservice/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/form/.gitkeep


+ 117 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/form/bd/LawEntityChgFormPlugin.java

@@ -0,0 +1,117 @@
+package nckd.jxccl.hrmp.hbss.plugin.form.bd;
+
+import kd.bos.dataentity.utils.ObjectUtils;
+import kd.bos.dataentity.utils.StringUtils;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hbp.common.util.HRDynamicObjectUtils;
+import kd.hr.hbp.common.util.HRObjectUtils;
+import kd.hr.hbp.common.util.HRStringUtils;
+import nckd.jxccl.hrmp.hbpm.common.hr.PatternUtil;
+import nckd.jxccl.hrmp.hbss.common.bd.LawEntityConstant;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 法律实体变更表单插件
+ * @entity: hbss_lawentitychg
+ * @author: jtd
+ * @date: 2026/1/8 19:50
+ */
+public class LawEntityChgFormPlugin extends AbstractFormPlugin {
+    Log log = LogFactory.getLog(LawEntityChgFormPlugin.class);
+
+    private static final HRBaseServiceHelper helper = HRBaseServiceHelper.create(LawEntityConstant.HBSS_LAWENTITYCHG_ENTITY);
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+
+        String showChgFlag = getView().getFormShowParameter().getCustomParam(LawEntityConstant.SHOWCHGFLAG_CUSTOM_PARAM);
+        String chgProp = e.getProperty().getName();
+        if (StringUtils.isNotEmpty(showChgFlag) && showChgFlag.equals("yes") && PatternUtil.isExProperty(chgProp)) {
+            String mulType = (String) getModel().getValue(LawEntityConstant.TYPE_KEY);
+            Object oldValue = helper.loadOne(chgProp, getModel().getValue(LawEntityConstant.ID_KEY)).get(chgProp);
+            Object newValue = getModel().getValue(chgProp);
+
+            if (HRObjectUtils.isEmpty(oldValue) && HRObjectUtils.isEmpty(newValue)) {
+                getPageCache().put(chgProp, "false");
+            } else if ((HRObjectUtils.isEmpty(oldValue) && !HRObjectUtils.isEmpty(newValue)) || (!HRObjectUtils.isEmpty(oldValue) && HRObjectUtils.isEmpty(newValue))) {
+                getPageCache().put(chgProp, "true");
+            } else if (HRDynamicObjectUtils.compareValues(oldValue, newValue)) {
+                getPageCache().put(chgProp, "false");
+            } else {
+                getPageCache().put(chgProp, "true");
+            }
+
+            // 获取所有二开字段的变更属性
+            List<Map.Entry<String, String>> dataEntityProperties = getPageCache().getAll().entrySet().stream().filter(entry -> PatternUtil.isExProperty(entry.getKey())).filter(entry -> HRStringUtils.equals(entry.getValue(), "true")).collect(Collectors.toList());
+            if (dataEntityProperties.isEmpty() && HRStringUtils.containsIgnoreCase(mulType, "7")) {
+                mulType = buildMulType(null, null, mulType, "7");
+            } else {
+                mulType = buildMulType(null, 1, mulType, "7");
+            }
+
+            getModel().setValue(LawEntityConstant.TYPE_KEY, mulType);
+        }
+    }
+
+    // from: kd.hr.hbss.formplugin.web.lawentity.LawEntityEditPlugin.buildMulType
+    private String buildMulType(Object oldValue, Object newValue, String mulType, String type) {
+        if (!ObjectUtils.nullSafeEquals(oldValue, newValue)) {
+            if (null == mulType) {
+                mulType = "," + type + ",";
+            } else if (!mulType.contains(type)) {
+                mulType = mulType + type + ",";
+            }
+        } else if (null != mulType && mulType.contains(type)) {
+            mulType = mulType.replaceAll(type + ",", "");
+        }
+
+        if (null != mulType && mulType.length() == 1) {
+            mulType = null;
+        }
+
+        if (null != mulType) {
+            mulType = mulSelectSort(mulType);
+        }
+
+        return mulType;
+    }
+
+    // from: kd.hr.hbss.formplugin.web.lawentity.LawEntityEditPlugin.mulSelectSort
+    private String mulSelectSort(String mulSelect) {
+        if (StringUtils.isEmpty(mulSelect)) {
+            return mulSelect;
+        } else {
+            String[] mulTypeArr = mulSelect.split(",");
+            String mulSelectSort = "";
+            ArrayList mulTypeList = new ArrayList();
+
+            for(int i = 0; i < mulTypeArr.length; ++i) {
+                if (!mulTypeArr[i].equals("")) {
+                    mulTypeList.add(mulTypeArr[i]);
+                }
+            }
+
+            Collections.sort(mulTypeList);
+
+            for(int i = 0; i < mulTypeList.size(); ++i) {
+                if ("".equals(mulSelectSort)) {
+                    mulSelectSort = "," + mulTypeList.get(i) + ",";
+                } else {
+                    mulSelectSort = mulSelectSort + mulTypeList.get(i) + ",";
+                }
+            }
+
+            return mulSelectSort;
+        }
+    }
+}

+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/operate/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/other/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/report/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/plugin/workflow/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/hbss/webapi/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/business/.gitkeep


+ 22 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/common/AppflgConstant.java

@@ -0,0 +1,22 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin. 
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2025-05-26 16:28:10
+ */
+package nckd.jxccl.hrmp.init.common;
+
+/**
+ * hr云init应用-通用常量类<br>
+ * 代码中不能存在硬编码敏感信息,如账号、密码、http外链、ftp外链、邮箱等。<br>
+ * 标识或缓存的常量,需以"KEY_"、"FID_"、"ENTRY_"或"SUBENTRY_"作为变量的前缀。<br>
+ *
+ * @author nckd
+ * @date 2025-05-26 16:28:10
+ */
+public class AppflgConstant {
+	
+	public static final String KEY_APP_NAME = "hr-init";
+
+}

+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/mservice/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/form/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/operate/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/other/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/report/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/plugin/workflow/.gitkeep


+ 0 - 0
code/hrmp/nckd-jxccl-hrmp/src/main/java/nckd/jxccl/hrmp/init/webapi/.gitkeep