|
|
@@ -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); // 成功类型
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|