浏览代码

feature: 提供发送挂号消息的 REST 接口

Walker 2 年之前
父节点
当前提交
258b783806

+ 4 - 3
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/EmptyApplication.java

@@ -2,6 +2,7 @@ package com.ywt.alipaympapi;
 
 import com.alipay.easysdk.factory.Factory;
 import com.alipay.easysdk.kernel.Config;
+import com.ywt.alipaympapi.models.Constants;
 import com.ywt.rpc.core.RestServerStarter;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -29,11 +30,11 @@ public class EmptyApplication {
         config.gatewayHost = "openapi.alipay.com";
         config.signType = "RSA2";
 
-        config.appId = "2021003141662056";
+        config.appId = Constants.ALIPAYMP_APPID_NFYYBYFY;
         // 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
-        config.merchantPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDTrydAgG5HUwvoYE6L4WFlgIhX2fKPEFvlpDyCremBPk5Zp3OMpoj3cfcd36Im/0MndQII90hErcRqfUEPJhw+F2CSBpxkLTb/7J1iRyUiKjv5G+24qG4FQIo/yc0o7xQsNLJR7McbS3ROuuPg1jN5qL8XKCPxCHEL5QzzJCVp+Jz+GKeGYPPmPdALC1nxgOKjYjpJrwOGtaU+7WuaB9SVz98xU3FocLFDTqE0MCQySOxxB0CZgBEPahp2l2B6FcMBoRok2p1ODIlN1ihfEEIrAU9rmso7swxEo65oaCuZu/bkH1FvmcayjMJ0xBir8pBh96tKt8loU++LY9y1rq6tAgMBAAECggEAAqvUJ/k26wl+PflxJEy8yOYdUlZ6vBltv3EaHmAJcUsS/Aij6aN0WQMEJklbJ3jTJR1R4EEWlV9H+jwIZSOK+bGb01vn/0+ewQ4AUmwpaMv1o8gZcNoXQVO2KuXmA904ePJVSbleLdb+6btsArtRPPjHKIimI3WCz66dQjgzjKnDloaaDIrx6bi3J0GOxzRGfMTMTuqhr6cm1OWCgSIFK+jTj61o7eIx1ZYY3OorApS9Q5CF3OHAXn6ignBxdvuyzDfA9VNMihrnuDcWy674mMOciu6TYx4Y0nwpFedKU29uR5Scgr0DGQFeLBSZmyd5kblDTu/CF5sFK5kr7H2pYQKBgQD3guHqAeObnItkmLdJfOkdfcoSmS5UZeyyyaJitjCbUGydJPUA8RipYKCM4rhRQYZvyIWwo52BahhzwGrp+3gdQWOQ6SRVXZXQVwsvWfkWaVkgRxeM0GASsFAnSjoHEEfRNifWRPcCSzSrvr0W+X7Wjc9XSiafOaKPuJeyTrVHiQKBgQDa8ba3l1/L2q6+al6UFsgn4WeIDHVaiDnIp1W+tT7UYPBEraedke1SjjGACfOrFfvNW35Vo6nV1olekB0D1AB2alLXN0x0swjit2TRKHOj8eH5uzplcktBNygDicnG09JW5RnQL21D7xf01L5b2lv52DvR7anrikkf3TdrNAbBBQKBgESm9wazU3CcMUXL3jrx/K8DbwNNnb4nL0pAB1yd8EmEOzwzPgnu1cpVVPL/B+Tx6dojooFmQI/e371rh7wy1hQ3SOiu4jcTaDSLkDyoFiETQ3digLO8MIm+gd0EB6hh6amr/cy/AEyQk6F3nHc86OOWHga2OJQ9pkt7BgidMEcRAoGBAKE9MVqzWBFA0z/YBh75SB5WmXBP/HzXpfZnhXYU9Fhjq45odPBN74DExx+MNK7iWbY6kyduiDy66h+B8lxHXK/YTXnBd8TZtMmCVfTS3Zb3I3xOrgrXySQWApnYd4i9pkHoJsJyqv1Er1fW9PmgLewpmqRXarPT+1ZEC/QfNHohAoGBAOpKX5QeQfk3x9ae6Wtvuw5hdF0aPaWpimPAFion5jqINoJc13gMo1YhU2eUMwvw8kkB/edvAp12EFRb7Esza4ZXc7uDWnYMPh8Wx8iHBEKxpUneNADmxpo2LXO+AXE4ZgIojeUSYPAGSHb16uG15lxamLqlLIJ44FR+1F86jk4L";
+        config.merchantPrivateKey = Constants.MERCHANT_PRIVATE_KEY;
         // 注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
-        config.alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUtjYn+V60um6GVF0ezsI4NCI8QAiM8BT7SQda3RDzIssPbU5U3GJo/5bbu+k+pOpCOUlGVve2VoO+AXMWizCA8U/RleN7fNE09yw7RdLfLssNp6J4zGfBHQBWMiTrJvGZ4LzZHiwJgf28CGwcovjAK6M8bjF30k5ChQ8YIi+YYuer8yae7XfORLiSTByakglURlVUZF7QgbLph9i/OBk83HribZh+B/n97vavrAUyTjbDE3TMsINsAfMSY1omweXuvqjndYI+XmiBM4nBPHlPsXEeaF9TE8LuIqWm5mnRKWa/0I31RkE+W19tFUx5mF3oHw6SvyVuUQVx0HWGIPKQIDAQAB";
+        config.alipayPublicKey = Constants.ALIPAY_PUBLIC_KEY;
         Factory.setOptions(config);
     }
 }

