lighter hace 3 años
padre
commit
2092179ae7

+ 9 - 0
src/main/java/thyyxxk/wxservice_server/entity/appointment/MzClass.java

@@ -15,4 +15,13 @@ public class MzClass {
     private String id;
     private String text;
     private List<MzDept> children;
+
+    public MzClass() {
+    }
+
+    public MzClass(String id, String text, List<MzDept> children) {
+        this.id = id;
+        this.text = text;
+        this.children = children;
+    }
 }

+ 8 - 0
src/main/java/thyyxxk/wxservice_server/entity/appointment/MzDept.java

@@ -12,4 +12,12 @@ public class MzDept {
     private String id;
     private String text;
     private List<MzDept> children;
+
+    public MzDept() {
+    }
+
+    public MzDept(String id, String text) {
+        this.id = id;
+        this.text = text;
+    }
 }

+ 41 - 38
src/main/java/thyyxxk/wxservice_server/service/AppointmentService.java

@@ -28,7 +28,7 @@ import java.util.*;
 @Slf4j
 @Service
 public class AppointmentService {
-    private static List<MzClass> mzClasses;
+    private static final List<MzClass> mzClasses = new ArrayList<>();
     private final AppointmentDao dao;
 
     @Value("${hrgApiUrl}")
@@ -44,75 +44,78 @@ public class AppointmentService {
             return ResultVoUtil.success(mzClasses);
         }
         log.info("重新获取门诊科室并缓存。");
+        List<Map<String, Object>> tempMzClasses = fetchMzClassesFromApi();
+        if (null == tempMzClasses) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "获取科室分类失败,请联系服务中心。");
+        }
+        for (Map<String, Object> mzClass : tempMzClasses) {
+            fetchMzDepartmentsByMzClasses(mzClass);
+        }
+        return ResultVoUtil.success(mzClasses);
+    }
+
+    private List<Map<String, Object>> fetchMzClassesFromApi() {
         RestTemplate template = new RestTemplate();
         MzClassResponse response = template.getForObject(hrgApiUrl + "/getMzClass", MzClassResponse.class);
         if (null == response || -1 == response.getResultCode()) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "获取科室分类失败,请联系服务中心。");
+            return null;
         }
-        mzClasses = new ArrayList<>();
-        JSONObject param = new JSONObject();
-        for (Map<String, Object> item : response.getData()) {
-            MzClass pojo = new MzClass();
-            pojo.setId(item.get("code").toString());
-            pojo.setText(item.get("name").toString());
-            param.put("mzClass", pojo.getId());
-            MzClassResponse response2 = template.postForObject(hrgApiUrl + "/getUnitCodeByMzClass", param, MzClassResponse.class);
-            if (null != response2 && response2.getResultCode() == 0) {
-                List<MzDept> children = new ArrayList<>();
-                for (Map<String, Object> child : response2.getData()) {
-                    MzDept dept = new MzDept();
-                    dept.setId(child.get("code").toString());
-                    dept.setText(child.get("name").toString());
-                    List<Map<String, Object>> grandChildrenMap = CastUtil.cast(child.get("children"));
-                    if (null != grandChildrenMap && grandChildrenMap.size() > 0) {
-                        List<MzDept> grandChildren = new ArrayList<>();
-                        for (Map<String, Object> temp : grandChildrenMap) {
-                            MzDept mzDept = new MzDept();
-                            mzDept.setId(temp.get("code").toString());
-                            mzDept.setText(temp.get("name").toString());
-                            grandChildren.add(mzDept);
-                        }
-                        dept.setChildren(grandChildren);
+        return response.getData();
+    }
+
+    private void fetchMzDepartmentsByMzClasses(Map<String, Object> mzClass) {
+        String mzClassCode = mzClass.get("code").toString();
+        JSONObject params = JSONObject.parseObject("{\"mzClass\": \"" + mzClassCode + "\"}");
+        MzClassResponse tempMzDepartments = new RestTemplate().postForObject(hrgApiUrl + "/getUnitCodeByMzClass",
+                params, MzClassResponse.class);
+        if (null != tempMzDepartments && tempMzDepartments.getResultCode() == 0) {
+            List<MzDept> children = new ArrayList<>();
+            for (Map<String, Object> child : tempMzDepartments.getData()) {
+                MzDept childDepartment = new MzDept(child.get("code").toString(), child.get("name").toString());
+                List<Map<String, Object>> grandChildrenMap = CastUtil.cast(child.get("children"));
+                if (null != grandChildrenMap && grandChildrenMap.size() > 0) {
+                    List<MzDept> grandChildren = new ArrayList<>();
+                    for (Map<String, Object> grandChild : grandChildrenMap) {
+                        grandChildren.add(new MzDept(grandChild.get("code").toString(), grandChild.get("name").toString()));
                     }
-                    children.add(dept);
+                    childDepartment.setChildren(grandChildren);
                 }
-                pojo.setChildren(children);
-                mzClasses.add(pojo);
+                children.add(childDepartment);
             }
+            mzClasses.add(new MzClass(mzClassCode, mzClass.get("name").toString(), children));
         }
-        return ResultVoUtil.success(mzClasses);
     }
 
     public ResultVo<String> refreshMzClasses() {
+        mzClasses.clear();
         log.info("门诊科室缓存已重置。");
-        mzClasses = null;
         return ResultVoUtil.success("门诊科室缓存已重置。");
     }
 
     public ResultVo<Integer[]> getSourcesByDate(GetSourcesByDateParam param) {
-        Integer[] retArr = new Integer[7];
-        RestTemplate restTemplate = new RestTemplate();
+        Integer[] sourceArray = new Integer[7];
+        RestTemplate template = new RestTemplate();
         Calendar calendar = Calendar.getInstance();
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         for (int i = 0; i < 7; i++) {
-            retArr[i] = 0;
+            sourceArray[i] = 0;
             int addNum = i == 0 ? 0 : 1;
             calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + addNum);
             String date = format.format(calendar.getTime());
             String url = String.format(hrgApiUrl + "/getDoctorByDateAndDept?requestDay=%s&unitCode=%s", date, param.getDept());
-            SourcesResponse hrgResponse = restTemplate.getForObject(url, SourcesResponse.class);
+            SourcesResponse hrgResponse = template.getForObject(url, SourcesResponse.class);
             if (null == hrgResponse || hrgResponse.getResultCode() == -1) {
-                retArr[i] = 0;
+                sourceArray[i] = 0;
                 continue;
             }
             for (Map<String, Object> item : hrgResponse.getData()) {
                 if ((int) item.get("leftNum") > 0) {
-                    retArr[i] = 1;
+                    sourceArray[i] = 1;
                     break;
                 }
             }
         }
-        return ResultVoUtil.success(retArr);
+        return ResultVoUtil.success(sourceArray);
     }
 
     public ResultVo<Object> getDoctorSources(GetDoctorSourcesParam param) {