Переглянути джерело

录用审批 后台事务生成定调薪 -薪酬结构

qingwu 2 тижнів тому
батько
коміт
38a05eabb5

+ 197 - 17
src/com/kingdee/eas/custom/hireapproval/task/OfferApprovalFacadeControllerBean.java

@@ -1,24 +1,66 @@
 package com.kingdee.eas.custom.hireapproval.task;
 
-import com.kingdee.bos.metadata.entity.EntityViewInfo;
-import com.kingdee.bos.metadata.entity.FilterInfo;
-import com.kingdee.bos.metadata.entity.FilterItemCollection;
-import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.*;
 import com.kingdee.bos.metadata.query.util.CompareType;
-import com.kingdee.eas.custom.hireapproval.IOfferApproval;
-import com.kingdee.eas.custom.hireapproval.OfferApprovalCollection;
-import com.kingdee.eas.custom.hireapproval.OfferApprovalFactory;
-import com.kingdee.eas.custom.hireapproval.OfferApprovalInfo;
+import com.kingdee.bos.service.job.util.Ctx;
+import com.kingdee.eas.basedata.assistant.CurrencyFactory;
+import com.kingdee.eas.basedata.assistant.CurrencyInfo;
+import com.kingdee.eas.basedata.assistant.ICurrency;
+import com.kingdee.eas.basedata.framework.util.BDUtil;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.IPerson;
+import com.kingdee.eas.basedata.person.PersonCollection;
+import com.kingdee.eas.basedata.person.PersonFactory;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.custom.hireapproval.*;
+import com.kingdee.eas.framework.ObjectBaseInfo;
 import com.kingdee.eas.hr.ats.util.AtsDateUtils;
+import com.kingdee.eas.hr.emp.*;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.compensation.*;
+import com.kingdee.util.IllegalConversionException;
+import com.kingdee.util.StringUtils;
 import org.apache.log4j.Logger;
 
-import java.util.Calendar;
-import java.util.Date;
+import java.math.BigDecimal;
+import java.util.*;
+
 import com.kingdee.bos.*;
 import com.kingdee.eas.common.EASBizException;
 
