Ver código fonte

添加夜间门诊模块

lighter 2 anos atrás
pai
commit
45650cef58

+ 1 - 1
pom.xml

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

+ 10 - 0
src/main/java/thyyxxk/wxservice_server/controller/AppointmentController.java

@@ -34,6 +34,16 @@ public class AppointmentController {
         return service.refreshMzClasses();
     }
 
+    @GetMapping("/refreshNightMzClasses")
+    public ResultVo<String> refreshNightMzClasses() {
+        return service.refreshNightMzClasses();
+    }
+
+    @GetMapping("/getAllNightDepartments")
+    public ResultVo<List<MzClass>> getAllNightDepartments() {
+        return service.getAllNightDepartments();
+    }
+
     @PostMapping("/getSourcesByDate")
     public ResultVo<Integer[]> getSourcesByDate(@RequestBody GetSourcesByDateParam param) {
         return service.getSourcesByDate(param);

+ 5 - 0
src/main/java/thyyxxk/wxservice_server/entity/appointment/GetDoctorSourcesParam.java

@@ -10,4 +10,9 @@ public class GetDoctorSourcesParam {
     private String date;
     private String deptCode;
     private String doctorCode;
+    private Boolean nightClinic;
+
+    public Boolean getNightClinic() {
+        return null != nightClinic && nightClinic;
+    }
 }

+ 5 - 0
src/main/java/thyyxxk/wxservice_server/entity/appointment/GetSourcesByDateParam.java

@@ -10,4 +10,9 @@ public class GetSourcesByDateParam {
     private String start;
     private String end;
     private String dept;
+    private Boolean nightClinic;
+
+    public Boolean getNightClinic() {
+        return null != nightClinic && nightClinic;
+    }
 }

+ 5 - 0
src/main/java/thyyxxk/wxservice_server/scheduled/RefreshTask.java

@@ -27,6 +27,11 @@ public class RefreshTask {
         appointmentService.refreshMzClasses();
     }
 
+    @Scheduled(cron = "0 0 5 * * ?")
+    public void autoRefreshNightMzClasses() {
+        appointmentService.refreshNightMzClasses();
+    }
+
     @Scheduled(cron = "0 0 3 * * ?")
     public void clearRefundedVector() {
         TradeVectorUtil.clearRefundedVector();

+ 57 - 7
src/main/java/thyyxxk/wxservice_server/service/AppointmentService.java

@@ -29,7 +29,10 @@ import java.util.*;
 @Slf4j
 @Service
 public class AppointmentService {
+    private static final Boolean NORMAL_CLASSES = Boolean.FALSE;
+    private static final Boolean NIGHT_CLASSES = Boolean.TRUE;
     private static final List<MzClass> mzClasses = new ArrayList<>();
+    private static final List<MzClass> nightMzClasses = new ArrayList<>();
     private final AppointmentDao dao;
     private final RedisLikeService redis;
     private final ElectronicHealthCardService healthCardService;
@@ -57,11 +60,28 @@ public class AppointmentService {
         }
         tempMzClasses.sort(Comparator.comparing(obj -> (int) obj.get("sortCode")));
         for (Map<String, Object> mzClass : tempMzClasses) {
-            fetchMzDepartmentsByMzClasses(mzClass);
+            fetchMzDepartmentsByMzClasses(mzClass, NORMAL_CLASSES, null);
         }
         return ResultVoUtil.success(mzClasses);
     }
 
+    public ResultVo<List<MzClass>> getAllNightDepartments() {
+        if (ListUtil.notEmpty(nightMzClasses)) {
+            return ResultVoUtil.success(nightMzClasses);
+        }
+        log.info("重新获取夜间门诊科室并缓存。");
+        List<Map<String, Object>> tempMzClasses = fetchMzClassesFromApi();
+        if (null == tempMzClasses) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "获取科室分类失败,请联系服务中心。");
+        }
+        tempMzClasses.sort(Comparator.comparing(obj -> (int) obj.get("sortCode")));
+        String[] oneWeekOffset = DateUtil.getOneWeekOffset();
+        for (Map<String, Object> mzClass : tempMzClasses) {
+            fetchMzDepartmentsByMzClasses(mzClass, NIGHT_CLASSES, oneWeekOffset);
+        }
+        return ResultVoUtil.success(nightMzClasses);
+    }
+
     private List<Map<String, Object>> fetchMzClassesFromApi() {
         RestTemplate template = new RestTemplate();
         MzClassResponse response = template.getForObject(hrgApiUrl + "/getMzClass", MzClassResponse.class);
@@ -71,10 +91,17 @@ public class AppointmentService {
         return response.getData();
     }
 
-    private void fetchMzDepartmentsByMzClasses(Map<String, Object> mzClass) {
+    private void fetchMzDepartmentsByMzClasses(Map<String, Object> mzClass, boolean nightClinic, String[] dateRange) {
         String mzClassCode = mzClass.get("code").toString();
-        JSONObject params = JSONObject.parseObject("{\"mzClass\": \"" + mzClassCode + "\"}");
-        MzClassResponse tempMzDepartments = new RestTemplate().postForObject(hrgApiUrl + "/getUnitCodeByMzClass",
+        JSONObject params = new JSONObject();
+        params.put("mzClass", mzClassCode);
+        String functionName = "/getUnitCodeByMzClass";
+        if (nightClinic) {
+            params.put("beginTime", dateRange[0]);
+            params.put("endTime", dateRange[1]);
+            functionName = "/getP4UnitCode";
+        }
+        MzClassResponse tempMzDepartments = new RestTemplate().postForObject(hrgApiUrl + functionName,
                 params, MzClassResponse.class);
         if (null != tempMzDepartments && tempMzDepartments.getResultCode() == 0) {
             List<MzDept> children = new ArrayList<>();
@@ -90,7 +117,14 @@ public class AppointmentService {
                 }
                 children.add(childDepartment);
             }
-            mzClasses.add(new MzClass(mzClassCode, mzClass.get("name").toString(), children));
+            if (children.isEmpty()) {
+                return;
+            }
+            if (nightClinic) {
+                nightMzClasses.add(new MzClass(mzClassCode, mzClass.get("name").toString(), children));
+            } else {
+                mzClasses.add(new MzClass(mzClassCode, mzClass.get("name").toString(), children));
+            }
         }
     }
 
@@ -100,6 +134,12 @@ public class AppointmentService {
         return ResultVoUtil.success("门诊科室缓存已重置。");
     }
 
+    public ResultVo<String> refreshNightMzClasses() {
+        nightMzClasses.clear();
+        log.info("夜间门诊科室缓存已重置。");
+        return ResultVoUtil.success("夜间门诊科室缓存已重置。");
+    }
+
     public ResultVo<Integer[]> getSourcesByDate(GetSourcesByDateParam param) {
         Integer[] sourceArray = new Integer[7];
         RestTemplate template = new RestTemplate();
@@ -118,8 +158,15 @@ public class AppointmentService {
             }
             for (Map<String, Object> item : hrgResponse.getData()) {
                 if ((int) item.get("leftNum") > 0) {
-                    sourceArray[i] = 1;
-                    break;
+                    if (param.getNightClinic()) {
+                        if ((Boolean) item.get("isP4Request")) {
+                            sourceArray[i] = 1;
+                            break;
+                        }
+                    } else {
+                        sourceArray[i] = 1;
+                        break;
+                    }
                 }
             }
         }
@@ -141,6 +188,9 @@ public class AppointmentService {
         if (data.getData().size() == 0) {
             return ResultVoUtil.fail(ExceptionEnum.SLIGHTLY_ERROR);
         }
+        if (param.getNightClinic()) {
+            data.getData().removeIf(map -> !((Boolean) map.get("isP4Request")));
+        }
         for (Map<String, Object> map : data.getData()) {
             DoctorInfo info = dao.selectPortraitAndIntroduction(map.get("doctorCode").toString());
             if (null != info) {

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

@@ -57,6 +57,16 @@ public class DateUtil {
         return result;
     }
 
+    public static String[] getOneWeekOffset() {
+        String[] result = new String[2];
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        result[0] = sdf.format(new Date()) + " 00:00:00";
+        calendar.add(Calendar.DATE, 6);
+        result[1] = sdf.format(calendar.getTime()) + " 23:59:59";
+        return result;
+    }
+
     public static boolean orderValid(Date create) {
         long offset = System.currentTimeMillis() - create.getTime();
         return (offset / 1000 / 60) < 60;

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

@@ -33,7 +33,8 @@ mybatis:
     map-underscore-to-camel-case: true
 
 #hrgApiUrl: http://172.16.30.33:8089/thmz/api/v1
-hrgApiUrl: http://172.16.32.160:81/thmz/api/v1
+hrgApiUrl: http://172.16.30.33:8889/thmz/api/v1
+#hrgApiUrl: http://172.16.32.160:81/thmz/api/v1
 
 inspectionUrl: http://172.16.32.178:622/pushservice.asmx?wsdl
 physicalCheck: http://172.16.32.183:8888/bdp/dataservice/api/