|
|
@@ -9,6 +9,7 @@ import kd.bos.dataentity.RefObject;
|
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
import kd.bos.dataentity.metadata.IDataEntityProperty;
|
|
|
+import kd.bos.dataentity.metadata.IMetadata;
|
|
|
import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
|
|
|
import kd.bos.entity.EntityMetadataCache;
|
|
|
import kd.bos.entity.MainEntityType;
|
|
|
@@ -139,6 +140,8 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
importResultStep();
|
|
|
|
|
|
|
|
|
+ }else{
|
|
|
+ generatePersonList();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -317,13 +320,19 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
}
|
|
|
} else if(Arrays.asList(FormConstant.SAVE_OP, FormConstant.SUBMIT_OP).contains(itemKey)){
|
|
|
//保存或提交先计算一遍
|
|
|
- calcRankCount();
|
|
|
+ Integer step = ConvertUtil.toInt(this.getModel().getValue(PerfRankMgmtConstant.NCKD_STEP),0);
|
|
|
+ if(step == 0) {
|
|
|
+ calcRankCount();
|
|
|
+ }
|
|
|
IPageCache pageCache = this.getView().getPageCache();
|
|
|
if(pageCache.get("removedEntries") != null && ConvertUtil.toBoolean(pageCache.get("removedEntries"))){
|
|
|
//告诉OP需要加载被删除的分录(不参与排名)
|
|
|
FormOperate formOperate = (FormOperate) args.getSource();
|
|
|
formOperate.getOption().setVariableValue("removedEntries", "true");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
} else if(FormConstant.DELETEENTRY_OP.equalsIgnoreCase(itemKey)){
|
|
|
//校验人员考评,若考评周期已结束,则禁止删除。
|
|
|
EntryGrid entryGrid = getView().getControl(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
@@ -439,13 +448,18 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
if (evt.getResult() == MessageBoxResult.Yes) {
|
|
|
OperationResult operationResult = this.getView().invokeOperation(FormConstant.SAVE_OP);
|
|
|
if (operationResult != null && operationResult.isSuccess()) {
|
|
|
- DynamicObject dataEntity = this.getModel().getDataEntity(true);
|
|
|
- dataEntity.getDataEntityState().setFromDatabase( true);
|
|
|
+
|
|
|
String stepValueStr = this.getPageCache().get("stepValue");
|
|
|
if (StringUtils.isNotBlank(stepValueStr)) {
|
|
|
int stepValue = ConvertUtil.toInt(stepValueStr);
|
|
|
update(stepValue);
|
|
|
}
|
|
|
+ DynamicObject dataEntity = this.getModel().getDataEntity(true);
|
|
|
+ dataEntity.getDataEntityState().setFromDatabase( true);
|
|
|
+ DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ for (DynamicObject dynamicObject : dynamicObjectCollection) {
|
|
|
+ dynamicObject.getDataEntityState().setFromDatabase( true);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -470,136 +484,131 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
} else if(hasAdminOrgId){
|
|
|
billView.showTipNotification("由于您修改了【所属组织】但还没有保存,请保存之后在获取排名名单");
|
|
|
}else{*/
|
|
|
- IDataModel model = this.getModel();
|
|
|
- DynamicObject adminOrg = ConvertUtil.toDynamicObjectOrNull(model.getValue(FormConstant.NCKD_ADMINORG));
|
|
|
- int theYear = ConvertUtil.toInt(model.getValue(PerfRankMgmtConstant.NCKD_THEYEAR));
|
|
|
- if(adminOrg != null) {
|
|
|
- Date targetDate = DateUtil.toDate(LocalDateTime.of(theYear, 12, 31, 23, 59, 59));
|
|
|
- String structLongNumber = adminOrg.getString(FormConstant.STRUCTLONGNUMBER);
|
|
|
- //查询所选组织下的人员
|
|
|
- //任职状态为在岗,且任职经历的任职类型为全职任职的人员((不含工作性质大类为离岗))
|
|
|
- QFilter qFilter = new QFilter(String.join(".",FormConstant.ADMINORG, FormConstant.STRUCTLONGNUMBER), QCP.like, structLongNumber + "%")
|
|
|
- .and(FormConstant.STARTDATE, QCP.less_equals, targetDate)
|
|
|
- .and(FormConstant.ENDDATE, QCP.large_equals, targetDate);
|
|
|
-
|
|
|
- //在职人员
|
|
|
- qFilter.and(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS, FormConstant.IS_HIRED), QCP.equals, EnableEnum.YES.getCode());
|
|
|
- QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
- .add(FormConstant.ID_KEY)
|
|
|
- .add(FormConstant.STARTDATE)
|
|
|
- //用工关系状态.编码(1005_S 在职-试用中、1010_S 在职、1020_S 离职、1030_S 已退休),istrial:是否试用,ishired:是否在职
|
|
|
- .addGroup(new String[]{FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS}, FormConstant.NUMBER_KEY, FormConstant.NAME_KEY, FormConstant.IS_TRIAL, FormConstant.IS_HIRED)
|
|
|
- //任职状态分类(1010_S:在岗,1030_S:不在岗)
|
|
|
- .addIdNumberName(FormConstant.POS_STATUS, FormConstant.POST_STATE_CLS)
|
|
|
- //入职日期
|
|
|
- .addGroup(new String[]{FormConstant.HRPI_EMPENTREL}, FormConstant.ENTRYDATE)
|
|
|
- //职务级别
|
|
|
- .addGroup(new String[]{FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE}, FormConstant.NAME_KEY, FormConstant.NUMBER_KEY, FormConstant.NCKD_SORTNUM)
|
|
|
- .addGroup(new String[]{FormConstant.EMPLOYEE_KEY}, FormConstant.ID_KEY, FormConstant.NAME_KEY, FormConstant.EMP_NUMBER_KEY)
|
|
|
- //工作性质大类
|
|
|
- .addIdNumberName(FormConstant.NCKD_HBSS_WORKNATURE,FormConstant.NCKD_JOBTJOBTYPMAIN)
|
|
|
- .orderDesc(FormConstant.STARTDATE);
|
|
|
-
|
|
|
- // -------------------------------- 1、查询组织下的在职人员 --------------------------------
|
|
|
- QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("personfilequery");
|
|
|
- DynamicObjectCollection personList = HRQueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, queryFieldBuilder.buildOrder());
|
|
|
- //添加分录
|
|
|
- DynamicObjectCollection entryEntityCols = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
- //根据条件删除分录
|
|
|
-
|
|
|
- // -------------------------------- 2、删除系统生成部分人员 --------------------------------
|
|
|
- //删除系统生成部分人员
|
|
|
- entryEntityCols.removeIf(obj -> EnableEnum.NO.getCode().equals(obj.getString(PerfRankMgmtConstant.NCKD_RANKSOURCE)));
|
|
|
-
|
|
|
- List<Long> personIds = personList.stream()
|
|
|
- .map(person -> person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)))
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ DynamicObject adminOrg = ConvertUtil.toDynamicObjectOrNull(model.getValue(FormConstant.NCKD_ADMINORG));
|
|
|
+ int theYear = ConvertUtil.toInt(model.getValue(PerfRankMgmtConstant.NCKD_THEYEAR));
|
|
|
+ if(adminOrg != null) {
|
|
|
+ Date targetDate = DateUtil.toDate(LocalDateTime.of(theYear, 12, 31, 23, 59, 59));
|
|
|
+ String structLongNumber = adminOrg.getString(FormConstant.STRUCTLONGNUMBER);
|
|
|
+ //查询所选组织下的人员
|
|
|
+ //覆盖人员范围为:根据在职人员花名册,排名单元的所属组织和年度的上年度12月31日还在该所属组织的人员(不含岗位性质大类为离岗),其中含上挂人员(任职经历的任职类型为“上挂”)和在本所属组织待满183天的人员。取以下条件的并集
|
|
|
+ //顺序1、上年度12月31日,任职状态为在岗,且任职经历的任职类型为全职任职的人员((不含工作性质大类为离岗))
|
|
|
+ //顺序2、上年度12月31日,任职状态为在岗,且任职经历的任职类型为“上挂”
|
|
|
+ //顺序3:上年度12月31日,任职状态为在岗,且任职经历的任职类型为全职任职但是在本组织待满183天的人员
|
|
|
+ //(例如说,12月31日那一天在B组织任职,但是在A组织待满183天,应该同时出现在A组织和B组织的排名单元里面,且默认A组织为参与排名,B组织为不参与排名)
|
|
|
+ QFilter qFilter = new QFilter(String.join(".",FormConstant.ADMINORG, FormConstant.STRUCTLONGNUMBER), QCP.like, structLongNumber + "%")
|
|
|
+ .and(FormConstant.STARTDATE, QCP.less_equals, targetDate)
|
|
|
+ .and(FormConstant.ENDDATE, QCP.large_equals, targetDate)
|
|
|
+ .and(String.join( ".", FormConstant.POSTYPE, FormConstant.NUMBER_KEY), QCP.in,new String[]{"JTCC_1002", "1010_S"});
|
|
|
+
|
|
|
+ //在职人员
|
|
|
+ qFilter.and(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS, FormConstant.IS_HIRED), QCP.equals, EnableEnum.YES.getCode());
|
|
|
+ QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
+ .add(FormConstant.ID_KEY)
|
|
|
+ .add(FormConstant.STARTDATE)
|
|
|
+ //用工关系状态.编码(1005_S 在职-试用中、1010_S 在职、1020_S 离职、1030_S 已退休),istrial:是否试用,ishired:是否在职
|
|
|
+ .addGroup(new String[]{FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS}, FormConstant.NUMBER_KEY, FormConstant.NAME_KEY, FormConstant.IS_TRIAL, FormConstant.IS_HIRED)
|
|
|
+ //任职状态分类(1010_S:在岗,1030_S:不在岗)
|
|
|
+ .addIdNumberName(FormConstant.POS_STATUS, FormConstant.POST_STATE_CLS)
|
|
|
+ //入职日期
|
|
|
+ .addGroup(new String[]{FormConstant.HRPI_EMPENTREL}, FormConstant.ENTRYDATE)
|
|
|
+ //职务级别
|
|
|
+ .addGroup(new String[]{FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE}, FormConstant.NAME_KEY, FormConstant.NUMBER_KEY, FormConstant.NCKD_SORTNUM)
|
|
|
+ .addGroup(new String[]{FormConstant.EMPLOYEE_KEY}, FormConstant.ID_KEY, FormConstant.NAME_KEY, FormConstant.EMP_NUMBER_KEY)
|
|
|
+ //工作性质大类
|
|
|
+ .addIdNumberName(FormConstant.NCKD_HBSS_WORKNATURE,FormConstant.NCKD_JOBTJOBTYPMAIN)
|
|
|
+ .orderDesc(FormConstant.STARTDATE);
|
|
|
+
|
|
|
+ // -------------------------------- 1、查询组织下的在职人员 --------------------------------
|
|
|
+ QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("personfilequery");
|
|
|
+ DynamicObjectCollection personList = HRQueryEntityHelper.getInstance().getQueryDyoColl(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{qFilter}, queryFieldBuilder.buildOrder());
|
|
|
+ //添加分录
|
|
|
+ DynamicObjectCollection entryEntityCols = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ //根据条件删除分录
|
|
|
+
|
|
|
+ // -------------------------------- 2、删除系统生成部分人员 --------------------------------
|
|
|
+ //删除系统生成部分人员
|
|
|
+ entryEntityCols.removeIf(obj -> EnableEnum.NO.getCode().equals(obj.getString(PerfRankMgmtConstant.NCKD_RANKSOURCE)));
|
|
|
+
|
|
|
+ List<Long> personIds = personList.stream()
|
|
|
+ .map(person -> person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //按员工ID分组,并只取开始日期最新的任职记录
|
|
|
+ Map<Long, DynamicObject> groupedByEmployee = personList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ person -> person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)),
|
|
|
+ Collectors.collectingAndThen(
|
|
|
+ Collectors.maxBy((p1, p2) -> {
|
|
|
+ Date date1 = p1.getDate(FormConstant.STARTDATE);
|
|
|
+ Date date2 = p2.getDate(FormConstant.STARTDATE);
|
|
|
+ if (date1 == null && date2 == null) return 0;
|
|
|
+ if (date1 == null) return -1;
|
|
|
+ if (date2 == null) return 1;
|
|
|
+ return date2.compareTo(date1); // 降序,取最新的
|
|
|
+ }),
|
|
|
+ optional -> optional.orElse(null)
|
|
|
+ )
|
|
|
+ ));
|
|
|
+ if (!personIds.isEmpty()) {
|
|
|
+ Date now = new Date();
|
|
|
+ // -------------------------------- 3、获取人员是否享受职位津贴 --------------------------------
|
|
|
+ Map<Long, Boolean> entitledToAllowance = isEntitledToAllowance(personIds, now);
|
|
|
+
|
|
|
+ // -------------------------------- 4、加载数据到分录 --------------------------------
|
|
|
+ //预加载任职经历
|
|
|
+ List<Long> ids = personList.stream()
|
|
|
+ .map(person -> person.getLong(FormConstant.ID_KEY))
|
|
|
.collect(Collectors.toList());
|
|
|
- //按员工ID分组,并只取开始日期最新的任职记录
|
|
|
- Map<Long, DynamicObject> groupedByEmployee = personList.stream()
|
|
|
- .collect(Collectors.groupingBy(
|
|
|
- person -> person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY)),
|
|
|
- Collectors.collectingAndThen(
|
|
|
- Collectors.maxBy((p1, p2) -> {
|
|
|
- Date date1 = p1.getDate(FormConstant.STARTDATE);
|
|
|
- Date date2 = p2.getDate(FormConstant.STARTDATE);
|
|
|
- if (date1 == null && date2 == null) return 0;
|
|
|
- if (date1 == null) return -1;
|
|
|
- if (date2 == null) return 1;
|
|
|
- return date2.compareTo(date1); // 降序,取最新的
|
|
|
- }),
|
|
|
- optional -> optional.orElse(null)
|
|
|
- )
|
|
|
+ MainEntityType empOrgRelEntityType = EntityMetadataCache.getDataEntityType(FormConstant.HRPI_EMPPOSORGREL);
|
|
|
+ DynamicObject[] empOrgRelArray = BusinessDataServiceHelper.load(ids.toArray(), empOrgRelEntityType);
|
|
|
+ Map<Long, DynamicObject> empOrgRelMap = Arrays.stream(empOrgRelArray)
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ obj -> obj.getLong(FormConstant.ID_KEY),
|
|
|
+ obj -> obj,
|
|
|
+ (existing, replacement) -> existing
|
|
|
));
|
|
|
- if (!personIds.isEmpty()) {
|
|
|
- Date now = new Date();
|
|
|
- // -------------------------------- 3、获取人员是否享受职位津贴 --------------------------------
|
|
|
- Map<Long, Boolean> entitledToAllowance = isEntitledToAllowance(personIds, now);
|
|
|
-
|
|
|
- // -------------------------------- 4、加载数据到分录 --------------------------------
|
|
|
- //预加载任职经历
|
|
|
- List<Long> ids = personList.stream()
|
|
|
- .map(person -> person.getLong(FormConstant.ID_KEY))
|
|
|
- .collect(Collectors.toList());
|
|
|
- MainEntityType empOrgRelEntityType = EntityMetadataCache.getDataEntityType(FormConstant.HRPI_EMPPOSORGREL);
|
|
|
- DynamicObject[] empOrgRelArray = BusinessDataServiceHelper.load(ids.toArray(), empOrgRelEntityType);
|
|
|
- Map<Long, DynamicObject> empOrgRelMap = Arrays.stream(empOrgRelArray)
|
|
|
- .collect(Collectors.toMap(
|
|
|
- obj -> obj.getLong(FormConstant.ID_KEY),
|
|
|
- obj -> obj,
|
|
|
- (existing, replacement) -> existing
|
|
|
- ));
|
|
|
- Set<Long> addedPersonIds = new HashSet<>();
|
|
|
- for (Map.Entry<Long, DynamicObject> personEntry : groupedByEmployee.entrySet()) {
|
|
|
- DynamicObject person = personEntry.getValue();
|
|
|
- long id = person.getLong(FormConstant.ID_KEY);
|
|
|
- long personId = person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
|
|
|
- // 检查人员是否已经添加过,如果已存在则跳过
|
|
|
- if (addedPersonIds.contains(personId)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- DynamicObject empPosOrgRel = empOrgRelMap.get(id);
|
|
|
- if(empPosOrgRel == null){
|
|
|
- continue;
|
|
|
- }
|
|
|
- DynamicObject entryCol = entryEntityCols.addNew();
|
|
|
- addedPersonIds.add(personId); // 记录已添加的人员ID
|
|
|
- String personName = person.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY));
|
|
|
- String personNumber = person.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.EMP_NUMBER_KEY));
|
|
|
+ Set<Long> addedPersonIds = new HashSet<>();
|
|
|
+ for (Map.Entry<Long, DynamicObject> personEntry : groupedByEmployee.entrySet()) {
|
|
|
+ DynamicObject person = personEntry.getValue();
|
|
|
+ long id = person.getLong(FormConstant.ID_KEY);
|
|
|
+ long personId = person.getLong(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.ID_KEY));
|
|
|
+ // 检查人员是否已经添加过,如果已存在则跳过
|
|
|
+ if (addedPersonIds.contains(personId)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ DynamicObject empPosOrgRel = empOrgRelMap.get(id);
|
|
|
+ if(empPosOrgRel == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ DynamicObject entryCol = entryEntityCols.addNew();
|
|
|
+ addedPersonIds.add(personId); // 记录已添加的人员ID
|
|
|
+ String personName = person.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.NAME_KEY));
|
|
|
+ String personNumber = person.getString(String.join(".", FormConstant.EMPLOYEE_KEY, FormConstant.EMP_NUMBER_KEY));
|
|
|
|
|
|
|
|
|
- entryCol.set(FormConstant.NCKD_DEP, empPosOrgRel.get(FormConstant.ADMINORG));
|
|
|
- entryCol.set(PositionStructureConstant.NCKD_POSITIONHR, empPosOrgRel.get(FormConstant.POSITION_KEY));
|
|
|
+ entryCol.set(FormConstant.NCKD_DEP, empPosOrgRel.get(FormConstant.ADMINORG));
|
|
|
+ entryCol.set(PositionStructureConstant.NCKD_POSITIONHR, empPosOrgRel.get(FormConstant.POSITION_KEY));
|
|
|
|
|
|
|
|
|
- DynamicObjectType type = EntityMetadataCache.getDataEntityType(FormConstant.HRPI_EMPLOYEE);
|
|
|
- DynamicObject personObj = (DynamicObject) type.createInstance();
|
|
|
- personObj.set(FormConstant.ID_KEY, personId);
|
|
|
- personObj.set(FormConstant.NAME_KEY, personName);
|
|
|
- personObj.set(FormConstant.EMP_NUMBER_KEY, personNumber);
|
|
|
- entryCol.set(FormConstant.NCKD_PERSON, personObj);
|
|
|
+ DynamicObjectType type = EntityMetadataCache.getDataEntityType(FormConstant.HRPI_EMPLOYEE);
|
|
|
+ DynamicObject personObj = (DynamicObject) type.createInstance();
|
|
|
+ personObj.set(FormConstant.ID_KEY, personId);
|
|
|
+ personObj.set(FormConstant.NAME_KEY, personName);
|
|
|
+ personObj.set(FormConstant.EMP_NUMBER_KEY, personNumber);
|
|
|
+ entryCol.set(FormConstant.NCKD_PERSON, personObj);
|
|
|
|
|
|
|
|
|
|
|
|
- //是否试用
|
|
|
- boolean isTrial = person.getBoolean(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS, FormConstant.IS_TRIAL));
|
|
|
- //入职日期
|
|
|
- Date entryDate = person.getDate(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENTRYDATE));
|
|
|
- //职务级别编码
|
|
|
- Integer posGradeSort = null;
|
|
|
- if (person.containsProperty(FormConstant.NCKD_HRPI_PARTYPOSH)
|
|
|
- && person.containsProperty(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE))
|
|
|
- && person.containsProperty(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE, FormConstant.NCKD_SORTNUM))) {
|
|
|
- posGradeSort = person.getInt(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE, FormConstant.NCKD_SORTNUM));
|
|
|
- }
|
|
|
- StringBuilder reason = new StringBuilder();
|
|
|
- boolean participateRank = isParticipateRank(isTrial, entryDate, posGradeSort, reason);
|
|
|
- entryCol.set(PerfRankMgmtConstant.NCKD_ISRANKING, participateRank);
|
|
|
- entryCol.set(PerfRankMgmtConstant.NCKD_EXCLUDERANKREASON, reason.toString());
|
|
|
- entryCol.set(PerfRankMgmtConstant.NCKD_RANKSOURCE, EnableEnum.NO.getCode());
|
|
|
- //判断是否有职位津贴
|
|
|
- boolean hasAllowance = entitledToAllowance.get(personId);
|
|
|
- entryCol.set(PerfRankMgmtConstant.NCKD_POSTALLOWANCE, hasAllowance);
|
|
|
- }
|
|
|
+
|
|
|
+ StringBuilder reason = new StringBuilder();
|
|
|
+ boolean participateRank = isParticipateRank(person, reason);
|
|
|
+ entryCol.set(PerfRankMgmtConstant.NCKD_ISRANKING, participateRank);
|
|
|
+ entryCol.set(PerfRankMgmtConstant.NCKD_EXCLUDERANKREASON, reason.toString());
|
|
|
+ entryCol.set(PerfRankMgmtConstant.NCKD_RANKSOURCE, EnableEnum.NO.getCode());
|
|
|
+ //判断是否有职位津贴
|
|
|
+ boolean hasAllowance = entitledToAllowance.get(personId);
|
|
|
+ entryCol.set(PerfRankMgmtConstant.NCKD_POSTALLOWANCE, hasAllowance);
|
|
|
+ }
|
|
|
|
|
|
/*this.getModel().updateEntryCache(entryEntityCols);
|
|
|
this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);*/
|
|
|
@@ -616,12 +625,11 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
this.getView().updateView(PerfRankMgmtConstant.NCKD_ISRANKING,i);
|
|
|
|
|
|
}*/
|
|
|
- this.getView().showSuccessNotification("名单获取完成");
|
|
|
- this.getView().invokeOperation(FormConstant.REFRESH_OP);
|
|
|
- } else {
|
|
|
- this.getView().showTipNotification("未获取到人员");
|
|
|
- }
|
|
|
+ this.getView().showSuccessNotification("名单获取完成");
|
|
|
+ } else {
|
|
|
+ this.getView().showTipNotification("未获取到人员");
|
|
|
}
|
|
|
+ }
|
|
|
/* }*/
|
|
|
}else if(PerfRankMgmtConstant.SAVE_OP.equalsIgnoreCase(itemKey)){
|
|
|
if(afterDoOperationEventArgs.getOperationResult() != null && afterDoOperationEventArgs.getOperationResult().isSuccess()){
|
|
|
@@ -641,12 +649,12 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
}
|
|
|
if(Arrays.asList(FormConstant.DELETEENTRY_OP, PerfRankMgmtConstant.GETRANKLIST_OP).contains(itemKey)){
|
|
|
sortEntry();
|
|
|
- calcRankCount();
|
|
|
+// calcRankCount();
|
|
|
}
|
|
|
// this.getView().setStatus(OperationStatus.EDIT);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
+/* @Override
|
|
|
public void getEntityType(GetEntityTypeEventArgs e) {
|
|
|
super.getEntityType(e);
|
|
|
|
|
|
@@ -656,17 +664,15 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
} catch (CloneNotSupportedException ex) {
|
|
|
throw new RuntimeException(ex);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
private void importResultStep() {
|
|
|
this.getModel().setValue(PerfRankMgmtConstant.NCKD_STEP,1);
|
|
|
+ this.getView().updateView(PerfRankMgmtConstant.NCKD_STEP);
|
|
|
this.getView().setVisible(false, FormConstant.NUMBER_KEY, PerfRankMgmtConstant.NCKD_GETRANKLIST,"nckd_advconbaritemap2","nckd_advconbaritemap3");
|
|
|
- this.getView().setVisible(true, PerfRankMgmtConstant.NCKD_TOPRANKS, PerfRankMgmtConstant.NCKD_ALLOWANCERANKS, PerfRankMgmtConstant.NCKD_FAILS, PerfRankMgmtConstant.NCKD_BASICS, PerfRankMgmtConstant.NCKD_EXCELLENTS, "nckd_advconbaritemap6","nckd_advconbaritemap");
|
|
|
- DynamicObjectCollection entryEntity = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
- for (int i = 0; i < entryEntity.size(); i++) {
|
|
|
- this.getView().setEnable(Boolean.FALSE, i, FormConstant.NCKD_PERSON);
|
|
|
- this.getView().setEnable(Boolean.FALSE, i, PerfRankMgmtConstant.NCKD_ISRANKING);
|
|
|
- }
|
|
|
+ this.getView().setVisible(true, PerfRankMgmtConstant.NCKD_TOPRANKS, PerfRankMgmtConstant.NCKD_ALLOWANCERANKS, PerfRankMgmtConstant.NCKD_FAILS,PerfRankMgmtConstant.NCKD_APPRAISALRESULT,
|
|
|
+ PerfRankMgmtConstant.NCKD_POSTALLOWANCE,PerfRankMgmtConstant.NCKD_ALLOWANCERANK,PerfRankMgmtConstant.NCKD_BASICS, PerfRankMgmtConstant.NCKD_EXCELLENTS,PerfRankMgmtConstant.NCKD_TOPRANK, "nckd_advconbaritemap6","nckd_advconbaritemap");
|
|
|
+
|
|
|
DynamicObjectCollection dbEntryEntity = null;
|
|
|
Long id = ConvertUtil.toLong(this.getModel().getValue(FormConstant.ID_KEY));
|
|
|
if (id != null && id > 0) {
|
|
|
@@ -687,6 +693,14 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
this.getView().getPageCache().put("removedEntries","false");
|
|
|
}
|
|
|
this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ this.getModel().updateEntryCache(entryEntityCols);
|
|
|
+
|
|
|
+ DynamicObjectCollection entryEntity = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ for (int i = 0; i < entryEntity.size(); i++) {
|
|
|
+ this.getView().setEnable(Boolean.FALSE, i, FormConstant.NCKD_PERSON);
|
|
|
+ this.getView().setEnable(Boolean.FALSE, i, PerfRankMgmtConstant.NCKD_ISRANKING);
|
|
|
+ this.getView().updateView(PerfRankMgmtConstant.NCKD_ISRANKING,i);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -696,6 +710,7 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
if(pageCache.get("removedEntries") != null && ConvertUtil.toBoolean(pageCache.get("removedEntries"))) {
|
|
|
Long id = ConvertUtil.toLong(this.getModel().getValue(FormConstant.ID_KEY));
|
|
|
if (id != null && id > 0) {
|
|
|
+
|
|
|
MainEntityType perfRankMgmtEntityType = EntityMetadataCache.getDataEntityType(PerfRankMgmtConstant.NCKD_PERFRANKMGMT_ENTITYID);
|
|
|
DynamicObject dbPerfRankMgmt = BusinessDataServiceHelper.loadSingle(id, perfRankMgmtEntityType);
|
|
|
DynamicObjectCollection dynamicObjectCollection = dbPerfRankMgmt.getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
@@ -719,22 +734,35 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
entryEntityCols.addAll(entriesToAdd);
|
|
|
+
|
|
|
this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ this.getModel().updateEntryCache(entryEntityCols);
|
|
|
this.getView().getPageCache().put("removedEntries", "false");
|
|
|
}
|
|
|
}
|
|
|
this.getModel().setValue(PerfRankMgmtConstant.NCKD_STEP,0);
|
|
|
+ this.getView().updateView(PerfRankMgmtConstant.NCKD_STEP);
|
|
|
this.getView().setVisible(true, FormConstant.NUMBER_KEY, PerfRankMgmtConstant.NCKD_GETRANKLIST,"nckd_advconbaritemap2","nckd_advconbaritemap3");
|
|
|
- this.getView().setVisible(false, PerfRankMgmtConstant.NCKD_TOPRANKS, PerfRankMgmtConstant.NCKD_ALLOWANCERANKS, PerfRankMgmtConstant.NCKD_FAILS, PerfRankMgmtConstant.NCKD_BASICS, PerfRankMgmtConstant.NCKD_EXCELLENTS, "nckd_advconbaritemap6","nckd_advconbaritemap");
|
|
|
+ this.getView().setVisible(false, PerfRankMgmtConstant.NCKD_TOPRANKS, PerfRankMgmtConstant.NCKD_ALLOWANCERANKS, PerfRankMgmtConstant.NCKD_FAILS,PerfRankMgmtConstant.NCKD_APPRAISALRESULT,
|
|
|
+ PerfRankMgmtConstant.NCKD_POSTALLOWANCE,PerfRankMgmtConstant.NCKD_ALLOWANCERANK,PerfRankMgmtConstant.NCKD_BASICS, PerfRankMgmtConstant.NCKD_EXCELLENTS,PerfRankMgmtConstant.NCKD_TOPRANK, "nckd_advconbaritemap6","nckd_advconbaritemap");
|
|
|
DynamicObjectCollection entryEntity = this.getModel().getDataEntity(true).getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
for (int i = 0; i < entryEntity.size(); i++) {
|
|
|
this.getView().setEnable(Boolean.TRUE, i, FormConstant.NCKD_PERSON);
|
|
|
this.getView().setEnable(Boolean.TRUE, i, PerfRankMgmtConstant.NCKD_ISRANKING);
|
|
|
- DynamicObject dynamicObject = entryEntity.get(i);
|
|
|
- if(!entryEntity.get( i).getBoolean(PerfRankMgmtConstant.NCKD_ISRANKING)){
|
|
|
- dynamicObject.getDataEntityState().setFromDatabase( true);
|
|
|
+ Boolean aBoolean = ConvertUtil.toBoolean(this.getModel().getValue(PerfRankMgmtConstant.NCKD_ISRANKING, i), false);
|
|
|
+ if(!aBoolean){
|
|
|
+ /* this.getModel().setValue(PerfRankMgmtConstant.NCKD_ISRANKING, true, i);
|
|
|
+ this.getModel().setValue(PerfRankMgmtConstant.NCKD_ISRANKING, false, i);*/
|
|
|
+ /* DynamicObject dynamicObject = entryEntity.get(i);
|
|
|
+ if(!entryEntity.get(i).getBoolean(PerfRankMgmtConstant.NCKD_ISRANKING)){
|
|
|
+ dynamicObject.getDataEntityState().setFromDatabase( true);
|
|
|
+ }*/
|
|
|
}
|
|
|
+ this.getView().updateView(PerfRankMgmtConstant.NCKD_ISRANKING,i);
|
|
|
+
|
|
|
}
|
|
|
+ this.getView().updateView(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
+ this.getModel().updateEntryCache(entryEntity);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -804,7 +832,24 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
* @author W.Y.C
|
|
|
* @date: 2025/10/20 20:17
|
|
|
*/
|
|
|
- private boolean isParticipateRank(boolean isTrial,Date entryDate,Integer posGradeSort,StringBuilder reason) {
|
|
|
+ private boolean isParticipateRank(DynamicObject person,StringBuilder reason) {
|
|
|
+ //是否试用
|
|
|
+ boolean isTrial = person.getBoolean(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS, FormConstant.IS_TRIAL));
|
|
|
+ //入职日期
|
|
|
+ Date entryDate = person.getDate(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENTRYDATE));
|
|
|
+ //职务级别编码
|
|
|
+ Integer posGradeSort = null;
|
|
|
+ if (person.containsProperty(FormConstant.NCKD_HRPI_PARTYPOSH)
|
|
|
+ && person.containsProperty(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE))
|
|
|
+ && person.containsProperty(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE, FormConstant.NCKD_SORTNUM))) {
|
|
|
+ posGradeSort = person.getInt(String.join(".", FormConstant.NCKD_HRPI_PARTYPOSH, FormConstant.NCKD_POSGRADE, FormConstant.NCKD_SORTNUM));
|
|
|
+ }
|
|
|
+ //工作性质大类
|
|
|
+ String jobtJobTypMain = null;
|
|
|
+ if(person.containsProperty(String.join(".", FormConstant.NCKD_HBSS_WORKNATURE, FormConstant.NCKD_JOBTJOBTYPMAIN,FormConstant.NUMBER_KEY))){
|
|
|
+ jobtJobTypMain = person.getString(String.join(".", FormConstant.NCKD_HBSS_WORKNATURE, FormConstant.NCKD_JOBTJOBTYPMAIN, FormConstant.NUMBER_KEY));
|
|
|
+ }
|
|
|
+
|
|
|
//获取入职天数
|
|
|
long between = DateUtil.between(DateUtil.toLocalDateTime(entryDate), DateUtil.now(), ChronoUnit.DAYS);
|
|
|
if(between < 183){
|
|
|
@@ -820,6 +865,10 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
reason.append("副科级及以上不参与");
|
|
|
return false;
|
|
|
}
|
|
|
+ if(FormConstant.NCKD_JOBTJOBTYPMAIN_LEAVE_NUMBER.equalsIgnoreCase(jobtJobTypMain)){
|
|
|
+ reason.append("工作性质大类为离岗");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -883,10 +932,6 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
private void calcRankCount(){
|
|
|
DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
Object value = this.getModel().getValue(PerfRankMgmtConstant.NCKD_TOPRANKS);
|
|
|
- if(value != null && ConvertUtil.toInt( value) > 0){
|
|
|
- //有值了就不计算
|
|
|
- return;
|
|
|
- }
|
|
|
int totalRankCount = 0;
|
|
|
int allowanceRankCount = 0;
|
|
|
int failCount = 0;
|
|
|
@@ -972,7 +1017,7 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
DynamicObject dataEntity = this.getModel().getDataEntity(true);
|
|
|
boolean hasChanged = false;
|
|
|
List<IDataEntityProperty> iDataEntityProperties = dataEntity.getDataEntityState().GetDirtyProperties();
|
|
|
- ArrayList<String> fields = Lists.newArrayList(PerfRankMgmtConstant.NCKD_STEP,FormConstant.STATUS);
|
|
|
+ ArrayList<String> fields = Lists.newArrayList(PerfRankMgmtConstant.NCKD_STEP,FormConstant.STATUS,FormConstant.USEORG_KEY,"useorg_id");
|
|
|
for (IDataEntityProperty iDataEntityProperty : iDataEntityProperties) {
|
|
|
if (fields.stream().noneMatch(ignoreField -> ignoreField.equalsIgnoreCase(iDataEntityProperty.getName()))) {
|
|
|
hasChanged = true;
|
|
|
@@ -982,7 +1027,16 @@ public class PerfRankMgmtFormPlugin extends AbstractFormPlugin implements Wizard
|
|
|
DynamicObjectCollection entityColl = dataEntity.getDynamicObjectCollection(PerfRankMgmtConstant.NCKD_PERFRANKMGMTENTRY);
|
|
|
for (DynamicObject dynamicObject : entityColl) {
|
|
|
List<IDataEntityProperty> iDataEntityProperties1 = dynamicObject.getDataEntityState().GetDirtyProperties();
|
|
|
- if (!iDataEntityProperties1.isEmpty()) {
|
|
|
+ List<String> name = iDataEntityProperties1.stream().map(IMetadata::getName).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 判断name中是否只有"seq"或FormConstant.NCKD_DEP或同时只存在这两个值
|
|
|
+ boolean onlyContainsSeqAndDep = !name.isEmpty() &&
|
|
|
+ name.stream().allMatch(ignoreField ->
|
|
|
+ ignoreField.equalsIgnoreCase("seq") ||
|
|
|
+ ignoreField.equalsIgnoreCase(FormConstant.NCKD_DEP)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (!iDataEntityProperties1.isEmpty() && !onlyContainsSeqAndDep) {
|
|
|
hasChanged = true;
|
|
|
}
|
|
|
}
|