package com.ruoyi.system.service.impl; import java.io.IOException; import java.sql.Date; import java.time.LocalDate; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.ruoyi.common.enums.MsgLSEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.OkHttpExample; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysConfigService; import com.smartor.common.LSHospTokenUtil; import com.smartor.domain.ServiceSubtask; import com.smartor.mapper.ServiceSubtaskMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; 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; @Autowired private ServiceSubtaskMapper serviceSubtaskMapper; /** * 查询短信记录 * * @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()); ServiceSubtask serviceSubtask = new ServiceSubtask(); serviceSubtask.setId(record.getSubId()); if (aBoolean) serviceSubtask.setVisitNotice(1); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); } return true; } public Boolean sendSMS(String orgid, String phone, String content) { //丽水的短信发送方式 Boolean isSuccess = false; try { Map map = MsgLSEnum.getAddressByCode(orgid); String token = LSHospTokenUtil.getToken(orgid); log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", map.get("address"), orgid); String dxCode = getDXCode(map.get("address"), phone, content, map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(orgid), token); log.info("【sfHandlle】丽水短信发送结果:{}", dxCode); ObjectMapper objectMapper = new ObjectMapper(); Map textParam = null; textParam = objectMapper.readValue(dxCode, Map.class); String code = textParam.get("Code").toString(); if (code.equals("0")) { isSuccess = true; } } catch (Exception e) { e.printStackTrace(); } return isSuccess; } /** * 修改短信记录 * * @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); } private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map headerMap, String token) { Map map = new LinkedHashMap<>(); Map YeWuXX = new LinkedHashMap<>(); Map DuanXinXX = new LinkedHashMap<>(); DuanXinXX.put("ShouJiHM", ShouJiHM); DuanXinXX.put("FaSongNR", FaSongNR); DuanXinXX.put("FaSongRID", FaSongRID); DuanXinXX.put("FaSongRXM", FaSongRXM); YeWuXX.put("DuanXinXX", DuanXinXX); map.put("XiaoXiTou", headerMap); map.put("YeWuXX", YeWuXX); String body = new Gson().toJson(map); // String result = HttpUtils.sendPost(address, body); String result = null; try { result = OkHttpExample.sendPostRequest(address, body, token); } catch (IOException e) { e.printStackTrace(); } log.info("【getDXCode】短信发送结果:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); String code = (String) jsonObject.toString(); return code; } }