Browse Source

feat(swc): add pending salary adjustment list plugin

- Implemented plugin to manage pending salary adjustments
- Added logic to query and process onboarding and transfer bills
- Integrated dynamic object handling for salary adjustment records
- Configured filters for effective date and document status
- Enabled automatic data import with success notifications
- Utilized system parameters for configurable day thresholds
turborao 6 ngày trước cách đây
mục cha
commit
e579466aeb

+ 149 - 0
code/swc/nckd-jxccl-swc/src/main/java/nckd/jxccl/swc/init/plugin/form/PendingSalaryAdjListPlugin.java

@@ -0,0 +1,149 @@
+package nckd.jxccl.swc.init.plugin.form;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.param.CustomParam;
+import kd.bos.list.plugin.AbstractListPlugin;
+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.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 员工待定调薪清单
+ * @author turborao
+ * @date 2025/11/19 11:35
+ */
+public class PendingSalaryAdjListPlugin extends AbstractListPlugin implements Plugin {
+
+    /**
+     * 员工待定调薪清单
+     */
+    private static final String entityName = "nckd_pendingsalaryadj";
+    /**
+     * 入职单
+     */
+    private static final String onhasonbrdEntityName = "hom_personhasonbrd";
+    /**
+     * 调动单
+     */
+    private static final String transferEntityName = "hdm_transferapply";
+
+    private static int days = 5;
+
+    private static Log logger = LogFactory.getLog(PendingSalaryAdjListPlugin.class);
+
+    private DynamicObjectCollection salaryTypeDyns = null;
+    @Override
+    public void initialize() {
+        super.initialize();
+        /**
+         * 获取 公共自定义参数  PENDSALARYADJ_DAYS
+         */
+        CustomParam customParam = new CustomParam();
+        customParam.getSearchKeySet().add("PENDSALARYADJ_DAYS");
+        Map<String, String> cusTomMap = SystemParamServiceHelper.loadCustomParameterFromCache(customParam);
+        String pendsalaryadjDays  = cusTomMap.get("PENDSALARYADJ_DAYS");
+        days = Integer.parseInt(pendsalaryadjDays);
+
+        ArrayList<String> salaryTypeList = new ArrayList<>();
+        salaryTypeList.add("tiaozhengtiaoxin");  //岗位调整调薪
+        salaryTypeList.add("100009");  //入职定薪新
+        QFilter qFilter11 = new QFilter("number", QCP.in, salaryTypeList);
+        salaryTypeDyns = QueryServiceHelper.query("hsbs_salaryadjustrsn","id,number,name",new QFilter[]{qFilter11},"number");
+
+        //加载入职单与调动单的数据
+        getAdjustBillData();
+    }
+
+
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+
+    }
+
+    /**
+     * 获取入职单与调动单的数据
+     */
+    public void getAdjustBillData() {
+
+        LocalDate currentDate = LocalDate.now();
+        // Subtract 5 days
+        LocalDate daysAgo = currentDate.minusDays(days);
+
+        ArrayList<DynamicObject> billDynList = new ArrayList<>();
+
+        /**
+         * 查询入职单
+         */
+        String selectField2 = "id,billno,b_effectivedate,ba_em_tid,ba_em_empnumber,ba_em_name,ba_po_position.id,ba_po_adminorg,ba_po_job.id,ajoblevel.id,ba_po_position.nckd_postgrade.id,ba_po_job.jobseq.id";
+        QFilter qFilter1 = new QFilter("enrollstatus", QCP.equals, "3"); // 入职状态 = 已入职
+        QFilter qFilter2 = new QFilter("billstatus", QCP.equals, "C"); // 单据状态 = 已审核
+        QFilter qFilter3 = new QFilter("b_effectivedate", QCP.large_equals, daysAgo);
+
+        DynamicObjectCollection onhasonbrdDyns = QueryServiceHelper.query(onhasonbrdEntityName, selectField2,new QFilter[]{qFilter1,qFilter2,qFilter3});
+
+        Map<Long, DynamicObject> onhasonbrdMap = (Map)onhasonbrdDyns.stream().collect(Collectors.toMap((obj) -> {
+            return obj.getLong("id");
+        }, (obj) -> {
+            return obj;
+        }, (k1, k2) -> {
+            return k1;
+        }));
+
+        //入职  将Map转换为List
+        List<Long> onhasonbrdIDs = onhasonbrdMap.keySet().stream().collect(Collectors.toList());
+
+        QFilter qFilter22 = new QFilter("nckd_billid", QCP.in, onhasonbrdIDs);
+        List<Object> listIDs = QueryServiceHelper.queryPrimaryKeys(entityName,new QFilter[]{qFilter22}, null, Integer.MAX_VALUE);
+        DynamicObject billDyn =  BusinessDataServiceHelper.newDynamicObject(entityName);
+        DynamicObject[] billDyns = BusinessDataServiceHelper.load(listIDs.toArray(),billDyn.getDynamicObjectType());
+
+        int onhasonbrdCount = 0;
+        Map<Long, DynamicObject> billMap =
+                Arrays.stream(billDyns)
+                        .collect(Collectors.toMap(
+                                detail -> detail.getLong("nckd_billid"),
+                                detail -> detail, // 整个 DynamicObject 作为 value
+                                (existing, replacement) -> existing // 保留前面的值
+                        ));
+
+        for(DynamicObject onhasonbrdDyn: onhasonbrdDyns){
+            DynamicObject billDyn1 = billMap.get(onhasonbrdDyn.getLong("id"));
+            if(billDyn1 != null) continue;
+            DynamicObject dyn = BusinessDataServiceHelper.newDynamicObject(entityName);
+            dyn.set("billno", onhasonbrdDyn.getString("billno"));
+            dyn.set("nckd_billid", onhasonbrdDyn.getLong("id"));
+            dyn.set("nckd_billtype", "入职单");
+            dyn.set("billstatus", "A");  ///待处理
+            dyn.set("nckd_employeefield", onhasonbrdDyn.getLong("ba_em_tid"));
+            dyn.set("nckd_changedate", onhasonbrdDyn.getDate("b_effectivedate"));
+            dyn.set("nckd_salaryadjus", salaryTypeDyns.get(0).getLong("id"));  //定调薪类型
+            dyn.set("nckd_newhradminorg", onhasonbrdDyn.getLong("ba_po_adminorg"));  //部门
+            dyn.set("nckd_newposition", onhasonbrdDyn.getLong("ba_po_job.id"));  //岗位
+            dyn.set("nckd_newjoblevel", onhasonbrdDyn.getLong("ajoblevel.id"));  //职级
+            dyn.set("nckd_newjobseqhr", onhasonbrdDyn.getLong("ba_po_job.jobseq.id"));  //职位序列
+            onhasonbrdCount++;
+            billDynList.add(dyn);
+        }
+
+        int length = 0;
+        if(billDynList.size() != 0) {
+            //保存
+            Object[] update = SaveServiceHelper.save(billDynList.toArray(new DynamicObject[0]));
+            length = update.length;
+            this.getView().showSuccessNotification("成功导入,"+length+"条数据,其中入职单"+onhasonbrdCount+"条,",3000); // 成功类型
+        }
+
+    }
+}