From 95752945615fa3a447aa05b471dcfd583eb1ab9b Mon Sep 17 00:00:00 2001 From: bonus <1203338439@qq.com> Date: Thu, 21 Aug 2025 18:28:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=B7=A5=E5=99=A8=E5=85=B7?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E6=8E=A8=E9=80=81=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/RepairServiceImpl.java | 5 +- .../warning/ScheduledCheckWarning.java | 173 ++++++++++++++++++ .../domain/UseMaintenanceWarningBean.java | 18 ++ .../mapper/UseMaintenanceWarningMapper.java | 12 ++ .../UseMaintenanceWarningMapper.xml | 144 ++++++++++++++- 5 files changed, 349 insertions(+), 3 deletions(-) create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java index 66e18c94..7920cb76 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java @@ -926,7 +926,10 @@ public class RepairServiceImpl implements RepairService { } repairApplyRecord.setCreateBy(loginUser.getUsername()); repairApplyRecord.setStatus(0L); - repairApplyRecord.setRemark(StringUtils.isNotBlank(bean.getInRepairList().get(0).getRemark()) ? bean.getInRepairList().get(0).getRemark() : ""); + if(bean.getInRepairList()!=null){ + repairApplyRecord.setRemark(StringUtils.isNotBlank(bean.getInRepairList().get(0).getRemark()) ? bean.getInRepairList().get(0).getRemark() : ""); + } + if ((null != partDetails.getId() || null != partDetails.getPartId()) && null != partDetails.getPartNum()) { partDetails.setPartId(null != partDetails.getPartId() ? partDetails.getPartId() : partDetails.getId()); // 有维修配件时,如果价格为空,设置为0 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java new file mode 100644 index 00000000..2e02cc1c --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warning/ScheduledCheckWarning.java @@ -0,0 +1,173 @@ +package com.bonus.material.warning; + +import cn.hutool.json.JSONObject; +import com.ah.sbd.SmsTool; +import com.ah.sbd.utils.param.BatchSmsByContentParam; +import com.ah.sbd.utils.param.SmsParam; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.bonus.common.biz.constant.BmConfigItems; +import com.bonus.common.biz.domain.lease.LeaseApplyInfo; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.material.back.domain.BackApplyInfo; +import com.bonus.material.back.service.IBackApplyInfoService; +import com.bonus.material.warningAnalysis.domain.UseMaintenanceWarningBean; +import com.bonus.material.warningAnalysis.mapper.UseMaintenanceWarningMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +/** + * 任务定时推送相关人员任务控制器 + * @author ma_sh + */ +@Component +@Slf4j +public class ScheduledCheckWarning { + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Resource + private UseMaintenanceWarningMapper mapper; + + @Resource + private ScheduledTaskRegistrar scheduledTaskRegistrar; + + /** + * 定时任务执行频率,每周三/五天上午9点执行一次 + */ + private String cronExpression = "0 0 9 ? * WED,FRI"; + + + /** + * 初始化定时任务 + */ + @PostConstruct + public void init() { + cronExpression = getCronFromDatabase(); + updateCronTask(); + } + + /** + * 更新定时任务 + */ + private void updateCronTask() { + scheduledTaskRegistrar.getScheduler().schedule(() -> { + taskWithFixedRate(); + }, new CronTrigger(cronExpression)); + } + + /** + * 从数据库中获取 cron 表达式 + * @return + */ + private String getCronFromDatabase() { + // 这里假设从数据库中获取 cron 表达式 + //return "0 */1 * * * ?"; + return "0 0 9 ? * WED,FRI"; + } + + /** + * 定时任务执行频率,每周三/五天上午9点执行一次安全工器具预警短信推送, + * 临检30天推送所在工程(项目经理、总工、材料员),频率为每周五进行推送; + * 临检15天推送工程所在分公司(施工管理科副科长、分公司分管领导),每周三、五进行推送。 + * 每三天的上午9点执行 + */ + public void taskWithFixedRate() { + log.info("开始执行安全工器具预警短信推送任务"); + //查询各个工程预警的设备总数,分别推送给各工程负责人 + +//截止当天XX工程,速差器、安全带等X件工器具已临检检验有效期30天,请尽快退回机具(物流)分公司复检,明细请登录机具管理系统查看 + List monthList = mapper.getWarningLastMonthList(new UseMaintenanceWarningBean()); +// 发送短信 + try { + + if(monthList !=null && monthList.size()>0){ + for (UseMaintenanceWarningBean bean : monthList) { + //根据皖送平台工程id查询项目经理、总工,获取手机号 + UseMaintenanceWarningBean projectManager = mapper.getProjectManager(bean); + String leaderPhone = projectManager.getLeaderPhone(); + String engPhone = projectManager.getEngPhone(); + String content = "截止当天" + bean.getProjectName() +","+ bean.getTypeName() +"共" +bean.getWarnNum() + "件工器具已临检检验有效期30天,请尽快退回机具(物流)分公司复检,明细请登录机具管理系统查看"; + + // 省公司短信发送 + List mobileList = new ArrayList(); + List userList = mapper.getUserList(bean); + + if(userList !=null && userList.size()>0){ + for (UseMaintenanceWarningBean item : userList){ + UseMaintenanceWarningBean item1 = mapper.getUserPhoneById(item); + mobileList.add(item1.getClzPhone()); + } + } + + mobileList.add(leaderPhone); + mobileList.add(engPhone); + if (CollectionUtils.isNotEmpty(mobileList)){ + JSONObject sendResult = SmsTool.sendSms(new BatchSmsByContentParam(mobileList, content), BmConfigItems.ANHUI_COMPANY_SMS_KEY); + if (sendResult != null && !sendResult.isEmpty()) { + log.info("短信发送成功: {}", sendResult); + System.out.println("短信发送成功: " + sendResult); + } else { + log.error("短信发送失败,发送结果为空!"); + System.out.println("短信发送失败,发送结果为空!"); + } + } + + + + } + } + + //截止当天XX工程,速差器、安全带等X件工器具已临检检验有效期15天,请尽快退回机具(物流)分公司复检,明细请登录机具管理系统查看 + List dayList = mapper.getWarningLastDayList(new UseMaintenanceWarningBean()); + if(dayList !=null && dayList.size()>0){ + for (UseMaintenanceWarningBean bean2 : dayList) { + //根据工程所属分公司查询施工管理科副科长、分公司分管领导,获取手机号 + + String content2 = "截止当天" + bean2.getProjectName() +","+ bean2.getTypeName() +"共"+ bean2.getWarnNum() + "件工器具已临检检验有效期15天,请尽快退回机具(物流)分公司复检,明细请登录机具管理系统查看"; + + // 省公司短信发送 + List mobileList2 = new ArrayList(); + List userManger = mapper.getUserManger(bean2); + + if(userManger !=null && userManger.size()>0){ + for (UseMaintenanceWarningBean item : userManger){ + UseMaintenanceWarningBean item1 = mapper.getUserPhoneById(item); + mobileList2.add(item1.getFkzPhone()); + } + } + + if (CollectionUtils.isNotEmpty(mobileList2)){ + JSONObject sendResult = SmsTool.sendSms(new BatchSmsByContentParam(mobileList2, content2), BmConfigItems.ANHUI_COMPANY_SMS_KEY); + if (sendResult != null && !sendResult.isEmpty()) { + log.info("短信发送成功: {}", sendResult); + System.out.println("短信发送成功: " + sendResult); + } else { + log.error("短信发送失败,发送结果为空!"); + System.out.println("短信发送失败,发送结果为空!"); + } + } + + + + } + } + + } catch (Exception e) { + log.error("短信发送过程中发生异常: {}", e.getMessage()); + System.out.println("短信发送过程中发生异常: " + e.getMessage()); + } + // 记录任务执行时间 + log.info("执行安全工器具预警短信推送任务执行时间:" + LocalDateTime.now().format(FORMATTER)); + System.out.println("执行安全工器具预警短信推送任务任务执行时间:" + LocalDateTime.now().format(FORMATTER)); + } + +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/domain/UseMaintenanceWarningBean.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/domain/UseMaintenanceWarningBean.java index c80279e1..28d8ab2c 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/domain/UseMaintenanceWarningBean.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/domain/UseMaintenanceWarningBean.java @@ -108,4 +108,22 @@ public class UseMaintenanceWarningBean extends BaseEntity { @ApiModelProperty(value = "类型id") private Long typeId; + + @ApiModelProperty(value = "预警数量") + private Long warnNum; + + @ApiModelProperty(value = "项目经理手机号") + private String leaderPhone; + + @ApiModelProperty(value = "项目总工手机号") + private String engPhone; + + @ApiModelProperty(value = "材料员手机号") + private String clzPhone; + + @ApiModelProperty(value = "施工管理科副科长") + private String fkzPhone; + + @ApiModelProperty(value = "所属分公司") + private Long deptId; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/mapper/UseMaintenanceWarningMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/mapper/UseMaintenanceWarningMapper.java index df365a57..e5fc926a 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/mapper/UseMaintenanceWarningMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/warningAnalysis/mapper/UseMaintenanceWarningMapper.java @@ -19,4 +19,16 @@ public interface UseMaintenanceWarningMapper */ public List getList(UseMaintenanceWarningBean bean); + + List getWarningLastMonthList(UseMaintenanceWarningBean useMaintenanceWarningBean); + + UseMaintenanceWarningBean getProjectManager(UseMaintenanceWarningBean bean); + + List getUserList(UseMaintenanceWarningBean bean); + + UseMaintenanceWarningBean getUserPhoneById(UseMaintenanceWarningBean item); + + List getWarningLastDayList(UseMaintenanceWarningBean useMaintenanceWarningBean); + + List getUserManger(UseMaintenanceWarningBean bean); } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/warningAnalysis/UseMaintenanceWarningMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/warningAnalysis/UseMaintenanceWarningMapper.xml index 0850cbd4..e6f7bcb8 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/warningAnalysis/UseMaintenanceWarningMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/warningAnalysis/UseMaintenanceWarningMapper.xml @@ -32,7 +32,7 @@ AND bp.del_flag = '0' LEFT JOIN sys_dept sd on sd.dept_id = bp.imp_unit WHERE - mm.ma_status='2' + mm.ma_status='2' and sai.is_slt = 0 and bp.pro_name is not null AND mm.next_check_time BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 MONTH) @@ -59,4 +59,144 @@ ORDER BY mm.next_check_time ASC - \ No newline at end of file + + + + + + + + + + + + + +