+import static com.kingdee.eas.base.form.extend.flow.ArchiveSettingEnum.exists;
+
 public class OfferApprovalFacadeControllerBean extends AbstractOfferApprovalFacadeControllerBean {
     private static Logger logger = Logger.getLogger(OfferApprovalFacadeControllerBean.class);
+    private static Map<String, String> cmpIteNumbermMap = new HashMap<>();
+
+    /***
+     *  baseSalary  基本工资  SCY002
+     *  overtimePay  加班工资 SCY005
+     *  skillPay  技能工资  SCY003
+     *  jobSubsidy  岗位补贴  SCY004
+     *  TODO  绩效工资标准  SCY007
+     *  TODO  学历补助标准  SCY006
+     *  TODO  费用补助标准  SCY073
+     *  TODO  标准薪资合计  SCY001
+     *  TODO  季度奖金基数  SCY070
+     *  TODO  年终奖金基数  SCY071
+     */
+    static {
+        cmpIteNumbermMap.put("baseSalary", "SCY002");
+        cmpIteNumbermMap.put("overtimePay", "SCY005");
+        cmpIteNumbermMap.put("skillPay", "SCY003");
+        cmpIteNumbermMap.put("jobSubsidy", "SCY004");
+        cmpIteNumbermMap.put("", "SCY007");
+        cmpIteNumbermMap.put("", "SCY006");
+        cmpIteNumbermMap.put("", "SCY073");
+        cmpIteNumbermMap.put("", "SCY001");
+        cmpIteNumbermMap.put("", "SCY070");
+        cmpIteNumbermMap.put("", "SCY071");
+    }
 
     /**
      * 生成定薪数据
@@ -30,6 +72,7 @@ public class OfferApprovalFacadeControllerBean extends AbstractOfferApprovalFaca
      */
     @Override
     protected void _generateSalaryData(Context ctx, int preDays) throws BOSException, EASBizException {
+        logger.error("_generateSalaryData--" + preDays);
         super._generateSalaryData(ctx, preDays);
         Calendar cal = Calendar.getInstance();
         cal.set(Calendar.HOUR_OF_DAY, 0);
@@ -45,6 +88,9 @@ public class OfferApprovalFacadeControllerBean extends AbstractOfferApprovalFaca
         }
         //1.根据时间范围查询录用审批单据状态为已审批的且是否生成定薪数据为否的数据
         IOfferApproval iOfferApproval = OfferApprovalFactory.getLocalInstance(ctx);
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("*");
+        sic.add("offerPersonInfo.*");
         FilterInfo filterInfo = new FilterInfo();
         FilterItemCollection filterItems = filterInfo.getFilterItems();
         //审批通过时间大于等于前延日期
@@ -55,16 +101,150 @@ public class OfferApprovalFacadeControllerBean extends AbstractOfferApprovalFaca
         filterItems.add(new FilterItemInfo("billState", "3"));
         //未生成定薪数据
         filterItems.add(new FilterItemInfo("genSalaryData", false));
-        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        logger.error("filterInfo--" + filterInfo.toSql());
+        //录用审批单据
         OfferApprovalCollection offerApprovalCol = iOfferApproval.getOfferApprovalCollection(viewInfo);
+        logger.error("offerApprovalCol--" + offerApprovalCol.size());
+        //员工定调薪档案
+        IAdjustPersonRecord iAdjustPersonRecord = AdjustPersonRecordFactory.getLocalInstance(ctx);
+        //定调薪
+        IFixAdjustSalary iFixAdjustSalary = FixAdjustSalaryFactory.getLocalInstance(ctx);
+        //人员
+        IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx);
+        //币别
+        ICurrency iCurrency = CurrencyFactory.getLocalInstance(ctx);
+        //查询所有的薪酬项目
+        Map<String, CmpItemInfo> cmpItemMap = new HashMap<String, CmpItemInfo>();
+        ICmpItem iCmpItem = CmpItemFactory.getLocalInstance(ctx);
+        CmpItemCollection cmpItemCollection = iCmpItem.getCmpItemCollection();
+        for (int i = 0; i < cmpItemCollection.size(); i++) {
+            CmpItemInfo cmpItemInfo = cmpItemCollection.get(i);
+            cmpItemMap.put(cmpItemInfo.getNumber(), cmpItemInfo);
+        }
         for (int i = 0; i < offerApprovalCol.size(); i++) {
-            //录用审批单据
-            OfferApprovalInfo offerApprovalInfo = offerApprovalCol.get(i);
-            //2.通过身份证号码或护照号查询对应员工是否已经入职成功
+            try {
+                //创建成功的薪酬结构
+                boolean isAddSucceed = false;
+                //录用审批单据
+                OfferApprovalInfo offerApprovalInfo = offerApprovalCol.get(i);
+                //录用人员信息
+                OfferPersonInfoInfo offerPersonInfo = offerApprovalInfo.getOfferPersonInfo();
+                //薪酬社保信息 保存到薪酬解构的数据
+                SalarySocialSecurityInfo salarySocial = offerApprovalInfo.getSalarySocial();
+                //2.通过身份证号码或护照号查询对应员工是否已经入职成功
+                PersonPositionCollection personPositionColl = getPersonPositionColl(offerPersonInfo, iPersonPosition);
+                if (!personPositionColl.isEmpty()) {
+                    PersonPositionInfo personPositionInfo = personPositionColl.get(0);
+                    //人员
+                    PersonInfo personInfo = personPositionInfo.getPerson();
+                    //员工任职信息
+                    IAdjustEmpORelation iAdjustEmpORelation = AdjustEmpORelationFactory.getLocalInstance(ctx);
+                    AdjustEmpORelationInfo adjustEmpORelationInfo = iAdjustEmpORelation.getAdjustEmpORelationInfo("where person.id = '" + personInfo.getId() + "'");
+                    //通过入职人员查询是否存在定调薪档案
+                    AdjustPersonRecordCollection adjustPersonRecordCollection =
+                            iAdjustPersonRecord.getAdjustPersonRecordCollection("where person.id = '" + personInfo.getId() + "'");
+                    //存在定调薪档案
+                    if (!adjustPersonRecordCollection.isEmpty()) {
+                        // TODO 币别
+                        CurrencyInfo currencyInfo = iCurrency.getCurrencyInfo(new ObjectUuidPK(""));
+                        //生成薪酬结构
+                        AdjustPersonRecordInfo adjustPersonRecordInfo = adjustPersonRecordCollection.get(0);
+                        for (String cmpItem : cmpIteNumbermMap.keySet()) {
+                            String cmpItemNubmer = cmpIteNumbermMap.get(cmpItem);
+                            BigDecimal money = salarySocial.getBigDecimal(cmpItem);
+                            if (money != null) {
+                                //薪酬项目
+                                CmpItemInfo comItemInfo = cmpItemMap.get(cmpItemNubmer);
+                                //薪酬结构
+                                FixAdjustSalaryInfo fixAdjustSalaryInfo = new FixAdjustSalaryInfo();
+                                //添加薪酬项目和金额
+                                addCmpItemAndMoney(comItemInfo, money, fixAdjustSalaryInfo);
+                                //币别
+                                fixAdjustSalaryInfo.setCurrency(currencyInfo);
+                                //生效日期 =入职日期
+                                fixAdjustSalaryInfo.setEffectDay(personInfo.getHireDate());
+                                //人员
+                                fixAdjustSalaryInfo.setPerson(personInfo);
+                                //定薪档案任职
+                                fixAdjustSalaryInfo.setAdjEmpORelation(adjustEmpORelationInfo);
+                                //定调薪业务组织
+                                fixAdjustSalaryInfo.setAdjHrOrgUnit(adjustPersonRecordInfo.getHrOrgUnit());
+                                //行政组织
+                                fixAdjustSalaryInfo.setAdminOrgUnit(personPositionInfo.getPersonDep());
+                                //职位
+                                fixAdjustSalaryInfo.setPosition(personPositionInfo.getPrimaryPosition());
+                                //发薪业务组织
+                                fixAdjustSalaryInfo.setPayHrOrgUnit(adjustPersonRecordInfo.getHrOrgUnit());
+                                iFixAdjustSalary.save(fixAdjustSalaryInfo);
+                                isAddSucceed = true;
+                            }
+                        }
+                    }
+                }
+                //新增薪酬结构数据大于0
+                if (isAddSucceed) {
+                    //3.更新单据字段,是否生成定薪数据字段为true (genSalaryData),通过sql更新
+                    String updateSql = "update from CT_HIR_OfferApproval set CFGenSalaryData = 1 where fid = ?";
+                    DbUtil.execute(ctx, updateSql, new Object[]{offerApprovalInfo.getId().toString()});
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                logger.error("生成定薪数据报错: " + e.getMessage());
+            }
+        }
+    }
 
