package com.ruoyi.system.service.impl; import java.sql.Date; import java.time.LocalDate; import java.util.*; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.message.SendResult; import com.ruoyi.message.sms.SmsSendRequest; import com.ruoyi.message.sms.SmsSenderFactory; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.common.core.service.ISubtaskSmsService; import com.ruoyi.common.utils.spring.SpringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.mapper.SmsRecordsMapper; import com.ruoyi.system.domain.SmsRecords; import com.ruoyi.system.service.ISmsRecordsService; /** * 短信记录Service业务层处理 * * @author smartor * @date 2023-03-06 */ @Slf4j @Service public class SmsRecordsServiceImpl implements ISmsRecordsService { @Autowired private SmsRecordsMapper smsRecordsMapper; @Autowired private ISysConfigService iSysConfigService; /** * 消息发送方工厂(短信),丽水短信已收口到 ruoyi-message */ @Autowired private SmsSenderFactory smsSenderFactory; /** * 查询短信记录 * * @param recordid 短信记录主键 * @return 短信记录 */ @Override public SmsRecords selectSmsRecordsByRecordid(Long recordid) { return smsRecordsMapper.selectSmsRecordsByRecordid(recordid); } /** * 查询短信记录列表 * * @param smsRecords 短信记录 * @return 短信记录 */ @Override public List selectSmsRecordsList(SmsRecords smsRecords) { return smsRecordsMapper.selectSmsRecordsList(smsRecords); } /** * 新增短信记录 * * @param smsRecords 短信记录 * @return 结果 */ @Override public int insertSmsRecords(SmsRecords smsRecords) { smsRecords.setCreateTime(DateUtils.getNowDate()); return smsRecordsMapper.insertSmsRecords(smsRecords); } /** * 新增短信记录 * * @param smsRecords 短信记录 * @return 结果 */ @Override public Boolean sendSmsRecords(SmsRecords smsRecords) { //获取通知短信提前"几天"发送 Integer days = 0; String noticeSmsBeforeSend = iSysConfigService.selectConfigByKey("notice_sms_before_send"); //获取医院机构ID String hospOrgid = iSysConfigService.selectConfigByKey("hosp_orgid"); if (StringUtils.isNotEmpty(noticeSmsBeforeSend)) days = Integer.valueOf(noticeSmsBeforeSend); //通过当前日期,加上提前的天数,获取要 LocalDate newDate = LocalDate.now().plusDays(days); Date date = Date.valueOf(newDate); smsRecords.setVisitTime(date); List orgidList = null; if (StringUtils.isNotEmpty(hospOrgid)) { orgidList = Arrays.asList(hospOrgid.split(",")); smsRecords.setOrgidList(orgidList); } List selectSmsRecordsList = smsRecordsMapper.selectSmsRecordsList(smsRecords); for (SmsRecords record : selectSmsRecordsList) { Boolean aBoolean = sendSMS(record.getOrgid(), record.getPhone(), record.getMsg()); if (aBoolean) { ISubtaskSmsService subtaskSmsService = SpringUtils.getBean(ISubtaskSmsService.class); subtaskSmsService.updateSubtaskVisitNotice(record.getSubId(), 1); } } return true; } public Boolean sendSMS(String orgid, String phone, String content) { //丽水的短信发送方式:已收口到 ruoyi-message 的 LishuiSmsSender //(机构配置从 sys_config 的 ls.msg.info 读取,token 由 smartor 注册的 // LishuiMessageConfigProvider 提供),这里不再自己拼报文 try { SendResult sendResult = smsSenderFactory.send("ls", SmsSendRequest.of(phone, content, orgid)); log.info("【SmsRecordsServiceImpl】丽水短信发送结果:{}", sendResult); return sendResult.isOk(); } catch (Exception e) { log.error("【SmsRecordsServiceImpl】丽水短信发送异常,orgid:{},phone:{}", orgid, phone, e); return false; } } /** * 修改短信记录 * * @param smsRecords 短信记录 * @return 结果 */ @Override public int updateSmsRecords(SmsRecords smsRecords) { smsRecords.setUpdateTime(DateUtils.getNowDate()); return smsRecordsMapper.updateSmsRecords(smsRecords); } /** * 批量删除短信记录 * * @param recordids 需要删除的短信记录主键 * @return 结果 */ @Override public int deleteSmsRecordsByRecordids(Long[] recordids) { return smsRecordsMapper.deleteSmsRecordsByRecordids(recordids); } /** * 删除短信记录信息 * * @param recordid 短信记录主键 * @return 结果 */ @Override public int deleteSmsRecordsByRecordid(Long recordid) { return smsRecordsMapper.deleteSmsRecordsByRecordid(recordid); } // --------------------------------------------------------------------- // 说明:原 getDXCode 已随发送方一起收口到 ruoyi-message 的 LishuiSmsSender, // 此处已删除,避免第三套丽水报文实现继续存在。 // --------------------------------------------------------------------- }