package com.ruoyi.web.controller.common;
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.utils.RSAPublicKeyExample;
|
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.message.sms.provider.shiyi.ShiyiSmsRequest;
|
import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsResponse;
|
import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsUtil;
|
import com.ruoyi.message.wechat.WechatSendRequest;
|
import com.ruoyi.message.wechat.WechatSenderFactory;
|
import com.smartor.domain.*;
|
import com.smartor.service.IServiceOutPathService;
|
import com.smartor.service.IServiceSubtaskService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.io.UnsupportedEncodingException;
|
import java.util.Date;
|
|
/**
|
* 知信接口(对外短信 / 微信公众号发送入口)。
|
* <p>
|
* 说明:短信与公众号的站点差异(报文格式、签名、token、返回判定)已全部收口到
|
* {@code ruoyi-message} 模块,本类只负责参数组装与按 {@code active} 路由。
|
*/
|
@RestController
|
@Api(description = "知信接口")
|
@RequestMapping("/sms")
|
@Slf4j
|
public class SmsController {
|
|
@Autowired
|
private SmsSenderFactory smsSenderFactory;
|
|
@Autowired
|
private WechatSenderFactory wechatSenderFactory;
|
|
@Autowired
|
private ShiyiSmsUtil shiyiSmsUtil;
|
|
@Value("${localIP}")
|
private String ip;
|
|
@Value("${req_path}")
|
private String req_path;
|
|
@Value("${pub_key}")
|
private String pub_key;
|
|
@Autowired
|
private IServiceOutPathService iServiceOutPathService;
|
@Autowired
|
private IServiceSubtaskService iServiceSubtaskService;
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
|
/**
|
* 短信发送(测试)
|
*/
|
@ApiOperation("短信发送")
|
@PostMapping("/sendTest")
|
public AjaxResult send(@RequestBody smsVO vo) {
|
//与原实现一致:测试接口固定走市一(smsUtils.sendSms,吴山签名)
|
SmsSendRequest request = SmsSendRequest.of(vo.getPhone(), vo.getContent());
|
request.setCampus("2");
|
SendResult sendResult = smsSenderFactory.send("hzszlyy", request);
|
return AjaxResult.success(sendResult.getRawResponse());
|
}
|
|
@ApiOperation("市一HIS短信XML测试")
|
@PostMapping("/sendShiyiTest")
|
public AjaxResult sendShiyiTest(@RequestBody ShiyiSmsRequest request) {
|
try {
|
ShiyiSmsResponse response = shiyiSmsUtil.sendSms(request);
|
return AjaxResult.success(response);
|
} catch (Exception e) {
|
log.error("市一HIS短信XML测试失败", e);
|
return AjaxResult.error("市一HIS短信XML测试失败: " + e.getMessage());
|
}
|
}
|
|
/**
|
* 短信发送
|
*/
|
@ApiOperation("短信发送")
|
@PostMapping("/send")
|
public AjaxResult sendAsk(@RequestBody smsVO vo) throws UnsupportedEncodingException {
|
String content = "";
|
if (StringUtils.isNotEmpty(vo.getSubId())) {
|
ServiceSubtask serviceSubtask = iServiceSubtaskService.selectServiceSubtaskById(Long.valueOf(vo.getSubId()));
|
if (serviceSubtask.getSendstate() == 4L) content = "该任务不执行";
|
return AjaxResult.error(content);
|
}
|
|
if (StringUtils.isNotEmpty(vo.getTaskId()) && StringUtils.isNotEmpty(vo.getPatId()) && StringUtils.isNotEmpty(vo.getSubId())) {
|
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
|
String taskId = rsaPublicKeyExample.encryptedData(vo.getTaskId().toString(), pub_key);
|
String patid = rsaPublicKeyExample.encryptedData(vo.getPatId().toString(), pub_key);
|
String subId = rsaPublicKeyExample.encryptedData(vo.getSubId().toString(), pub_key);
|
Integer radix = iServiceOutPathService.selectAutoId();
|
String format = String.format("%03X", radix);
|
ServiceOutPath serviceOutPath = new ServiceOutPath();
|
serviceOutPath.setParam1(taskId);
|
serviceOutPath.setParam2(patid);
|
serviceOutPath.setParam3(vo.getTaskName());
|
serviceOutPath.setParam6(subId);
|
serviceOutPath.setRadix(format);
|
serviceOutPath.setCreateTime(new Date());
|
serviceOutPath.setOrgid(vo.getOrgid());
|
String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
|
content = "您好,邀请您填写出院调查表,请点击" + url + "填写。感谢您配合!";
|
serviceOutPath.setUrl(url);
|
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
|
}
|
|
if (ObjectUtils.isNotEmpty(vo.getContent())) content = vo.getContent();
|
|
String sendMsg = "false";
|
try {
|
if ("ls".equals(active)) {
|
//与原实现一致:丽水13家医院的短信功能标记为未开通
|
return AjaxResult.error("该短信功能还未开通");
|
}
|
SmsSendRequest request = SmsSendRequest.of(vo.getPhone(), content, vo.getOrgid());
|
//市一区分湖滨/吴山签名,此接口无院区信息,与原实现一致(非湖滨即吴山)
|
SendResult sendResult = smsSenderFactory.send(active, request);
|
sendMsg = sendResult.asLegacyFlag();
|
log.info(sendMsg);
|
} catch (Exception ex) {
|
log.error(ex.getMessage());
|
}
|
return AjaxResult.success(sendMsg);
|
}
|
|
/**
|
* 微信发送
|
*/
|
@ApiOperation("微信发送")
|
@PostMapping("/sendChat")
|
public AjaxResult sendChat(@RequestBody smsVO vo) {
|
String sendMsg = "";
|
if (StringUtils.isNotEmpty(vo.getSubId())) {
|
ServiceSubtask serviceSubtask = iServiceSubtaskService.selectServiceSubtaskById(Long.valueOf(vo.getSubId()));
|
if (serviceSubtask.getSendstate() == 4L) sendMsg = "该任务不执行";
|
return AjaxResult.error(sendMsg);
|
}
|
if (StringUtils.isNotEmpty(vo.getTaskId()) && StringUtils.isNotEmpty(vo.getPatId()) && StringUtils.isNotEmpty(vo.getSubId())) {
|
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
|
String taskId = rsaPublicKeyExample.encryptedData(vo.getTaskId().toString(), pub_key);
|
String patid = rsaPublicKeyExample.encryptedData(vo.getPatId().toString(), pub_key);
|
String subId = rsaPublicKeyExample.encryptedData(vo.getSubId().toString(), pub_key);
|
Integer radix = iServiceOutPathService.selectAutoId();
|
String format = String.format("%03X", radix);
|
ServiceOutPath serviceOutPath = new ServiceOutPath();
|
serviceOutPath.setParam1(taskId);
|
serviceOutPath.setParam2(patid);
|
serviceOutPath.setParam3(vo.getTaskName());
|
serviceOutPath.setParam6(subId);
|
serviceOutPath.setRadix(format);
|
serviceOutPath.setCreateTime(new Date());
|
serviceOutPath.setOrgid(vo.getOrgid());
|
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
|
String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
|
//与原实现一致:该接口固定走市一公众号
|
WechatSendRequest request = new WechatSendRequest();
|
request.setIdCard(vo.getIdCard());
|
request.setPhone(vo.getPhone());
|
request.setUrl(url);
|
request.setOrgid(vo.getOrgid());
|
SendResult sendResult = wechatSenderFactory.send("hzszlyy", request);
|
sendMsg = sendResult.getRawResponse();
|
}
|
return AjaxResult.success(sendMsg);
|
}
|
|
/**
|
* 生成外链
|
*/
|
@ApiOperation("生成外链")
|
@PostMapping("/getUrl")
|
public AjaxResult getUrl(@RequestBody smsVO vo) throws UnsupportedEncodingException {
|
String content = "";
|
if (StringUtils.isNotEmpty(vo.getTaskId()) && StringUtils.isNotEmpty(vo.getPatId()) && StringUtils.isNotEmpty(vo.getSubId())) {
|
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
|
String taskId = rsaPublicKeyExample.encryptedData(vo.getTaskId().toString(), pub_key);
|
String patid = rsaPublicKeyExample.encryptedData(vo.getPatId().toString(), pub_key);
|
String subId = rsaPublicKeyExample.encryptedData(vo.getSubId().toString(), pub_key);
|
Integer radix = iServiceOutPathService.selectAutoId();
|
String format = String.format("%03X", radix);
|
ServiceOutPath serviceOutPath = new ServiceOutPath();
|
serviceOutPath.setParam1(taskId);
|
serviceOutPath.setParam2(patid);
|
serviceOutPath.setParam3(vo.getTaskName());
|
serviceOutPath.setParam6(subId);
|
serviceOutPath.setRadix(format);
|
serviceOutPath.setCreateTime(new Date());
|
serviceOutPath.setOrgid(vo.getOrgid());
|
String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
|
// content = "您好,邀请您填写出院调查表,请点击" + url + "填写。感谢您配合!";
|
content = url;
|
serviceOutPath.setUrl(url);
|
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
|
}
|
if (StringUtils.isNotEmpty(vo.getSubId())) {
|
ServiceSubtask serviceSubtask = iServiceSubtaskService.selectServiceSubtaskById(Long.valueOf(vo.getSubId()));
|
if (serviceSubtask.getSendstate() == 4L) content = "该任务不执行";
|
}
|
|
return AjaxResult.success(content);
|
}
|
|
}
|