From c0948102eda828d4eae62d18392adaca56e345e0 Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期三, 09 七月 2025 09:19:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java | 52 ++++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java | 165 ++++++++++++ lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java | 6 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java | 152 +++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java | 2 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java | 183 ++++++++++++- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java | 7 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java | 170 +++++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java | 20 9 files changed, 720 insertions(+), 37 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java index 568f263..c7cc465 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java @@ -12,8 +12,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; +import org.flowable.engine.HistoryService; import org.flowable.engine.TaskService; +import org.flowable.engine.impl.el.DateUtil; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.variable.api.persistence.entity.VariableInstance; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; @@ -34,16 +38,22 @@ import org.jeecg.modules.eam.request.EamInspectionOrderRequest; import org.jeecg.modules.eam.service.*; import org.jeecg.modules.eam.vo.EquipmentInspectionStatistics; -import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; +import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; +import org.jeecg.modules.qywx.message.vo.TemplateCard; +import org.jeecg.modules.qywx.message.vo.TemplateCardEntity; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.IMdcUserProductionService; +import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.system.service.IThirdAppService; +import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -89,6 +99,12 @@ private IEamEquipmentExtendService eamEquipmentExtendService; @Autowired private IMdcProductionService mdcProductionService; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private HistoryService historyService; @Override public IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query) { @@ -210,7 +226,154 @@ //鏇存柊璁惧淇濆吇鐘舵�� eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name()); } + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(eamInspectionOrder, null); return true; + } + + private void sendQywxTemplateCardMessage(EamInspectionOrder eamInspectionOrder, EamInspectionOrderRequest request) { + TemplateCard templateCard = new TemplateCard(); + String inspectionStatus = eamInspectionOrder.getInspectionStatus(); + EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId()); + eamInspectionOrder.setEquipmentCode(equipment.getEquipmentCode()); + if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { + //宸ュ崟寰呴鍙栵紝鎺ㄩ�佹秷鎭粰鎵�鏈夋搷浣滃伐 + String orgId = Optional.ofNullable(eamEquipmentService.getById(eamInspectionOrder.getEquipmentId())) + .map(EamEquipment::getOrgId) + .orElse(null); + if (orgId == null) { + throw new IllegalArgumentException("鏈壘鍒拌澶囩殑缁勭粐 ID"); + } + //鏌ヨ璇ヨ澶囨墍灞炰骇绾跨殑鎵�鏈夋搷浣滃伐 + List<SysUser> sysUserList = mdcUserProductionService.queryByPostAndProId("PCR0001", orgId); + List<String> usernameList = sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList()); + if (usernameList.isEmpty()) { + throw new IllegalArgumentException("鏈壘鍒拌璁惧鎵�灞炰骇绾跨殑鎿嶄綔宸ワ紝璇疯仈绯荤鐞嗗憳澶勭悊"); + } + String nextAssigneeStr = usernameList.stream() + .filter(Objects::nonNull) // 鍙�夛細杩囨护 null 鍊� + .collect(Collectors.joining(",")); + String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false); + templateCard.setTouser(touser); + } + if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) { + //宸ュ崟宸插紑濮嬬偣妫�锛屾帹閫佹秷鎭粰鍏蜂綋鎿嶄綔宸ワ紙鏂板宸ュ崟鏃舵寚瀹氥�侀鍙栧伐鍗曠殑鎿嶄綔宸ワ級 + String operator = eamInspectionOrder.getOperator(); + if (StrUtil.isNotBlank(operator)) { + //鏂板宸ュ崟鏃躲�佸伐鍗曢鍙栨椂宸叉寚瀹氱偣妫�浜� + String touser = wechatEnterpriseService.getTouser(operator, false); + templateCard.setTouser(touser); + } + } + if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { + //宸ュ崟宸茬偣妫�瀹屾垚锛屾帹閫佹秷鎭粰鐝粍闀跨‘璁� + List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + String nextAssigneeStr = nextAssignee.stream() + .filter(Objects::nonNull) // 鍙�夛細杩囨护 null 鍊� + .collect(Collectors.joining(",")); + String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false); + templateCard.setTouser(touser); + } + if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) { + //宸ュ崟宸茬‘璁ゅ畬鎴愶紝鎺ㄩ�佹秷鎭粰鐐规浜� + String touser = wechatEnterpriseService.getTouser(eamInspectionOrder.getOperator(), false); + templateCard.setTouser(touser); + } + + TemplateCardEntity templateCardEntity = new TemplateCardEntity(); + templateCard.setTemplate_card(templateCardEntity); + templateCardEntity.setTask_id(eamInspectionOrder.getId()); + TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); + mainTitle.setTitle("璁惧鐐规"); + templateCardEntity.setMain_title(mainTitle); + + if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { + templateCardEntity.setSub_title_text("鏂板璁惧鐐规宸ュ崟: " + eamInspectionOrder.getOrderNum() + " ,璇疯繘鍏ョ郴缁熼鍙�"); + } + if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) { + if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) { + //鏄┏鍥炵殑鍗曞瓙 + templateCardEntity.setSub_title_text("宸ュ崟: " + eamInspectionOrder.getOrderNum() + " 琚┏鍥烇紝璇烽噸鏂拌繘琛岃澶囩偣妫�"); + } else { + templateCardEntity.setSub_title_text("宸ュ崟: " + eamInspectionOrder.getOrderNum() + " 宸茶棰嗗彇锛屽紑濮嬭繘琛岃澶囩偣妫�"); + } + } + if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + eamInspectionOrder.getOrderNum() + " 宸插畬鎴愯澶囩偣妫�,璇疯繘鍏ョ郴缁熺‘璁�"); + } + if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + eamInspectionOrder.getOrderNum() + " 宸插畬鎴愮偣妫�鍚庣‘璁�"); + } + + List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList(); + TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); + content1.setKeyname("宸ュ崟鍙�"); + content1.setValue(eamInspectionOrder.getOrderNum()); + horizontalContentList.add(content1); + TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); + content2.setKeyname("璁惧缂栧彿"); + content2.setValue(eamInspectionOrder.getEquipmentCode()); + horizontalContentList.add(content2); + + //濡傛灉宸ュ崟鐘舵�佷负寰呯偣妫�锛堟病鎸囧畾鐐规浜虹殑鏈鍙栫姸鎬侊級锛屾祦绋嬫槸娌℃湁鍚姩鐨勶紝鏃犳硶鑾峰彇鑺傜偣淇℃伅 + if (!InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { + WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(eamInspectionOrder.getId()); + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + content3.setKeyname("鍓嶉┍鑺傜偣"); + content3.setValue(previousFlowInfo.getPreNode()); + horizontalContentList.add(content3); + TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + content4.setKeyname("褰撳墠鑺傜偣"); + if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) { + content4.setValue("宸插畬鎴�"); + } else { + content4.setValue(previousFlowInfo.getName()); + } + horizontalContentList.add(content4); + } + + TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent(); + TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent(); + TemplateCardEntity.HorizontalContent content7 = new TemplateCardEntity.HorizontalContent(); + + if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { + content5.setKeyname("鍙戣捣浜�"); + SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy()); + content5.setValue(sysUser.getRealname()); + horizontalContentList.add(content5); + } + if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus) && (Objects.isNull(request) || StrUtil.isBlank(request.getConfirmDealType()))) { + content6.setKeyname("棰嗗彇浜�"); + SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator()); + content6.setValue(sysUser.getRealname()); + horizontalContentList.add(content6); + } + if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { + content5.setKeyname("鐐规浜�"); + SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator()); + content5.setValue(sysUser.getRealname()); + horizontalContentList.add(content5); + } + if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) { + content5.setKeyname("纭浜�"); + SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy()); + content5.setValue(sysUser.getRealname()); + horizontalContentList.add(content5); + } + if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) { + content7.setKeyname("纭鎰忚"); + content7.setValue("1".equals(request.getConfirmDealType()) ? "閫氳繃" : "椹冲洖"); + horizontalContentList.add(content7); + } + + templateCardEntity.setHorizontal_content_list(horizontalContentList); + + TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction(); + cardAction.setType(1); + cardAction.setUrl("http://houjie.xalxzn.com:8866/h5"); + templateCardEntity.setCard_action(cardAction); + + wechatEnterpriseService.sendTemplateCardMsg(templateCard, true); } /** @@ -296,6 +459,8 @@ this.updateById(eamInspectionOrder); //鏇存柊璁惧淇濆吇鐘舵�� eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name()); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(eamInspectionOrder, null); return true; } } @@ -374,6 +539,9 @@ // 鏇存柊宸ュ崟淇℃伅 updateEamInspectionOrder(eamInspectionOrder); + //寰俊娑堟伅鎺ㄩ�� + sendQywxTemplateCardMessage(eamInspectionOrder, eamInspectionOrderRequest); + //鏌ヨ鏁版嵁,杩涜璁惧缁翠慨澶勭悊 if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.WAIT_CONFIRM.name())) { updateEamInspectionOrderDetail(eamInspectionOrder); diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java index 9f28cc2..9faa0c0 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java @@ -25,10 +25,7 @@ import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecg.modules.eam.mapper.EamRepairOrderMapper; -import org.jeecg.modules.eam.request.EamRepairOrderQuery; -import org.jeecg.modules.eam.request.EamRepairOrderRequest; -import org.jeecg.modules.eam.request.EamRepairOrderResponse; -import org.jeecg.modules.eam.request.EamReportRepairQuery; +import org.jeecg.modules.eam.request.*; import org.jeecg.modules.eam.service.IEamEquipmentExtendService; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamRepairOrderService; @@ -38,11 +35,18 @@ import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.qywx.message.vo.TemplateCard; +import org.jeecg.modules.qywx.message.vo.TemplateCardEntity; +import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; +import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -50,6 +54,7 @@ import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * @Description: 缁翠慨宸ュ崟 @@ -85,6 +90,12 @@ @Resource private IEamEquipmentExtendService eamEquipmentExtendService; + + @Resource + private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; + + @Resource + private ISysUserService sysUserService; /** * 鍒嗛〉鍒楄〃 @@ -205,6 +216,8 @@ eamReportRepairService.updateById(eamReportRepair); //鏇存柊璁惧缁翠慨鐘舵�� eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name()); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(eamRepairOrder, eamReportRepair, null); } } @@ -249,7 +262,134 @@ eamReportRepairService.updateById(eamReportRepair); //鏇存柊璁惧缁翠慨鐘舵�� eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name()); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(eamRepairOrder, null, null); } + } + + private void sendQywxTemplateCardMessage(EamRepairOrder eamRepairOrder, EamReportRepair reportRepair, EamRepairOrderRequest request) { + TemplateCard templateCard = new TemplateCard(); + String repairStatus = eamRepairOrder.getRepairStatus(); + EamEquipment equipment = eamEquipmentService.getById(eamRepairOrder.getEquipmentId()); + eamRepairOrder.setEquipmentCode(equipment.getEquipmentCode()); + if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) { + //宸ュ崟宸叉寚娲撅紝鎺ㄩ�佹秷鎭粰缁翠慨宸� + String repairer = eamRepairOrder.getRepairer(); + String touser = wechatEnterpriseService.getTouser(repairer, false); + templateCard.setTouser(touser); + } + if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus)) { + //宸ュ崟杩涘叆绛夊緟澶囦欢鐘舵�侊紝鎺ㄩ�佹秷鎭粰璁惧绠$悊鍛� + List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + String nextAssigneeStr = nextAssignee.stream() + .filter(Objects::nonNull) // 鍙�夛細杩囨护 null 鍊� + .collect(Collectors.joining(",")); + String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false); + templateCard.setTouser(touser); + } + if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) { + //宸ュ崟杩涘叆寰呯‘璁ょ姸鎬侊紝鎺ㄩ�佹秷鎭粰鎶ヤ慨鍛� + String touser = wechatEnterpriseService.getTouser(reportRepair.getCreateBy(), false); + templateCard.setTouser(touser); + } + + TemplateCardEntity templateCardEntity = new TemplateCardEntity(); + templateCard.setTemplate_card(templateCardEntity); + templateCardEntity.setTask_id(eamRepairOrder.getId()); + TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); + mainTitle.setTitle("璁惧缁翠慨"); + templateCardEntity.setMain_title(mainTitle); + + if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) { + if (Objects.isNull(reportRepair) && Objects.isNull(request)) { + templateCardEntity.setSub_title_text("鏀跺埌鎸囨淳缁翠慨宸ュ崟: " + eamRepairOrder.getRepairCode() + " 璇峰紑濮嬭繘琛岀淮淇�"); + } else if (Objects.isNull(request)) { + templateCardEntity.setSub_title_text("宸查鍙栫淮淇伐鍗�: " + eamRepairOrder.getRepairCode() + " 寮�濮嬭繘琛岀淮淇�"); + } + else { + templateCardEntity.setSub_title_text("缁翠慨宸ュ崟: " + eamRepairOrder.getRepairCode() + " 澶囦欢宸插埌浣嶏紝璇风户缁繘琛岀淮淇�"); + } + } + if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus)) { + templateCardEntity.setSub_title_text("缁翠慨宸ュ崟: " + eamRepairOrder.getRepairCode() + " 闇�瑕侀鐢ㄥ浠�"); + } + if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + eamRepairOrder.getRepairCode() + " 宸插畬鎴愯澶囩淮淇紝璇疯繘鍏ョ郴缁熺‘璁�"); + } + + List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList(); + TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); + content1.setKeyname("宸ュ崟鍙�"); + content1.setValue(eamRepairOrder.getRepairCode()); + horizontalContentList.add(content1); + TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); + content2.setKeyname("璁惧缂栧彿"); + content2.setValue(eamRepairOrder.getEquipmentCode()); + horizontalContentList.add(content2); + + //濡傛灉宸ュ崟鐘舵�佷负寰呯淮淇紙娌℃寚娲剧淮淇汉锛夛紝娴佺▼鏄病鏈夊惎鍔ㄧ殑锛屾棤娉曡幏鍙栬妭鐐逛俊鎭� + if (!ReportRepairEnum.WAIT_REPAIR.name().equals(repairStatus)) { + WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(eamRepairOrder.getId()); + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + content3.setKeyname("鍓嶉┍鑺傜偣"); + content3.setValue(previousFlowInfo.getPreNode()); + horizontalContentList.add(content3); + TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + content4.setKeyname("褰撳墠鑺傜偣"); + if (InspectionStatus.COMPLETE.name().equals(repairStatus)) { + content4.setValue("宸插畬鎴�"); + } else { + content4.setValue(previousFlowInfo.getName()); + } + horizontalContentList.add(content4); + } + + TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent(); + TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent(); + + if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) { + SysUser sysUser = sysUserService.getUserByName(eamRepairOrder.getRepairer()); + if (Objects.isNull(reportRepair) && Objects.isNull(request)) { + content5.setKeyname("鎸囨淳浜�"); + SysUser assignUser = sysUserService.getUserByName(eamRepairOrder.getCreateBy()); + content5.setValue(assignUser.getRealname()); + horizontalContentList.add(content5); + } else if (Objects.isNull(request)) { + TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent(); + content.setKeyname("棰嗗彇浜�"); + content.setValue(sysUser.getRealname()); + horizontalContentList.add(content); + } else { + content5.setKeyname("澶囦欢棰嗗彇浜�"); + SysUser assignUser = sysUserService.getUserByName(request.getAssignee()); + content5.setValue(assignUser.getRealname()); + horizontalContentList.add(content5); + } + content6.setKeyname("缁翠慨浜�"); + content6.setValue(sysUser.getRealname()); + horizontalContentList.add(content6); + } + if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus) || ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) { + content5.setKeyname("缁翠慨浜�"); + SysUser repairUser = sysUserService.getUserByName(eamRepairOrder.getRepairer()); + content5.setValue(repairUser.getRealname()); + horizontalContentList.add(content5); + } + if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) { + content6.setKeyname("纭浜�"); + SysUser sysUser = sysUserService.getUserByName(reportRepair.getCreateBy()); + content6.setValue(sysUser.getRealname()); + horizontalContentList.add(content6); + } + + templateCardEntity.setHorizontal_content_list(horizontalContentList); + + TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction(); + cardAction.setType(1); + cardAction.setUrl("http://houjie.xalxzn.com:8866/h5"); + templateCardEntity.setCard_action(cardAction); + + wechatEnterpriseService.sendTemplateCardMsg(templateCard, true); } @Override @@ -410,6 +550,10 @@ this.baseMapper.updateById(eamRepairOrder); // 鍚屾鏇存柊鎶ヤ慨琛ㄧ姸鎬� eamReportRepairService.updateById(eamReportRepair); + if (!ReportRepairEnum.COMPLETE.name().equals(eamRepairOrder.getRepairStatus())) { + //鎺ㄩ�佷紒涓氬井淇℃秷鎭紙娴佺▼瀹岀粨涓嶅彂閫佹秷鎭級 + sendQywxTemplateCardMessage(eamRepairOrder, eamReportRepair, request); + } return eamRepairOrder; } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java index af99fcd..bb05add 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java @@ -36,10 +36,15 @@ import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; +import org.jeecg.modules.qywx.message.vo.TemplateCard; +import org.jeecg.modules.qywx.message.vo.TemplateCardEntity; +import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl; import org.jeecg.modules.system.vo.UserSelector; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -86,6 +91,8 @@ private IEamEquipmentExtendService eamEquipmentExtendService; @Autowired private IMdcProductionService mdcProductionService; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; @Override @Transactional(rollbackFor = Exception.class) @@ -141,6 +148,8 @@ eamWeekMaintenanceOrderMapper.updateById(order); //鏇存柊璁惧淇濆吇鐘舵�� eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name()); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(order, null); return result.isSuccess(); } } @@ -331,9 +340,161 @@ if (result != null) { //鏇存柊璁惧淇濆吇鐘舵�� eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name()); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭� + sendQywxTemplateCardMessage(entity, null); return result.isSuccess(); } return true; + } + + private void sendQywxTemplateCardMessage(EamWeekMaintenanceOrder order, EamWeekMaintenanceRequest request) { + TemplateCard templateCard = new TemplateCard(); + EamEquipment equipment = eamEquipmentService.getById(order.getEquipmentId()); + order.setEquipmentCode(equipment.getEquipmentCode()); + String maintenanceStatus = order.getMaintenanceStatus(); + if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) { + //宸ュ崟淇濆吇涓紝鎺ㄩ�佹秷鎭粰淇濆吇浜猴紙鏂板宸ュ崟鏃舵寚瀹氥�佷繚鍏讳汉棰嗗彇锛� + String operator = order.getOperator(); + String touser = wechatEnterpriseService.getTouser(operator, false); + templateCard.setTouser(touser); + } + if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus) + || WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus) + || WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) { + //宸ュ崟宸蹭繚鍏诲畬鎴愬緟纭锛屾帹閫佹秷鎭粰鐝粍闀� + //鐝粍闀垮凡纭锛屾帹閫佹秷鎭粰璁惧绠$悊鍛樼‘璁� + //璁惧绠$悊鍛樺凡纭锛屾帹閫佺粰璁捐兘閮ㄧ鐞嗗憳纭 + List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + String nextAssigneeStr = nextAssignee.stream() + .filter(Objects::nonNull) // 鍙�夛細杩囨护 null 鍊� + .collect(Collectors.joining(",")); + String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false); + templateCard.setTouser(touser); + } + + TemplateCardEntity templateCardEntity = new TemplateCardEntity(); + templateCard.setTemplate_card(templateCardEntity); + templateCardEntity.setTask_id(order.getId()); + TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); + mainTitle.setTitle("璁惧鍛ㄤ繚"); + templateCardEntity.setMain_title(mainTitle); + + if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) { + if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) { + templateCardEntity.setSub_title_text("宸ュ崟: " + order.getOrderNum() + " 琚┏鍥烇紝璇烽噸鏂版墽琛屼繚鍏诲悗鎻愪氦"); + } else { + templateCardEntity.setSub_title_text("宸查鍙栧懆淇濆伐鍗�: " + order.getOrderNum() + "锛屽紑濮嬭繘琛屼繚鍏�"); + } + } + if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + order.getOrderNum() + " 宸蹭繚鍏诲畬鎴愶紝璇疯繘鍏ョ郴缁熺‘璁�"); + } + if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + order.getOrderNum() + " 宸蹭繚鍏诲畬鎴愶紝璇疯繘鍏ョ郴缁熻繘琛屽垵楠屾敹"); + } + if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) { + templateCardEntity.setSub_title_text("宸ュ崟: " + order.getOrderNum() + " 宸插畬鎴愬垵楠屾敹锛岃杩涘叆绯荤粺杩涜缁堥獙鏀�"); + } + + List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList(); + TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); + content1.setKeyname("宸ュ崟鍙�"); + content1.setValue(order.getOrderNum()); + horizontalContentList.add(content1); + TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); + content2.setKeyname("璁惧缂栧彿"); + content2.setValue(order.getEquipmentCode()); + horizontalContentList.add(content2); + + //濡傛灉宸ュ崟鐘舵�佷负寰呬繚鍏伙紙娌℃寚瀹氫繚鍏讳汉鐨勬湭棰嗗彇鐘舵�侊級锛屾祦绋嬫槸娌℃湁鍚姩鐨勶紝鏃犳硶鑾峰彇鑺傜偣淇℃伅 + if (!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(maintenanceStatus)) { + WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(order.getId()); + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + content3.setKeyname("鍓嶉┍鑺傜偣"); + content3.setValue(previousFlowInfo.getPreNode()); + horizontalContentList.add(content3); + TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + content4.setKeyname("褰撳墠鑺傜偣"); + if (WeekMaintenanceStatusEnum.COMPLETE.name().equals(maintenanceStatus)) { + content4.setValue("宸插畬鎴�"); + } else { + content4.setValue(previousFlowInfo.getName()); + } + horizontalContentList.add(content4); + } + + if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) { + if (Objects.isNull(request)) { + //鏂板鐨勫伐鍗曪紙鎸囧畾浜嗕繚鍏讳汉锛夈�佹柊棰嗗彇鐨勫伐鍗� + TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent(); + content.setKeyname("鍙戣捣浜�"); + SysUser sysUser = sysUserService.getUserByName(order.getCreateBy()); + content.setValue(sysUser.getRealname()); + horizontalContentList.add(content); + } else { + //琚┏鍥炵殑宸ュ崟 + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + String confirmAssign = request.getAssignee(); + SysUser confirmUser = sysUserService.getUserByName(confirmAssign); + content3.setKeyname("纭浜�"); + content3.setValue(confirmUser.getRealname()); + horizontalContentList.add(content3); + content4.setKeyname("纭鎰忚"); + content4.setValue("椹冲洖"); + horizontalContentList.add(content4); + } + } + if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) { + TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent(); + content.setKeyname("淇濆吇浜�"); + SysUser sysUser = sysUserService.getUserByName(order.getOperator()); + content.setValue(sysUser.getRealname()); + horizontalContentList.add(content); + //TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent(); + //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee); + //content.setKeyname("纭浜�"); + //content.setValue(realNameStr); + //horizontalContentList.add(content); + } + if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) { + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + String confirmAssignee = request.getAssignee(); + SysUser confirmUser = sysUserService.getUserByName(confirmAssignee); + content3.setKeyname("纭浜�"); + content3.setValue(confirmUser.getRealname()); + horizontalContentList.add(content3); + //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee); + //content4.setKeyname("鍒濋獙浜�"); + //content4.setValue(realNameStr); + //horizontalContentList.add(content4); + } + if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) { + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + String initialAssignee = request.getAssignee(); + SysUser initialUser = sysUserService.getUserByName(initialAssignee); + content3.setKeyname("鍒濋獙浜�"); + content3.setValue(initialUser.getRealname()); + horizontalContentList.add(content3); + //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee"); + //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee); + //content4.setKeyname("缁堥獙浜�"); + //content4.setValue(realNameStr); + //horizontalContentList.add(content4); + } + + templateCardEntity.setHorizontal_content_list(horizontalContentList); + + TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction(); + cardAction.setType(1); + cardAction.setUrl("http://houjie.xalxzn.com:8866/h5"); + templateCardEntity.setCard_action(cardAction); + + wechatEnterpriseService.sendTemplateCardMsg(templateCard, true); } @Override @@ -506,6 +667,10 @@ } //淇濆瓨宸ュ崟 eamWeekMaintenanceOrderMapper.updateById(entity); + //鎺ㄩ�佷紒涓氬井淇℃秷鎭紝宸ュ崟瀹岀粨涓嶅彂閫� + if (!WeekMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) { + sendQywxTemplateCardMessage(entity, request); + } return entity; } diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java index bb5278e..8a6624b 100644 --- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java +++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java @@ -5,6 +5,7 @@ import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto; import org.jeecg.modules.flowable.domain.dto.FlowViewerDto; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; +import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import java.io.InputStream; import java.util.List; @@ -182,7 +183,10 @@ */ Result getNextFlowNode(FlowTaskVo flowTaskVo); - + /** + * 閫氳繃涓氬姟鏁版嵁id鑾峰彇涓婁竴鑺傜偣淇℃伅 + */ + WorkTaskDataVo getPreviousFlowInfo(String dataId); } diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java index 5fd4330..95ac97a 100644 --- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java +++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java @@ -19,6 +19,7 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; @@ -34,6 +35,7 @@ import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto; @@ -50,6 +52,7 @@ import org.jeecg.modules.flowable.domain.dto.FlowTaskDto; import org.jeecg.modules.flowable.domain.dto.FlowViewerDto; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; +import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import org.jeecg.modules.flowable.factory.FlowServiceFactory; import org.jeecg.modules.flowable.flow.CustomProcessDiagramGenerator; import org.jeecg.modules.flowable.flow.FindNextNodeUtil; @@ -78,6 +81,8 @@ private IFlowThirdService iFlowThirdService; @Autowired FlowMyBusinessServiceImpl flowMyBusinessService; + @Autowired + private TaskService taskService; /** * 瀹屾垚浠诲姟 * @@ -1381,6 +1386,53 @@ return Result.OK(flowNextDto); } + @Override + public WorkTaskDataVo getPreviousFlowInfo(String dataId) { + FlowMyBusiness flowMyBusiness = flowMyBusinessService.getByDataId(dataId); + if (flowMyBusiness == null) { + throw new JeecgBootException("鏈壘鍒版祦绋嬫暟鎹紒"); + } + + String taskId = flowMyBusiness.getTaskId(); + String processInstanceId = flowMyBusiness.getProcessInstanceId(); + WorkTaskDataVo taskDataVo = new WorkTaskDataVo(); + // 濡傛灉褰撳墠浠诲姟ID涓虹┖锛屽垯灏濊瘯浠庡巻鍙蹭换鍔′腑鑾峰彇鏈�鍚庝竴涓畬鎴愮殑浠诲姟 + if (StringUtils.isBlank(taskId)) { + List<HistoricTaskInstance> historicTasks = historyService + .createHistoricTaskInstanceQuery() + .processInstanceId(processInstanceId) + .orderByTaskCreateTime() + .desc() + .list(); + + if (CollectionUtils.isEmpty(historicTasks)) { + throw new JeecgBootException("鎵句笉鍒板巻鍙蹭换鍔¤褰�"); + } + + HistoricTaskInstance lastTask = historicTasks.get(0); + buildWorkTaskDataVo(taskDataVo, lastTask.getId(), lastTask.getName(), lastTask.getCreateTime()); + } else { + Task task = taskService.createTaskQuery().taskId(taskId).active().singleResult(); + if (task == null) { + throw new JeecgBootException("鎵句笉鍒板搴斾换鍔�"); + } else { + buildWorkTaskDataVo(taskDataVo, task.getId(), task.getName(), task.getCreateTime()); + } + } + return taskDataVo; + } + + private void buildWorkTaskDataVo(WorkTaskDataVo taskDataVo, String id, String name, Date createTime) { + taskDataVo.setId(id); + taskDataVo.setName(name); + taskDataVo.setCreateTime(createTime); + HistoricActivityInstance previousNode = flowMyBusinessService.getPreviousNode(id); + if (previousNode != null) { + taskDataVo.setPreNode(previousNode.getActivityName()); + taskDataVo.setPreNodeAssignee(previousNode.getAssignee()); + } + } + /** * 鑾峰彇涓嬩竴涓妭鐐逛俊鎭�,娴佺▼瀹氫箟涓婄殑鑺傜偣淇℃伅 * @param taskId 褰撳墠鑺傜偣id diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java index df102e8..2f31b53 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java @@ -72,17 +72,17 @@ */ @GetMapping("/sync/wechatEnterprise/user/toLocal") public Result syncWechatEnterpriseUserToLocal(@RequestParam(value = "ids", required = false) String ids) { - return Result.error("鐢变簬浼佷笟寰俊鎺ュ彛璋冩暣锛屽悓姝ュ埌鏈湴鍔熻兘宸插け鏁�"); + //return Result.error("鐢变簬浼佷笟寰俊鎺ュ彛璋冩暣锛屽悓姝ュ埌鏈湴鍔熻兘宸插け鏁�"); -// if (thirdAppConfig.isWechatEnterpriseEnabled()) { -// SyncInfoVo syncInfo = wechatEnterpriseService.syncThirdAppUserToLocal(); -// if (syncInfo.getFailInfo().size() == 0) { -// return Result.OK("鍚屾鎴愬姛", syncInfo); -// } else { -// return Result.error("鍚屾澶辫触", syncInfo); -// } -// } -// return Result.error("浼佷笟寰俊鍚屾鍔熻兘宸茬鐢�"); + if (thirdAppConfig.isWechatEnterpriseEnabled()) { + SyncInfoVo syncInfo = wechatEnterpriseService.syncThirdAppUserToLocal(); + if (syncInfo.getFailInfo().size() == 0) { + return Result.OK("鍚屾鎴愬姛", syncInfo); + } else { + return Result.error("鍚屾澶辫触", syncInfo); + } + } + return Result.error("浼佷笟寰俊鍚屾鍔熻兘宸茬鐢�"); } /** diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java index 4a23faa..20c9d63 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java @@ -330,4 +330,6 @@ * @return */ List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode); + + String getRealNameStrByUserNameList(List<String> usernameList); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java index d2d6455..20f95a1 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -762,4 +762,11 @@ List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList()); return collect; } + + @Override + public String getRealNameStrByUserNameList(List<String> usernameList) { + List<SysUser> userList = list(new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, usernameList) + .eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0)); + return userList.stream().map(SysUser::getRealname).collect(Collectors.joining(",")); + } } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java index 4eab929..f98789b 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java @@ -1,5 +1,6 @@ package org.jeecg.modules.system.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -14,6 +15,7 @@ import com.jeecg.qywx.api.user.vo.User; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.flowable.common.engine.impl.util.CollectionUtil; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.util.JwtUtil; @@ -23,6 +25,9 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.thirdapp.ThirdAppConfig; +import org.jeecg.modules.qywx.message.MessageAPI; +import org.jeecg.modules.qywx.message.vo.TemplateCard; +import org.jeecg.modules.qywx.message.vo.TemplateCardEntity; import org.jeecg.modules.system.entity.*; import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper; import org.jeecg.modules.system.mapper.SysUserMapper; @@ -31,6 +36,7 @@ import org.jeecg.modules.system.service.*; import org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo; import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; @@ -39,6 +45,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -383,7 +390,7 @@ return syncInfo; } // 鑾峰彇浼佷笟寰俊鎵�鏈夌殑鐢ㄦ埛 - List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken); + List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1433010418", null, null, accessToken); if (qwUsersList == null) { syncInfo.addFailInfo("浼佷笟寰俊鐢ㄦ埛鍒楄〃鏌ヨ澶辫触锛�"); return syncInfo; @@ -398,10 +405,10 @@ * 2. 鏈湴琛ㄩ噷娌℃湁锛屽氨鍏堢敤鎵嬫満鍙峰垽鏂紝涓嶉�氳繃鍐嶇敤username鍒ゆ柇銆� */ SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(qwUser.getUserid(), THIRD_TYPE); - List<SysUser> collect = sysUsersList.stream().filter(user -> (qwUser.getMobile().equals(user.getPhone()) || qwUser.getUserid().equals(user.getUsername())) + List<SysUser> collect = sysUsersList.stream().filter(user -> qwUser.getUserid().equals(user.getUsername()) ).collect(Collectors.toList()); - if (collect != null && collect.size() > 0) { + if (CollectionUtil.isNotEmpty(collect)) { SysUser sysUserTemp = collect.get(0); // 寰幆鍒版璇存槑鐢ㄦ埛鍖归厤鎴愬姛锛岃繘琛屾洿鏂版搷浣� SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp); @@ -413,7 +420,7 @@ this.syncUserCollectErrInfo(e, qwUser, syncInfo); } - this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid()); + this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser); // 鏇存柊瀹屾垚锛岀洿鎺ヨ烦鍒颁笅涓�娆″閮ㄥ惊鐜户缁� }else{ // 娌″尮閰嶅埌鐢ㄦ埛鍒欒蛋鏂板閫昏緫 @@ -425,7 +432,7 @@ } catch (Exception e) { this.syncUserCollectErrInfo(e, qwUser, syncInfo); } - this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid()); + this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser); } } return syncInfo; @@ -447,6 +454,20 @@ sysThirdAccount.setThirdType(THIRD_TYPE); } sysThirdAccount.setThirdUserId(qwUserId); + sysThirdAccountService.saveOrUpdate(sysThirdAccount); + } + + private void thirdAccountSaveOrUpdate(SysThirdAccount sysThirdAccount, String sysUserId, User qwUser) { + if (sysThirdAccount == null) { + sysThirdAccount = new SysThirdAccount(); + sysThirdAccount.setThirdUserId(qwUser.getUserid()); + sysThirdAccount.setRealname(qwUser.getName()); + sysThirdAccount.setThirdUserUuid(qwUser.getUserid()); + sysThirdAccount.setStatus(1); + sysThirdAccount.setDelFlag(0); + sysThirdAccount.setThirdType(THIRD_TYPE); + } + sysThirdAccount.setSysUserId(sysUserId); sysThirdAccountService.saveOrUpdate(sysThirdAccount); } @@ -643,22 +664,23 @@ if (oConvertUtils.isEmpty(sysUser.getWorkNo())) { sysUser.setWorkNo(qwUser.getUserid()); } - try { - sysUser.setSex(Integer.parseInt(qwUser.getGender())); - } catch (NumberFormatException ignored) { - } + //浼佷笟寰俊鎺ュ彛鏇存柊鍚庯紝涓嶅湪杩斿洖 鎬у埆銆侀偖绠便�佹墜鏈哄彿鐮� 瀛楁 + //try { + // sysUser.setSex(Integer.parseInt(qwUser.getGender())); + //} catch (NumberFormatException ignored) { + //} // 鍥犱负鍞竴閿害鏉熺殑鍘熷洜锛屽鏋滃師鏁版嵁鍜屾棫鏁版嵁鐩稿悓锛屽氨涓嶆洿鏂� - if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) { - sysUser.setEmail(qwUser.getEmail()); - } else { - sysUser.setEmail(null); - } + //if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) { + // sysUser.setEmail(qwUser.getEmail()); + //} else { + // sysUser.setEmail(null); + //} // 鍥犱负鍞竴閿害鏉熺殑鍘熷洜锛屽鏋滃師鏁版嵁鍜屾棫鏁版嵁鐩稿悓锛屽氨涓嶆洿鏂� - if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) { - sysUser.setPhone(qwUser.getMobile()); - } else { - sysUser.setPhone(null); - } + //if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) { + // sysUser.setPhone(qwUser.getMobile()); + //} else { + // sysUser.setPhone(null); + //} // 鍚敤/绂佺敤鎴愬憳锛堢姸鎬侊級锛岃鍒欎笉鍚岋紝闇�瑕佽浆鎹� // 浼佷笟寰俊瑙勫垯锛�1琛ㄧず鍚敤鎴愬憳锛�0琛ㄧず绂佺敤鎴愬憳 @@ -822,7 +844,7 @@ String userId = announcement.getUserIds(); String[] userIds = null; if(oConvertUtils.isNotEmpty(userId)){ - userIds = userId.substring(0, (userId.length() - 1)).split(","); + userIds = userId.substring(0, userId.length()).split(","); }else{ LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); @@ -857,7 +879,126 @@ return JwMessageAPI.sendTextCardMessage(textCard, accessToken); } - private String getTouser(String origin, boolean toAll) { + /** + * 鍙戦�佹ā鏉垮崱鐗囨秷鎭紙涓氬姟娴佺▼璋冪敤姝ゆ柟娉曪級 + * @param templateCard + * @param verifyConfig + * @return + */ + public JSONObject sendTemplateCardMsg(TemplateCard templateCard, boolean verifyConfig) { + if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) { + return null; + } + String accessToken = this.getAppAccessToken(); + if (accessToken == null) { + return null; + } + templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt()); + return MessageAPI.sendTemplateCardMessage(templateCard, accessToken); + } + + /** + * 鍙戦�佹ā鏉垮崱鐗囨秷鎭紙娑堟伅娴嬭瘯璋冪敤姝ゆ柟娉曪級 + * + * @return + */ + public JSONObject sendTemplateCardMsg(SysAnnouncement announcement, boolean verifyConfig) { + if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) { + return null; + } + String accessToken = this.getAppAccessToken(); + if (accessToken == null) { + return null; + } + + TemplateCard templateCard = new TemplateCard(); + templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt()); + boolean isToAll = CommonConstant.MSG_TYPE_ALL.equals(announcement.getMsgType()); + String usernameString = ""; + if (!isToAll) { + // 灏唘serId杞负username + String userId = announcement.getUserIds(); + String[] userIds = null; + if (oConvertUtils.isNotEmpty(userId)) { + userIds = userId.substring(0, userId.length()).split(","); + } else { + LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper); + userIds = new String[]{sysAnnouncementSend.getUserId()}; + } + + LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getId, userIds); + List<SysUser> userList = userMapper.selectList(queryWrapper); + List<String> usernameList = userList.stream().map(SysUser::getUsername).collect(Collectors.toList()); + usernameString = String.join(",", usernameList); + } + templateCard.setTouser(this.getTouser(usernameString, isToAll)); + + TemplateCardEntity templateCardEntity = new TemplateCardEntity(); + templateCard.setTemplate_card(templateCardEntity); + templateCardEntity.setTask_id(UUID.randomUUID().toString().replaceAll("-", "")); + TemplateCardEntity.Source source = new TemplateCardEntity.Source(); + source.setIcon_url("https://www.jeecg.org/logo.png"); + source.setDesc("璁惧绠$悊娴嬭瘯"); + templateCardEntity.setSource(source); + TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); + mainTitle.setTitle("璁惧鍛ㄤ繚"); + //mainTitle.setDesc("璁惧鍛ㄤ繚淇℃伅"); + templateCardEntity.setMain_title(mainTitle); + templateCardEntity.setSub_title_text("璁惧鍛ㄤ繚娴佺▼璇︽儏"); + List<TemplateCardEntity.HorizontalContent> horizontalContentList = getHorizontalContents(); + templateCardEntity.setHorizontal_content_list(horizontalContentList); + TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction(); + cardAction.setType(1); + cardAction.setUrl("https://houjie.xalxzn.com:8866/h5"); + templateCardEntity.setCard_action(cardAction); + TemplateCardEntity.ActionMenu actionMenu = new TemplateCardEntity.ActionMenu(); + actionMenu.setDesc("鏇村"); + actionMenu.setAction_list(cn.hutool.core.collection.CollectionUtil + .newArrayList(new TemplateCardEntity.ActionMenu.ActionList("鎺ユ敹鎺ㄩ��", "A"), + new TemplateCardEntity.ActionMenu.ActionList("涓嶅啀鎺ㄩ��", "B"))); + templateCardEntity.setAction_menu(actionMenu); + //templateCardEntity.setJump_list(cn.hutool.core.collection.CollectionUtil + // .newArrayList(new TemplateCardEntity.Jump(1, "浼佷笟寰俊瀹樼綉", "https://work.weixin.qq.com"))); + //TemplateCardEntity.CardImage cardImage = new TemplateCardEntity.CardImage(); + //cardImage.setUrl("https://www.jeecg.org/logo.png"); + //templateCardEntity.setCard_image(cardImage); + return MessageAPI.sendTemplateCardMessage(templateCard, accessToken); + } + + @NotNull + private static List<TemplateCardEntity.HorizontalContent> getHorizontalContents() { + List<TemplateCardEntity.HorizontalContent> horizontalContentList = new ArrayList<>(); + TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); + content1.setKeyname("娴佺▼鎻忚堪"); + content1.setValue("宸ュ崟鍙�:WMCR2025050011;璁惧缂栧彿:031-41杩涜璁惧鍛ㄤ繚"); + horizontalContentList.add(content1); + TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); + content2.setKeyname("涔嬪墠澶勭悊浜�"); + content2.setValue("绠$悊鍛�"); + horizontalContentList.add(content2); + TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); + content3.setKeyname("鍓嶉┍鑺傜偣"); + content3.setValue("鍛ㄤ繚棰嗗彇"); + horizontalContentList.add(content3); + TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); + content4.setKeyname("褰撳墠鑺傜偣"); + content4.setValue("鍛ㄤ繚鎵ц"); + horizontalContentList.add(content4); + TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent(); + content5.setKeyname("宸ュ崟鍙�"); + content5.setValue("WMCR2025050011"); + horizontalContentList.add(content5); + TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent(); + content6.setKeyname("璁惧缂栧彿"); + content6.setValue("031-41"); + horizontalContentList.add(content6); + return horizontalContentList; + } + + public String getTouser(String origin, boolean toAll) { if (toAll) { return "@all"; } else { -- Gitblit v1.9.3