|
|
@@ -9,7 +9,6 @@ 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.QueryEntityType;
|
|
|
import kd.bos.entity.operate.OperateOptionConst;
|
|
|
import kd.bos.entity.operate.result.IOperateInfo;
|
|
|
import kd.bos.entity.operate.result.OperationResult;
|
|
|
@@ -43,7 +42,6 @@ import nckd.jxccl.base.common.utils.DateUtil;
|
|
|
import nckd.jxccl.base.common.utils.QueryFieldBuilder;
|
|
|
import nckd.jxccl.base.common.utils.StrFormatter;
|
|
|
import nckd.jxccl.base.entity.helper.EntityHelper;
|
|
|
-import nckd.jxccl.base.org.helper.AdminOrgHelper;
|
|
|
import nckd.jxccl.opmc.pm.common.PerfManagerFormConstant;
|
|
|
import nckd.jxccl.opmc.pm.common.SalAdjTrackerConstant;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
@@ -107,403 +105,423 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
|
|
|
// 构建考核周期查询条件
|
|
|
QFilter perfManagerFilter = buildPerfManagerFilter(userAdminOrgWithSub);
|
|
|
QueryFieldBuilder perfManagerQueryFieldBuilder = buildPerfManagerQueryFieldBuilder();
|
|
|
- QueryEntityType perfManagerQueryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("nckd_perfmanager_query");
|
|
|
-
|
|
|
DynamicObjectCollection perfManagerList = QueryServiceHelper.query(PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerQueryFieldBuilder.buildSelect(), new QFilter[]{perfManagerFilter});
|
|
|
|
|
|
+ List<Long> perfManagerIds = perfManagerList.stream()
|
|
|
+ .map(perfManager -> perfManager.getLong(FormConstant.ID_KEY))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ QFilter qFilter = new QFilter(SalAdjTrackerConstant.NCKD_PERFMANAGER,QCP.in,perfManagerIds);
|
|
|
+ QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
+ .add(FormConstant.ID_KEY)
|
|
|
+ .addIdNumberName(SalAdjTrackerConstant.NCKD_PERFMANAGER);
|
|
|
+ DynamicObjectCollection query = QueryServiceHelper.query(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter});
|
|
|
+ Map<Long, Long> perfManagerToSalaryAdjMap = query.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ item -> item.getLong(String.join(".", SalAdjTrackerConstant.NCKD_PERFMANAGER, FormConstant.ID_KEY)),
|
|
|
+ item -> item.getLong(FormConstant.ID_KEY)
|
|
|
+ ));
|
|
|
+
|
|
|
List<SalaryAdjustmentResult> salaryAdjustmentResultList = new ArrayList<>();
|
|
|
for (DynamicObject perfManager : perfManagerList) {
|
|
|
long id = perfManager.getLong(FormConstant.ID_KEY);
|
|
|
- long personId = perfManager.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
|
|
|
- String personName = perfManager.getString(String.join(".", FormConstant.NCKD_PERSON, FormConstant.NAME_KEY));
|
|
|
- LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
- int beginYear = beginDate.getYear();
|
|
|
- LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
- int endYear = endDate.getYear();
|
|
|
- Date actEndDate = perfManager.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
|
- LocalDateTime actEndLocalDateTime = actEndDate != null ? DateUtil.toLocalDateTime(actEndDate) : endDate;
|
|
|
- int actEndYear = actEndLocalDateTime.getYear();
|
|
|
- String theStatus = perfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS);
|
|
|
-
|
|
|
-
|
|
|
- if (actEndYear <= passYear) {
|
|
|
- logger.info(">>>周期开始时间在上线前!PASS!!");
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (theStatus != null && !"1".equals(theStatus)) {
|
|
|
- logger.info(">>>周期状态非正常!PASS!!");
|
|
|
- continue;
|
|
|
- }
|
|
|
- int nowYear = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
- if (nowYear < beginYear) {
|
|
|
- logger.info(">>>还未到周期开始时间!PASS!!");
|
|
|
- continue;
|
|
|
- }
|
|
|
- //第一年考核结果
|
|
|
- String firstYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
- AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
|
|
|
- //第二年考核结果
|
|
|
- String secondYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_SECONDYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
- AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
|
|
|
- //第三年考核结果
|
|
|
- String thirdYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_THIRDYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
- AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
|
|
|
-
|
|
|
- //校验当前考核周期是否已经在调薪列表中
|
|
|
- // 计算调薪档次
|
|
|
- SalaryAdjustmentResult result = calculateSalaryAdjustmentLevel(firstYearResult, secondYearResult, thirdYearResult, beginYear, endYear);
|
|
|
- logger.info("人员ID: {} 的调薪档次为: {},调薪类型: {},调薪说明: {}", personId, result.level, result.type, result.reason);
|
|
|
- if(result.level != 0){
|
|
|
- long companyId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.NCKD_SECONDORG,FormConstant.ID_KEY));
|
|
|
- long empPosOrgRelId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL,FormConstant.ID_KEY));
|
|
|
- long depId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP,FormConstant.ID_KEY));
|
|
|
- long positionId = perfManager.getLong(String.join(".",FormConstant.NCKD_EMPPOSORGREL, FormConstant.POSITION_KEY,FormConstant.ID_KEY));
|
|
|
- result.id = id;
|
|
|
- result.companyId = personId;
|
|
|
- result.depId = depId;
|
|
|
- result.positionId = positionId;
|
|
|
- result.empPosOrgRelId = empPosOrgRelId;
|
|
|
- result.personId = personId;
|
|
|
- result.personName = personName;
|
|
|
- result.beginDate = beginDate;
|
|
|
- result.endDate = endDate;
|
|
|
- salaryAdjustmentResultList.add(result);
|
|
|
- }
|
|
|
- }
|
|
|
+ if(perfManagerToSalaryAdjMap.get(id) == null) {
|
|
|
+ long personId = perfManager.getLong(String.join(".", FormConstant.NCKD_PERSON, FormConstant.ID_KEY));
|
|
|
+ String personName = perfManager.getString(String.join(".", FormConstant.NCKD_PERSON, FormConstant.NAME_KEY));
|
|
|
+ LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ int beginYear = beginDate.getYear();
|
|
|
+ LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
+ int endYear = endDate.getYear();
|
|
|
+ Date actEndDate = perfManager.getDate(PerfManagerFormConstant.NCKD_ACTENDYEAR);
|
|
|
+ LocalDateTime actEndLocalDateTime = actEndDate != null ? DateUtil.toLocalDateTime(actEndDate) : endDate;
|
|
|
+ int actEndYear = actEndLocalDateTime.getYear();
|
|
|
+ String theStatus = perfManager.getString(PerfManagerFormConstant.NCKD_THESTATUS);
|
|
|
+
|
|
|
+
|
|
|
+ if (actEndYear <= passYear) {
|
|
|
+ logger.info(">>>周期开始时间在上线前!PASS!!");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (theStatus != null && !"1".equals(theStatus)) {
|
|
|
+ logger.info(">>>周期状态非正常!PASS!!");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int nowYear = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
+ if (nowYear < beginYear) {
|
|
|
+ logger.info(">>>还未到周期开始时间!PASS!!");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //第一年考核结果
|
|
|
+ String firstYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_FIRSTYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
+ AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
|
|
|
+ //第二年考核结果
|
|
|
+ String secondYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_SECONDYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
+ AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
|
|
|
+ //第三年考核结果
|
|
|
+ String thirdYearResultNumber = perfManager.getString(String.join(".", PerfManagerFormConstant.NCKD_THIRDYEARRESULT, FormConstant.NUMBER_KEY));
|
|
|
+ AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
|
|
|
|
|
|
- //判断有没有同一人员存在多条正常状态的考核周期
|
|
|
- Map<Long, List<SalaryAdjustmentResult>> personGroups = salaryAdjustmentResultList.stream()
|
|
|
- .collect(Collectors.groupingBy(result -> result.personId));
|
|
|
- StringJoiner duplicateMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
- for (Map.Entry<Long, List<SalaryAdjustmentResult>> entry : personGroups.entrySet()) {
|
|
|
- if (entry.getValue().size() > 1) {
|
|
|
- // 存在重复的personId
|
|
|
- SalaryAdjustmentResult firstResult = entry.getValue().get(0);
|
|
|
- String personName = firstResult.personName;
|
|
|
- StringJoiner periodJoiner = new StringJoiner(",");
|
|
|
- for (SalaryAdjustmentResult result : entry.getValue()) {
|
|
|
- String period = String.format("%d~%d",
|
|
|
- result.beginDate.getYear(),
|
|
|
- result.endDate.getYear());
|
|
|
- periodJoiner.add(period);
|
|
|
+ //校验当前考核周期是否已经在调薪列表中
|
|
|
+ // 计算调薪档次
|
|
|
+ SalaryAdjustmentResult result = calculateSalaryAdjustmentLevel(firstYearResult, secondYearResult, thirdYearResult, beginYear, endYear);
|
|
|
+ logger.info("人员ID: {} 的调薪档次为: {},调薪类型: {},调薪说明: {}", personId, result.level, result.type, result.reason);
|
|
|
+ if (result.level != 0) {
|
|
|
+ long companyId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.NCKD_SECONDORG, FormConstant.ID_KEY));
|
|
|
+ long empPosOrgRelId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL, FormConstant.ID_KEY));
|
|
|
+ long depId = perfManager.getLong(String.join(".", FormConstant.NCKD_DEP, FormConstant.ID_KEY));
|
|
|
+ long positionId = perfManager.getLong(String.join(".", FormConstant.NCKD_EMPPOSORGREL, FormConstant.POSITION_KEY, FormConstant.ID_KEY));
|
|
|
+ result.id = id;
|
|
|
+ result.companyId = personId;
|
|
|
+ result.depId = depId;
|
|
|
+ result.positionId = positionId;
|
|
|
+ result.empPosOrgRelId = empPosOrgRelId;
|
|
|
+ result.personId = personId;
|
|
|
+ result.personName = personName;
|
|
|
+ result.beginDate = beginDate;
|
|
|
+ result.endDate = endDate;
|
|
|
+ salaryAdjustmentResultList.add(result);
|
|
|
}
|
|
|
- String message = StrFormatter.format("【{}】存在多个状态【正常】的周期;{}",
|
|
|
- personName, periodJoiner.toString());
|
|
|
- duplicateMsgJoiner.add(message);
|
|
|
}
|
|
|
}
|
|
|
- if (duplicateMsgJoiner.length() > 0) {
|
|
|
- throw new ValidationException(duplicateMsgJoiner.toString());
|
|
|
- }
|
|
|
-
|
|
|
- if (!salaryAdjustmentResultList.isEmpty()) {
|
|
|
- List<Long> allPersonIds = salaryAdjustmentResultList.stream()
|
|
|
- .map(result -> result.personId)
|
|
|
- .collect(Collectors.toList());
|
|
|
- List<Long> allEmpPosOrgRelIds = salaryAdjustmentResultList.stream()
|
|
|
- .map(result -> result.empPosOrgRelId)
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- DynamicObject standardItem = EntityHelper.newEntity(FormConstant.HSBS_STANDARDITEM);
|
|
|
- standardItem.set(FormConstant.ID_KEY, standardItemId);
|
|
|
- Map<String, Object> adjFileParams = new HashMap<>();
|
|
|
- adjFileParams.put("employees", allPersonIds);
|
|
|
- List<String> status = new ArrayList<>();
|
|
|
- status.add(BillStatus.C.toString());
|
|
|
- adjFileParams.put("status", status);
|
|
|
- //获取人员定薪档案
|
|
|
- Map<String, Object> adjFileResult = DispatchServiceHelper.invokeBizService("swc", "hcdm", "IAdjFileInfoService", "queryAdjFileBoByEmp", adjFileParams);
|
|
|
- if (ConvertUtil.toBoolean(adjFileResult.get("success"))) {
|
|
|
- List<Map> list = ConvertUtil.toList(adjFileResult.get("data"), ArrayList::new);
|
|
|
- List<Long> adjFileIds = new ArrayList<>();
|
|
|
- for (Map map : list) {
|
|
|
- Long id = ConvertUtil.toLong(map.get(FormConstant.ID_KEY));
|
|
|
- //根据员工任职匹配
|
|
|
- Long empPosOrgRelId = ConvertUtil.toLong(map.get("empposorgrel_id"));
|
|
|
- if(allEmpPosOrgRelIds.contains(empPosOrgRelId)) {
|
|
|
- adjFileIds.add(id);
|
|
|
+ if(!salaryAdjustmentResultList.isEmpty()) {
|
|
|
+ //判断有没有同一人员存在多条正常状态的考核周期
|
|
|
+ Map<Long, List<SalaryAdjustmentResult>> personGroups = salaryAdjustmentResultList.stream()
|
|
|
+ .collect(Collectors.groupingBy(result -> result.personId));
|
|
|
+ StringJoiner duplicateMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
+ for (Map.Entry<Long, List<SalaryAdjustmentResult>> entry : personGroups.entrySet()) {
|
|
|
+ if (entry.getValue().size() > 1) {
|
|
|
+ // 存在重复的personId
|
|
|
+ SalaryAdjustmentResult firstResult = entry.getValue().get(0);
|
|
|
+ String personName = firstResult.personName;
|
|
|
+ StringJoiner periodJoiner = new StringJoiner(",");
|
|
|
+ for (SalaryAdjustmentResult result : entry.getValue()) {
|
|
|
+ String period = String.format("%d~%d",
|
|
|
+ result.beginDate.getYear(),
|
|
|
+ result.endDate.getYear());
|
|
|
+ periodJoiner.add(period);
|
|
|
}
|
|
|
+ String message = StrFormatter.format("【{}】存在多个状态【正常】的周期;{}",
|
|
|
+ personName, periodJoiner.toString());
|
|
|
+ duplicateMsgJoiner.add(message);
|
|
|
}
|
|
|
- //构建定调薪记录查询条件
|
|
|
- Map<String, Object> adjRecordParams = new HashMap<>();
|
|
|
- List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
- for (Long adjFileId : adjFileIds) {
|
|
|
- Map<String, Object> dataItem = new HashMap<>();
|
|
|
- // 调薪档案ID
|
|
|
- dataItem.put("adjfile", adjFileId);
|
|
|
- // 调薪项目ID
|
|
|
- dataItem.put("standarditem", standardItemId);
|
|
|
- // 查询基准日期
|
|
|
- dataItem.put("startdate", new Date());
|
|
|
- // 唯一标识
|
|
|
- dataItem.put("_uniquecode", "unique" + adjFileId);
|
|
|
- dataList.add(dataItem);
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (duplicateMsgJoiner.length() > 0) {
|
|
|
+ throw new ValidationException(duplicateMsgJoiner.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!salaryAdjustmentResultList.isEmpty()) {
|
|
|
+ List<Long> allPersonIds = salaryAdjustmentResultList.stream()
|
|
|
+ .map(result -> result.personId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ List<Long> allEmpPosOrgRelIds = salaryAdjustmentResultList.stream()
|
|
|
+ .map(result -> result.empPosOrgRelId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ DynamicObject standardItem = EntityHelper.newEntity(FormConstant.HSBS_STANDARDITEM);
|
|
|
+ standardItem.set(FormConstant.ID_KEY, standardItemId);
|
|
|
+ Map<String, Object> adjFileParams = new HashMap<>();
|
|
|
+ adjFileParams.put("employees", allPersonIds);
|
|
|
+ List<String> status = new ArrayList<>();
|
|
|
+ status.add(BillStatus.C.toString());
|
|
|
+ adjFileParams.put("status", status);
|
|
|
+ //获取人员定薪档案
|
|
|
+ Map<String, Object> adjFileResult = DispatchServiceHelper.invokeBizService("swc", "hcdm", "IAdjFileInfoService", "queryAdjFileBoByEmp", adjFileParams);
|
|
|
+ if (ConvertUtil.toBoolean(adjFileResult.get("success"))) {
|
|
|
+ List<Map> list = ConvertUtil.toList(adjFileResult.get("data"), ArrayList::new);
|
|
|
+ List<Long> adjFileIds = new ArrayList<>();
|
|
|
+ for (Map map : list) {
|
|
|
+ Long id = ConvertUtil.toLong(map.get(FormConstant.ID_KEY));
|
|
|
+ //根据员工任职匹配
|
|
|
+ Long empPosOrgRelId = ConvertUtil.toLong(map.get("empposorgrel_id"));
|
|
|
+ if (allEmpPosOrgRelIds.contains(empPosOrgRelId)) {
|
|
|
+ adjFileIds.add(id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //构建定调薪记录查询条件
|
|
|
+ Map<String, Object> adjRecordParams = new HashMap<>();
|
|
|
+ List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
+ for (Long adjFileId : adjFileIds) {
|
|
|
+ Map<String, Object> dataItem = new HashMap<>();
|
|
|
+ // 调薪档案ID
|
|
|
+ dataItem.put("adjfile", adjFileId);
|
|
|
+ // 调薪项目ID
|
|
|
+ dataItem.put("standarditem", standardItemId);
|
|
|
+ // 查询基准日期
|
|
|
+ dataItem.put("startdate", new Date());
|
|
|
+ // 唯一标识
|
|
|
+ dataItem.put("_uniquecode", "unique" + adjFileId);
|
|
|
+ dataList.add(dataItem);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- adjRecordParams.put("data", dataList);
|
|
|
- adjRecordParams.put("selprops", "salarystdv.rankentry.rank.id,salarystdv.rankentry.rank.name,salarystdv.rankentry.rank.number,salarystdv.rankentry.rank.index,salarystdv.rankentry.frankindex,company.id,company.name,");
|
|
|
- //查询定调薪记录
|
|
|
- Map<String, Object> lastDecAdjRecordMap = HCDMAdjFileServiceHelper.getLastDecAdjRecords(adjRecordParams);
|
|
|
- if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
|
|
|
- List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
|
|
|
- for (Map data : datas) {
|
|
|
- if (ConvertUtil.toBoolean(data.get("success"))) {
|
|
|
- List<DynamicObject> adjRecordList = ConvertUtil.toList(data.get("data"), ArrayList::new);
|
|
|
- for (DynamicObject dynamicObject : adjRecordList) {
|
|
|
- DynamicObject company = dynamicObject.getDynamicObject(FormConstant.COMPANY_KEY);
|
|
|
- long companyId = company.getLong(FormConstant.ID_KEY);
|
|
|
- // 人员
|
|
|
- DynamicObject employee = dynamicObject.getDynamicObject("adjfile").getDynamicObject("employee");
|
|
|
- SalaryAdjustmentResult salaryAdjustmentResult = null;
|
|
|
- for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
- if(result.personId == employee.getLong(FormConstant.ID_KEY)){
|
|
|
- salaryAdjustmentResult = result;
|
|
|
+ adjRecordParams.put("data", dataList);
|
|
|
+ adjRecordParams.put("selprops", "salarystdv.rankentry.rank.id,salarystdv.rankentry.rank.name,salarystdv.rankentry.rank.number,salarystdv.rankentry.rank.index,salarystdv.rankentry.frankindex,company.id,company.name,");
|
|
|
+ //查询定调薪记录
|
|
|
+ Map<String, Object> lastDecAdjRecordMap = HCDMAdjFileServiceHelper.getLastDecAdjRecords(adjRecordParams);
|
|
|
+ if (ConvertUtil.toBoolean(lastDecAdjRecordMap.get("success"))) {
|
|
|
+ List<Map> datas = ConvertUtil.toList(lastDecAdjRecordMap.get("data"), ArrayList::new);
|
|
|
+ for (Map data : datas) {
|
|
|
+ if (ConvertUtil.toBoolean(data.get("success"))) {
|
|
|
+ List<DynamicObject> adjRecordList = ConvertUtil.toList(data.get("data"), ArrayList::new);
|
|
|
+ for (DynamicObject dynamicObject : adjRecordList) {
|
|
|
+ // 人员
|
|
|
+ DynamicObject employee = dynamicObject.getDynamicObject("adjfile").getDynamicObject("employee");
|
|
|
+ SalaryAdjustmentResult salaryAdjustmentResult = null;
|
|
|
+ for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
+ if (result.personId == employee.getLong(FormConstant.ID_KEY)) {
|
|
|
+ salaryAdjustmentResult = result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (salaryAdjustmentResult != null) {
|
|
|
+ //薪酬标准表版本
|
|
|
+ DynamicObject salaryStDv = dynamicObject.getDynamicObject("salarystdv");
|
|
|
+ //薪等(01岗、02岗)
|
|
|
+ DynamicObject salaryGrade = dynamicObject.getDynamicObject("salarygrade");
|
|
|
+ //薪档(1档、2档)
|
|
|
+ DynamicObject salaryRank = dynamicObject.getDynamicObject("salaryrank");
|
|
|
+ //金额
|
|
|
+ BigDecimal amount = dynamicObject.getBigDecimal("amount");
|
|
|
+ salaryAdjustmentResult.adjFileInfo = dynamicObject.getDynamicObject("adjfile");
|
|
|
+ salaryAdjustmentResult.salaryStDv = salaryStDv;
|
|
|
+ salaryAdjustmentResult.oldStandardItem = standardItem;
|
|
|
+ salaryAdjustmentResult.oldSalaryGrade = salaryGrade;
|
|
|
+ salaryAdjustmentResult.oldSalaryRank = salaryRank;
|
|
|
+ salaryAdjustmentResult.oldAmount = amount;
|
|
|
}
|
|
|
- }
|
|
|
- if(salaryAdjustmentResult != null) {
|
|
|
- //薪酬标准表版本
|
|
|
- DynamicObject salaryStDv = dynamicObject.getDynamicObject("salarystdv");
|
|
|
- //薪等(01岗、02岗)
|
|
|
- DynamicObject salaryGrade = dynamicObject.getDynamicObject("salarygrade");
|
|
|
- //薪档(1档、2档)
|
|
|
- DynamicObject salaryRank = dynamicObject.getDynamicObject("salaryrank");
|
|
|
- //金额
|
|
|
- BigDecimal amount = dynamicObject.getBigDecimal("amount");
|
|
|
- salaryAdjustmentResult.salaryStDv = salaryStDv;
|
|
|
- salaryAdjustmentResult.oldStandardItem = standardItem;
|
|
|
- salaryAdjustmentResult.oldSalaryGrade = salaryGrade;
|
|
|
- salaryAdjustmentResult.oldSalaryRank = salaryRank;
|
|
|
- salaryAdjustmentResult.oldAmount = amount;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ logger.error("查询定调薪记录失败");
|
|
|
+ this.operationResult.setSuccess(false);
|
|
|
+ this.operationResult.setMessage("查询定调薪记录失败");
|
|
|
}
|
|
|
} else {
|
|
|
- logger.error("查询定调薪记录失败");
|
|
|
+ logger.error("获取人员定薪档案失败");
|
|
|
this.operationResult.setSuccess(false);
|
|
|
- this.operationResult.setMessage("查询定调薪记录失败");
|
|
|
+ this.operationResult.setMessage("获取人员定薪档案失败");
|
|
|
}
|
|
|
- } else {
|
|
|
- logger.error("获取人员定薪档案失败");
|
|
|
- this.operationResult.setSuccess(false);
|
|
|
- this.operationResult.setMessage("获取人员定薪档案失败");
|
|
|
- }
|
|
|
|
|
|
|
|
|
- Set<Long> salarystandarId = new HashSet(salaryAdjustmentResultList.size());
|
|
|
- for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
- if(result.salaryStDv != null) {
|
|
|
- DynamicObject salaryStDv = result.salaryStDv;
|
|
|
- long stdTableId = salaryStDv.getLong(FormConstant.ID_KEY);
|
|
|
- salarystandarId.add(stdTableId);
|
|
|
- }
|
|
|
- }
|
|
|
- //重新加载薪酬标准表(不然超过三级限制取不到薪档序号)
|
|
|
- QueryFieldBuilder salaryStandFieldBuilder = QueryFieldBuilder.create()
|
|
|
- .add(FormConstant.ID_KEY)
|
|
|
- .addIdNumberNameWithExtras(new String[]{"rankentry", "rank", FormConstant.INDEX_KEY});
|
|
|
- DynamicObject[] salaryStandardArray = BusinessDataServiceHelper.load("hcdm_salarystandard", salaryStandFieldBuilder.buildSelect(), new QFilter[]{new QFilter(FormConstant.ID_KEY, QCP.in, salarystandarId)});
|
|
|
- Map<Long, DynamicObject> salaryStandardMap = Arrays.stream(salaryStandardArray)
|
|
|
- .collect(Collectors.toMap(
|
|
|
- obj -> obj.getLong(FormConstant.ID_KEY),
|
|
|
- obj -> obj
|
|
|
- ));
|
|
|
-
|
|
|
- StringJoiner msgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
- for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
- if (result.salaryStDv == null || result.oldStandardItem == null || result.oldSalaryRank == null) {
|
|
|
- msgJoiner.add(StrFormatter.format("【{}】没有定调薪档案或没有定薪项目【岗位工资标准】,无法调档", result.personName));
|
|
|
- } else {
|
|
|
- long salaryStDvId = result.salaryStDv.getLong(FormConstant.ID_KEY);
|
|
|
- DynamicObject salaryStandard = salaryStandardMap.get(salaryStDvId);
|
|
|
-
|
|
|
- //薪酬标准中薪档(薪档名称不等于档差和等差)
|
|
|
- DynamicObjectCollection rankEntry = salaryStandard.getDynamicObjectCollection("rankentry");
|
|
|
- Map<Integer, DynamicObject> rankMap = rankEntry.stream().filter(rank -> !rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("差"))
|
|
|
- .collect(Collectors.toMap(
|
|
|
- rank -> rank.getDynamicObject("rank").getInt(FormConstant.INDEX_KEY),
|
|
|
- rank -> rank.getDynamicObject("rank"),
|
|
|
- (existing, replacement) -> replacement // 处理重复键,保留后来的值
|
|
|
- ));
|
|
|
- Optional<DynamicObject> diffRecord = rankEntry.stream()
|
|
|
- .filter(rank -> rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("档差"))
|
|
|
- .findFirst();
|
|
|
-
|
|
|
- DynamicObject diffRank = null;
|
|
|
- if (diffRecord.isPresent()) {
|
|
|
- diffRank = diffRecord.get().getDynamicObject("rank");
|
|
|
+ Set<Long> salarystandarId = new HashSet(salaryAdjustmentResultList.size());
|
|
|
+ for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
+ if (result.salaryStDv != null) {
|
|
|
+ DynamicObject salaryStDv = result.salaryStDv;
|
|
|
+ long stdTableId = salaryStDv.getLong(FormConstant.ID_KEY);
|
|
|
+ salarystandarId.add(stdTableId);
|
|
|
}
|
|
|
- if (!rankMap.isEmpty()) {
|
|
|
- //原薪档
|
|
|
- DynamicObject oldSalaryRank = result.oldSalaryRank;
|
|
|
- int oldIndex = oldSalaryRank.getInt(FormConstant.INDEX_KEY);
|
|
|
- //调整后薪档序号
|
|
|
- int finalRankIndex = oldIndex + result.level;
|
|
|
- DynamicObject newSalaryRank;
|
|
|
- //判断是否超过薪档的最大序号或最小序号,如果超过则取最小或最大
|
|
|
- int maxRankIndex = Collections.max(rankMap.keySet());
|
|
|
- int minRankIndex = Collections.min(rankMap.keySet());
|
|
|
- if (finalRankIndex > maxRankIndex) {
|
|
|
- // 超过最大值,取最大值
|
|
|
- newSalaryRank = rankMap.get(maxRankIndex);
|
|
|
- } else if (finalRankIndex < minRankIndex) {
|
|
|
- // 低于最小值,取最小值
|
|
|
- newSalaryRank = rankMap.get(minRankIndex);
|
|
|
- }else{
|
|
|
- newSalaryRank = rankMap.get(finalRankIndex);
|
|
|
+ }
|
|
|
+ //重新加载薪酬标准表(不然超过三级限制取不到薪档序号)
|
|
|
+ QueryFieldBuilder salaryStandFieldBuilder = QueryFieldBuilder.create()
|
|
|
+ .add(FormConstant.ID_KEY)
|
|
|
+ .addIdNumberNameWithExtras(new String[]{"rankentry", "rank", FormConstant.INDEX_KEY});
|
|
|
+ DynamicObject[] salaryStandardArray = BusinessDataServiceHelper.load("hcdm_salarystandard", salaryStandFieldBuilder.buildSelect(), new QFilter[]{new QFilter(FormConstant.ID_KEY, QCP.in, salarystandarId)});
|
|
|
+ Map<Long, DynamicObject> salaryStandardMap = Arrays.stream(salaryStandardArray)
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ obj -> obj.getLong(FormConstant.ID_KEY),
|
|
|
+ obj -> obj
|
|
|
+ ));
|
|
|
+
|
|
|
+ StringJoiner msgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
+ for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
+ if (result.salaryStDv == null || result.oldStandardItem == null || result.oldSalaryRank == null) {
|
|
|
+ msgJoiner.add(StrFormatter.format("【{}】没有定调薪档案或没有定薪项目【岗位工资标准】,无法调档", result.personName));
|
|
|
+ } else {
|
|
|
+ long salaryStDvId = result.salaryStDv.getLong(FormConstant.ID_KEY);
|
|
|
+ DynamicObject salaryStandard = salaryStandardMap.get(salaryStDvId);
|
|
|
+
|
|
|
+ //薪酬标准中薪档(薪档名称不等于档差和等差)
|
|
|
+ DynamicObjectCollection rankEntry = salaryStandard.getDynamicObjectCollection("rankentry");
|
|
|
+ Map<Integer, DynamicObject> rankMap = rankEntry.stream().filter(rank -> !rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("差"))
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ rank -> rank.getDynamicObject("rank").getInt(FormConstant.INDEX_KEY),
|
|
|
+ rank -> rank.getDynamicObject("rank"),
|
|
|
+ (existing, replacement) -> replacement // 处理重复键,保留后来的值
|
|
|
+ ));
|
|
|
+ Optional<DynamicObject> diffRecord = rankEntry.stream()
|
|
|
+ .filter(rank -> rank.getDynamicObject("rank").getString(FormConstant.NAME_KEY).contains("档差"))
|
|
|
+ .findFirst();
|
|
|
+
|
|
|
+ DynamicObject diffRank = null;
|
|
|
+ if (diffRecord.isPresent()) {
|
|
|
+ diffRank = diffRecord.get().getDynamicObject("rank");
|
|
|
}
|
|
|
- result.salaryRank = newSalaryRank;
|
|
|
- result.reason+=StrFormatter.format(";{}->{}",oldSalaryRank.getString(FormConstant.NAME_KEY),newSalaryRank.getString(FormConstant.NAME_KEY));
|
|
|
- List<StdTableDataMatchParam> matchParams = new ArrayList<>();
|
|
|
- StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
|
|
|
- stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
|
|
|
- stdTableDataMatchParam.setStdItemId(standardItemId);
|
|
|
- stdTableDataMatchParam.setGradeId(result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
|
|
|
- stdTableDataMatchParam.setRankId(newSalaryRank.getLong(FormConstant.ID_KEY));
|
|
|
- matchParams.add(stdTableDataMatchParam);
|
|
|
- //获取薪酬项目、薪等、薪档对应金额
|
|
|
- List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
|
|
|
- if(!stdTableDataMatchResults.isEmpty()){
|
|
|
- result.amount = stdTableDataMatchResults.get(0).getAmount();
|
|
|
+ if (!rankMap.isEmpty()) {
|
|
|
+ //原薪档
|
|
|
+ DynamicObject oldSalaryRank = result.oldSalaryRank;
|
|
|
+ int oldIndex = oldSalaryRank.getInt(FormConstant.INDEX_KEY);
|
|
|
+ //调整后薪档序号
|
|
|
+ int finalRankIndex = oldIndex + result.level;
|
|
|
+ DynamicObject newSalaryRank;
|
|
|
+ //判断是否超过薪档的最大序号或最小序号,如果超过则取最小或最大
|
|
|
+ int maxRankIndex = Collections.max(rankMap.keySet());
|
|
|
+ int minRankIndex = Collections.min(rankMap.keySet());
|
|
|
+ if (finalRankIndex > maxRankIndex) {
|
|
|
+ // 超过最大值,取最大值
|
|
|
+ newSalaryRank = rankMap.get(maxRankIndex);
|
|
|
+ } else if (finalRankIndex < minRankIndex) {
|
|
|
+ // 低于最小值,取最小值
|
|
|
+ newSalaryRank = rankMap.get(minRankIndex);
|
|
|
+ } else {
|
|
|
+ newSalaryRank = rankMap.get(finalRankIndex);
|
|
|
+ }
|
|
|
+ result.salaryRank = newSalaryRank;
|
|
|
+ result.reason += StrFormatter.format(";{}->{}", oldSalaryRank.getString(FormConstant.NAME_KEY), newSalaryRank.getString(FormConstant.NAME_KEY));
|
|
|
+ List<StdTableDataMatchParam> matchParams = new ArrayList<>();
|
|
|
+ StdTableDataMatchParam stdTableDataMatchParam = new StdTableDataMatchParam();
|
|
|
+ stdTableDataMatchParam.setStdTableId(result.salaryStDv.getLong(FormConstant.ID_KEY));
|
|
|
+ stdTableDataMatchParam.setStdItemId(standardItemId);
|
|
|
+ stdTableDataMatchParam.setGradeId(result.oldSalaryGrade.getLong(FormConstant.ID_KEY));
|
|
|
+ stdTableDataMatchParam.setRankId(newSalaryRank.getLong(FormConstant.ID_KEY));
|
|
|
+ matchParams.add(stdTableDataMatchParam);
|
|
|
+ //获取薪酬项目、薪等、薪档对应金额
|
|
|
+ List<StdTableDataMatchResult> stdTableDataMatchResults = HCDMSalaryStdServiceHelper.matchStdTableData(matchParams);
|
|
|
+ if (!stdTableDataMatchResults.isEmpty()) {
|
|
|
+ result.amount = stdTableDataMatchResults.get(0).getAmount();
|
|
|
+ }
|
|
|
+ msgJoiner.add(StrFormatter.format("【{}】{}", result.personName, result.reason));
|
|
|
}
|
|
|
- msgJoiner.add(StrFormatter.format("【{}】{}", result.personName, result.reason));
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- List<DynamicObject> addSalAdjTrackerList = new ArrayList<>();
|
|
|
- List<Long> ids = new ArrayList<>(salaryAdjustmentResultList.size());
|
|
|
- List<Long> createOrgList = BaseDataServiceHelper.getCreateOrgList(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
|
|
|
- MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(AdminOrgHelper.BOS_ORG);
|
|
|
- DynamicObject org = new DynamicObject(bosOrgEntityType);
|
|
|
- if (!createOrgList.isEmpty()) {
|
|
|
- org.set(FormConstant.ID_KEY, createOrgList.get(0));
|
|
|
- }
|
|
|
- for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
- if (result.salaryStDv != null && result.oldStandardItem != null && result.oldSalaryRank != null) {
|
|
|
- DynamicObject newSalAdjTracker = EntityHelper.newEntity(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
|
|
|
- newSalAdjTracker.set(FormConstant.CREATEORG_KEY, org);
|
|
|
- newSalAdjTracker.set(FormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
|
|
|
- newSalAdjTracker.set(FormConstant.NAME_KEY,StrFormatter.format("{}的调薪", result.personName));
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_PERFMANAGER,EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID, result.id));
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYGRADE, result.oldSalaryGrade);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYRANK, result.oldSalaryRank);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDMONEY, result.oldAmount);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYGRADE, result.oldSalaryGrade);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYRANK, result.salaryRank);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_MONEY, result.amount);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGEEXPLAIN, result.reason);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_APPRAISALTYPE, result.type);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGESTATUS,"1");
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJUSTDIFF,result.level);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSTANDARDITEM, result.oldStandardItem);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_STANDARDITEM, result.oldStandardItem);
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJMONEY, result.amount.subtract(result.oldAmount));
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_DEP,EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, result.depId));
|
|
|
- newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_POSITION,EntityHelper.newEntity(PerfManagerFormConstant.HBPM_POSITIONHR, result.positionId));
|
|
|
- ids.add(result.id);
|
|
|
- addSalAdjTrackerList.add(newSalAdjTracker);
|
|
|
- }
|
|
|
- }
|
|
|
- MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
|
|
|
- DynamicObject[] perfManagerArray = BusinessDataServiceHelper.load(ids.toArray(new Long[0]), dataEntityType);
|
|
|
- List<DynamicObject> addPerfManagerList = new ArrayList<>();
|
|
|
- for (DynamicObject perfManager : perfManagerArray) {
|
|
|
- perfManager.set(PerfManagerFormConstant.NCKD_WHYEND,"调档后结束");
|
|
|
- perfManager.set(PerfManagerFormConstant.NCKD_THESTATUS,"2");
|
|
|
- perfManager.set(PerfManagerFormConstant.NCKD_LOCKUSER,currUser);
|
|
|
- LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
- LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
- //第一年考核结果
|
|
|
- String firstYearResultNumber = null;
|
|
|
- DynamicObject firstYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT);
|
|
|
- if (firstYearResultObj != null) {
|
|
|
- firstYearResultNumber = firstYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
- }
|
|
|
- AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
|
|
|
- //第二年考核结果
|
|
|
- String secondYearResultNumber = null;
|
|
|
- DynamicObject secondYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_SECONDYEARRESULT);
|
|
|
- if (secondYearResultObj != null) {
|
|
|
- secondYearResultNumber = secondYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
+ List<DynamicObject> addSalAdjTrackerList = new ArrayList<>();
|
|
|
+ List<Long> ids = new ArrayList<>(salaryAdjustmentResultList.size());
|
|
|
+ List<Long> createOrgList = BaseDataServiceHelper.getCreateOrgList(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
|
|
|
+ MainEntityType bosOrgEntityType = EntityMetadataCache.getDataEntityType(FormConstant.BOS_ORG);
|
|
|
+ DynamicObject org = new DynamicObject(bosOrgEntityType);
|
|
|
+ if (!createOrgList.isEmpty()) {
|
|
|
+ org.set(FormConstant.ID_KEY, createOrgList.get(0));
|
|
|
}
|
|
|
- AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
|
|
|
- //第三年考核结果
|
|
|
- String thirdYearResultNumber = null;
|
|
|
- DynamicObject thirdYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_THIRDYEARRESULT);
|
|
|
- if (thirdYearResultObj != null) {
|
|
|
- thirdYearResultNumber = thirdYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
+ for (SalaryAdjustmentResult result : salaryAdjustmentResultList) {
|
|
|
+ if (result.salaryStDv != null && result.oldStandardItem != null && result.oldSalaryRank != null) {
|
|
|
+ DynamicObject newSalAdjTracker = EntityHelper.newEntity(SalAdjTrackerConstant.SALADJTRACKER_ENTITYID);
|
|
|
+ newSalAdjTracker.set(FormConstant.CREATEORG_KEY, org);
|
|
|
+ newSalAdjTracker.set(FormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
|
|
|
+ newSalAdjTracker.set(FormConstant.NAME_KEY, StrFormatter.format("{}的调薪", result.personName));
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_PERFMANAGER, EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID, result.id));
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJFILEINFO, result.adjFileInfo);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYGRADE, result.oldSalaryGrade);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSALARYRANK, result.oldSalaryRank);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDMONEY, result.oldAmount);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYGRADE, result.oldSalaryGrade);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_SALARYRANK, result.salaryRank);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_MONEY, result.amount);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGEEXPLAIN, result.reason);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_APPRAISALTYPE, result.type);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_WAGESTATUS, "1");
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJUSTDIFF, result.level);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_OLDSTANDARDITEM, result.oldStandardItem);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_STANDARDITEM, result.oldStandardItem);
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_ADJMONEY, result.amount.subtract(result.oldAmount));
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_DEP, EntityHelper.newEntity(FormConstant.ADMINORGHR_ENTITYID, result.depId));
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.NCKD_POSITION, EntityHelper.newEntity(PerfManagerFormConstant.HBPM_POSITIONHR, result.positionId));
|
|
|
+ newSalAdjTracker.set(SalAdjTrackerConstant.CREATOR_KEY, UserServiceHelper.getCurrentUserId());
|
|
|
+ ids.add(result.id);
|
|
|
+ addSalAdjTrackerList.add(newSalAdjTracker);
|
|
|
+ }
|
|
|
}
|
|
|
- AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
|
|
|
+ MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
|
|
|
+ DynamicObject[] perfManagerArray = BusinessDataServiceHelper.load(ids.toArray(new Long[0]), dataEntityType);
|
|
|
+ List<DynamicObject> addPerfManagerList = new ArrayList<>();
|
|
|
+ for (DynamicObject perfManager : perfManagerArray) {
|
|
|
+ perfManager.set(PerfManagerFormConstant.NCKD_WHYEND, "调档后结束");
|
|
|
+ perfManager.set(PerfManagerFormConstant.NCKD_THESTATUS, "2");
|
|
|
+ perfManager.set(PerfManagerFormConstant.NCKD_LOCKUSER, currUser);
|
|
|
+ LocalDateTime beginDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_BEGINYEAR));
|
|
|
+ LocalDateTime endDate = DateUtil.toLocalDateTime(perfManager.getDate(PerfManagerFormConstant.NCKD_ENDYEAR));
|
|
|
+ //第一年考核结果
|
|
|
+ String firstYearResultNumber = null;
|
|
|
+ DynamicObject firstYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_FIRSTYEARRESULT);
|
|
|
+ if (firstYearResultObj != null) {
|
|
|
+ firstYearResultNumber = firstYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
+ }
|
|
|
+ AppraisalResultEnum firstYearResult = AppraisalResultEnum.getByCode(firstYearResultNumber);
|
|
|
+ //第二年考核结果
|
|
|
+ String secondYearResultNumber = null;
|
|
|
+ DynamicObject secondYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_SECONDYEARRESULT);
|
|
|
+ if (secondYearResultObj != null) {
|
|
|
+ secondYearResultNumber = secondYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
+ }
|
|
|
+ AppraisalResultEnum secondYearResult = AppraisalResultEnum.getByCode(secondYearResultNumber);
|
|
|
+ //第三年考核结果
|
|
|
+ String thirdYearResultNumber = null;
|
|
|
+ DynamicObject thirdYearResultObj = perfManager.getDynamicObject(PerfManagerFormConstant.NCKD_THIRDYEARRESULT);
|
|
|
+ if (thirdYearResultObj != null) {
|
|
|
+ thirdYearResultNumber = thirdYearResultObj.getString(FormConstant.NUMBER_KEY);
|
|
|
+ }
|
|
|
+ AppraisalResultEnum thirdYearResult = AppraisalResultEnum.getByCode(thirdYearResultNumber);
|
|
|
|
|
|
- LocalDateTime actEndYear = null;
|
|
|
- if(isAppraisalResult(firstYearResult) && isAppraisalResult(secondYearResult) && !isAppraisalResult(thirdYearResult)){
|
|
|
- actEndYear = DateUtil.minusYears(endDate,1);
|
|
|
- }else{
|
|
|
- actEndYear = endDate;
|
|
|
- }
|
|
|
- perfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR,DateUtil.toDate(actEndYear));
|
|
|
-
|
|
|
- DynamicObject newPerfManager = EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
|
|
|
- DynamicObject person = perfManager.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
- String personName = person.getString(FormConstant.NAME_KEY);
|
|
|
- newPerfManager.set(FormConstant.CREATEORG_KEY, perfManager.get(FormConstant.CREATEORG_KEY));
|
|
|
- newPerfManager.set(PerfManagerFormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
|
|
|
- newPerfManager.set(FormConstant.NCKD_EMPPOSORGREL, perfManager.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL));
|
|
|
- newPerfManager.set(FormConstant.NCKD_DEP, perfManager.getDynamicObject(FormConstant.NCKD_DEP));
|
|
|
- newPerfManager.set(FormConstant.NCKD_PERSON, person);
|
|
|
- LocalDateTime newBeginDate = DateUtil.addYears(actEndYear, 1);
|
|
|
- LocalDateTime newEndDate = DateUtil.addYears(actEndYear, 3);
|
|
|
- newPerfManager.set(PerfManagerFormConstant.NCKD_BEGINYEAR, DateUtil.toDate(newBeginDate));
|
|
|
- newPerfManager.set(PerfManagerFormConstant.NCKD_ENDYEAR, DateUtil.toDate(newEndDate));
|
|
|
- newPerfManager.set(PerfManagerFormConstant.DESCRIPTION_KEY, "调档后生成新周期");
|
|
|
- newPerfManager.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER,perfManager);
|
|
|
- newPerfManager.set(FormConstant.NAME_KEY, StrFormatter.format("【{}】{}~{}的考核周期",personName,newBeginDate.getYear(),newEndDate.getYear()));
|
|
|
- addPerfManagerList.add(newPerfManager);
|
|
|
- }
|
|
|
- OperateOption option = OperateOption.create();
|
|
|
- option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE+"");
|
|
|
- option.setVariableValue("isUpdate", Boolean.TRUE+"");
|
|
|
- OperationResult operationResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerArray, option);
|
|
|
- if (!operationResult.isSuccess()) {
|
|
|
- StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
- for (IOperateInfo error : operationResult.getAllErrorOrValidateInfo()) {
|
|
|
- errorMsgJoiner.add(error.getMessage());
|
|
|
- }
|
|
|
- String errorMsg = errorMsgJoiner.toString();
|
|
|
- if(StringUtils.isBlank(errorMsg)){
|
|
|
- errorMsg = operationResult.getMessage();
|
|
|
+ LocalDateTime actEndYear = null;
|
|
|
+ if (isAppraisalResult(firstYearResult) && isAppraisalResult(secondYearResult) && !isAppraisalResult(thirdYearResult)) {
|
|
|
+ actEndYear = DateUtil.minusYears(endDate, 1);
|
|
|
+ } else {
|
|
|
+ actEndYear = endDate;
|
|
|
+ }
|
|
|
+ perfManager.set(PerfManagerFormConstant.NCKD_ACTENDYEAR, DateUtil.toDate(actEndYear));
|
|
|
+
|
|
|
+ DynamicObject newPerfManager = EntityHelper.newEntity(PerfManagerFormConstant.PERFMANAGER_ENTITYID);
|
|
|
+ DynamicObject person = perfManager.getDynamicObject(FormConstant.NCKD_PERSON);
|
|
|
+ String personName = person.getString(FormConstant.NAME_KEY);
|
|
|
+ newPerfManager.set(FormConstant.CREATEORG_KEY, perfManager.get(FormConstant.CREATEORG_KEY));
|
|
|
+ newPerfManager.set(PerfManagerFormConstant.CTRLSTRATEGY_KEY, CtrlStrategyEnum.GLOBAL_SHARE.getCtrlStrategy());
|
|
|
+ newPerfManager.set(FormConstant.NCKD_EMPPOSORGREL, perfManager.getDynamicObject(FormConstant.NCKD_EMPPOSORGREL));
|
|
|
+ newPerfManager.set(FormConstant.NCKD_DEP, perfManager.getDynamicObject(FormConstant.NCKD_DEP));
|
|
|
+ newPerfManager.set(FormConstant.NCKD_PERSON, person);
|
|
|
+ LocalDateTime newBeginDate = DateUtil.addYears(actEndYear, 1);
|
|
|
+ LocalDateTime newEndDate = DateUtil.addYears(actEndYear, 3);
|
|
|
+ newPerfManager.set(PerfManagerFormConstant.NCKD_BEGINYEAR, DateUtil.toDate(newBeginDate));
|
|
|
+ newPerfManager.set(PerfManagerFormConstant.NCKD_ENDYEAR, DateUtil.toDate(newEndDate));
|
|
|
+ newPerfManager.set(PerfManagerFormConstant.DESCRIPTION_KEY, "调档后生成新周期");
|
|
|
+ newPerfManager.set(PerfManagerFormConstant.NCKD_LASTPERFMANAGER, perfManager);
|
|
|
+ newPerfManager.set(FormConstant.NAME_KEY, StrFormatter.format("【{}】{}~{}的考核周期", personName, newBeginDate.getYear(), newEndDate.getYear()));
|
|
|
+ addPerfManagerList.add(newPerfManager);
|
|
|
}
|
|
|
- throw new ValidationException("保存考核周期失败,原因:"+errorMsg);
|
|
|
- }else{
|
|
|
- OperateOption addPerfManagerOption = OperateOption.create();
|
|
|
- addPerfManagerOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
|
|
|
- addPerfManagerOption.setVariableValue("cyclegenerate", Boolean.TRUE + "");
|
|
|
- OperationResult addPerfManagerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, addPerfManagerList.toArray(new DynamicObject[0]), addPerfManagerOption);
|
|
|
-
|
|
|
- if (!addPerfManagerResult.isSuccess()) {
|
|
|
- StringJoiner errorMsg = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
- for (IOperateInfo error : addPerfManagerResult.getAllErrorOrValidateInfo()) {
|
|
|
- errorMsg.add(error.getMessage());
|
|
|
+ OperateOption option = OperateOption.create();
|
|
|
+ option.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
|
|
|
+ option.setVariableValue("isUpdate", Boolean.TRUE + "");
|
|
|
+ OperationResult operationResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, perfManagerArray, option);
|
|
|
+ if (!operationResult.isSuccess()) {
|
|
|
+ StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
+ for (IOperateInfo error : operationResult.getAllErrorOrValidateInfo()) {
|
|
|
+ errorMsgJoiner.add(error.getMessage());
|
|
|
}
|
|
|
- throw new ValidationException(errorMsg.toString());
|
|
|
- }else{
|
|
|
- OperationResult salAdjTrackerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, addSalAdjTrackerList.toArray(new DynamicObject[0]), OperateOption.create());
|
|
|
- if (!salAdjTrackerResult.isSuccess()) {
|
|
|
- StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
- for (IOperateInfo error : salAdjTrackerResult.getAllErrorOrValidateInfo()) {
|
|
|
- errorMsgJoiner.add(error.getMessage());
|
|
|
+ String errorMsg = errorMsgJoiner.toString();
|
|
|
+ if (StringUtils.isBlank(errorMsg)) {
|
|
|
+ errorMsg = operationResult.getMessage();
|
|
|
+ }
|
|
|
+ throw new ValidationException("保存考核周期失败,原因:" + errorMsg);
|
|
|
+ } else {
|
|
|
+ OperateOption addPerfManagerOption = OperateOption.create();
|
|
|
+ addPerfManagerOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, Boolean.TRUE + "");
|
|
|
+ addPerfManagerOption.setVariableValue("cyclegenerate", Boolean.TRUE + "");
|
|
|
+ OperationResult addPerfManagerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, PerfManagerFormConstant.PERFMANAGER_ENTITYID, addPerfManagerList.toArray(new DynamicObject[0]), addPerfManagerOption);
|
|
|
+
|
|
|
+ if (!addPerfManagerResult.isSuccess()) {
|
|
|
+ StringJoiner errorMsg = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
+ for (IOperateInfo error : addPerfManagerResult.getAllErrorOrValidateInfo()) {
|
|
|
+ errorMsg.add(error.getMessage());
|
|
|
}
|
|
|
- String errorMsg = errorMsgJoiner.toString();
|
|
|
- if(StringUtils.isBlank(errorMsg)){
|
|
|
- errorMsg = salAdjTrackerResult.getMessage();
|
|
|
+ throw new ValidationException(errorMsg.toString());
|
|
|
+ } else {
|
|
|
+ OperationResult salAdjTrackerResult = SaveServiceHelper.saveOperate(FormConstant.SAVE_OP, SalAdjTrackerConstant.SALADJTRACKER_ENTITYID, addSalAdjTrackerList.toArray(new DynamicObject[0]), OperateOption.create());
|
|
|
+ if (!salAdjTrackerResult.isSuccess()) {
|
|
|
+ StringJoiner errorMsgJoiner = new StringJoiner(StrFormatter.LINE_SEPARATOR);
|
|
|
+ for (IOperateInfo error : salAdjTrackerResult.getAllErrorOrValidateInfo()) {
|
|
|
+ errorMsgJoiner.add(error.getMessage());
|
|
|
+ }
|
|
|
+ String errorMsg = errorMsgJoiner.toString();
|
|
|
+ if (StringUtils.isBlank(errorMsg)) {
|
|
|
+ errorMsg = salAdjTrackerResult.getMessage();
|
|
|
+ }
|
|
|
+ throw new ValidationException("保存调薪情况失败,原因:" + errorMsg);
|
|
|
}
|
|
|
- throw new ValidationException("保存调薪情况失败,原因:"+errorMsg);
|
|
|
}
|
|
|
}
|
|
|
+ this.operationResult.setSuccess(true);
|
|
|
+ this.operationResult.setMessage(msgJoiner.toString());
|
|
|
}
|
|
|
+ }else{
|
|
|
this.operationResult.setSuccess(true);
|
|
|
- this.operationResult.setMessage(msgJoiner.toString());
|
|
|
+ this.operationResult.setMessage("没有需要调档的人员!");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -684,6 +702,8 @@ public class SalaryAdjOpPlugin extends AbstractOperationServicePlugIn implements
|
|
|
int level;
|
|
|
/** 调薪原因*/
|
|
|
String reason;
|
|
|
+ /**定调薪档案*/
|
|
|
+ DynamicObject adjFileInfo;
|
|
|
/**薪酬标准表*/
|
|
|
DynamicObject salaryStDv;
|
|
|
/** 原定调薪项目 */
|