|
|
@@ -17,6 +17,8 @@ import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
|
|
|
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
|
|
|
import kd.bos.exception.ErrorCode;
|
|
|
import kd.bos.exception.KDBizException;
|
|
|
+import kd.bos.logging.Log;
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
import kd.bos.orm.ORM;
|
|
|
import kd.bos.orm.query.QCP;
|
|
|
import kd.bos.orm.query.QFilter;
|
|
|
@@ -25,10 +27,12 @@ import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
import kd.bos.servicehelper.user.UserServiceHelper;
|
|
|
import kd.bos.servicehelper.workflow.MessageCenterServiceHelper;
|
|
|
import kd.bos.url.UrlService;
|
|
|
+import kd.bos.util.JSONUtils;
|
|
|
import kd.bos.workflow.engine.msg.info.MessageInfo;
|
|
|
import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
|
|
|
import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
|
|
|
import kd.hr.hbp.common.constants.history.HisModelDataStatusEnum;
|
|
|
+import kd.hr.hbp.common.util.HRCollUtil;
|
|
|
import kd.hr.hbp.common.util.HRDateTimeUtils;
|
|
|
import kd.hr.hbp.common.util.HRObjectUtils;
|
|
|
import kd.sdk.hr.hrpi.business.helper.HRPIEmployeeServiceHelper;
|
|
|
@@ -40,6 +44,7 @@ import nckd.jxccl.hr.sdm.business.SdmBusinessService;
|
|
|
import nckd.jxccl.hr.sdm.common.SanDingConstant;
|
|
|
import nckd.jxccl.hr.sdm.common.SanDingPlanEntryStatus;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
@@ -60,6 +65,7 @@ import java.util.stream.Collectors;
|
|
|
* @date: 2025/12/3 15:01
|
|
|
*/
|
|
|
public class SendTaskOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
+ private static final Log logger = LogFactory.getLog(SendTaskOpPlugin.class);
|
|
|
|
|
|
/** 特殊借调变动操作编码 */
|
|
|
private static final String TSJD_CHGACTION_NUMBER = "JTCC_1001";
|
|
|
@@ -101,10 +107,37 @@ public class SendTaskOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
for (DynamicObject dyo : dyos) {
|
|
|
DynamicObjectCollection entryDyoColl = dyo.getDynamicObjectCollection(SanDingConstant.NCKD_ENTRYENTITY);
|
|
|
for (DynamicObject entryDyo : entryDyoColl) {
|
|
|
- buildMessage(entryDyo);
|
|
|
+ buildMessage(messageInfos, entryDyo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (HRCollUtil.isNotEmpty(messageInfos)) {
|
|
|
+ try {
|
|
|
+ Map<String, Object> sendMsgResult = MessageCenterServiceHelper.batchSendMessages(messageInfos);
|
|
|
+ boolean success = (Boolean)sendMsgResult.get("success");
|
|
|
+ String description = (String)sendMsgResult.get("description");
|
|
|
+ logger.info(String.format("successToSendMessageSanDingTaskSendTask: messageInfos.size: %s, success: %s, description: %s", messageInfos.size(), success, description));
|
|
|
+ Map<String, Object> data = (Map<String, Object>) sendMsgResult.getOrDefault("data", new HashMap());
|
|
|
+ if (!data.isEmpty()) {
|
|
|
+ for(Long successMsgId : (List<Long>) data.getOrDefault("successMsgIds", new ArrayList())) {
|
|
|
+ logger.info(String.format("successToSendMessageSanDingTaskSendTask-success: %s, messageID: %s", null, successMsgId));
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<MessageInfo, String> failMsgs = (Map<MessageInfo, String>) data.getOrDefault("failMsgs", new HashMap());
|
|
|
+
|
|
|
+ for(Map.Entry<MessageInfo, String> failMsg : failMsgs.entrySet()) {
|
|
|
+ MessageInfo failMessageInfo = failMsg.getKey();
|
|
|
+ String failDescription = failMsg.getValue();
|
|
|
+ logger.info(String.format("successToSendMessageSanDingTaskSendTask-fail: %s, messageID: %s, description: %s", JSONUtils.toString(failMessageInfo), failMessageInfo.getId(), failDescription));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception var45) {
|
|
|
+ try {
|
|
|
+ logger.error("FailedSendMessageSanDingTaskSendTask: " + JSONUtils.toString(messageInfos));
|
|
|
+ } catch (IOException var43) {
|
|
|
+ logger.error("Failed to parse message: " + messageInfos);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- MessageCenterServiceHelper.batchSendMessages(messageInfos);
|
|
|
} catch (Exception ex) {
|
|
|
throw new KDBizException(ex, new ErrorCode("sendMessageError", ex.getMessage()));
|
|
|
}
|
|
|
@@ -340,35 +373,34 @@ public class SendTaskOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
// 构建单据体
|
|
|
DynamicObjectCollection sanDingTaskEntryDyoColl = sanDingTaskDyo.getDynamicObjectCollection(SanDingConstant.NCKD_ENTRYENTITY);
|
|
|
List<Map<String, Long>> positionBoIdList = companyPositionMap.get(entryDyo.getLong(companyBoIdKey));
|
|
|
- if (positionBoIdList == null || positionBoIdList.isEmpty()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (Map<String, Long> positionOrgMap : positionBoIdList) {
|
|
|
- DynamicObject sanDingTaskEntryDyo = sanDingTaskEntryDyoColl.addNew();
|
|
|
- // 岗位BOID
|
|
|
- Long positionBoId = positionOrgMap.get("positionBoId");
|
|
|
- // 设置 组织
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_ADMINORG, EntityHelper.newEntity(SanDingConstant.ADMINORG_ENTITYID, positionOrgMap.get("adminOrgSourceVid")));
|
|
|
- // 设置 岗位
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_POSITION_KEY, EntityHelper.newEntity(SanDingConstant.HBPM_POSITIONHR, positionOrgMap.get("positionSourceVid")));
|
|
|
- // 设置 定员数
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_AUTHORIZEDSTRENGTH_KEY, lastSanDingTaskMap.getOrDefault(entryDyo.getLong(companyBoIdKey)+"@"+positionBoId, 0));
|
|
|
- // 设置 实际占编人数
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_ACTUALSTAFFCOUNT_KEY, positionInStaffEmployeeCountMap.getOrDefault(positionBoId, 0));
|
|
|
- // 设置 缺编人数
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_STAFFINGSHORTFALL_KEY, 0);
|
|
|
- // 设置 前一年流失人数(系统数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y1OUT_SYS_KEY, y1OutSysMap.getOrDefault(positionBoId + "@" + y1, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y1, 0));
|
|
|
- // 设置 前两年流失人数(系统数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y2OUT_SYS_KEY, y2OutSysMap.getOrDefault(positionBoId + "@" + y2, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y2, 0));
|
|
|
- // 设置 前三年流失人数(系统数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y3OUT_SYS_KEY, y3OutSysMap.getOrDefault(positionBoId + "@" + y3, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y3, 0));
|
|
|
- // 设置 前一年流失人数(确认数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y1OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y1OUT_SYS_KEY));
|
|
|
- // 设置 前两年流失人数(确认数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y2OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y2OUT_SYS_KEY));
|
|
|
- // 设置 前三年流失人数(确认数)
|
|
|
- sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y3OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y3OUT_SYS_KEY));
|
|
|
+ if (HRCollUtil.isNotEmpty(positionBoIdList)) {
|
|
|
+ for (Map<String, Long> positionOrgMap : positionBoIdList) {
|
|
|
+ DynamicObject sanDingTaskEntryDyo = sanDingTaskEntryDyoColl.addNew();
|
|
|
+ // 岗位BOID
|
|
|
+ Long positionBoId = positionOrgMap.get("positionBoId");
|
|
|
+ // 设置 组织
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_ADMINORG, EntityHelper.newEntity(SanDingConstant.ADMINORG_ENTITYID, positionOrgMap.get("adminOrgSourceVid")));
|
|
|
+ // 设置 岗位
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_POSITION_KEY, EntityHelper.newEntity(SanDingConstant.HBPM_POSITIONHR, positionOrgMap.get("positionSourceVid")));
|
|
|
+ // 设置 定员数
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_AUTHORIZEDSTRENGTH_KEY, lastSanDingTaskMap.getOrDefault(entryDyo.getLong(companyBoIdKey)+"@"+positionBoId, 0));
|
|
|
+ // 设置 实际占编人数
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_ACTUALSTAFFCOUNT_KEY, positionInStaffEmployeeCountMap.getOrDefault(positionBoId, 0));
|
|
|
+ // 设置 缺编人数
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_STAFFINGSHORTFALL_KEY, 0);
|
|
|
+ // 设置 前一年流失人数(系统数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y1OUT_SYS_KEY, y1OutSysMap.getOrDefault(positionBoId + "@" + y1, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y1, 0));
|
|
|
+ // 设置 前两年流失人数(系统数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y2OUT_SYS_KEY, y2OutSysMap.getOrDefault(positionBoId + "@" + y2, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y2, 0));
|
|
|
+ // 设置 前三年流失人数(系统数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y3OUT_SYS_KEY, y3OutSysMap.getOrDefault(positionBoId + "@" + y3, 0) + kgsddEmpPosOrgRelMap.getOrDefault(positionBoId + "@" + y3, 0));
|
|
|
+ // 设置 前一年流失人数(确认数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y1OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y1OUT_SYS_KEY));
|
|
|
+ // 设置 前两年流失人数(确认数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y2OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y2OUT_SYS_KEY));
|
|
|
+ // 设置 前三年流失人数(确认数)
|
|
|
+ sanDingTaskEntryDyo.set(SanDingConstant.NCKD_Y3OUT_CONF_KEY, sanDingTaskEntryDyo.get(SanDingConstant.NCKD_Y3OUT_SYS_KEY));
|
|
|
+ }
|
|
|
}
|
|
|
sanDingTaskDyoList.add(sanDingTaskDyo);
|
|
|
SANDING_TASK_MAP.put(entryDyo.getLong(SanDingConstant.ID_KEY), sanDingTaskDyo.getLong(SanDingConstant.ID_KEY));
|
|
|
@@ -401,7 +433,7 @@ public class SendTaskOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
SaveServiceHelper.save(dyos);
|
|
|
}
|
|
|
|
|
|
- private void buildMessage(DynamicObject entryDyo) {
|
|
|
+ private void buildMessage(List<MessageInfo> messageInfos, DynamicObject entryDyo) {
|
|
|
// 构建 消息
|
|
|
MessageInfo messageInfo = new MessageInfo();
|
|
|
// 设置 消息标题
|
|
|
@@ -422,6 +454,9 @@ public class SendTaskOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
messageInfo.setUserIds(userIds);
|
|
|
// 设置 消息Web端url
|
|
|
messageInfo.setContentUrl(UrlService.getDomainContextUrl() + "/index.html?formId="+SanDingConstant.NCKD_SANDINGTASK_ENTITY+"&pkId=" + SANDING_TASK_MAP.get(entryDyo.getLong(SanDingConstant.ID_KEY)));
|
|
|
+ // 设置发送人
|
|
|
+ messageInfo.setSenderId(UserServiceHelper.getCurrentUserId());
|
|
|
+ messageInfos.add(messageInfo);
|
|
|
}
|
|
|
|
|
|
private List<Long> getUserIds(List<Long> managerBoIdList) {
|