Sfoglia il codice sorgente

对核酸检测的缴费给出不同返回

lighter 3 anni fa
parent
commit
aed5c3d169

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>wxservice-server</artifactId>
-    <version>7.6</version>
+    <version>7.7</version>
     <name>wxservice-server</name>
     <description>server for wxservice-web</description>
 

+ 1 - 1
src/main/java/thyyxxk/wxservice_server/controller/WxApiController.java

@@ -55,7 +55,7 @@ public class WxApiController {
     }
 
     @GetMapping("/queryOrderState")
-    public ResultVo<String> queryOrderState(@RequestParam("tradeNo") String tradeNo) throws Exception {
+    public ResultVo<Object> queryOrderState(@RequestParam("tradeNo") String tradeNo) throws Exception {
         return service.queryOrderState(tradeNo, QuerySource.INTERFACE);
     }
 

+ 4 - 0
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -80,4 +80,8 @@ public interface WxApiDao {
 
     @Select("select pay_status from t_wechat_pay_order with(nolock) where trade_no=#{tradeNo}")
     Integer selectOrderStatus(@Param("tradeNo") String tradeNo);
+
+    @Select("select count(1) from mz_yj_req where patient_id=#{patId} and times=#{times} and receipt_no=#{receipt} " +
+            "and order_code='003585' and req_doctor='99999'")
+    Integer selectSelfCovidExamReceiptCount(@Param("patId") String patId, @Param("times") String times, @Param("receipt") String receipt);
 }

+ 6 - 0
src/main/java/thyyxxk/wxservice_server/entity/ResultVo.java

@@ -20,6 +20,12 @@ public class ResultVo<T> {
         this.data = data;
     }
 
+    public ResultVo(String message, T data) {
+        this.code = ExceptionEnum.SUCCESS.getCode();
+        this.message = message;
+        this.data = data;
+    }
+
     public ResultVo(ExceptionEnum exceptionEnum) {
         this.code = exceptionEnum.getCode();
         this.message = exceptionEnum.getMessage();

+ 26 - 5
src/main/java/thyyxxk/wxservice_server/service/SavePayResultService.java

@@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import thyyxxk.wxservice_server.config.exception.ExceptionEnum;
+import thyyxxk.wxservice_server.constant.QuerySource;
 import thyyxxk.wxservice_server.dao.InpatientDao;
 import thyyxxk.wxservice_server.dao.WxApiDao;
 import thyyxxk.wxservice_server.entity.ResultVo;
@@ -22,6 +23,7 @@ import thyyxxk.wxservice_server.entity.wxapi.WxPayOrder;
 import thyyxxk.wxservice_server.utils.DateUtil;
 import thyyxxk.wxservice_server.utils.DecimalTool;
 import thyyxxk.wxservice_server.utils.ResultVoUtil;
+import thyyxxk.wxservice_server.utils.StringUtil;
 
 import java.util.Date;
 
@@ -68,7 +70,7 @@ public class SavePayResultService {
         return hasSaved;
     }
 
-    public ResultVo<String> saveAppointment(WxPayOrder order) {
+    public ResultVo<Object> saveAppointment(WxPayOrder order) {
         int hasSaved = queryAppointmentSaveStatus(order.getTradeNo(), order.getSerialNo(),
                 order.getTotalFee().toPlainString(), order.getPayDatetime());
         if (hasSaved == 0) {
@@ -134,7 +136,7 @@ public class SavePayResultService {
         return hasSaved;
     }
 
-    public ResultVo<String> saveMzChargeInfo(WxPayOrder order) {
+    public ResultVo<Object> saveMzChargeInfo(WxPayOrder order, QuerySource source, String successTime) {
         int hasSaved = queryMzPaySaveStatus(order.getHisOrdNum(), order.getTradeNo(),
                 order.getSerialNo(), order.getTotalFee().toPlainString(), order.getPayDatetime());
         if (hasSaved == 0) {
@@ -145,7 +147,6 @@ public class SavePayResultService {
             log.info("订单号:{} 的门诊缴费信息已保存,无需再次保存。", order.getTradeNo());
             return ResultVoUtil.success("保存门诊缴费信息成功。");
         }
-        String payTime = DateUtil.formatDatetime(new Date(), "yyyy-MM-dd HH:mm:ss");
         JSONObject hrgParam = new JSONObject();
         hrgParam.put("patCardType", 1);
         hrgParam.put("patCardNo", order.getPatientId());
@@ -154,13 +155,23 @@ public class SavePayResultService {
         hrgParam.put("payMode", "WX");
         hrgParam.put("payAmt", DecimalTool.moneyYuanToFen(order.getTotalFee()));
         hrgParam.put("agtOrdNum", order.getSerialNo());
-        hrgParam.put("payTime", payTime);
+        hrgParam.put("payTime", successTime);
         RestTemplate template = new RestTemplate();
         SaveMzFeeResponse saveMzFeeResponse = template.postForObject(hrgApiUrl + "/payChargeDetailFormHaiCi",
                 hrgParam, SaveMzFeeResponse.class);
         log.info("保存门诊缴费信息:\n参数:{},\n结果:{}", hrgParam, saveMzFeeResponse);
         if (saveMzFeeResponse != null && saveMzFeeResponse.getResultCode() == 0) {
             dao.updateSuccessHisStatus(order.getTradeNo());
+            if (source == QuerySource.INTERFACE) {
+                String hisOrdNum = order.getHisOrdNum();
+                    String[] hsrdnms = hisOrdNum.split("_");
+                    Integer isCovidExam = dao.selectSelfCovidExamReceiptCount(hsrdnms[0], hsrdnms[1], hsrdnms[2]);
+                    if (null != isCovidExam && isCovidExam > 0) {
+                        order.setBody("新冠肺炎核酸检测");
+                        order.setPayDatetime(DateUtil.parseDatetime(successTime));
+                        return ResultVoUtil.success("showBill", order);
+                    }
+            }
             return ResultVoUtil.success("保存门诊缴费信息成功。");
         }
         hasSaved = queryMzPaySaveStatus(order.getHisOrdNum(), order.getTradeNo(),
@@ -170,6 +181,16 @@ public class SavePayResultService {
             return ResultVoUtil.fail(ExceptionEnum.NETWORK_ERROR, "门诊缴费信息查询失败,将于3分钟后重新发起查询。");
         }
         if (hasSaved == 1) {
+            if (source == QuerySource.INTERFACE) {
+                String hisOrdNum = order.getHisOrdNum();
+                String[] hsrdnms = hisOrdNum.split("_");
+                Integer isCovidExam = dao.selectSelfCovidExamReceiptCount(hsrdnms[0], hsrdnms[1], hsrdnms[2]);
+                if (null != isCovidExam && isCovidExam > 0) {
+                    order.setBody("新冠肺炎核酸检测");
+                    order.setPayDatetime(DateUtil.parseDatetime(successTime));
+                    return ResultVoUtil.success("showBill", order);
+                }
+            }
             return ResultVoUtil.success("保存门诊缴费信息成功。");
         }
         ResultVo<String> refund = refundService.autoRefund(order.getTradeNo(), "保存门诊缴费信息失败,自动退款。");
@@ -182,7 +203,7 @@ public class SavePayResultService {
         return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "保存门诊缴费信息失败,自动退款失败,请联系服务中心进行退款。");
     }
 
-    public ResultVo<String> saveZyYjjInfo(WxPayOrder order) {
+    public ResultVo<Object> saveZyYjjInfo(WxPayOrder order) {
         int savedCount = yjjDao.selectSavedCount(order.getTradeNo(), order.getSerialNo());
         if (savedCount > 0) {
             log.info("订单号:{} 的住院预交金信息已保存,无需再次保存。", order.getTradeNo());

+ 13 - 2
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -183,7 +183,7 @@ public class WxApiService {
         }
     }
 
-    public ResultVo<String> queryOrderState(String tradeNo, QuerySource source) throws Exception {
+    public ResultVo<Object> queryOrderState(String tradeNo, QuerySource source) throws Exception {
         while (TradeVectorUtil.tradeNoBeingQuery(tradeNo)) {
             log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
             TimeUnit.SECONDS.sleep(3);
@@ -207,6 +207,17 @@ public class WxApiService {
                     return ResultVoUtil.success("保存挂号信息成功。");
                 } else {
                     log.info("订单号:{} 的门诊缴费信息已保存,无需再次查询订单状态。", order.getTradeNo());
+                    if (source == QuerySource.INTERFACE) {
+                        String hisOrdNum = order.getHisOrdNum();
+                        if (StringUtil.notBlank(hisOrdNum)) {
+                            String[] hsrdnms = hisOrdNum.split("_");
+                            Integer isCovidExam = dao.selectSelfCovidExamReceiptCount(hsrdnms[0], hsrdnms[1], hsrdnms[2]);
+                            if (null != isCovidExam && isCovidExam > 0) {
+                                order.setBody("新冠肺炎核酸检测");
+                                return ResultVoUtil.success("showBill", order);
+                            }
+                        }
+                    }
                     return ResultVoUtil.success("保存门诊缴费信息成功。");
                 }
             }
@@ -221,7 +232,7 @@ public class WxApiService {
                     case REGISTRATION:
                         return savePayResultService.saveAppointment(order);
                     case OUTPATIENT:
-                        return savePayResultService.saveMzChargeInfo(order);
+                        return savePayResultService.saveMzChargeInfo(order, source, successTime);
                     case INPATIENT_PRE_PAY:
                         return savePayResultService.saveZyYjjInfo(order);
                     case SELF_HELP_MACHINE:

+ 10 - 0
src/main/java/thyyxxk/wxservice_server/utils/DateUtil.java

@@ -1,6 +1,7 @@
 package thyyxxk.wxservice_server.utils;
 
 import java.text.DateFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -17,6 +18,15 @@ public class DateUtil {
         return sdf.format(date);
     }
 
+    public static Date parseDatetime(String source) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            return df.parse(source);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
     public static String[] getDatesInOneWeek() {
         String[] result = new String[7];
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

+ 5 - 0
src/main/java/thyyxxk/wxservice_server/utils/ResultVoUtil.java

@@ -16,6 +16,11 @@ public class ResultVoUtil {
         return new ResultVo<>(data);
     }
 
+    public static <T> ResultVo<T> success(String message, T data) {
+        return new ResultVo<>(message, data);
+    }
+
+
     public static <T> ResultVo<T> fail(ExceptionEnum exceptionEnum) {
         return new ResultVo<>(exceptionEnum);
     }