|
@@ -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) {
|