lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/WeekMaintenanceOrderWxMessageSendJob.java
@@ -16,9 +16,12 @@
import org.jeecg.modules.quartz.service.ISysQuartzLogService;
import org.jeecg.modules.qywx.message.vo.TemplateCard;
import org.jeecg.modules.qywx.message.vo.TemplateCardEntity;
import org.jeecg.modules.system.entity.MdcProduction;
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.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -26,8 +29,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -47,6 +49,8 @@
    private ISysQuartzLogService sysQuartzLogService;
    @Autowired
    private IQuartzJobService quartzJobService;
    @Autowired
    private IMdcProductionService mdcProductionService;
    @Value("${wechatEnterprise.cardActionUrl}")
    private String cardActionUrl;
@@ -64,48 +68,49 @@
        long startTime = System.currentTimeMillis();
        try {
            //查询所有待保养的周保工单
            List<EamWeekMaintenanceOrder> waitOrderList = eamWeekMaintenanceOrderService.list(new LambdaQueryWrapper<EamWeekMaintenanceOrder>()
                    .eq(EamWeekMaintenanceOrder::getMaintenanceStatus, WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name())
                    .eq(EamWeekMaintenanceOrder::getDelFlag, CommonConstant.DEL_FLAG_0));
            if (!waitOrderList.isEmpty()) {
            List<EamWeekMaintenanceOrder> unReceivedOrderList = eamWeekMaintenanceOrderService.selectUnReceivedMaintenanceOrder();
            if (!unReceivedOrderList.isEmpty()) {
                //有待保养的工单,推送企业微信消息
                //查询所有操作工
                List<SysUser> userList = sysUserService.list(new LambdaQueryWrapper<SysUser>()
                        .eq(SysUser::getPost, BusinessCodeConst.PCR0001)
                        .eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0)
                        .eq(SysUser::getStatus, CommonConstant.USER_UNFREEZE));
                if (userList.isEmpty()) {
                    log.error("系统未设置操作工用户,无法推送工单领取提醒消息");
                    quartzLog.setIsSuccess(0);
                    quartzLog.setParams("系统未设置操作工用户,无法推送工单领取提醒消息");
                } else {
                    TemplateCard templateCard = new TemplateCard();
                    String toUsers = userList.stream().map(SysUser::getUsername).collect(Collectors.joining(","));
                    String touser = wechatEnterpriseService.getTouser(toUsers, false);
                    templateCard.setTouser(touser);
                    TemplateCardEntity templateCardEntity = new TemplateCardEntity();
                    templateCard.setTemplate_card(templateCardEntity);
                    templateCardEntity.setTask_id(waitOrderList.get(0).getId());
                    TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
                    mainTitle.setTitle("设备周保");
                    templateCardEntity.setMain_title(mainTitle);
                    templateCardEntity.setSub_title_text("您有待领取周保工单,请进入系统领取");
                    TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
                    cardAction.setType(1);
                    cardAction.setUrl(cardActionUrl);
                    templateCardEntity.setCard_action(cardAction);
                    JSONObject jsonObject = wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
                    Integer errcode = (Integer) jsonObject.get("errcode");
                    if (errcode == 0) {
                        log.info("推送待领取周保工单企业微信消息成功,{}", jsonObject.toJSONString());
                        quartzLog.setIsSuccess(0);
                        quartzLog.setParams(jsonObject.toJSONString());
                Map<String, List<EamWeekMaintenanceOrder>> unReceivedOrderMap = unReceivedOrderList.stream()
                        .collect(Collectors.groupingBy(EamWeekMaintenanceOrder::getOrgId));
                Set<String> productionIds = selectTwoLevelProductionIds(unReceivedOrderMap.keySet());
                StringBuilder message = new StringBuilder();
                for (String orgId : productionIds) {
                    //查询该产线下的所有操作工
                    List<UserSelector> userSelectorList = sysUserService.selectOperatorList(null, orgId, BusinessCodeConst.PCR0001);
                    if (userSelectorList.isEmpty()) {
                        log.error("id为:{},的产线未配置操作工用户,无法推送周保工单领取提醒消息", orgId);
                        message.append("id为: ").append(orgId).append(" 的产线未配置操作工用户,无法推送周保工单领取提醒消息").append("\n");
                    } else {
                        log.error("推送待领取周保工单企业微信消息失败,{}", jsonObject.toJSONString());
                        quartzLog.setIsSuccess(-1);
                        quartzLog.setExceptionDetail(jsonObject.toJSONString());
                        String toUsers = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.joining(","));
                        String touser = wechatEnterpriseService.getTouser(toUsers, false);
                        //构造消息体内容
                        TemplateCard templateCard = new TemplateCard();
                        templateCard.setTouser(touser);
                        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
                        templateCard.setTemplate_card(templateCardEntity);
                        templateCardEntity.setTask_id(UUID.randomUUID().toString().replaceAll("-", ""));
                        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
                        mainTitle.setTitle("设备周保");
                        templateCardEntity.setMain_title(mainTitle);
                        templateCardEntity.setSub_title_text("您有待领取周保工单,请进入系统领取");
                        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
                        cardAction.setType(1);
                        cardAction.setUrl(cardActionUrl);
                        templateCardEntity.setCard_action(cardAction);
                        JSONObject jsonObject = wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
                        Integer errcode = (Integer) jsonObject.get("errcode");
                        if (errcode == 0) {
                            log.info("推送待领取周保工单企业微信消息成功,{}", jsonObject.toJSONString());
                            message.append("推送待领取周保工单企业微信消息成功,").append(jsonObject.toJSONString()).append("\n");
                        } else {
                            log.error("推送待领取周保工单企业微信消息失败,{}", jsonObject.toJSONString());
                            message.append("推送待领取周保工单企业微信消息失败,").append(jsonObject.toJSONString()).append("\n");
                        }
                    }
                }
                quartzLog.setIsSuccess(0);
                quartzLog.setExceptionDetail(message.toString());
            } else {
                log.info("无待领取周保工单,无需推送工单领取提醒消息");
                quartzLog.setIsSuccess(0);
@@ -120,4 +125,24 @@
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
    }
    //如果当前产线是三级,查询对应二级产线,如果不是不做处理
    private Set<String> selectTwoLevelProductionIds(Set<String> productionIds) {
        Set<String> result = new HashSet<>();
        List<MdcProduction> mdcProductionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().in(MdcProduction::getId, productionIds));
        for (MdcProduction production : mdcProductionList) {
            //如果是三级产线,查找对应的二级产线,添加进结果集
            if ("3".equals(production.getOrgType())) {
                mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>()
                        .eq(MdcProduction::getId, production.getParentId())
                        .eq(MdcProduction::getOrgType, "2"))
                        .stream().findFirst().ifPresent(mdcProduction -> result.add(mdcProduction.getId()));
            }
            //如果是二级产线,添加进结果集
            if ("2".equals(production.getOrgType())) {
                result.add(production.getId());
            }
        }
        return result;
    }
}