瀏覽代碼

feat(swc): 增加员工调薪清单生成功能及校验逻辑

- 新增员工待定调薪清单生成操作插件 BuildApplyBillOpPlugin
- 实现 onPreparePropertys 方法加载所需字段
- 添加 SalaryAdjDelivaryDateValidator 校验器
- 增加对员工定调薪档案存在性和一致性的校验
- 提取获取选中员工 ID 的公共方法 getSelectedEmployees
- 引入必要的工具类和实体帮助类支持业务逻辑处理
turborao 1 天之前
父節點
當前提交
5d8cde4d80

+ 45 - 10
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/BuildApplyBillOpPlugin.java

@@ -7,14 +7,18 @@ import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.MainEntityType;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.AfterOperationArgs;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.scm.common.util.DynamicObjectUtil;
 import kd.sdk.plugin.Plugin;
 import kd.sdk.swc.hcdm.business.helper.HCDMApplyBillServiceHelper;
+import nckd.jxccl.base.entity.helper.EntityHelper;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -26,21 +30,34 @@ import java.util.stream.Collectors;
  */
 public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn implements Plugin {
 
+    /**
+     * 员工待定调薪清单  员工ID
+     */
+    private static final String EmployeesField = "nckd_employeefield.id";
+    private static final String BillTypeField = "nckd_billtype";
+
+    /**
+     * this.getDataEntities()中需要加载的字段,增加员工待定调薪清单中员工ID
+     *
+     */
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        e.getFieldKeys().add(EmployeesField);
+        e.getFieldKeys().add(BillTypeField);
+    }
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+        e.addValidator(new SalaryAdjDelivaryDateValidator());
+    }
 
     @Override
     public void beginOperationTransaction(BeginOperationTransactionArgs e) {
         super.beginOperationTransaction(e);
         DynamicObject[] datas = e.getDataEntities();
 
-        Map<Long, DynamicObject> employeeMap =
-                Arrays.stream(datas)
-                        .collect(Collectors.toMap(
-                                detail -> detail.getLong("nckd_employeefield"),
-                                detail -> detail, // 整个 DynamicObject 作为 value
-                                (existing, replacement) -> existing // 保留前面的值
-                        ));
-
-        List<Long> employeeIDs = employeeMap.keySet().stream().collect(Collectors.toList());
+        List<Long> employeeIDs  =  getSelectedEmployees(datas);
 
         Map<String,Object> applyBill = new HashMap<>();
         applyBill.put("billname","员工待定调薪清单-生成");
@@ -62,7 +79,7 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
         List<Map<String,Object>> applyBillEntryData = new ArrayList<>();
         for (DynamicObject data : datas) {
             Map<String,Object> applyBillEntry = new HashMap<>();
-            Long employeeId = data.getLong("nckd_employeefield");
+            Long employeeId = data.getLong(EmployeesField);
             DynamicObject salaryfile = salaryfileMap.get(employeeId);
             applyBillEntry.put("adjfile", salaryfile.getLong("boid"));
             applyBillEntry.put("employee", employeeId);
@@ -104,6 +121,24 @@ public class BuildApplyBillOpPlugin extends AbstractOperationServicePlugIn imple
         return salaryfileMap;
     }
 
+    /**
+     * 获取员工待定调薪清单中员工ID
+     * @param datas   DynamicObject[]
+     */
+    public List<Long> getSelectedEmployees(DynamicObject[] datas){
+
+        Map<Long, DynamicObject> employeeMap =
+                Arrays.stream(datas)
+                        .collect(Collectors.toMap(
+                                detail -> detail.getLong(EmployeesField),
+                                detail -> detail, // 整个 DynamicObject 作为 value
+                                (existing, replacement) -> existing // 保留前面的值
+                        ));
+
+        List<Long> employeeIDs = employeeMap.keySet().stream().collect(Collectors.toList());
+        return employeeIDs;
+    }
+
 
 
 }

+ 46 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/operate/SalaryAdjDelivaryDateValidator.java

@@ -0,0 +1,46 @@
+package nckd.jxccl.swc.init.plugin.operate;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.ext.fi.bei.util.EmptyUtil;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.util.StringUtils;
+
+import java.util.ArrayList;
+
+public class SalaryAdjDelivaryDateValidator extends AbstractValidator {
+
+
+    @Override
+    public void validate() {
+
+        //变动大类
+        ArrayList<Long> chgeventList = new ArrayList<>();
+        chgeventList.add(1010L);  //入职
+        chgeventList.add(1020L);  //调动
+
+        ExtendedDataEntity[] dataEntities = this.getDataEntities();//获取操作执行时的所有单据数据的集合
+        String billType = "";
+        for(ExtendedDataEntity obj :dataEntities) {
+            DynamicObject bill = obj.getDataEntity();//获取当前单据的数据包
+            if(StringUtils.isNotEmpty(billType) && !billType.equals(bill.getString("nckd_billtype"))){
+                this.addErrorMessage(obj,"定调薪类型不一致,请重新选择");
+            }
+            billType = bill.getString("nckd_billtype");
+
+            Long employeeId = bill.getLong("nckd_employeefield.id");
+            QFilter qFilter = new QFilter("employeev.id", QCP.equals, employeeId);
+            QFilter qFilter1 = new QFilter("coordruleparam.chgevent_z.id", QCP.in, chgeventList); // 启用
+            QFilter qFilter2 = new QFilter("dealresult", QCP.equals, "8"); // 变动状态  已处理
+            String selectField = "id,number,employeev.id,coordruleparam.chgevent_z.id,dealresult";
+            DynamicObject employeesFiles = QueryServiceHelper.queryOne("hpdi_empcoordverifbill2", selectField, new QFilter[]{qFilter,qFilter1,qFilter2});
+            if(EmptyUtil.isEmpty(employeesFiles) ){
+                this.addErrorMessage(obj,"员工定调薪档案不存在,要生成新的定调薪档案,如要生成新的定调薪档案,应先操作完档案后");
+            }
+        }
+    }
+}