-            //如果入职成功,就生成定薪数据
-            //3.更新单据字段,是否生成定薪数据字段为true (genSalaryData),通过sql更新
+    /**
+     * 生成定调薪数据
+     *
+     * @param item  薪酬項目
+     * @param money 金額
+     */
+    public void addCmpItemAndMoney(
+            CmpItemInfo item,
+            BigDecimal money,
+            FixAdjustSalaryInfo fixAdjustSalaryInfo
+    ) {
+        //金额
+        fixAdjustSalaryInfo.setMoney(money);
+        //薪酬项目
+        fixAdjustSalaryInfo.setCmpItem(item);
+    }
 
+    /**
+     * @param offerPersonInfo 录用人员信息
+     * @param iPersonPosition
+     * @throws BOSException
+     */
+    public PersonPositionCollection getPersonPositionColl(
+            OfferPersonInfoInfo offerPersonInfo,
+            IPersonPosition iPersonPosition
+    ) throws BOSException {
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("*");
+        sic.add("person.*");
+        sic.add("personDep.*");
+        sic.add("primaryPosition.*");
+        sic.add("person.employeeType.*");
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //身份证不为空 使用身份证作为条件
+        String idCardNO = offerPersonInfo.getIdCardNO();//身份证号码
+        //护照不为空 使用护照作为条件
+        String passportNO = offerPersonInfo.getPassportNO();//护照号码
+        if (StringUtils.isEmpty(idCardNO) && StringUtils.isEmpty(passportNO)) {
+            throw new BOSException("身份证号码或护照号码不能为空!!");
+        }
+        if (!StringUtils.isEmpty(idCardNO)) {
+            filterItems.add(new FilterItemInfo("person.idCardNO", idCardNO));
+        }
+        if (!StringUtils.isEmpty(passportNO)) {
+            filterItems.add(new FilterItemInfo("person.passportNO", passportNO));
         }
+        //是否在职
+        filterItems.add(new FilterItemInfo("person.employeeType.inService", 1));
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        return iPersonPosition.getPersonPositionCollection(viewInfo);
     }
-}
+}