|
|
@@ -0,0 +1,289 @@
|
|
|
+package nckd.jxccl.swc.init.business;
|
|
|
+
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.entity.EntityMetadataCache;
|
|
|
+import kd.bos.entity.MainEntityType;
|
|
|
+import kd.bos.entity.param.CustomParam;
|
|
|
+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 java.time.LocalDate;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+public class SynPendingSalaryAdjDataServiceImpl implements SynPendingSalaryAdjDataService {
|
|
|
+
|
|
|
+ private static final Log logger = LogFactory.getLog(SynPendingSalaryAdjDataServiceImpl.class);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 员工待定调薪清单
|
|
|
+ */
|
|
|
+ private static final String entityName = "nckd_pendingsalaryadj";
|
|
|
+ /**
|
|
|
+ * 入职单
|
|
|
+ */
|
|
|
+ private static final String onhasonbrdEntityName = "hom_personhasonbrd";
|
|
|
+ /**
|
|
|
+ * 调动单
|
|
|
+ */
|
|
|
+ private static final String transferEntityName = "hdm_transferapply";
|
|
|
+ /**
|
|
|
+ * 定调薪信息
|
|
|
+ */
|
|
|
+ private static final String adjrecordEntityName = "hcdm_decadjrecord";
|
|
|
+
|
|
|
+ private static int days = 5;
|
|
|
+
|
|
|
+ private DynamicObjectCollection salaryTypeDyns = null;
|
|
|
+ private DynamicObject salaryRankDyn = null;
|
|
|
+ private DynamicObject standardItemDyn = null;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String SynPendingSalaryAdjDataForPersonTransfer() {
|
|
|
+ /**
|
|
|
+ * 初始化数据
|
|
|
+ */
|
|
|
+ initialize();
|
|
|
+
|
|
|
+ String msg = getAdjustBillData();
|
|
|
+
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void 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");
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取入职时的薪档
|
|
|
+ */
|
|
|
+ QFilter qFilter12 = new QFilter("number", QCP.equals, "01");
|
|
|
+ salaryRankDyn = QueryServiceHelper.queryOne("hsbs_salaryrank","id,number,name",new QFilter[]{qFilter12});
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取 定调薪项目 岗位工资标准
|
|
|
+ */
|
|
|
+ QFilter qFilter13 = new QFilter("name", QCP.equals, "岗位工资标准");
|
|
|
+ standardItemDyn = QueryServiceHelper.queryOne("hsbs_standarditem","id,number,name",new QFilter[]{qFilter13});
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取入职单与调动单的数据
|
|
|
+ */
|
|
|
+ public String getAdjustBillData() {
|
|
|
+
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+ // Subtract 5 days
|
|
|
+ LocalDate daysAgo = currentDate.minusDays(days);
|
|
|
+
|
|
|
+ ArrayList<DynamicObject> billDynList = new ArrayList<>();
|
|
|
+ StringBuffer errorInfo = new StringBuffer();
|
|
|
+ MainEntityType entityType = EntityMetadataCache.getDataEntityType(entityName);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询入职单
|
|
|
+ */
|
|
|
+ String selectField2 = "id,billno,b_effectivedate,ba_em_tid,ba_em_empnumber,ba_em_name,ba_po_position.masterid,ba_po_adminorg,ba_po_job.id,ajoblevel.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);
|
|
|
+ QFilter qFilter4 = new QFilter("b_effectivedate", QCP.less_equals, currentDate);
|
|
|
+
|
|
|
+ DynamicObjectCollection onhasonbrdDyns = QueryServiceHelper.query(onhasonbrdEntityName, selectField2,new QFilter[]{qFilter1,qFilter2,qFilter3,qFilter4});
|
|
|
+
|
|
|
+ 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 = new DynamicObject(entityType);
|
|
|
+ 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_position.masterid")); //岗位
|
|
|
+ //dyn.set("nckd_newjobseqhr", onhasonbrdDyn.getLong("ba_po_job.jobseq.id")); //职位序列
|
|
|
+ dyn.set("nckd_newsalaryrank", salaryRankDyn.getLong("id"));
|
|
|
+ onhasonbrdCount++;
|
|
|
+ billDynList.add(dyn);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询调动单
|
|
|
+ */
|
|
|
+ String selectField1 = "id,billno,b_effectivedate,bb_em_tid,ba_em_empnumber,bb_po_position.masterid,aposition.masterid,bb_po_adminorg.id,aorg.id,bb_po_job.jobseq.id,ajob.jobseq.id";
|
|
|
+ QFilter qFilter12 = new QFilter("billstatus", QCP.equals, "C"); // 单据状态 = 已审核
|
|
|
+ QFilter qFilter13 = new QFilter("b_effectivedate", QCP.large_equals, daysAgo); //实际调动日期
|
|
|
+ QFilter qFilter14 = new QFilter("b_effectivedate", QCP.less_equals, currentDate); //实际调动日期
|
|
|
+
|
|
|
+ DynamicObjectCollection transferDyns = QueryServiceHelper.query(transferEntityName, selectField1,new QFilter[]{qFilter12,qFilter13,qFilter14});
|
|
|
+
|
|
|
+ Map<Long, DynamicObject> transferMap = (Map)transferDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
+ return obj.getLong("id");
|
|
|
+ }, (obj) -> {
|
|
|
+ return obj;
|
|
|
+ }, (k1, k2) -> {
|
|
|
+ return k1;
|
|
|
+ }));
|
|
|
+ List<Long> transferIDs = transferMap.keySet().stream().collect(Collectors.toList());
|
|
|
+
|
|
|
+ QFilter qFilter15 = new QFilter("nckd_billid", QCP.in, transferIDs);
|
|
|
+ List<Object> transferlistIDs = QueryServiceHelper.queryPrimaryKeys(entityName,new QFilter[]{qFilter15}, null, Integer.MAX_VALUE);
|
|
|
+ DynamicObject billDynType = BusinessDataServiceHelper.newDynamicObject(entityName);
|
|
|
+ DynamicObject[] billDyns1 = BusinessDataServiceHelper.load(transferlistIDs.toArray(),billDynType.getDynamicObjectType());
|
|
|
+
|
|
|
+ int transferCount = 0;
|
|
|
+ Map<Long, DynamicObject> billMap1 =
|
|
|
+ Arrays.stream(billDyns1)
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ detail -> detail.getLong("nckd_billid"),
|
|
|
+ detail -> detail, // 整个 DynamicObject 作为 value
|
|
|
+ (existing, replacement) -> existing // 保留前面的值
|
|
|
+ ));
|
|
|
+
|
|
|
+ Map<Long, DynamicObject> adjRecordMap = getAdjRecordInfo(transferDyns);
|
|
|
+
|
|
|
+ for(DynamicObject transferDyn: transferDyns){
|
|
|
+ DynamicObject billDyn2 = billMap1.get(transferDyn.getLong("id"));
|
|
|
+ if(billDyn2 != null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ DynamicObject dyn = new DynamicObject(entityType);
|
|
|
+ Long employeeID = transferDyn.getLong("bb_em_tid");
|
|
|
+ dyn.set("billno", transferDyn.getString("billno"));
|
|
|
+ dyn.set("nckd_billid", transferDyn.getLong("id"));
|
|
|
+ dyn.set("nckd_billtype", "调动单");
|
|
|
+ dyn.set("billstatus", "A"); ///待处理
|
|
|
+ dyn.set("nckd_employeefield", employeeID);
|
|
|
+ dyn.set("nckd_changedate", transferDyn.getDate("b_effectivedate"));
|
|
|
+ dyn.set("nckd_salaryadjus", salaryTypeDyns.get(1).getLong("id")); //定调薪类型
|
|
|
+ /**
|
|
|
+ * 调动前
|
|
|
+ */
|
|
|
+ dyn.set("nckd_oldhradminorg", transferDyn.getLong("bb_po_adminorg.id")); //部门
|
|
|
+ dyn.set("nckd_oldposition", transferDyn.getLong("bb_po_position.masterid")); //岗位
|
|
|
+ //dyn.set("nckd_oldjobseqhr", transferDyn.getLong("bb_po_job.jobseq.id")); //职位序列
|
|
|
+ DynamicObject adjRecordDyn = adjRecordMap.get(employeeID);
|
|
|
+ if(adjRecordDyn != null) {
|
|
|
+ dyn.set("nckd_oldsalaryrank", adjRecordDyn.getLong("salaryrank.id")); //薪档
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 调动后
|
|
|
+ */
|
|
|
+ dyn.set("nckd_newhradminorg", transferDyn.getLong("aorg.id")); //部门
|
|
|
+ dyn.set("nckd_newposition", transferDyn.getLong("aposition.masterid")); //岗位
|
|
|
+ //dyn.set("nckd_newjobseqhr", transferDyn.getLong("ajob.jobseq.id")); //职位序列
|
|
|
+ dyn.set("nckd_newsalaryrank", salaryRankDyn.getLong("id")); //薪档
|
|
|
+ transferCount++;
|
|
|
+ billDynList.add(dyn);
|
|
|
+ }
|
|
|
+
|
|
|
+ int length = 0;
|
|
|
+ if(billDynList.size() != 0) {
|
|
|
+ //保存
|
|
|
+ Object[] update = SaveServiceHelper.save(billDynList.toArray(new DynamicObject[0]));
|
|
|
+ length = update.length;
|
|
|
+ errorInfo.append("成功导入,"+length+"条数据,其中入职单"+onhasonbrdCount+"条,调动单"+transferCount+"条"); // 成功类型
|
|
|
+ }else{
|
|
|
+ errorInfo.append("没有导入数据");
|
|
|
+ }
|
|
|
+ return errorInfo.toString();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取调薪记录
|
|
|
+ * @param transferDyns 通过调动单查询出人员ID
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<Long, DynamicObject> getAdjRecordInfo(DynamicObjectCollection transferDyns) {
|
|
|
+ Map<Long, DynamicObject> transferMap = (Map)transferDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
+ return obj.getLong("bb_em_tid");
|
|
|
+ }, (obj) -> {
|
|
|
+ return obj;
|
|
|
+ }, (k1, k2) -> {
|
|
|
+ return k1;
|
|
|
+ }));
|
|
|
+
|
|
|
+ List<Long> personIDs = transferMap.keySet().stream().collect(Collectors.toList());
|
|
|
+
|
|
|
+ String selectField = "id,adjfile.employee.id,adjfile.datastatus,adjfile.iscurrentversion,employee.id,salaryrank.id";
|
|
|
+ QFilter qFilter1 = new QFilter("adjfile.employee.id", QCP.in, personIDs);
|
|
|
+ QFilter qFilter2 = new QFilter("adjfile.datastatus", QCP.equals, "1");
|
|
|
+ QFilter qFilter3 = new QFilter("adjfile.iscurrentversion", QCP.equals, "1");
|
|
|
+ QFilter qFilter4= new QFilter("salaryrank.id", QCP.equals, standardItemDyn.getLong("id"));
|
|
|
+ QFilter qFilter5= new QFilter("iscurrentdata", QCP.equals, "1");
|
|
|
+
|
|
|
+ DynamicObjectCollection adjDyns = QueryServiceHelper.query(adjrecordEntityName, selectField,new QFilter[]{qFilter1,qFilter2,qFilter3,qFilter4,qFilter5});
|
|
|
+
|
|
|
+
|
|
|
+ Map<Long, DynamicObject> adjRecordMap = (Map)adjDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
+ return obj.getLong("employee.id");
|
|
|
+ }, (obj) -> {
|
|
|
+ return obj;
|
|
|
+ }, (k1, k2) -> {
|
|
|
+ return k1;
|
|
|
+ }));
|
|
|
+
|
|
|
+ return adjRecordMap;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|