sinake
3 天以前 b542bb002d9dc8e12cf4bd8bb54dc4aa0b4bb67d
新境上报发送短信、专家发送短信、外链相关接口
已修改17个文件
已添加2个文件
325 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/GiLinkController.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceDonatebaseinfoReportController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/target/classes/application-prod.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/target/classes/com/ruoyi/web/controller/common/GiLinkController.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/target/classes/com/ruoyi/web/controller/common/SmsController.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/SmsUtils.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/GiLink.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/GiLinkMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IGiLinkService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/GiLinkService.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/GiLinkMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/target/classes/com/ruoyi/project/domain/GiLink.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/target/classes/com/ruoyi/project/mapper/GiLinkMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/target/classes/com/ruoyi/project/service/IGiLinkService.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/target/classes/com/ruoyi/project/service/impl/GiLinkService.class 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/GiLinkController.java
@@ -7,14 +7,18 @@
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.domain.BaseAnnextype;
import com.ruoyi.project.domain.GiLink;
import com.ruoyi.project.service.IBaseAnnextypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.project.service.IGiLinkService;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
@Slf4j
@@ -23,23 +27,50 @@
@RequestMapping("/GiLink")
public class GiLinkController {
    @Autowired
    private IBaseAnnextypeService baseAnnextypeService;
    private IGiLinkService giLinkService;
    @ApiOperation("新增")
    @ApiOperation("外链新增")
    @PostMapping("/add")
    public AjaxResult add(@RequestBody BaseAnnextype baseAnnextype) {
        Random rand = new Random(4);
        String hexString = String.format("%x", rand.nextInt());
        boolean save = baseAnnextypeService.save(baseAnnextype);
        return AjaxResult.success(baseAnnextype);
    public AjaxResult add(@RequestBody GiLink model) {
        return AjaxResult.success(giLinkService.Add(model));
    }
    @ApiOperation("代码获取信息")
    @ApiOperation("外链代码获取信息")
    @GetMapping(value = "/getCode")
    public AjaxResult getCode(Long id) {
    public AjaxResult getCode(String code) {
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("code", code);
        List<GiLink> links = giLinkService.listByMap(columnMap);
        if (links.size() > 0)
            return AjaxResult.success(links.get(0));
        else
            return AjaxResult.success("");
    }
        return AjaxResult.success(baseAnnextypeService.getById(id));
    @ApiOperation("上报发送短信")
    @GetMapping("/sendReport")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "上报id", dataType = "Long", required = true),
            @ApiImplicitParam(name = "coordinatorNo", value = "协调员编号", dataType = "String", required = true),
            @ApiImplicitParam(name = "toHospital", value = "上报医院", dataType = "String", required = true)
    })
    public AjaxResult SendReport(Long id,String coordinatorNo,String toHospital) {
        return AjaxResult.success(giLinkService.SendReport(id,coordinatorNo,toHospital));
    }
    @ApiOperation("专家发送短信")
    @GetMapping("/sendExpert")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "专家意见id", dataType = "Long", required = true),
            @ApiImplicitParam(name = "expertNo", value = "专家编号", dataType = "String", required = true),
            @ApiImplicitParam(name = "infoId", value = "案例id", dataType = "String", required = true)
    })
    public AjaxResult SendExpert(String id,String expertNo,String infoId) {
        return AjaxResult.success(giLinkService.SendExpert(id,expertNo,infoId));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -1,89 +1,33 @@
package com.ruoyi.web.controller.common;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.project.domain.GiApi;
import com.ruoyi.project.domain.dto.ApiDTO;
import com.ruoyi.project.domain.dto.SmsDTO;
import com.ruoyi.project.service.IApiService;
import com.ruoyi.common.utils.SmsUtils;
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.*;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
@Slf4j
@Api(description = "短信服务")
@RestController
@RequestMapping("/sms")
public class SmsController {
    @Value("${sms.url}")
    private String url="http://103.21.119.249:3131/http/send.aspx";
    @Value("${sms.loginName}")
    private String loginName="qddxfsyy";
    @Value("${sms.passWord}")
    private String passWord="Qyfy_0718";
    @ApiOperation("短信服务->发送短信")
    @PostMapping("/send")
    public AjaxResult getApiList(@RequestBody SmsDTO DTO) {
    public AjaxResult Send(@RequestBody SmsDTO DTO) {
        if (ObjectUtils.isNotEmpty(DTO.getTel())&&ObjectUtils.isNotEmpty(DTO.getMessageContent())) {
            String key= keyForMd5(loginName,passWord);
            String content="{\"LoginName\":\""+loginName+"\",\"PassWord\":\""+passWord+"\"," +
                    "\"Key\":\""+key+"\"," +
                    "\"Tel\":\""+DTO.getTel()+"\",\"MessageContent\":\""+DTO.getMessageContent()+"\"}";
            String result="";
            result= HttpUtils.sendPost(url, Base64.getEncoder().encodeToString(content.getBytes()) );
            return AjaxResult.success(result);
            SmsUtils sms=new SmsUtils();
            return AjaxResult.success(sms.send(DTO.getTel(),DTO.getMessageContent()));
        } else {
            return AjaxResult.error("电话和消息不能为空");
        }
    }
    public String keyForMd5(String name, String pass)
    {
        return md5(md5(pass) + pass + md5(name));
    }
    public static String md5(String str) {
        try {
            // 1. èŽ·å– MD5 æ¶ˆæ¯æ‘˜è¦å®žä¾‹
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 2. ä½¿ç”¨ UTF-8 ç¼–码将字符串转换为字节数组并计算哈希
            byte[] hashBytes = md.digest(str.getBytes(StandardCharsets.UTF_8));
            // 3. å°†å­—节数组转换为十六进制字符串(小写)
            return bytesToHex(hashBytes).toLowerCase();
        } catch (NoSuchAlgorithmException e) {
            // MD5 æ˜¯æ ‡å‡†ç®—法,正常情况下不会抛出此异常
            throw new RuntimeException("系统不支持 MD5 ç®—法", e);
        }
    }
    /**
     * å°†å­—节数组转换为十六进制字符串
     *
     * @param bytes å­—节数组
     * @return åå…­è¿›åˆ¶å­—符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        for (byte b : bytes) {
            // å°†æ¯ä¸ªå­—节的高4位和低4位分别转换为十六进制字符
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceDonatebaseinfoReportController.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.base.BaseException;
@@ -12,20 +13,17 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.common.IdGeneratorUtils;
import com.ruoyi.project.domain.ServiceDonatebaseinfoReport;
import com.ruoyi.project.domain.ServiceDonatebaseinfoReportFile;
import com.ruoyi.project.domain.ServiceTransport;
import com.ruoyi.project.domain.VUserOrg;
import com.ruoyi.project.service.IServiceDonatebaseinfoReportFileService;
import com.ruoyi.project.service.IServiceDonatebaseinfoReportService;
import com.ruoyi.project.service.IServiceTransportService;
import com.ruoyi.project.service.IVUserOrgService;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.service.*;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
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.*;
import java.util.HashMap;
@@ -52,6 +50,8 @@
    private IVUserOrgService vUserOrgService;
    @Autowired
    private IServiceTransportService serviceTransport;
    @Autowired
    private IGiLinkService linkService;
    /**
@@ -141,8 +141,12 @@
        boolean save = serviceDonatebaseinfoReportService.save(serviceDonatebaseinfoReport);
        //将生成的文件地址存储到数据库中
        if (save)
            serviceDonatebaseinfoReportFileService.addList(serviceDonatebaseinfoReport.getAnnexfilesList(), serviceDonatebaseinfoReport.getCaseNo(), getNickName(), serviceDonatebaseinfoReport.getId());
        if (save) {
            boolean res= serviceDonatebaseinfoReportFileService.addList(serviceDonatebaseinfoReport.getAnnexfilesList(), serviceDonatebaseinfoReport.getCaseNo(), getNickName(), serviceDonatebaseinfoReport.getId());
            if(res){
                linkService.SendReport(serviceDonatebaseinfoReport.getId(),serviceDonatebaseinfoReport.getCoordinatorNo(),serviceDonatebaseinfoReport.getToHospital());
            }
        }
        return toAjax(save);
    }
ruoyi-admin/src/main/resources/application-druid.yml
@@ -103,3 +103,7 @@
  url: http://103.21.119.249:3131/http/send.aspx
  loginName: qddxfsyy
  passWord: Qyfy_0718
link:
  report_url: http://localhost:8095/pages/case/transferinfo
  expert_url: http://localhost:8095/pages/ethicalReview/ethicalInfo
ruoyi-admin/src/main/resources/application-prod.yml
@@ -116,3 +116,7 @@
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /
link:
  report_url: http://localhost:8095/pages/case/transferinfo
  expert_url: http://localhost:8095/pages/ethicalReview/ethicalInfo
ruoyi-admin/target/classes/application-prod.yml
@@ -116,3 +116,7 @@
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /
link:
  report_url: http://localhost:8095/pages/case/transferinfo
  expert_url: http://localhost:8095/pages/ethicalReview/ethicalInfo
ruoyi-admin/target/classes/com/ruoyi/web/controller/common/GiLinkController.class
Binary files differ
ruoyi-admin/target/classes/com/ruoyi/web/controller/common/SmsController.class
Binary files differ
ruoyi-common/src/main/java/com/ruoyi/common/utils/SmsUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.common.utils;
import com.ruoyi.common.utils.http.HttpUtils;
import org.springframework.beans.factory.annotation.Value;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class SmsUtils {
    @Value("${sms.url}")
    private String url="http://103.21.119.249:3131/http/send.aspx";
    @Value("${sms.loginName}")
    private String loginName="qddxfsyy";
    @Value("${sms.passWord}")
    private String passWord="Qyfy_0718";
    public  String send(String tel,String messageContent){
        String key= keyForMd5(loginName,passWord);
        String content="{\"LoginName\":\""+loginName+"\",\"PassWord\":\""+passWord+"\"," +
                "\"Key\":\""+key+"\"," +
                "\"Tel\":\""+tel+"\",\"MessageContent\":\""+messageContent+"\"}";
        String result="";
        result= HttpUtils.sendPost(url, Base64.getEncoder().encodeToString(content.getBytes()) );
        return result;
    }
    public String keyForMd5(String name, String pass)
    {
        return md5(md5(pass) + pass + md5(name));
    }
    public static String md5(String str) {
        try {
            // 1. èŽ·å– MD5 æ¶ˆæ¯æ‘˜è¦å®žä¾‹
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 2. ä½¿ç”¨ UTF-8 ç¼–码将字符串转换为字节数组并计算哈希
            byte[] hashBytes = md.digest(str.getBytes(StandardCharsets.UTF_8));
            // 3. å°†å­—节数组转换为十六进制字符串(小写)
            return bytesToHex(hashBytes).toLowerCase();
        } catch (NoSuchAlgorithmException e) {
            // MD5 æ˜¯æ ‡å‡†ç®—法,正常情况下不会抛出此异常
            throw new RuntimeException("系统不支持 MD5 ç®—法", e);
        }
    }
    /**
     * å°†å­—节数组转换为十六进制字符串
     *
     * @param bytes å­—节数组
     * @return åå…­è¿›åˆ¶å­—符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        for (byte b : bytes) {
            // å°†æ¯ä¸ªå­—节的高4位和低4位分别转换为十六进制字符
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -101,7 +101,7 @@
                // è¿‡æ»¤è¯·æ±‚
                .authorizeRequests()
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                .antMatchers("/login", "/openidlogin", "/register", "/captchaImage", "/getToken").anonymous()
                .antMatchers("/login", "/openidlogin", "/register", "/captchaImage", "/getToken","/getCode").anonymous()
                .antMatchers(
                        HttpMethod.GET,
                        "/",
ruoyi-project/src/main/java/com/ruoyi/project/domain/GiLink.java
@@ -1,6 +1,7 @@
package com.ruoyi.project.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
@@ -32,5 +33,6 @@
    private Integer isDel;
    @ApiModelProperty("创建时间")
    @TableField(exist = false)
    private String createTime;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/GiLinkMapper.java
@@ -1,7 +1,14 @@
package com.ruoyi.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.core.domain.entity.BasePrcaddressDict;
import com.ruoyi.project.domain.BaseAnnextype;
import com.ruoyi.project.domain.GiLink;
import java.util.List;
public interface GiLinkMapper extends BaseMapper<GiLink> {
    Integer getMaxID();
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IGiLinkService.java
@@ -5,6 +5,11 @@
public interface IGiLinkService extends IService<GiLink>{
    Long Add(GiLink model);
    String Add(GiLink model);
    String SendReport(Long id,String coordinatorNo,String toHospital);
    String SendExpert(String id,String expertNo,String infoId);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/GiLinkService.java
@@ -1,20 +1,88 @@
package com.ruoyi.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SmsUtils;
import com.ruoyi.project.domain.GiLink;
import com.ruoyi.project.mapper.ApiMapper;
import com.ruoyi.project.mapper.GiLinkMapper;
import com.ruoyi.project.service.IGiLinkService;
import com.ruoyi.system.service.ISysUserService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Random;
@Service
public class GiLinkService  extends ServiceImpl<GiLinkMapper, GiLink> implements IGiLinkService {
    @Autowired
    GiLinkMapper mapper;
    @Autowired
    private ISysUserService userService;
    @Autowired
    private IGiLinkService linkService;
    @Value("${link.report_url}")
    private String reportUrl;
    @Value("${link.expert_url}")
    private String expertUrl;
    public String Add(GiLink model) {
        Integer maxid = mapper.getMaxID();
        Random rand = new Random();
        String code = maxid + String.format("%x", rand.nextInt(100));
        model.setCode(code);
        Integer res = mapper.insert(model);
        if (res == 1)
            return code;
        else
            return "";
    }
    /**
     * ä¸ŠæŠ¥å‘送短信
     * @param id ä¸ŠæŠ¥id
     * @param coordinatorNo åè°ƒå‘˜ç¼–号
     * @param toHospital ä¸ŠæŠ¥åŒ»é™¢
     */
    public String SendReport(Long id,String coordinatorNo,String toHospital){
        String res="";
        SysUser user= userService.selectUserByUserName(coordinatorNo);
        if(user!=null&& ObjectUtils.isNotEmpty(user.getPhonenumber())) {
            GiLink link=new GiLink();
            link.setUserName(user.getUserName());
            link.setUserPhone(user.getPhonenumber());
            link.setExtContent("{\"id\":\""+id+"\"}");
            String code=linkService.Add(link);
            reportUrl += "?code=" + code;
            String content = "案例上报通知:【青岛大学附属医院】" + toHospital
                    + "上报潜在捐献案例,请登录OPO系统查看详细信息,及时进行对接。登录链接:" + reportUrl + " ã€‚";
            SmsUtils sms=new SmsUtils();
            res=sms.send(user.getPhonenumber(),content);
        }
        return res;
    }
    public Long Add(GiLink model){
        return 1L;
    /**
     * ä¸“家发送短信
     * @param id ä¸“家意见id
     * @param expertNo ä¸“家编号
     * @param infoId æ¡ˆä¾‹id
     */
    public String SendExpert(String id,String expertNo,String infoId){
        String res="";
        SysUser user= userService.selectUserByUserName(expertNo);
        if(user!=null&& ObjectUtils.isNotEmpty(user.getPhonenumber())) {
            GiLink link=new GiLink();
            link.setUserName(user.getUserName());
            link.setUserPhone(user.getPhonenumber());
            link.setExtContent("{\"id\":\""+id+"\",\"type\": \"review\",\"status\": \"1\",\"infoId\": \""+infoId+"\"}");
            String code=linkService.Add(link);
            expertUrl += "?code=" + code;
            String content = "伦理专家审查通知:【青岛大学附属医院】尊敬的专家您好!您有紧急人体器官移植伦理审查申请待处理," +
                    "请务必于1小时内登录医院OPO系统进行审批。登录链接: " + expertUrl + "。谢谢 ã€‚";
            SmsUtils sms=new SmsUtils();
            res=sms.send(user.getPhonenumber(),content);
        }
        return res;
    }
}
ruoyi-project/src/main/resources/mapper/project/GiLinkMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.GiLinkMapper">
    <select id="getMaxID" resultType="java.lang.Integer">
        select ifnull(max(id),0)  from gi_link
    </select>
</mapper>
ruoyi-project/target/classes/com/ruoyi/project/domain/GiLink.class
Binary files differ
ruoyi-project/target/classes/com/ruoyi/project/mapper/GiLinkMapper.class
Binary files differ
ruoyi-project/target/classes/com/ruoyi/project/service/IGiLinkService.class
Binary files differ
ruoyi-project/target/classes/com/ruoyi/project/service/impl/GiLinkService.class
Binary files differ