Browse Source

一些小改动

lighter 4 months ago
parent
commit
23a18f353c

+ 38 - 11
src/main/java/thyyxxk/webserver/api/dpcc/DpccController.java

@@ -21,12 +21,14 @@ import thyyxxk.webserver.entity.examinations.inspections.request.PatType;
 import thyyxxk.webserver.entity.examinations.inspections.request.ReportIndexInquiry;
 import thyyxxk.webserver.factory.examreport.ExamReportService;
 import thyyxxk.webserver.factory.examreport.model.*;
+import thyyxxk.webserver.service.externalhttp.WebSocketService;
 import thyyxxk.webserver.utils.DateUtil;
 import thyyxxk.webserver.utils.StringUtil;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @RestController
@@ -38,10 +40,12 @@ public class DpccController {
     private static final String DRUG_URL = "https://manage.national-dpcc.com/api/sino-common/access-client/uploadHisDrugData";
 
     private final DpccDao dao;
+    private final WebSocketService socketService;
 
     @Autowired
-    public DpccController(DpccDao dao) {
+    public DpccController(DpccDao dao, WebSocketService socketService) {
         this.dao = dao;
+        this.socketService = socketService;
     }
 
     @PassToken
@@ -93,15 +97,37 @@ public class DpccController {
     }
 
     @PassToken
-    @GetMapping("/uploadMzYp")
-    public String uploadMzYp(@RequestParam("token") String token,
+    @GetMapping("/uploadMzDpcc")
+    public String uploadMzYp(@RequestParam("pat") String pat,
                              @RequestParam("day") Integer day) throws Exception {
-        log.info("DPCC上传请求:{}", day);
-        day = null == day ? 0 : day;
-        List<PatientInfo> outpatientList = dao.getOutpatientList2(day);
+        String token = socketService.getDpccToken();
+        ReportIndexInquiry inquiry = getReportIndexInquiry();
+        log.info("DPCC上传请求:{}, {}", pat, day);
+        List<PatientInfo> outpatientList;
+        if (pat.contains("_")) {
+            String[] patinfo = pat.split("_");
+            String patientId = patinfo[0];
+            int times = Integer.parseInt(patinfo[1]);
+            String socialNo = dao.getSocialNo(patientId);
+            PatientInfo pi = new PatientInfo();
+            pi.setPatNo(patientId);
+            pi.setTimes(times);
+            pi.setSource("1");
+            pi.setIdCard(socialNo);
+            outpatientList = new ArrayList<>();
+            outpatientList.add(pi);
+            Map<String, String> map = dao.getStartAndEndDate(patientId, times);
+            if (null != map) {
+                inquiry.setReqStartTime(map.get("start"));
+                inquiry.setReqEndTime(map.get("endd"));
+            }
+        } else {
+            outpatientList = dao.getOutpatientList2(day);
+        }
         if (outpatientList.isEmpty()) {
             return "没有需要上传的数据。";
         }
+        uploadOutpatientCheck(outpatientList,inquiry,token);
         uploadOutpatientDrug(outpatientList, token);
         return "OK";
     }
@@ -151,7 +177,7 @@ public class DpccController {
         }
         Date now = new Date();
         long diff = now.getTime() - auditTime.getTime();
-        return diff / 1000 / 60 <= 600;
+        return diff / 1000 / 60 / 60 <= 72;
     }
 
     private void queryCheckAndUpload(ReportIndexInquiry inquiry, PatientInfo patient, String token) throws Exception {
@@ -175,13 +201,13 @@ public class DpccController {
                     }
                     checkResultBatches.add(getMedicalCheckResult(patient, item));
                     if (checkResultBatches.size() == 100) {
-                        executeUploadChecks(checkResultBatches, token);
+                        executeUploadChecks(checkResultBatches, token, patient.getPatNo(), patient.getTimes());
                     }
                 }
             }
         }
         if (!checkResultBatches.isEmpty()) {
-            executeUploadChecks(checkResultBatches, token);
+            executeUploadChecks(checkResultBatches, token, patient.getPatNo(), patient.getTimes());
         }
     }
 
@@ -242,9 +268,10 @@ public class DpccController {
         }
     }
 
-    private void executeUploadChecks(List<MedicalCheckResult> checkBatches, String token) throws Exception {
+    private void executeUploadChecks(List<MedicalCheckResult> checkBatches,
+                                     String token, String patNo, int times) throws Exception {
         String json = JSON.toJSONString(checkBatches);
-        log.info("DPCC上传检验明文:{}", json);
+        log.info("DPCC上传检验:{}, {}", patNo, times);
         uploadToSino(DpccEncryptUtil.encrypt(json), Type.CHECK, token);
     }
 

+ 12 - 2
src/main/java/thyyxxk/webserver/dao/his/api/DpccDao.java

@@ -7,6 +7,7 @@ import thyyxxk.webserver.api.dpcc.model.MedicalPrescription;
 import thyyxxk.webserver.api.dpcc.model.PatientInfo;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface DpccDao {
@@ -50,8 +51,8 @@ public interface DpccDao {
             "from zy_detail_charge a,yz_act_order b " +
             "where a.inpatient_no=#{patNo} and a.admiss_times=#{times} " +
             "and a.charge_code in ('BILL01','BILL02','BILL28') " +
-            "and datediff(minute,a.charge_date,getdate())>=0 " +
-            "and datediff(minute,a.charge_date,getdate())<=60 " +
+            "and a.charge_date<=getdate()" +
+            "and datediff(minute,a.charge_date,getdate())<=180 " +
             "and a.order_no=b.act_order_no")
     List<MedicalPrescription> getInpatientDrugs(PatientInfo patient);
     
@@ -77,4 +78,13 @@ public interface DpccDao {
     @Update("update mz_visit_table set dpcc_upload_flag=1 where " +
             "patient_id=#{patNo} and times=#{times}")
     void updateDpccFlag(String patNo, int times);
+
+    @Select("select rtrim(social_no) from mz_patient_mi where patient_id=#{patNo}")
+    String getSocialNo(String patNo);
+
+    @Select("select " +
+            "start=convert(varchar(10),visit_date,21)+' 00:00:00', " +
+            "endd=convert(varchar(10),visit_date+1,21)+' 23:59:59' " +
+            "from mz_visit_table where patient_id=#{patNo} and times=#{times}")
+    Map<String, String> getStartAndEndDate(String patNo, int times);
 }

+ 3 - 0
src/main/java/thyyxxk/webserver/service/externalhttp/WebSocketService.java

@@ -55,6 +55,9 @@ public interface WebSocketService {
     @Get("/getWeComSendFileToken")
     String getWeComSendFileToken();
 
+    @Get("/getDpccToken")
+    String getDpccToken();
+
     @Get("/getLisDockSign")
     String[] getLisDockSign();
 

+ 0 - 6
src/main/java/thyyxxk/webserver/service/inpatient/casefrontsheet/JieShouHuiZhenService.java

@@ -16,18 +16,12 @@ import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.dao.his.inpatient.casefrontsheet.JieShouHuiZhenDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.casefrontsheet.JieShouHuiZhenPojo;
-import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
 import thyyxxk.webserver.entity.executeItem.YzZyPatientFee;
 import thyyxxk.webserver.entity.login.UserInfo;
 import thyyxxk.webserver.service.PublicServer;
 import thyyxxk.webserver.service.redislike.RedisLikeService;
-import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrServer;
 import thyyxxk.webserver.utils.*;
 
-import javax.annotation.PostConstruct;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 

+ 10 - 6
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/emr/EmrServer.java

@@ -84,12 +84,16 @@ public class EmrServer {
     @PostConstruct
     @Scheduled(cron = "* * */12 * * ?")
     public void token() {
-        String URL = EMR_URL.replace("/emr/runtime/api/v1", "");
-        String result = HttpRequest.post(URL + "/emr/runtime/api/v1/oauth/token")
-                .header("Authorization", "Basic " + Base64.encode("user:dc71ccfec05b799ad52360c48d504019"))
-                .form("grant_type", "client_credentials").execute().body();
-        JSONObject data = JSONObject.parseObject(result);
-        emrToken = data.getString("access_token");
+        try {
+            String URL = EMR_URL.replace("/emr/runtime/api/v1", "");
+            String result = HttpRequest.post(URL + "/emr/runtime/api/v1/oauth/token")
+                    .header("Authorization", "Basic " + Base64.encode("user:dc71ccfec05b799ad52360c48d504019"))
+                    .form("grant_type", "client_credentials").execute().body();
+            JSONObject data = JSONObject.parseObject(result);
+            emrToken = data.getString("access_token");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
     }
 
     public EmrServer(EmrPatientDao dao,

+ 178 - 0
src/main/resources/application-pnfy.yml

@@ -0,0 +1,178 @@
+server:
+  port: 8706
+  tomcat:
+    uri-encoding: utf-8
+    threads:
+      min-spare: 20
+      max: 800
+    accept-count: 200
+    max-connections: 10000
+spring:
+  thymeleaf:
+    cache: false
+  datasource:
+    dynamic:
+      primary: his
+      strict: false
+      datasource:
+        his:
+          url: "jdbc:sqlserver://172.16.20.117:1433;databaseName=thxyhisdb"
+          username: "sa"
+          password: "Tzsoft@2024"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+        lis:
+          url: "jdbc:sqlserver://172.16.20.117:1433;databaseName=thxyhisdb"
+          username: "sa"
+          password: "Tzsoft@2024"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+        adicon:
+          url: "jdbc:sqlserver://172.16.20.117:1433;databaseName=thxyhisdb"
+          username: "sa"
+          password: "Tzsoft@2024"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+    druid:
+      #type: com.alibaba.druid.pool.DruidDataSource
+      #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
+      initial-size: 40
+      #最大连接池数量
+      max-active: 100
+      #最小连接池数量
+      min-idle: 40
+      #获取连接时最大等待时间,单位毫秒
+      max-wait: 60000
+      #使用非公平锁。
+      use-unfair-lock: true
+      #用来检测连接是否有效的sql,要求是一个查询语句。
+      validation-query: SELECT 1
+      #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+      test-while-idle: true
+      #申请连接时执行validationQuery检测连接是否有效,
+      test-on-borrow: true
+      #归还连接时执行validationQuery检测连接是否有效,
+      test-on-return: false
+      #Destroy线程会检测连接的间隔时间,testWhileIdle的判断依据,详细看testWhileIdle属性的说明
+      time-between-eviction-runs-millis: 60000
+      #配置一个连接在池中最小生存的时间,单位是毫秒
+      min-evictable-idle-time-millis: 300000
+      #监控统计用的filter:stat  日志用的filter:log4j    防御sql注入的filter:wall
+      filters: stat
+      #是否缓存preparedStatement,也就是PSCache,在mysql5.5以下的版本中没有PSCache功能,建议关闭掉
+      pool-prepared-statements: false
+      #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
+      max-pool-prepared-statement-per-connection-size: 200
+      #对于长时间不使用的连接强制关闭
+      remove-abandoned: true
+      #数据库链接超过180秒开始关闭空闲连接 秒为单位
+      remove-abandoned-timeout: 180
+      #将当前关闭动作记录到日志  此配置项会影响性能,只在排查的时候打开,系统运行时最好关闭。
+      log-abandoned: true
+  autoconfigure:
+    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置
+  jackson:
+    time-zone: Asia/Shanghai
+    date-format: yyyy-MM-dd HH:mm:ss
+  mvc:
+    format:
+      date: yyyy-MM-dd
+      date-time: yyyy-MM-dd HH:mm:ss
+  redis:
+    host: 172.16.20.115
+    port: 6379
+    database: 0
+    password: thyy@2018
+mybatis-plus:
+  configuration:
+    map-underscore-to-camel-case: true
+logging:
+  level:
+    thyyxxk.webserver.dao: info
+forest:
+  timeout: 0
+  read-timeout: 0
+  log-enabled: true
+  log-request: true
+  log-response-status: true
+  connect-timeout: 1500
+  variables:
+    socketCenter: http://localhost:8707/socketApi
+    emrUrl: "http://172.16.20.115:8001/emr/runtime/api/v1"
+
+management:
+  server:
+    port: 9091
+  endpoints:
+    web:
+      base-path: /actuator
+      exposure:
+        include: '*'
+  metrics:
+    export:
+      simple:
+        enabled: true
+      jmx:
+        enabled: true
+      prometheus:
+        enabled: true
+    distribution:
+      percentiles-histogram:
+        http:
+          server:
+            requests: false
+      minimum-expected-value:
+        http:
+          server:
+            requests: 20ms
+      maximum-expected-value:
+        http:
+          server:
+            requests: 200ms
+  endpoint:
+    metrics:
+      enabled: true
+    health:
+      show-details: always
+      probes:
+        enabled: true
+    prometheus:
+      enabled: true
+
+execute-scheduled: true
+is-prod: true
+
+si-api-url: http://dms.hun.hsip.gov.cn/isp-api/powercsb/1101
+si-access-key: 04eMGRg7beAO6vqwrZiLacV8Uy3jNn7QGDUcBO
+si-secret-key: SK3Oip3a2R3NLz2xm58Mpmi69oFu96KrdKNRKglN
+si-zy-fee-url: http://172.16.20.115:1000
+si-mz-fee-url: http://172.16.20.115:1100/mzFee
+si-injury-fee-url: http://172.16.20.115:2100/siInjury
+si-injury-systm-url: http://172.16.20.115:2000/siInjury
+thmz-api-url: http://172.16.20.115:81/thmz/api/v1
+appletThmzUrl: http://172.16.20.115:81/thmz
+
+thyy:
+  ca:
+    sign-authentication:
+      app-code: ywxt
+      app-pwd: 12345678
+      cert: "MIIB9TCCAZigAwIBAgIOAV53M9Vp5AY8j5DL1EUwDAYIKoEcz1UBg3UFADA+MQswCQYDVQQGEwJDTjEUMBIGA1UEAwwLU00yIFJPT1QgQ0ExCzAJBgNVBAgMAlNIMQwwCgYDVQQKDANoYWgwHhcNMjMwMzA5MDY1MzQyWhcNMjUwMzA5MDY1MzQyWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCU0gxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARzaWduMQ0wCwYDVQQLDARzaWduMRIwEAYDVQQDDAlzaWduX3Rlc3QwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAT9dIroxCUB5oZvxl2Irq3OoAtbWvqa5tNvw854VGmgJxfuuTfgBtcVdEHkbXsSvRNdj9Uq2ld2XFjoaIyHaC1Co10wWzAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFCE77Si3YBk/u4qjZMQAJNHBvWKUMB0GA1UdDgQWBBSjsmDHccu255pXS76XpNE3LL7f7DALBgNVHQ8EBAMCB4AwDAYIKoEcz1UBg3UFAANJADBGAiEAkECq7DAZiONAwDblXKigoyGkmjePKsS2L4noqg/wQuwCIQCGnRJITQ+ErYg/l+YNrAWgY1UtoQnsM8A4XIsUynzu7Q=="
+      sign-aig: "SM3withSM2"
+      url: "http://103.36.136.173:7845/services/CipherServices"
+    mobile-app:
+      app-id: 3
+      url: https://device.mkeysec.net/openapi
+      privatekey: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHwpN7M6Xhja7sfaB0K3y2MBd4xLfhOF64mv0mtEZfqaWvphadXAimnfru8Y4sf0wDb9LYjacXRTkRMhZaZq5ZRCNFB+G8HnNb1y9Vr+7VqvT3wlRV0n+Jar+rEFguW293kH6wOLPQVNkmL4xEy/ecI81gfqR0wSHbyVWaBJ4o7w8qYVFc3is0vswl/bpKE2/4ngjEGDNuYdS0oXZR1TOjEEtNPEws9944yHyfYnbJgbTXkO78hlRUUu4tA8UnSjLrO0m0I6aQkuibPHKjMj247q2629L5IQpn+mGpgxmqUQmzSlKf5wg3uE0Ss1Bea8/AneSDBx2tzjsEs2qKn8cfAgMBAAECggEAM18GbaVCjNIPMf/rmmnmPA6AoztVFU0+Un6bcmzfAE3ymz+u6QatY1b+YDJZiS72NYq37yfS5XRVPtOEL9sQ+EhXTETKP2QKZONNTxBOwN166tHHFd6cUgRp2LJLm+cPi9/KgKZELH4e2Vs+qb3AyX2mtm/VjTSTulY6JRjAPF6EIyQqiLIinyw9TUXNqBs1kT5ma/50YPO2pSXWiOcXX9WWL7ECCNLCfKVRCKlEuaHuIozDuuwGHBrALAdqjWxrj0IMywCZIoVbBke+U7+KCKhKsc5eqsUJu8YfoVR3hxVhUHjlqIFbuAlLvrMqYZd3HgT1O3RSp/eOyXRMGsW0kQKBgQDHvA1p9Qv7K62WYOwwHEIg5Qym5uK4ClhvWUUQPE63bhzrkLkfNlDEOFpsnIk1EonvJHbfzW4pKR36AjbGBv9xxdgntkee+35pN8d8MT2eNMyHdsF6TDToKqPmqKHcxXmnpOCtC9Cam1wjBU+e7gdSoAeNWJeKUzg79HN7M7uD6QKBgQCuAPkd1G7GHkhMiXur1Td6nTmzwz9zPeHHycAE2r1epH22VUfKTu/oDgmky/VKO3JJuc1txt2bHs90iTLRDmcMy9l+6Ix9UJzmanAIRzhAVgmwz1liUNLbnJGl0YxCq0qlQA3FUUmOP36C2cvHcJm/hRIPG2O2nT1DLKsHvgU1xwKBgGL6mPciHU7aBUrZOxJYXpjoiQ2Iq1+imNKNPYFfMW8LHT/LV0HVa87hUkYyiHgJeNtOia48olO5cYZ8ZGJcA2iBL632UaXCYZGIt82epTdqWNTkj9qoOyu2PcTHWncKUVA3j7ORgE2tocolDqDmujBC55svBOHifaKQcE3khA9JAoGAf/fLPjrrNN00gsVhpJ/sa0qSEzh2w4QxNkOT6n4MYzxKD/xsDcc7/MfGI+K0BOHvTXVONXvZoqloHOaB7unOs8R/sivIlqjgmzyQJCZsojQkcFot/HZAfK6LFw4jPyzGev2+ou0DUZA0tHsEuSqAiC+PdnjIPpcpZOvG5KzFHCUCgYEAuLEUmIzQ7ex85Ulag2qfGj0CDMAq1R/rmwrk+1d2aP9GY890HwcyN5dlZGy8/Z/lMlzOGo1kDhhhwOfbiYSit00FdLChVux0wh8nyqqB4IuTy0S0ZeTNjWnjftpNaPXdHh5mpUXXKygCp3UT65HC6coaqoD3Vv8jE32svsz/uPE="
+    timestamp-authentication:
+      url: http://103.36.136.173:7845/services/TimeStampServices
+      app-code: ywxt
+      app-pwd: 12345678
+    HBoard-sign:
+      api-key: "00000"
+      api-secret: "00000000"
+      url: http://47.100.199.230:8080/pdfsign_hw
+      return-url: "https://emr.hnthyy.cn:9222/caTest/thyyca/hBoardSignReturnUrl"
+  archive:
+    path: "Z:\\"
+  other:
+    mobile-address: "https://emr.hnthyy.cn:8081"
+    mobile-agentid: 1000051
+