From 692f6225a3caf41f30c4211c6b89ac671634e883 Mon Sep 17 00:00:00 2001 From: wei Date: Tue, 12 Aug 2025 17:49:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E6=89=93=E5=8D=A1=E6=8F=90?= =?UTF-8?q?=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-modules/ruoyi-job/pom.xml | 12 +++ .../java/com/ruoyi/job/config/SmsConfig.java | 23 ++++ .../com/ruoyi/job/domain/ScClassUserInfo.java | 78 ++++++++++++++ .../com/ruoyi/job/service/SmsService.java | 16 +++ .../job/service/impl/SmsServiceImpl.java | 35 ++++++ .../java/com/ruoyi/job/task/LiveTask.java | 34 ++++++ .../ruoyi/job/util/ProgressFormatterUtil.java | 18 ++++ .../mapper/job/ScClassUserInfoMapper.xml | 100 ++++++++++++++++++ 8 files changed, 316 insertions(+) create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java create mode 100644 ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml index 492628f4b..6b5440d5b 100644 --- a/ruoyi-modules/ruoyi-job/pom.xml +++ b/ruoyi-modules/ruoyi-job/pom.xml @@ -75,6 +75,18 @@ de.codecentric spring-boot-admin-starter-client + + com.squareup.okhttp3 + okhttp + 3.12.13 + + + com.ujcms + ujcms-commons + 9.6.0.0.1 + compile + + diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java new file mode 100644 index 000000000..9e483832d --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/SmsConfig.java @@ -0,0 +1,23 @@ +package com.ruoyi.job.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +/** + * 验证码配置 + * + * @author ruoyi + */ +@Data +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "security.sms.aliyuncs") +public class SmsConfig +{ + private String accessKeyId; + private String accessKeySecret; + private String signName; + private String templateCode; +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java new file mode 100644 index 000000000..aacd7cf74 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/ScClassUserInfo.java @@ -0,0 +1,78 @@ +package com.ruoyi.job.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.job.util.ProgressFormatterUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.data.annotation.Id; + +import java.math.BigDecimal; + +/** + * 直播预告报名信息导出实体 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ScClassUserInfo extends BaseEntity { + + @Id + private Long id; + + //@ExcelIgnore // 不导出该字段 + private Long userId; + + //@ExcelIgnore // 不导出该字段 + private Long classId; + + //@ColumnWidth(25) + // @ExcelProperty("名称(报名时)") + private String name; + + //@ColumnWidth(25) + //@ExcelProperty("单位") + private String firm; + + //@ColumnWidth(25) + //@ExcelProperty("专业") + private String specialized; + + //@ColumnWidth(35) + //@ExcelProperty("手机号") + private String phonenumber; + + //@ColumnWidth(35) + //@ExcelProperty("昵称") + private String nickName; + + /** + * 客户订单编号 + */ + //@ExcelProperty("客户订单编号") + private String userSn; + + //@ExcelIgnore + private Boolean todayAttendanceIs; + + @JsonIgnore + // @ExcelProperty("是否打卡") + private String attendanceIs; + + //@ExcelProperty("签到次数") + private Integer attendanceCount; + + //@ExcelIgnore + private BigDecimal progress; + + //@ExcelProperty("总学习进度") + private String progressPercent; + + public String getAttendanceIs() { + return attendanceCount.compareTo(0) > 0 ? "是" : "否"; + } + + public String getProgressPercent() { + return ProgressFormatterUtil.format(this.progress.multiply(BigDecimal.valueOf(100))); + } + +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java new file mode 100644 index 000000000..67a8602b1 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SmsService.java @@ -0,0 +1,16 @@ +package com.ruoyi.job.service; + +import com.ruoyi.common.core.exception.CaptchaException; + +/** + * 验证码处理 + * + * @author ruoyi + */ +public interface SmsService +{ + /** + * 发送学习短信通知 + */ + public void sendStudyNoticeSms(String phone) throws CaptchaException; +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java new file mode 100644 index 000000000..e8407555f --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/impl/SmsServiceImpl.java @@ -0,0 +1,35 @@ +package com.ruoyi.job.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.exception.CaptchaException; +import com.ruoyi.job.config.SmsConfig; +import com.ruoyi.job.service.SmsService; +import com.ujcms.commons.sms.AliyunUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 验证码实现处理 + * + * @author ruoyi + */ +@Service +public class SmsServiceImpl implements SmsService +{ + @Autowired + private SmsConfig smsConfig; + + /** + * 发送学习短信通知 + */ + @Override + public void sendStudyNoticeSms(String phone) throws CaptchaException { + AliyunUtils.sendSms(smsConfig.getAccessKeyId(), + smsConfig.getAccessKeySecret(), + smsConfig.getSignName(), + smsConfig.getTemplateCode(), + JSONObject.of(), + phone + ); + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java new file mode 100644 index 000000000..b9ffdfcf7 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/LiveTask.java @@ -0,0 +1,34 @@ +package com.ruoyi.job.task; + +import com.ruoyi.job.config.SmsConfig; +import com.ruoyi.job.domain.ScClassUserInfo; +import com.ruoyi.job.mapper.ScClassUserInfoMapper; +import com.ruoyi.job.service.SmsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@Component("liveTask") +public class LiveTask { + @Resource + ScClassUserInfoMapper scClassUserInfoMapper; + @Autowired + private SmsService smsAliyuncs; + + @Autowired + private SmsConfig smsConfig; + /** + * 短信打卡 + */ + public void CourseSmsNotice(){ + List list = scClassUserInfoMapper.waitNoticeCourseUser(); + list.forEach(item->{ + log.info("发送打卡提醒",item.getUserId(),item.getNickName(),item.getPhonenumber()); + smsAliyuncs.sendStudyNoticeSms(item.getPhonenumber()); + }); + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java new file mode 100644 index 000000000..b88d4bb91 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ProgressFormatterUtil.java @@ -0,0 +1,18 @@ +package com.ruoyi.job.util; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.NumberFormat; + +public class ProgressFormatterUtil { + public static String format(BigDecimal progress ) { + if (progress == null) return "0"; + // 保留两位小数(四舍五入) + BigDecimal scaled = progress.setScale(2, RoundingMode.HALF_UP); + // 去除末尾零和小数点 + NumberFormat nf = NumberFormat.getInstance(); + nf.setMaximumFractionDigits(2); + nf.setMinimumFractionDigits(0); + return nf.format(scaled) + "%"; + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml b/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml new file mode 100644 index 000000000..5e405ee42 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/ScClassUserInfoMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + +