|
|
@@ -5,48 +5,39 @@ import com.google.common.collect.Maps;
|
|
|
import kd.bos.common.enums.EnableEnum;
|
|
|
import kd.bos.dataentity.OperateOption;
|
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
|
-import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
-import kd.bos.dataentity.metadata.IDataEntityProperty;
|
|
|
-import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
|
|
|
-import kd.bos.entity.EntityMetadataCache;
|
|
|
import kd.bos.entity.constant.StatusEnum;
|
|
|
import kd.bos.entity.operate.OperateOptionConst;
|
|
|
import kd.bos.entity.operate.result.IOperateInfo;
|
|
|
import kd.bos.entity.operate.result.OperationResult;
|
|
|
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
-import kd.bos.entity.plugin.AddValidatorsEventArgs;
|
|
|
import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
|
|
|
import kd.bos.exception.KDBizException;
|
|
|
import kd.bos.orm.query.QCP;
|
|
|
import kd.bos.orm.query.QFilter;
|
|
|
import kd.bos.service.operation.OperationServiceImpl;
|
|
|
-import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
-import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
+import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
|
|
|
+import kd.hr.hbp.common.constants.history.HisModelDataStatusEnum;
|
|
|
import kd.hr.hbp.common.util.HRDynamicObjectUtils;
|
|
|
import kd.hr.hbp.common.util.HRStringUtils;
|
|
|
+import nckd.jxccl.base.common.utils.QueryFieldBuilder;
|
|
|
import nckd.jxccl.hrmp.hbpm.common.hr.PositionBillConstant;
|
|
|
-import nckd.jxccl.hrmp.hbpm.plugin.operate.hr.validator.PositionBillEntryValidator;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 岗位申请-新增岗位保存OP
|
|
|
+ * @entity: nckd_posbillentryadd
|
|
|
* @author: jtd
|
|
|
* @date: 2025-11-08 15:30
|
|
|
*/
|
|
|
public class PosBillEntryAddSaveOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
|
|
|
- private static final String FIELD_PREFIX = "nckd_";
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onAddValidators(AddValidatorsEventArgs e) {
|
|
|
- super.onAddValidators(e);
|
|
|
-
|
|
|
- e.addValidator(new PositionBillEntryValidator());
|
|
|
- }
|
|
|
+ private static final String PAGECACHE_KEY_BILLNO_FROM_INIT_VALUE_OF_OPERATION = "coderule_billno_from_init_value_of_operation";
|
|
|
|
|
|
@Override
|
|
|
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
@@ -59,68 +50,75 @@ public class PosBillEntryAddSaveOpPlugin extends AbstractOperationServicePlugIn
|
|
|
|
|
|
// 获取岗位和上级岗位的业务ID
|
|
|
List<Long> positionBoIds = Lists.newArrayListWithExpectedSize(positionEntities.length);
|
|
|
- for (DynamicObject orgEntity : positionEntities) {
|
|
|
- positionBoIds.add(orgEntity.getLong(String.format("%s_id", PositionBillConstant.NCKD_POSITION)));
|
|
|
-
|
|
|
+ // 获取 行政组织业务ID
|
|
|
+ List<Long> adminorgBoIds = Lists.newArrayListWithExpectedSize(positionEntities.length);
|
|
|
+ for (DynamicObject positionEntity : positionEntities) {
|
|
|
+ positionBoIds.add(positionEntity.getLong(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.ID_KEY)));
|
|
|
+ adminorgBoIds.add(positionEntity.getLong(PositionBillConstant.NCKD_ADMINORGBOID_KEY));
|
|
|
// 获取上级岗位
|
|
|
- DynamicObject parentPositionVersionDy = orgEntity.getDynamicObject(PositionBillConstant.NCKD_PARENT);
|
|
|
+ DynamicObject parentPositionVersionDy = positionEntity.getDynamicObject(PositionBillConstant.NCKD_PARENT);
|
|
|
if (parentPositionVersionDy != null) {
|
|
|
long parentOrgBoId = parentPositionVersionDy.getLong(PositionBillConstant.BOID_KEY);
|
|
|
positionBoIds.add(parentOrgBoId);
|
|
|
- //orgEntity.set("adminorgboid", Long.valueOf(parentOrgBoId));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 根据岗位业务ID从数据库中获取岗位信息
|
|
|
- DynamicObjectCollection positionQueryDyColl = QueryServiceHelper.query(PositionBillConstant.HBPM_POSITIONHR, PositionBillConstant.ID_KEY, new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionBoIds)});
|
|
|
- List<Object> listIds = new ArrayList<Object>();
|
|
|
- positionQueryDyColl.forEach(row -> listIds.add(row.getLong(PositionBillConstant.ID_KEY)));
|
|
|
- DynamicObject[] dbPositionDys = BusinessDataServiceHelper.load(listIds.toArray(), EntityMetadataCache.getDataEntityType(PositionBillConstant.HBPM_POSITIONHR));
|
|
|
- Map<Long, DynamicObject> dbPositionMap = Maps.newHashMapWithExpectedSize(dbPositionDys.length);
|
|
|
- for (DynamicObject dbPositionDy : dbPositionDys) {
|
|
|
- dbPositionMap.put(dbPositionDy.getLong(PositionBillConstant.ID_KEY), dbPositionDy);
|
|
|
+ // 根据岗位ID从数据库中获取岗位信息
|
|
|
+ HRBaseServiceHelper positionServiceHelper = HRBaseServiceHelper.create(PositionBillConstant.HBPM_POSITIONHR);
|
|
|
+ DynamicObject[] positionDyos = positionServiceHelper.loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, positionBoIds)});
|
|
|
+ Map<Long, DynamicObject> dbPositionMap = Maps.newHashMapWithExpectedSize(positionDyos.length);
|
|
|
+ for (DynamicObject positionDyo : positionDyos) {
|
|
|
+ dbPositionMap.put(positionDyo.getLong(PositionBillConstant.ID_KEY), positionDyo);
|
|
|
}
|
|
|
-
|
|
|
- // 准备岗位保存数据
|
|
|
+ // 根据组织BOID从数据库中获取组织信息
|
|
|
+ DynamicObject[] adminOrgDyos = HRBaseServiceHelper.create(PositionBillConstant.ADMINORGHR_ENTITYID).loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, adminorgBoIds)});
|
|
|
+ Map<Long, DynamicObject> dbAdminOrgMap = Maps.newHashMapWithExpectedSize(adminOrgDyos.length);
|
|
|
+ for (DynamicObject adminOrgDyo : adminOrgDyos) {
|
|
|
+ dbAdminOrgMap.put(adminOrgDyo.getLong(PositionBillConstant.BOID_KEY), adminOrgDyo);
|
|
|
+ }
|
|
|
+ // 构建岗位对象
|
|
|
OperateOption operateOption = OperateOption.create();
|
|
|
List<DynamicObject> positionList = Lists.newArrayListWithExpectedSize(positionEntities.length);
|
|
|
- for (DynamicObject positionEntity : positionEntities) {
|
|
|
- long positionId = positionEntity.getLong(String.format("%s_id", PositionBillConstant.NCKD_POSITION));
|
|
|
+ // 查询需要转换的键值
|
|
|
+ String selectFields = QueryFieldBuilder.create().add(PositionBillConstant.NUMBER_KEY).add(PositionBillConstant.NAME_KEY).buildSelect();
|
|
|
+ DynamicObject[] transKeyDyos = HRBaseServiceHelper.create(PositionBillConstant.NCKD_POSITION_TRANSKEY_ENTITY).queryOriginalArray(selectFields, null);
|
|
|
+ // key->目标字段 value->源字段
|
|
|
+ Map<String, String> transKeyMap = Arrays.stream(transKeyDyos).map(Function.identity()).collect(Collectors.toMap(transKeyDyo -> transKeyDyo.getString(PositionBillConstant.NAME_KEY), transKeyDyo -> transKeyDyo.getString(PositionBillConstant.NUMBER_KEY), (oldValue, newValue) -> newValue));
|
|
|
|
|
|
+ for (DynamicObject positionEntity : positionEntities) {
|
|
|
+ long positionId = positionEntity.getLong(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.ID_KEY));
|
|
|
// 如果数据库存在则用数据库的岗位对象
|
|
|
- DynamicObject positionDy = dbPositionMap.get(positionId);
|
|
|
+ DynamicObject positionDyo = dbPositionMap.get(positionId);
|
|
|
// 不存在则创建一个
|
|
|
- if (positionDy == null) {
|
|
|
- positionDy = BusinessDataServiceHelper.newDynamicObject(PositionBillConstant.HBPM_POSITIONHR);
|
|
|
- }
|
|
|
-
|
|
|
- // 键值转换
|
|
|
- Map<String, String> transKeyMap = new HashMap<String, String>();
|
|
|
- DataEntityPropertyCollection properties = positionDy.getDataEntityType().getProperties();
|
|
|
- for (IDataEntityProperty property : properties) {
|
|
|
- String name = property.getName();
|
|
|
- if (name.startsWith(FIELD_PREFIX)) {
|
|
|
- transKeyMap.put(name.substring(name.indexOf(FIELD_PREFIX)), name);
|
|
|
- }
|
|
|
+ if (positionDyo == null) {
|
|
|
+ positionDyo = positionServiceHelper.generateEmptyDynamicObject();
|
|
|
}
|
|
|
- // 设立日期单独处理
|
|
|
- transKeyMap.put(PositionBillConstant.ESTABLISHMENTDATE_KEY, PositionBillConstant.NCKD_ESTDATE);
|
|
|
-
|
|
|
// 将表单中的信息赋值到岗位信息中
|
|
|
- HRDynamicObjectUtils.copy(positionEntity, positionDy);
|
|
|
- positionDy.set(PositionBillConstant.ID_KEY, positionId);
|
|
|
+ HRDynamicObjectUtils.copy(positionEntity, positionDyo, transKeyMap);
|
|
|
+ // 设置 行政组织
|
|
|
+ positionDyo.set(PositionBillConstant.ADMINORG, dbAdminOrgMap.get(positionEntity.getLong(PositionBillConstant.NCKD_ADMINORGBOID_KEY)));
|
|
|
+ // 设置ID
|
|
|
+ positionDyo.set(PositionBillConstant.ID_KEY, positionId);
|
|
|
+ // 设置 上级岗位
|
|
|
DynamicObject parentPositionVersionDy = positionEntity.getDynamicObject(PositionBillConstant.NCKD_PARENT);
|
|
|
if (parentPositionVersionDy != null) {
|
|
|
- positionDy.set(PositionBillConstant.PARENT_KEY, dbPositionMap.get(parentPositionVersionDy.getLong(PositionBillConstant.BOID_KEY)));
|
|
|
+ positionDyo.set(PositionBillConstant.PARENT_KEY, dbPositionMap.get(parentPositionVersionDy.getLong(PositionBillConstant.BOID_KEY)));
|
|
|
} else {
|
|
|
- positionDy.set(PositionBillConstant.PARENT_KEY, null);
|
|
|
+ positionDyo.set(PositionBillConstant.PARENT_KEY, null);
|
|
|
}
|
|
|
- positionDy.set(PositionBillConstant.STATUS, StatusEnum.A);
|
|
|
- positionDy.set(PositionBillConstant.ENABLE, EnableEnum.YES.getCode());
|
|
|
- positionList.add(positionDy);
|
|
|
- String number = positionDy.getString("number");
|
|
|
+ // 设置 数据状态
|
|
|
+ positionDyo.set(PositionBillConstant.STATUS, StatusEnum.A);
|
|
|
+ // 设置 业务状态
|
|
|
+ positionDyo.set(PositionBillConstant.ENABLE, EnableEnum.YES.getCode());
|
|
|
+ // 设置 是否标准岗位
|
|
|
+ positionDyo.set(PositionBillConstant.ISSTANDARDPOS_KEY, EnableEnum.NO.getCode());
|
|
|
+ // 设置 数据版本状态
|
|
|
+ //positionDyo.set(PositionBillConstant.DATA_STATUS, HisModelDataStatusEnum.TEMP.getStatus());
|
|
|
+ positionList.add(positionDyo);
|
|
|
+ String number = positionDyo.getString("number");
|
|
|
+ // 设置 编码为已变更
|
|
|
if (HRStringUtils.isNotEmpty(number)) {
|
|
|
- operateOption.setVariableValue(positionId + "coderule_billno_from_initAbstractCodeRule", "coderule_billno_from_init_value_of_operation");
|
|
|
+ operateOption.setVariableValue(positionId + "coderule_billno_from_initAbstractCodeRule", PAGECACHE_KEY_BILLNO_FROM_INIT_VALUE_OF_OPERATION);
|
|
|
}
|
|
|
}
|
|
|
// 跳过功能权限校验
|
|
|
@@ -128,27 +126,44 @@ public class PosBillEntryAddSaveOpPlugin extends AbstractOperationServicePlugIn
|
|
|
// 跳过数据权限校验
|
|
|
operateOption.setVariableValue(OperateOptionConst.SKIPCHECKPERMISSION, Boolean.TRUE.toString());
|
|
|
StringBuilder errorMsg = new StringBuilder();
|
|
|
- for (int index = 0; index < positionList.size(); index++) {
|
|
|
- DynamicObject positionDy = positionList.get(index);
|
|
|
+ List<String> errorMsgList = Lists.newArrayList();
|
|
|
+ List successPkIds = Lists.newArrayList();
|
|
|
+ for (int index = 0; index < positionList.size(); ++index) {
|
|
|
+ DynamicObject positionDyo = positionList.get(index);
|
|
|
OperationServiceImpl opImpl = new OperationServiceImpl();
|
|
|
- OperationResult saveResult = opImpl.localInvokeOperation(PositionBillConstant.SAVE_OP, new DynamicObject[] { positionDy }, operateOption);
|
|
|
+ OperationResult saveResult = opImpl.localInvokeOperation(PositionBillConstant.SAVE_OP, new DynamicObject[]{positionDyo}, operateOption);
|
|
|
if (!saveResult.isSuccess()) {
|
|
|
- List<IOperateInfo> errorOrValidateInfo = saveResult.getAllErrorOrValidateInfo();
|
|
|
- for (IOperateInfo operateInfo : errorOrValidateInfo) {
|
|
|
- errorMsg.append(operateInfo.getMessage());
|
|
|
+ for(IOperateInfo operateInfo : saveResult.getAllErrorOrValidateInfo()) {
|
|
|
+ errorMsgList.add(operateInfo.getMessage());
|
|
|
}
|
|
|
} else {
|
|
|
- //DynamicObject[] dbPositionEntityDys = OrgRepository.getInstance().queryOrgDys(String.join(",", PositionBillConstant.ID_KEY, PositionBillConstant.NUMBER_KEY), new QFilter(PositionBillConstant.ID_KEY, QCP.in, saveResult.getSuccessPkIds()));
|
|
|
- DynamicObject[] dbPositionEntityDys = null;
|
|
|
+ successPkIds.addAll(saveResult.getSuccessPkIds());
|
|
|
+ DynamicObject[] dbPositionEntityDys = positionServiceHelper.loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.ID_KEY, QCP.in, saveResult.getSuccessPkIds())});
|
|
|
DynamicObject dbPositionEntityDy = dbPositionEntityDys[0];
|
|
|
DynamicObject positionEntity = positionEntities[index];
|
|
|
- positionEntity.set(String.format("%s_id", PositionBillConstant.NCKD_POSITION), dbPositionEntityDy.get(PositionBillConstant.ID_KEY));
|
|
|
+ positionEntity.set(String.join("_", PositionBillConstant.NCKD_POSITION, PositionBillConstant.ID_KEY), dbPositionEntityDy.get(PositionBillConstant.ID_KEY));
|
|
|
positionEntity.set(PositionBillConstant.NUMBER_KEY, dbPositionEntityDy.getString(PositionBillConstant.NUMBER_KEY));
|
|
|
}
|
|
|
}
|
|
|
- if (errorMsg.length() > 0) {
|
|
|
- throw new KDBizException(errorMsg.toString());
|
|
|
+ if (!errorMsgList.isEmpty()) {
|
|
|
+ throw new KDBizException(String.join(System.lineSeparator(), errorMsgList));
|
|
|
+ } else {
|
|
|
+ // 由于标品会强制设置值,所以需要后置更新
|
|
|
+ updatePositionDataStatus(successPkIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新岗位数据版本状态
|
|
|
+ * @param successPkIds
|
|
|
+ */
|
|
|
+ private void updatePositionDataStatus(List successPkIds) {
|
|
|
+ HRBaseServiceHelper positionServiceHelper = HRBaseServiceHelper.create(PositionBillConstant.HBPM_POSITIONHR);
|
|
|
+ DynamicObject[] positionDys = positionServiceHelper.loadDynamicObjectArray(new QFilter[]{new QFilter(PositionBillConstant.BOID_KEY, QCP.in, successPkIds)});
|
|
|
+ for (DynamicObject positionDy : positionDys) {
|
|
|
+ positionDy.set(PositionBillConstant.DATA_STATUS, HisModelDataStatusEnum.TEMP.getStatus());
|
|
|
}
|
|
|
+ SaveServiceHelper.save(positionDys);
|
|
|
}
|
|
|
|
|
|
}
|