|
@@ -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);
|
|
|
}
|
|
|
-}
|
|
|
+}
|