lighter 4 лет назад
Родитель
Сommit
6d3ecabe22

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>wxservice-server</artifactId>
-    <version>3.4</version>
+    <version>3.5</version>
     <name>wxservice-server</name>
     <description>vue3 web server</description>
 

+ 5 - 5
src/main/java/thyyxxk/wxservice_server/config/AsyncTaskConfig.java

@@ -15,14 +15,14 @@ public class AsyncTaskConfig {
     @Bean("asyncTask")
     public TaskExecutor taskExecutor() {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        executor.setCorePoolSize(60);
-        executor.setMaxPoolSize(100);
-        executor.setQueueCapacity(300);
-        executor.setKeepAliveSeconds(60);
+        executor.setCorePoolSize(16);
+        executor.setMaxPoolSize(64);
+        executor.setQueueCapacity(256);
+        executor.setKeepAliveSeconds(120);
         executor.setThreadNamePrefix("wx-async-task-");
         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
         executor.setWaitForTasksToCompleteOnShutdown(true);
-        executor.setWaitForTasksToCompleteOnShutdown(true);
+        executor.setAwaitTerminationSeconds(60);
         executor.initialize();
         return executor;
     }

+ 3 - 2
src/main/java/thyyxxk/wxservice_server/controller/InpatientController.java

@@ -9,6 +9,7 @@ import thyyxxk.wxservice_server.pojo.wxapi.WxPayOrderPojo;
 import thyyxxk.wxservice_server.service.InpatientService;
 
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
 
 @RestController
 @RequestMapping("/inpatient")
@@ -26,8 +27,8 @@ public class InpatientController {
     }
 
     @PostMapping("/getZyFees")
-    public ResultVo<Map<String, Object>> getZyFees(@RequestBody GetZyFeeParam param) {
-        return service.getZyFees(param);
+    public ResultVo<Map<String, Object>> getZyFees(@RequestBody GetZyFeeParam param) throws ExecutionException, InterruptedException {
+        return service.getZyFees(param).get();
     }
 
     @GetMapping("/getPrepaidHistory")

+ 7 - 5
src/main/java/thyyxxk/wxservice_server/controller/WxApiController.java

@@ -14,6 +14,7 @@ import thyyxxk.wxservice_server.utils.ResultVoUtil;
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
 
 @Slf4j
 @RestController
@@ -42,9 +43,10 @@ public class WxApiController {
 
     @PostMapping("/createPayOrder")
     public ResultVo<WxPayOrderPojo> createPayOrder(HttpServletRequest request,
-                                                   @RequestBody @Validated WeChatPayParam param) {
+                                                   @RequestBody @Validated WeChatPayParam param)
+            throws ExecutionException, InterruptedException {
         param.setClientIp(request.getRemoteAddr());
-        return service.createPayOrder(param);
+        return service.createPayOrder(param).get();
     }
 
     @GetMapping("/queryOrderState")
@@ -54,11 +56,11 @@ public class WxApiController {
 
     @PostMapping("/createOrderForMzGuideBill")
     public ResultVo<String> createOrderForMzGuideBill(@RequestBody @Validated MzGuideBillParam param) throws Exception {
-        return service.createOrderForMzGuideBill(param);
+        return service.createOrderForMzGuideBill(param).get();
     }
 
     @PostMapping("/pushMessage")
-    public ResultVo<List<Map<String, Object>>> pushMessage(@RequestBody @Validated PushMessageParam param) {
-        return service.pushMessage(param);
+    public ResultVo<List<Map<String, Object>>> pushMessage(@RequestBody @Validated PushMessageParam param) throws ExecutionException, InterruptedException {
+        return service.pushMessage(param).get();
     }
 }

+ 8 - 44
src/main/java/thyyxxk/wxservice_server/controller/WxPayNotifyController.java

@@ -1,70 +1,34 @@
 package thyyxxk.wxservice_server.controller;
 
-import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 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 thyyxxk.wxservice_server.dao.WxApiDao;
 import thyyxxk.wxservice_server.pojo.wxapi.PaymentNotify;
-import thyyxxk.wxservice_server.service.PayMzFeeService;
-import thyyxxk.wxservice_server.service.WxApiService;
-import thyyxxk.wxservice_server.utils.WxPaySignUtil;
+import thyyxxk.wxservice_server.service.WxPayNotifyService;
 
-import java.nio.charset.StandardCharsets;
 import java.security.GeneralSecurityException;
 
 @Slf4j
 @RestController
 @RequestMapping("/wxPayNotify")
 public class WxPayNotifyController {
-    private final WxApiDao dao;
-    private final PayMzFeeService payMzFeeService;
-    private final WxApiService wxApiService;
+    private final WxPayNotifyService service;
 
-    public WxPayNotifyController(WxApiDao dao, PayMzFeeService payMzFeeService, WxApiService wxApiService) {
-        this.dao = dao;
-        this.payMzFeeService = payMzFeeService;
-        this.wxApiService = wxApiService;
+    @Autowired
+    public WxPayNotifyController(WxPayNotifyService service) {
+        this.service = service;
     }
 
     @PostMapping("/notify")
     public void paymentNotify(@RequestBody PaymentNotify param) throws Exception {
-        log.info("微信支付通知: {}", param);
-        String nonce = param.getResource().getNonce();
-        String associatedData = param.getResource().getAssociated_data();
-        String ciphertext = param.getResource().getCiphertext();
-        ciphertext = WxPaySignUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
-                nonce.getBytes(StandardCharsets.UTF_8), ciphertext);
-        JSONObject cipherObj = JSONObject.parseObject(ciphertext);
-        log.info("微信支付通知解密:{}", ciphertext);
-        JSONObject payer = cipherObj.getJSONObject("payer");
-        String tradeNo = cipherObj.getString("out_trade_no");
-        String openId = payer.getString("openid");
-        dao.updatePayOpenId(tradeNo, openId);
-        String tradeState = cipherObj.getString("trade_state");
-        if (null == tradeState) {
-            wxApiService.queryOrderState(tradeNo);
-        } else {
-            if (tradeState.equals("SUCCESS")) {
-                String successTime = cipherObj.getString("success_time");
-                successTime = successTime.split("\\+")[0].replace("T", " ");
-                dao.updatePayStatusAndPayTime(tradeNo, 1, successTime);
-                if (!payMzFeeService.isTradeNoBetweenQuery(tradeNo)) {
-                    payMzFeeService.saveMzChargeInfo(tradeNo);
-                }
-            } else {
-                wxApiService.updatePayStatusByTradeState(tradeState, tradeNo);
-            }
-        }
+        service.paymentNotify(param);
     }
 
     @PostMapping("/notify2")
     public void paymentNotify2(@RequestBody PaymentNotify param) throws GeneralSecurityException {
-        log.info("微信支付回调2:{}", param);
-        String ciphertext = WxPaySignUtil.decryptToString(param.getResource().getAssociated_data().getBytes(StandardCharsets.UTF_8),
-                param.getResource().getNonce().getBytes(StandardCharsets.UTF_8), param.getResource().getCiphertext());
-        log.info("微信支付回调解密2:{}", ciphertext);
+        service.paymentNotify2(param);
     }
 }

+ 1 - 1
src/main/java/thyyxxk/wxservice_server/scheduled/GetWeChatAccessTokenTask.java

@@ -16,7 +16,7 @@ import thyyxxk.wxservice_server.utils.ResultVoUtil;
 @RestController
 @RequestMapping("/tokenSchedule")
 public class GetWeChatAccessTokenTask {
-    private static volatile boolean canScheduleRun = false;
+    private static volatile boolean canScheduleRun = true;
 
     @GetMapping("/start")
     public ResultVo<String> setCanScheduleRun(@RequestParam("value") boolean value) {

+ 1 - 1
src/main/java/thyyxxk/wxservice_server/scheduled/QueryOrderStateTask.java

@@ -67,9 +67,9 @@ public class QueryOrderStateTask {
             if (service.tradeNoBetweenQuery(order.getTradeNo())) {
                 continue;
             }
+            dao.incrementQueryTimesById(order.getId());
             ResultVo<String> stateResult = service.queryOrderState(order.getTradeNo()).get();
             String orderState = stateResult.getData();
-            dao.incrementQueryTimesById(order.getId());
             if (orderState.equals("SUCCESS")) {
                 if (order.getOrderType() == 1) {
                     if (!appointmentService.isTradeNoBetweenQuery(order.getTradeNo())) {

+ 0 - 1
src/main/java/thyyxxk/wxservice_server/service/AppointmentService.java

@@ -265,7 +265,6 @@ public class AppointmentService {
         JSONObject obj = new JSONObject();
         obj.put("patientId", patientId);
         HrgResponse hrgResponse = template.postForObject(ThmzUrls.GET_REGISTRATION_FOR_PAID, obj, HrgResponse.class);
-        log.info("获取门诊挂号记录列表结果:{}", hrgResponse);
         return ThmzUrls.getResultVoCompletableFuture(hrgResponse);
     }
 

+ 2 - 0
src/main/java/thyyxxk/wxservice_server/service/IdCardAnalyzeService.java

@@ -45,6 +45,7 @@ public class IdCardAnalyzeService {
 
     @Async("asyncTask")
     public CompletableFuture<ResultVo<IdCardAnalyzeResult>> readImage(UploadIdCardParam param) {
+        log.info("解析身份证图像:{}", param.getContent());
         AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
         client.setConnectionTimeoutInMillis(6000);
         client.setSocketTimeoutInMillis(60000);
@@ -56,6 +57,7 @@ public class IdCardAnalyzeService {
         String content = param.getContent().split("base64,")[1];
         file = Base64.getDecoder().decode(content);
         JSONObject res = client.idcard(file, idCardSide, options);
+        log.info("解析身份证图像结果:{}", res);
         if (1 == res.getInt("idcard_number_type")) {
             IdCardAnalyzeResult idCard = new IdCardAnalyzeResult();
             JSONObject result = res.getJSONObject("words_result");

+ 3 - 2
src/main/java/thyyxxk/wxservice_server/service/InpatientService.java

@@ -44,14 +44,15 @@ public class InpatientService {
         }
     }
 
-    public ResultVo<Map<String, Object>> getZyFees(GetZyFeeParam param) {
+    @Async("asyncTask")
+    public CompletableFuture<ResultVo<Map<String, Object>>> getZyFees(GetZyFeeParam param) {
         dao.receiveProjectFees(param.getInpatientNo(), param.getAdmissTimes());
         dao.receiveMedicineFees(param.getInpatientNo(), param.getAdmissTimes());
         Map<String, Object> map = new HashMap<>();
         List<ZyFee> fees = dao.getZyFees(param);
         map.put("fees", fees);
         map.put("totalCost", getZyTotalCost(fees));
-        return ResultVoUtil.success(map);
+        return CompletableFuture.completedFuture(ResultVoUtil.success(map));
     }
 
     private String getZyTotalCost(List<ZyFee> fees) {

+ 0 - 2
src/main/java/thyyxxk/wxservice_server/service/PayMzFeeService.java

@@ -119,7 +119,6 @@ public class PayMzFeeService {
         object.put("patientId", patientId);
         RestTemplate template = new RestTemplate();
         HrgResponse hrgResponse = template.postForObject(ThmzUrls.GET_MZ_CHARGE_DETAIL_FOR_PAID, object, HrgResponse.class);
-        log.info("获取门诊缴费记录列表结果:{}", hrgResponse);
         return ThmzUrls.getResultVoCompletableFuture(hrgResponse);
     }
 
@@ -127,7 +126,6 @@ public class PayMzFeeService {
         log.info("获取门诊缴费记录详细:{}", hisOrdNum);
         RestTemplate template = new RestTemplate();
         HrgResponse hrgResponse = template.getForObject(ThmzUrls.GET_SFJK_MZBRMX+hisOrdNum, HrgResponse.class);
-        log.info("获取门诊缴费记录详细结果:{}", hrgResponse);
         if (null == hrgResponse) {
             return ResultVoUtil.fail(ExceptionEnum.NETWORK_ERROR);
         }

+ 67 - 0
src/main/java/thyyxxk/wxservice_server/service/WxPayNotifyService.java

@@ -0,0 +1,67 @@
+package thyyxxk.wxservice_server.service;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import thyyxxk.wxservice_server.dao.WxApiDao;
+import thyyxxk.wxservice_server.pojo.wxapi.PaymentNotify;
+import thyyxxk.wxservice_server.utils.WxPaySignUtil;
+
+import java.nio.charset.StandardCharsets;
+import java.security.GeneralSecurityException;
+
+@Slf4j
+@Service
+public class WxPayNotifyService {
+    private final WxApiDao dao;
+    private final PayMzFeeService payMzFeeService;
+    private final WxApiService wxApiService;
+
+    @Autowired
+    public WxPayNotifyService(WxApiDao dao, PayMzFeeService payMzFeeService, WxApiService wxApiService) {
+        this.dao = dao;
+        this.payMzFeeService = payMzFeeService;
+        this.wxApiService = wxApiService;
+    }
+
+    @Async("asyncTask")
+    public void paymentNotify(PaymentNotify param) throws Exception {
+        log.info("微信支付通知: {}", param);
+        String nonce = param.getResource().getNonce();
+        String associatedData = param.getResource().getAssociated_data();
+        String ciphertext = param.getResource().getCiphertext();
+        ciphertext = WxPaySignUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),
+                nonce.getBytes(StandardCharsets.UTF_8), ciphertext);
+        JSONObject cipherObj = JSONObject.parseObject(ciphertext);
+        log.info("微信支付通知解密:{}", ciphertext);
+        JSONObject payer = cipherObj.getJSONObject("payer");
+        String tradeNo = cipherObj.getString("out_trade_no");
+        String openId = payer.getString("openid");
+        dao.updatePayOpenId(tradeNo, openId);
+        String tradeState = cipherObj.getString("trade_state");
+        if (null == tradeState) {
+            wxApiService.queryOrderState(tradeNo);
+        } else {
+            if (tradeState.equals("SUCCESS")) {
+                String successTime = cipherObj.getString("success_time");
+                successTime = successTime.split("\\+")[0].replace("T", " ");
+                dao.updatePayStatusAndPayTime(tradeNo, 1, successTime);
+                if (!payMzFeeService.isTradeNoBetweenQuery(tradeNo)) {
+                    payMzFeeService.saveMzChargeInfo(tradeNo);
+                }
+            } else {
+                wxApiService.updatePayStatusByTradeState(tradeState, tradeNo);
+            }
+        }
+    }
+
+    @Async("asyncTask")
+    public void paymentNotify2(PaymentNotify param) throws GeneralSecurityException {
+        log.info("微信支付回调2:{}", param);
+        String ciphertext = WxPaySignUtil.decryptToString(param.getResource().getAssociated_data().getBytes(StandardCharsets.UTF_8),
+                param.getResource().getNonce().getBytes(StandardCharsets.UTF_8), param.getResource().getCiphertext());
+        log.info("微信支付回调解密2:{}", ciphertext);
+    }
+}

+ 1 - 1
src/main/resources/application.yml

@@ -8,7 +8,7 @@ spring:
   thymeleaf:
     cache: false
   datasource:
-    url: jdbc:jtds:sqlserver://172.16.32.168:1433/thxyhisdb
+    url: jdbc:jtds:sqlserver://172.16.32.160:1433/thxyhisdb
     hikari:
       username: sa
       password: