浏览代码

优化传染病上报和挂号功能

hurugang 2 年之前
父节点
当前提交
5c154f90af

+ 4 - 1
src/main/java/cn/hnthyy/thmz/ThmzApplication.java

@@ -5,11 +5,14 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
 
 import javax.xml.ws.Endpoint;
 import java.net.InetAddress;
-
+//@ComponentScan(basePackages = {"cn.hnthyy.thmz.common.datasource"})
+//@ServletComponentScan
 //@EnableDiscoveryClient
 @SpringBootApplication
 @Slf4j

+ 50 - 0
src/main/java/cn/hnthyy/thmz/common/datasource/DruidConfiguration.java

@@ -0,0 +1,50 @@
+//package cn.hnthyy.thmz.common.datasource;
+//
+//import com.alibaba.druid.support.http.StatViewServlet;
+//import com.alibaba.druid.support.http.WebStatFilter;
+//import org.springframework.boot.web.servlet.FilterRegistrationBean;
+//import org.springframework.boot.web.servlet.ServletRegistrationBean;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+///**
+// * 这样的方式不需要添加注解:@ServletComponentScan
+// * Created by winner_0715 on 2017/4/19.
+// */
+//@Configuration
+//public class DruidConfiguration {
+//  /**
+//   * 注册一个StatViewServlet
+//   *
+//   * @return
+//   */
+//  @Bean
+//  public ServletRegistrationBean DruidStatViewServle2() {
+//    //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
+//    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid2/*");
+//    //添加初始化参数:initParams
+//    //白名单:
+//    servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
+//    //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
+//    servletRegistrationBean.addInitParameter("deny", "192.168.1.73");
+//    //登录查看信息的账号密码.
+//    servletRegistrationBean.addInitParameter("loginUsername", "admin");
+//    servletRegistrationBean.addInitParameter("loginPassword", "123456");
+//    //是否能够重置数据.
+//    servletRegistrationBean.addInitParameter("resetEnable", "false");
+//    return servletRegistrationBean;
+//  }
+//  /**
+//   * 注册一个:filterRegistrationBean
+//   *
+//   * @return
+//   */
+//  @Bean
+//  public FilterRegistrationBean druidStatFilter2() {
+//    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
+//    //添加过滤规则.
+//    filterRegistrationBean.addUrlPatterns("/*");
+//    //添加不需要忽略的格式信息.
+//    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*");
+//    return filterRegistrationBean;
+//  }
+//}

+ 3 - 0
src/main/java/cn/hnthyy/thmz/common/datasource/DruidHisDataSource.java

@@ -61,6 +61,8 @@ public class DruidHisDataSource {
     private Integer removeAbandonedTimeout;
     @Value("${spring.datasource.durid.log-abandoned}")
     private Boolean logAbandoned;
+    @Value("${spring.datasource.durid.use-unfair-lock}")
+    private Boolean useUnfairLock;
     /**
      * 多数据源工程,这是导致这个配置没有生效的原因,因为他不知道为哪个数据源开启驼峰命名
      * 所以我们需要在配置多数据源的文件中,单独加入配置,(其他配置也是如此,只要涉及到多数据源的,都需要给每一个数据源去配置)
@@ -106,6 +108,7 @@ public class DruidHisDataSource {
         dataSource.setRemoveAbandoned(removeAbandoned);
         dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
         dataSource.setLogAbandoned(logAbandoned);
+        dataSource.setUseUnfairLock(useUnfairLock);
         return dataSource;
     }
 

+ 3 - 1
src/main/java/cn/hnthyy/thmz/common/datasource/DruidLisDataSource.java

@@ -60,7 +60,8 @@ public class DruidLisDataSource {
     private Integer removeAbandonedTimeout;
     @Value("${spring.datasource.durid.log-abandoned}")
     private Boolean logAbandoned;
-
+    @Value("${spring.datasource.durid.use-unfair-lock}")
+    private Boolean useUnfairLock;
     /**
      * 多数据源工程,这是导致这个配置没有生效的原因,因为他不知道为哪个数据源开启驼峰命名
      * 所以我们需要在配置多数据源的文件中,单独加入配置,(其他配置也是如此,只要涉及到多数据源的,都需要给每一个数据源去配置)
@@ -102,6 +103,7 @@ public class DruidLisDataSource {
         dataSource.setRemoveAbandoned(removeAbandoned);
         dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
         dataSource.setLogAbandoned(logAbandoned);
+        dataSource.setUseUnfairLock(useUnfairLock);
         return dataSource;
     }
 

+ 21 - 0
src/main/java/cn/hnthyy/thmz/common/datasource/DruidStatFilter.java

@@ -0,0 +1,21 @@
+//package cn.hnthyy.thmz.common.datasource;
+//
+//import com.alibaba.druid.support.http.WebStatFilter;
+//
+//import javax.servlet.annotation.WebFilter;
+//import javax.servlet.annotation.WebInitParam;
+//
+///**
+// * @author : harara
+// * @version : 2.0
+// * @date : 2020/6/17 14:46
+// */
+//@WebFilter(filterName = "druidWebStatFilter",
+//        urlPatterns = "/*", //拦截哪些请求
+//        initParams={
+//            @WebInitParam(name = "exclusions",value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") //排查拦截哪些请求
+//        }
+//)
+//public class DruidStatFilter extends WebStatFilter{
+//
+//}

+ 24 - 0
src/main/java/cn/hnthyy/thmz/common/datasource/DruidStatViewServlet.java

@@ -0,0 +1,24 @@
+//package cn.hnthyy.thmz.common.datasource;
+//
+//import com.alibaba.druid.support.http.StatViewServlet;
+//
+//import javax.servlet.annotation.WebInitParam;
+//import javax.servlet.annotation.WebServlet;
+//
+///**
+// * @author : harara
+// * @version : 1.0
+// * @date : 2020/6/17 14:51
+// */
+//@WebServlet(urlPatterns = {"/druid/*"},
+//        initParams = {
+//        @WebInitParam(name = "loginUsername",value = "admin"), //允许登录的用户名
+//        @WebInitParam(name = "loginPassword",value = "123456"), //允许登录的密码
+//        @WebInitParam(name = "allow",value = ""), //允许哪些ip访问,没有配置或者为空,则允许所有访问
+//        @WebInitParam(name = "deny",value = "192.169.1.111"),//不允许哪些ip访问(存在共同时,deny优于allow)
+//        @WebInitParam(name = "resetEnable",value = "true") //禁止监控管理页面的"Reset All"按钮功能
+//}
+//)
+//public class DruidStatViewServlet extends StatViewServlet {
+//
+//}

+ 3 - 1
src/main/java/cn/hnthyy/thmz/common/datasource/DruidThmzDataSource.java

@@ -60,7 +60,8 @@ public class DruidThmzDataSource {
     private Integer removeAbandonedTimeout;
     @Value("${spring.datasource.durid.log-abandoned}")
     private Boolean logAbandoned;
-
+    @Value("${spring.datasource.durid.use-unfair-lock}")
+    private Boolean useUnfairLock;
 
     /**
      * 多数据源工程,这是导致这个配置没有生效的原因,因为他不知道为哪个数据源开启驼峰命名
@@ -103,6 +104,7 @@ public class DruidThmzDataSource {
         dataSource.setRemoveAbandoned(removeAbandoned);
         dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
         dataSource.setLogAbandoned(logAbandoned);
+        dataSource.setUseUnfairLock(useUnfairLock);
         return dataSource;
     }
 

+ 12 - 1
src/main/java/cn/hnthyy/thmz/controller/mz/CrbMainCardController.java

@@ -165,11 +165,22 @@ public class CrbMainCardController {
                 resultMap.put("code", -1);
                 resultMap.put("message", "诊断日期不能为空");
                 return resultMap;
-            } if (crbMainCard.getReportDept() == null) {
+            }
+            if (crbMainCard.getReportDept() == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "上报科室不能为空");
                 return resultMap;
             }
+            if(crbMainCard.getCurrentStreet()!=null && crbMainCard.getCurrentStreet().length()>30){
+                resultMap.put("code", -1);
+                resultMap.put("message", "现街道超长");
+                return resultMap;
+            }
+            if(crbMainCard.getHomeStreet()!=null && crbMainCard.getHomeStreet().length()>30){
+                resultMap.put("code", -1);
+                resultMap.put("message", "地址超长");
+                return resultMap;
+            }
             if (StringUtils.isBlank(crbMainCard.getContagion()) && StringUtils.isBlank(crbMainCard.getContagion2()) && StringUtils.isBlank(crbMainCard.getContagion3()) && StringUtils.isBlank(crbMainCard.getContagionQt())) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "传染病类型甲乙丙或者其他至少选择一项");

+ 1 - 1
src/main/java/cn/hnthyy/thmz/entity/his/mz/CrbMainCard.java

@@ -87,7 +87,7 @@ public class CrbMainCard implements Serializable {
     private String currentStreet;
 
     /**
-     * homeDistrict
+     * 区县
      */
     private String homeDistrict;
 

+ 44 - 2
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzyReqrecServiceImpl.java

@@ -164,11 +164,53 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
         pediatricAgeLimit(mzPatientMi, mzyRequest);
         //covidManage(mzyReqrec, mzPatientMi, mzyRequest);
         if ((Constants.AM.equals(mzyRequest.getAmpm()) || Constants.PM.equals(mzyRequest.getAmpm()))) {
-            if(StringUtils.isBlank(mzyReqrec.getApTime())){
+            if (StringUtils.isBlank(mzyReqrec.getApTime())) {
                 //上下午的号且没有传时间切片字段,默认选择第一个
                 String apTime = mzyRequestService.getApTime(mzyRequest);
                 mzyReqrec.setApTime(apTime);
             }
+            if ("a1".equals(mzyReqrec.getApTime()) && mzyRequest.getA1() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a2".equals(mzyReqrec.getApTime()) && mzyRequest.getA2() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a3".equals(mzyReqrec.getApTime()) && mzyRequest.getA3() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a4".equals(mzyReqrec.getApTime()) && mzyRequest.getA4() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a5".equals(mzyReqrec.getApTime()) && mzyRequest.getA5() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a6".equals(mzyReqrec.getApTime()) && mzyRequest.getA6() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a7".equals(mzyReqrec.getApTime()) && mzyRequest.getA7() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("a8".equals(mzyReqrec.getApTime()) && mzyRequest.getA8() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p1".equals(mzyReqrec.getApTime()) && mzyRequest.getP1() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p2".equals(mzyReqrec.getApTime()) && mzyRequest.getP2() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p3".equals(mzyReqrec.getApTime()) && mzyRequest.getP3() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p4".equals(mzyReqrec.getApTime()) && mzyRequest.getP4() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p5".equals(mzyReqrec.getApTime()) && mzyRequest.getP5() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
+            if ("p6".equals(mzyReqrec.getApTime()) && mzyRequest.getP6() <= 0) {
+                throw new MzException("当前预约时间段已满,请更换其他号段!");
+            }
             mzyReqrec.setRequestDay(mzyReqrec.getFullApTime(mzyRequest.getRequestDay(), mzyReqrec.getApTime()));
         }
         int times = getTimes(mzPatientMi);
@@ -634,7 +676,7 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
                 }
                 mzyRequestMapper.updateLeftNumById(reqrecRequestRelation.getRequestId(), apTime);
                 MzyRequest dbMzyRequest = mzyRequestMapper.selectMzyRequestById(reqrecRequestRelation.getRequestId());
-                if(dbMzyRequest!=null){
+                if (dbMzyRequest != null) {
                     Integer leftNum = mzyRequestService.getApLeftNum(dbMzyRequest);
                     mzyRequestMapper.setLeftNum(dbMzyRequest.getId(), leftNum);
                 }

+ 5 - 3
src/main/resources/application-dev.yml

@@ -59,12 +59,14 @@ spring:
       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: false
+      test-on-borrow: true
       #归还连接时执行validationQuery检测连接是否有效,
       test-on-return: false
       #Destroy线程会检测连接的间隔时间,testWhileIdle的判断依据,详细看testWhileIdle属性的说明
@@ -79,8 +81,8 @@ spring:
       max-pool-prepared-statement-per-connection-size: 200
       #对于长时间不使用的连接强制关闭
       remove-abandoned: true
-      #数据库链接超过30分钟开始关闭空闲连接 秒为单位
-      remove-abandoned-timeout: 1800
+      #数据库链接超过180秒开始关闭空闲连接 秒为单位
+      remove-abandoned-timeout: 180
       #将当前关闭动作记录到日志  此配置项会影响性能,只在排查的时候打开,系统运行时最好关闭。
       log-abandoned: true
   autoconfigure:

+ 5 - 3
src/main/resources/application-prod.yml

@@ -59,12 +59,14 @@ spring:
       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: false
+      test-on-borrow: true
       #归还连接时执行validationQuery检测连接是否有效,
       test-on-return: false
       #Destroy线程会检测连接的间隔时间,testWhileIdle的判断依据,详细看testWhileIdle属性的说明
@@ -79,8 +81,8 @@ spring:
       max-pool-prepared-statement-per-connection-size: 200
       #对于长时间不使用的连接强制关闭
       remove-abandoned: true
-      #数据库链接超过30分钟开始关闭空闲连接 秒为单位
-      remove-abandoned-timeout: 1800
+      #数据库链接超过180秒开始关闭空闲连接 秒为单位
+      remove-abandoned-timeout: 180
       #将当前关闭动作记录到日志
       log-abandoned: true
   autoconfigure:

+ 14 - 19
src/main/resources/static/js/mz/clinic.js

@@ -13858,6 +13858,17 @@ function getCrbMainCardByPatientIdAndTimes(patientId,times) {
                                 }
                                 if (res.code == 0) {
                                     if (res.data != null) {
+                                        var homeDistrict=res.data.homeDistrict;
+                                        if(homeDistrict!=null &&homeDistrict!=''){
+                                           var pro=homeDistrict.substring(0,2)+'0000';
+                                            $("#crbMainCardProvinceCode").selectpicker('val', pro);
+                                            $("#crbMainCardProvinceCode").selectpicker('refresh');
+                                            var city=homeDistrict.substring(0,4)+'00';
+                                            $("#crbMainCardCityCode").selectpicker('val', city);
+                                            $("#crbMainCardCityCode").selectpicker('refresh');
+                                            $("#crbMainCardDistrictCode").selectpicker('val', homeDistrict);
+                                            $("#crbMainCardDistrictCode").selectpicker('refresh');
+                                        }
                                         $("#cardReportingType").selectpicker('val', res.data.illType);
                                         $("#cardReportingType").selectpicker('refresh');
                                         $("#crbMainCardName").val(res.data.name);
@@ -13980,7 +13991,7 @@ function fillCrbPatinet(patinet) {
         $("#crbMainCardGender").blur();
         $("#crbMainCardBirthDay").val(patinet.birthDayStr);
         $("#crbMainCardBirthDay").blur();
-        $('#ecrbMainCardCertificateType').selectpicker('val', patinet.certificateType);
+        $('#crbMainCardCertificateType').selectpicker('val', patinet.certificateType);
         $('#crbMainCardCertificateType').selectpicker('refresh');
         $("#crbMainCardCardNo").val(patinet.icCardNo);
         $("#crbMainCardCardNo").attr("title", patinet.icCardNo);
@@ -14011,23 +14022,6 @@ function fillCrbPatinet(patinet) {
  */
 function saveCrbMainCard() {
     $("#saveCrbMainCard").attr("disabled", true);
-    var fullAddrerss = '';
-    var crbMainCardProvinceCode = $('#crbMainCardProvinceCode option:selected').text();
-    var crbMainCardCityCode = $('#crbMainCardCityCode option:selected').text();
-    var crbMainCardDistrictCode = $('#crbMainCardDistrictCode option:selected').text();
-    var crbMainCardDetail = $("#crbMainCardDetail").val();
-    if (crbMainCardProvinceCode != null && crbMainCardProvinceCode != '') {
-        fullAddrerss = crbMainCardProvinceCode;
-    }
-    if (crbMainCardCityCode != null && crbMainCardCityCode != '') {
-        fullAddrerss = fullAddrerss + crbMainCardCityCode;
-    }
-    if (crbMainCardDistrictCode != null && crbMainCardDistrictCode != '') {
-        fullAddrerss = fullAddrerss + crbMainCardDistrictCode;
-    }
-    if (crbMainCardDetail != null && crbMainCardDetail != '') {
-        fullAddrerss = fullAddrerss + crbMainCardDetail;
-    }
     var userIdCode = localStorage.getItem("userIdCode");
     var reportDept = localStorage.getItem(userIdCode);
     $.ajax({
@@ -14050,7 +14044,8 @@ function saveCrbMainCard() {
             "cardNo": $("#crbMainCardCardNo").val(),
             "relationTel": $("#crbMainCardPhoneNum").val(),
             "socialNo": $("#crbMainCardIdCard").val(),
-            "homeStreet": fullAddrerss,
+            "homeDistrict":$("#crbMainCardDistrictCode").val(),
+            "homeStreet": $("#crbMainCardDetail").val(),
             "currentStreet": $("#currentStreet").val(),
             "vaccinate": $("#vaccinate").val(),
             "vaccinate2": $("#vaccinate2").val(),