+ 12 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/core/utils/BizUtil.java

@@ -146,6 +146,18 @@ public final class BizUtil {
         }
     }
 
+    /**
+     * 根据医院 id 获取对应支付宝小程序终端号
+     */
+    public static int getAlipayMpTerminalIdByHospitalId(int hospitalId) {
+        switch (hospitalId) {
+            case Constants.HOSPITAL_ID_NFYYBYFY:
+                return TerminalEnum.NFYYBYFY_ALIPAY_MP.getValue();
+            default:
+                return TerminalEnum.UNKNOWN.getValue();
+        }
+    }
+
     public static int getCurrentTerminalWrapped() {
 //        return TerminalEnum.NFYYBYFY_WXAPP.getValue();
 //        return TerminalEnum.TaiheWxOfficial.getValue();

+ 3 - 2
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/face/impl/AlipayService.java

@@ -5,6 +5,7 @@ import com.alipay.api.AlipayRequest;
 import com.alipay.api.AlipayResponse;
 import com.alipay.api.DefaultAlipayClient;
 import com.ywt.alipaympapi.face.IAlipayService;
+import com.ywt.alipaympapi.models.Constants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
@@ -53,8 +54,8 @@ public class AlipayService implements IAlipayService {
      * FIXME: 后续扩展多医院需要将 pk & apk 配置化
      */
     public AlipayClient getAlipayClient(String appId) {
-        String pk = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDTrydAgG5HUwvoYE6L4WFlgIhX2fKPEFvlpDyCremBPk5Zp3OMpoj3cfcd36Im/0MndQII90hErcRqfUEPJhw+F2CSBpxkLTb/7J1iRyUiKjv5G+24qG4FQIo/yc0o7xQsNLJR7McbS3ROuuPg1jN5qL8XKCPxCHEL5QzzJCVp+Jz+GKeGYPPmPdALC1nxgOKjYjpJrwOGtaU+7WuaB9SVz98xU3FocLFDTqE0MCQySOxxB0CZgBEPahp2l2B6FcMBoRok2p1ODIlN1ihfEEIrAU9rmso7swxEo65oaCuZu/bkH1FvmcayjMJ0xBir8pBh96tKt8loU++LY9y1rq6tAgMBAAECggEAAqvUJ/k26wl+PflxJEy8yOYdUlZ6vBltv3EaHmAJcUsS/Aij6aN0WQMEJklbJ3jTJR1R4EEWlV9H+jwIZSOK+bGb01vn/0+ewQ4AUmwpaMv1o8gZcNoXQVO2KuXmA904ePJVSbleLdb+6btsArtRPPjHKIimI3WCz66dQjgzjKnDloaaDIrx6bi3J0GOxzRGfMTMTuqhr6cm1OWCgSIFK+jTj61o7eIx1ZYY3OorApS9Q5CF3OHAXn6ignBxdvuyzDfA9VNMihrnuDcWy674mMOciu6TYx4Y0nwpFedKU29uR5Scgr0DGQFeLBSZmyd5kblDTu/CF5sFK5kr7H2pYQKBgQD3guHqAeObnItkmLdJfOkdfcoSmS5UZeyyyaJitjCbUGydJPUA8RipYKCM4rhRQYZvyIWwo52BahhzwGrp+3gdQWOQ6SRVXZXQVwsvWfkWaVkgRxeM0GASsFAnSjoHEEfRNifWRPcCSzSrvr0W+X7Wjc9XSiafOaKPuJeyTrVHiQKBgQDa8ba3l1/L2q6+al6UFsgn4WeIDHVaiDnIp1W+tT7UYPBEraedke1SjjGACfOrFfvNW35Vo6nV1olekB0D1AB2alLXN0x0swjit2TRKHOj8eH5uzplcktBNygDicnG09JW5RnQL21D7xf01L5b2lv52DvR7anrikkf3TdrNAbBBQKBgESm9wazU3CcMUXL3jrx/K8DbwNNnb4nL0pAB1yd8EmEOzwzPgnu1cpVVPL/B+Tx6dojooFmQI/e371rh7wy1hQ3SOiu4jcTaDSLkDyoFiETQ3digLO8MIm+gd0EB6hh6amr/cy/AEyQk6F3nHc86OOWHga2OJQ9pkt7BgidMEcRAoGBAKE9MVqzWBFA0z/YBh75SB5WmXBP/HzXpfZnhXYU9Fhjq45odPBN74DExx+MNK7iWbY6kyduiDy66h+B8lxHXK/YTXnBd8TZtMmCVfTS3Zb3I3xOrgrXySQWApnYd4i9pkHoJsJyqv1Er1fW9PmgLewpmqRXarPT+1ZEC/QfNHohAoGBAOpKX5QeQfk3x9ae6Wtvuw5hdF0aPaWpimPAFion5jqINoJc13gMo1YhU2eUMwvw8kkB/edvAp12EFRb7Esza4ZXc7uDWnYMPh8Wx8iHBEKxpUneNADmxpo2LXO+AXE4ZgIojeUSYPAGSHb16uG15lxamLqlLIJ44FR+1F86jk4L";
-        String apk = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUtjYn+V60um6GVF0ezsI4NCI8QAiM8BT7SQda3RDzIssPbU5U3GJo/5bbu+k+pOpCOUlGVve2VoO+AXMWizCA8U/RleN7fNE09yw7RdLfLssNp6J4zGfBHQBWMiTrJvGZ4LzZHiwJgf28CGwcovjAK6M8bjF30k5ChQ8YIi+YYuer8yae7XfORLiSTByakglURlVUZF7QgbLph9i/OBk83HribZh+B/n97vavrAUyTjbDE3TMsINsAfMSY1omweXuvqjndYI+XmiBM4nBPHlPsXEeaF9TE8LuIqWm5mnRKWa/0I31RkE+W19tFUx5mF3oHw6SvyVuUQVx0HWGIPKQIDAQAB";
+        String pk = Constants.MERCHANT_PRIVATE_KEY;
+        String apk = Constants.ALIPAY_PUBLIC_KEY;
         //实例化客户端
         return new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appId, pk, "json", "UTF-8", apk, "RSA2");
     }

+ 2 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/Constants.java

@@ -13,6 +13,8 @@ public class Constants {
     public static final int TAIHE_HOSPITAL_ID = 12;
 
     public static final String ALIPAYMP_APPID_NFYYBYFY = "2021003141662056";
+    public static final String MERCHANT_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDTrydAgG5HUwvoYE6L4WFlgIhX2fKPEFvlpDyCremBPk5Zp3OMpoj3cfcd36Im/0MndQII90hErcRqfUEPJhw+F2CSBpxkLTb/7J1iRyUiKjv5G+24qG4FQIo/yc0o7xQsNLJR7McbS3ROuuPg1jN5qL8XKCPxCHEL5QzzJCVp+Jz+GKeGYPPmPdALC1nxgOKjYjpJrwOGtaU+7WuaB9SVz98xU3FocLFDTqE0MCQySOxxB0CZgBEPahp2l2B6FcMBoRok2p1ODIlN1ihfEEIrAU9rmso7swxEo65oaCuZu/bkH1FvmcayjMJ0xBir8pBh96tKt8loU++LY9y1rq6tAgMBAAECggEAAqvUJ/k26wl+PflxJEy8yOYdUlZ6vBltv3EaHmAJcUsS/Aij6aN0WQMEJklbJ3jTJR1R4EEWlV9H+jwIZSOK+bGb01vn/0+ewQ4AUmwpaMv1o8gZcNoXQVO2KuXmA904ePJVSbleLdb+6btsArtRPPjHKIimI3WCz66dQjgzjKnDloaaDIrx6bi3J0GOxzRGfMTMTuqhr6cm1OWCgSIFK+jTj61o7eIx1ZYY3OorApS9Q5CF3OHAXn6ignBxdvuyzDfA9VNMihrnuDcWy674mMOciu6TYx4Y0nwpFedKU29uR5Scgr0DGQFeLBSZmyd5kblDTu/CF5sFK5kr7H2pYQKBgQD3guHqAeObnItkmLdJfOkdfcoSmS5UZeyyyaJitjCbUGydJPUA8RipYKCM4rhRQYZvyIWwo52BahhzwGrp+3gdQWOQ6SRVXZXQVwsvWfkWaVkgRxeM0GASsFAnSjoHEEfRNifWRPcCSzSrvr0W+X7Wjc9XSiafOaKPuJeyTrVHiQKBgQDa8ba3l1/L2q6+al6UFsgn4WeIDHVaiDnIp1W+tT7UYPBEraedke1SjjGACfOrFfvNW35Vo6nV1olekB0D1AB2alLXN0x0swjit2TRKHOj8eH5uzplcktBNygDicnG09JW5RnQL21D7xf01L5b2lv52DvR7anrikkf3TdrNAbBBQKBgESm9wazU3CcMUXL3jrx/K8DbwNNnb4nL0pAB1yd8EmEOzwzPgnu1cpVVPL/B+Tx6dojooFmQI/e371rh7wy1hQ3SOiu4jcTaDSLkDyoFiETQ3digLO8MIm+gd0EB6hh6amr/cy/AEyQk6F3nHc86OOWHga2OJQ9pkt7BgidMEcRAoGBAKE9MVqzWBFA0z/YBh75SB5WmXBP/HzXpfZnhXYU9Fhjq45odPBN74DExx+MNK7iWbY6kyduiDy66h+B8lxHXK/YTXnBd8TZtMmCVfTS3Zb3I3xOrgrXySQWApnYd4i9pkHoJsJyqv1Er1fW9PmgLewpmqRXarPT+1ZEC/QfNHohAoGBAOpKX5QeQfk3x9ae6Wtvuw5hdF0aPaWpimPAFion5jqINoJc13gMo1YhU2eUMwvw8kkB/edvAp12EFRb7Esza4ZXc7uDWnYMPh8Wx8iHBEKxpUneNADmxpo2LXO+AXE4ZgIojeUSYPAGSHb16uG15lxamLqlLIJ44FR+1F86jk4L";
+    public static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUtjYn+V60um6GVF0ezsI4NCI8QAiM8BT7SQda3RDzIssPbU5U3GJo/5bbu+k+pOpCOUlGVve2VoO+AXMWizCA8U/RleN7fNE09yw7RdLfLssNp6J4zGfBHQBWMiTrJvGZ4LzZHiwJgf28CGwcovjAK6M8bjF30k5ChQ8YIi+YYuer8yae7XfORLiSTByakglURlVUZF7QgbLph9i/OBk83HribZh+B/n97vavrAUyTjbDE3TMsINsAfMSY1omweXuvqjndYI+XmiBM4nBPHlPsXEeaF9TE8LuIqWm5mnRKWa/0I31RkE+W19tFUx5mF3oHw6SvyVuUQVx0HWGIPKQIDAQAB";
     public static final String ALIPAYMP_SAAS_SEC_KEY_NFYYBYFY = "LdYnclVYOKdN5NRDbTDVyXbQiBQiysOQ";
 
     public static final String DOCTOR_AVATAR_URL = "http://ywt-image.oss-cn-shenzhen.aliyuncs.com/doctor/avatar/default.png?x-oss-process=image/resize,h_180,w_180";

+ 27 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/msg/SendRegMsgReq.java

@@ -0,0 +1,27 @@
+package com.ywt.alipaympapi.models.msg;
+
+import lombok.Data;
+
+/**
+ * @author Walker
+ * Created on 2022/9/28
+ */
+@Data
+public class SendRegMsgReq {
+    private Integer orderId;
+    private String orderNo;
+    private String orderCreateTime;
+    private String orderAmountStr;
+    private String tradeNo;
+    private String hospitalName;
+    private String deptName;
+    private String doctorName;
+    private String doctorId;
+    private String patientName;
+    private String regDate;
+    private String deptLoc;
+
+    private String alipayUid;
+
+    private Integer hospitalId;
+}

+ 61 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/controller/MsgController.java

@@ -0,0 +1,61 @@
+package com.ywt.alipaympapi.web.controller;
+
+import com.ywt.alipaympapi.core.utils.BizUtil;
+import com.ywt.alipaympapi.core.utils.Checker;
+import com.ywt.alipaympapi.models.BaseResponse2;
+import com.ywt.alipaympapi.models.auth.AlipayMpCfg;
+import com.ywt.alipaympapi.models.msg.SendRegMsgReq;
+import com.ywt.alipaympapi.service.AuthService;
+import com.ywt.alipaympapi.service.MessageService;
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.model.BaseResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author Walker
+ * Created on 2022/9/28
+ */
+@Slf4j
+@RestController("/msg")
+@RequestMapping({"/msg"})
+public class MsgController {
+    @Autowired
+    AuthService authService;
+
+    @Autowired
+    MessageService messageService;
+
+    @RequestMapping(value = {"/sendRegMsg"}, method = RequestMethod.POST)
+    public @ResponseBody BaseResponse sendRegMsg(@RequestBody SendRegMsgReq reqData) {
+        BaseResponse baseResponse = new BaseResponse();
+        try {
+            int orderId = Checker.getIntegerValue(reqData.getOrderId());
+            String orderNo = Checker.getStringValue(reqData.getOrderNo());
+            String orderCreateTime = Checker.getStringValue(reqData.getOrderCreateTime());
+            String orderAmountStr = Checker.getStringValue(reqData.getOrderAmountStr());
+            String tradeNo = Checker.getStringValue(reqData.getTradeNo());
+            String hospitalName = Checker.getStringValue(reqData.getHospitalName());
+            String deptName = Checker.getStringValue(reqData.getDeptName());
+            String doctorName = Checker.getStringValue(reqData.getDoctorName());
+            String doctorId = Checker.getStringValue(reqData.getDoctorId());
+            String patientName = Checker.getStringValue(reqData.getPatientName());
+            String regDate = Checker.getStringValue(reqData.getRegDate());
+            String deptLoc = Checker.getStringValue(reqData.getDeptLoc());
+            String alipayUid = Checker.getStringValue(reqData.getAlipayUid());
+            int hospitalId = Checker.getIntegerValue(reqData.getHospitalId());
+            int alipayMpTerminal = BizUtil.getAlipayMpTerminalIdByHospitalId(hospitalId);
+            AlipayMpCfg cfg = authService.getCfg(alipayMpTerminal);
+            String appId = cfg.getAppId();
+            messageService.sendRegMsg(orderId, orderNo, alipayUid, orderCreateTime, orderAmountStr, tradeNo, hospitalName, deptName,
+                    doctorName, doctorId, patientName, regDate, deptLoc, appId);
+            return baseResponse.succeed();
+        } catch (AppMessageException appMessageException) {
+            return baseResponse.error(appMessageException.getMessage());
+        } catch (Exception e) {
+            log.error("MsgController#sendRegMsg(reqData={} ):\n {}", reqData, e.getMessage(), e);
+            return baseResponse.error(e.getMessage());
+        }
+    }
+}