|
@@ -38,6 +38,7 @@ import redis.clients.jedis.JedisCommands;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.IntStream;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
@@ -120,18 +121,32 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<QueryDepOrderSourceRemainResponseData> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request) {
|
|
|
- return null;
|
|
|
+ public List<QueryDepOrderSourceRemainResponseData> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request) throws Exception {
|
|
|
+ int hospitalId = BizUtil.getCurrentHospitalId();
|
|
|
+ String deptCode = Checker.getStringValue(request.getDepId());
|
|
|
+ String doctorCode = "";
|
|
|
+ String serviceDate = "";
|
|
|
+ String serviceCode = "";
|
|
|
+ Map<String, Object> dataMap = getScheduleListCommon(hospitalId, deptCode, doctorCode, serviceCode, -1, -1);
|
|
|
+ List<QueryDepOrderSourceRemainResponseData> dataList = new ArrayList<>();
|
|
|
+ if (!Checker.isNone(dataMap.get("hasSchedulingList"))) {
|
|
|
+ dataList = (List<QueryDepOrderSourceRemainResponseData>) dataMap.get("hasSchedulingList");
|
|
|
+ }
|
|
|
+ return dataList;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public PageVO<QueryDepDoctorListResponseData> queryDepDoctorList(QueryDepDoctorListRequest request) throws Exception {
|
|
|
int hospitalId = BizUtil.getCurrentHospitalId();
|
|
|
- String deptCode = request.getDepCode();
|
|
|
- String doctorCode = request.getDoctorCode();
|
|
|
- String serviceDate = request.getDate();
|
|
|
- String serviceCode = request.getServiceCode();
|
|
|
- List<QueryDepDoctorListResponseData> dataList = getScheduleListCommon(hospitalId, deptCode, doctorCode, serviceCode, -1, -1);
|
|
|
+ String deptCode = Checker.getStringValue(request.getDepCode());
|
|
|
+ String doctorCode = Checker.getStringValue(request.getDoctorCode());
|
|
|
+ String serviceDate = Checker.getStringValue(request.getDate());
|
|
|
+ String serviceCode = Checker.getStringValue(request.getServiceCode());
|
|
|
+ Map<String, Object> dataMap = getScheduleListCommon(hospitalId, deptCode, doctorCode, serviceCode, -1, -1);
|
|
|
+ List<QueryDepDoctorListResponseData> dataList = new ArrayList<>();
|
|
|
+ if (!Checker.isNone(dataMap.get("groupByDoctorList"))) {
|
|
|
+ dataList = (List<QueryDepDoctorListResponseData>) dataMap.get("groupByDoctorList");
|
|
|
+ }
|
|
|
Pagination pagination = new Pagination(1, dataList.size(), dataList.size());
|
|
|
PageVO<QueryDepDoctorListResponseData> res = new PageVO<>(pagination, dataList);
|
|
|
return res;
|
|
@@ -146,8 +161,8 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
* startOffset 和 endOffset 其中一个为负值时,表示不指定日期范围,默认按照“太和查未来 8 天,不包括当天;白云查未来 6 天,包括当天”的规则查询。
|
|
|
* 都不为负值时,按照传入的 offset 计算开始结束日期。
|
|
|
*/
|
|
|
- private List<QueryDepDoctorListResponseData> getScheduleListCommon(int hospitalId, String deptCode, String doctorCode,
|
|
|
- String serviceCode, int startOffset, int endOffset) throws AppMessageException {
|
|
|
+ private Map<String, Object> getScheduleListCommon(int hospitalId, String deptCode, String doctorCode,
|
|
|
+ String serviceCode, int startOffset, int endOffset) throws AppMessageException {
|
|
|
String redisKeyPattern = "ALI_SCHEDULE_LIST_%s_%s_%d_%s";
|
|
|
String key = String.format(redisKeyPattern, deptCode, doctorCode, hospitalId, serviceCode);
|
|
|
if (startOffset >= 0 && endOffset >= 0) {
|
|
@@ -157,8 +172,8 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
String value = jedisCommands.get(key);
|
|
|
if (!StringHelper.isNullOrWhiteSpace(value)) {
|
|
|
Map<String, Object> cacheMap = JsonSerializer.from(value, Map.class);
|
|
|
- if (cacheMap != null && !Checker.isNone(cacheMap.get("list"))) {
|
|
|
- return (List<QueryDepDoctorListResponseData>) cacheMap.get("list");
|
|
|
+ if (cacheMap != null) {
|
|
|
+ return cacheMap;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -184,25 +199,12 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
map.put("deptCode", deptCode);
|
|
|
map.put("deptName", secDept.getDeptName());
|
|
|
|
|
|
-// List<DeptScheduleDoctor> doctorList = doctorSrv.getDeptScheduleDoctorListFromCache();
|
|
|
-// doctorList = doctorList.stream().filter(p -> p.getDeptCode().equals(deptCode)).collect(Collectors.toList());
|
|
|
-
|
|
|
// 批量日期查询 HIS 接口
|
|
|
boolean isTaihe = hospitalId == ConstantDef.TAIHE_HOSPITAL_ID;
|
|
|
if (startOffset < 0 || endOffset < 0) {
|
|
|
startOffset = isTaihe ? 1 : 0;
|
|
|
endOffset = isTaihe ? 9 : 7;
|
|
|
}
|
|
|
- List<QueryDepDoctorListResponseData> lst = getConvertedScheduleList(hospitalId, startOffset, endOffset, deptCode,
|
|
|
- doctorCode, serviceCode);
|
|
|
- map.put("list", lst);
|
|
|
- jedisCommands.set(key, JsonSerializer.toJson(map));
|
|
|
- jedisCommands.expire(key, 3 * 60);
|
|
|
- return lst;
|
|
|
- }
|
|
|
-
|
|
|
- private List<QueryDepDoctorListResponseData> getConvertedScheduleList(int hospitalId, int startOffset, int endOffset, String deptCode,
|
|
|
- String doctorCode, String serviceCode) {
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
if (startOffset > 0) {
|
|
|
calendar.add(Calendar.DATE, startOffset);
|
|
@@ -228,43 +230,25 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
log.error("NfyyByfyRegisterController#getConvertedScheduleList(): HIS 获取排班接口出错:{}", getScheduleListResponse.getMsg());
|
|
|
scheduleList = new LinkedList<>();
|
|
|
}
|
|
|
- List<QueryDepDoctorListResponseData> all = new ArrayList<>();
|
|
|
- for (int i = startOffset; i < endOffset; i++) {
|
|
|
- Calendar c = Calendar.getInstance();
|
|
|
- int offset = i;
|
|
|
- if (offset > 0) {
|
|
|
- c.add(Calendar.DATE, offset);
|
|
|
- }
|
|
|
- String strDate = DateUtil.formatDate(c.getTime(), "yyyy-MM-dd"); //日期
|
|
|
- List<QueryDepDoctorListResponseData> data = convertToScheduleMap(scheduleList.stream().filter(s -> strDate.equals(s.getServiceDate())).collect(Collectors.toList()),
|
|
|
- c, strDate, offset, hospitalId);
|
|
|
- all.addAll(data);
|
|
|
- }
|
|
|
- return all;
|
|
|
+ List<QueryDepDoctorListResponseData> groupByDoctorList = convertToScheduleListGroupByDoctor(scheduleList, hospitalId);
|
|
|
+ map.put("groupByDoctorList", groupByDoctorList);
|
|
|
+ List<QueryDepOrderSourceRemainResponseData> hasSchedulingList = checkHasSchedulingGroupByDate(scheduleList, startOffset, endOffset);
|
|
|
+ map.put("hasSchedulingList", hasSchedulingList);
|
|
|
+ jedisCommands.set(key, JsonSerializer.toJson(map));
|
|
|
+ jedisCommands.expire(key, 3 * 60);
|
|
|
+ return map;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
- * 排班记录转为Map
|
|
|
+ * 排班记录转为List(按医生分组)
|
|
|
*/
|
|
|
- private List<QueryDepDoctorListResponseData> convertToScheduleMap(List<Schedule> scheduleList, Calendar calendar, String strDate,
|
|
|
- int offset, int hospitalId) {
|
|
|
+ private List<QueryDepDoctorListResponseData> convertToScheduleListGroupByDoctor(List<Schedule> scheduleList, int hospitalId) {
|
|
|
Map<Integer, QueryDepDoctorListResponseData> doctorSet = new HashMap<>();
|
|
|
|
|
|
GetDoctorByHisCodeResponse getDoctorByHisCodeResponse;
|
|
|
String avatar;
|
|
|
|
|
|
int doctorId;
|
|
|
- boolean hasScheduling = scheduleList.size() > 0; //当期日期是否有排班
|
|
|
-
|
|
|
- QueryDepDoctorListResponseData first = new QueryDepDoctorListResponseData();
|
|
|
- first.setServiceDate(strDate);
|
|
|
- first.setOffset(offset);
|
|
|
- first.setWeek(DateUtil.getDayOfWeekShort(calendar));
|
|
|
- first.setDoctorId("0");
|
|
|
- first.setRemain(0);
|
|
|
- doctorSet.put(0, first);
|
|
|
-
|
|
|
for (Schedule s : scheduleList) {
|
|
|
doctorId = 0;
|
|
|
avatar = ConstantDef.DOCTOR_AVATAR_URL;
|
|
@@ -281,22 +265,6 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- // 需求改动:
|
|
|
- // v3.3.8 名医关闭咨询,也可以继续挂号和创建线下就诊订单
|
|
|
-// if (systemSrv.checkIsNetDept(s.getDeptCode())) {
|
|
|
-// //南方医院太和分院(互联网医院名医诊区)
|
|
|
-// GetConsultSettingsRequest getConsultSettingsReq = GetConsultSettingsRequest.newBuilder()
|
|
|
-// .setUserId(doctorId)
|
|
|
-// .build();
|
|
|
-// GetConsultSettingsResponse getConsultSettingsRes = doctorServiceBlockingStub.getConsultSettings(getConsultSettingsReq);
|
|
|
-// if (getConsultSettingsRes.getResult().getCode() != ResultCode.SUCCEED) {
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// if (getConsultSettingsRes.getStatus() != 1) {
|
|
|
-// //医生需要开启咨询功能
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// }
|
|
|
if (s.getScheduleStatus() != 1) {
|
|
|
continue;
|
|
|
}
|
|
@@ -312,9 +280,6 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
// 目前系统里面并没有专家号和普通号的区分
|
|
|
item.setType("");
|
|
|
item.setLevel(s.getDoctorTitle());
|
|
|
- item.setServiceDate(strDate);
|
|
|
- item.setOffset(offset);
|
|
|
- item.setWeek(DateUtil.getDayOfWeekShort(calendar));
|
|
|
item.setDoctorCode(s.getDoctorCode());
|
|
|
item.setDeptCode(s.getDeptCode());
|
|
|
}
|
|
@@ -338,6 +303,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
os.setDatePeriodName(s.getDatePeriodName());
|
|
|
os.setServiceDate(s.getServiceDate());
|
|
|
orderSourceList.add(os);
|
|
|
+ item.setOrderSources(orderSourceList);
|
|
|
|
|
|
doctorSet.put(doctorId, item);
|
|
|
}
|
|
@@ -352,9 +318,37 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
|
|
|
}
|
|
|
dataList.add(data);
|
|
|
}
|
|
|
+ // 过滤掉没有号的医生数据
|
|
|
+ dataList = dataList.stream().filter(p -> p.getRemain() > 0).collect(Collectors.toList());
|
|
|
return dataList;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 排班记录转为List(按日期判断是否有医生排班)
|
|
|
+ */
|
|
|
+ private List<QueryDepOrderSourceRemainResponseData> checkHasSchedulingGroupByDate(List<Schedule> scheduleList, int startOffset, int endOffset) {
|
|
|
+ List<QueryDepOrderSourceRemainResponseData> remainResponseList = new ArrayList<>();
|
|
|
+ if (endOffset > startOffset && !Checker.isNone(scheduleList)) {
|
|
|
+ for (int offset = startOffset; offset < endOffset; offset++ ){
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ if (offset > 0) {
|
|
|
+ c.add(Calendar.DATE, offset);
|
|
|
+ }
|
|
|
+ String strDate = DateUtil.formatDate(c.getTime(), "yyyy-MM-dd"); //日期
|
|
|
+ List<Schedule> itemScheduleList = scheduleList.stream().filter(s -> strDate.equals(s.getServiceDate())).collect(Collectors.toList());
|
|
|
+ QueryDepOrderSourceRemainResponseData data = new QueryDepOrderSourceRemainResponseData();
|
|
|
+ int remain = 0; //当期日期是否有排班
|
|
|
+ if (!Checker.isNone(itemScheduleList)){
|
|
|
+ remain = itemScheduleList.stream().mapToInt(Schedule::getAvailableLeftNum).sum();
|
|
|
+ }
|
|
|
+ data.setDate(strDate);
|
|
|
+ data.setRemain(remain);
|
|
|
+ remainResponseList.add(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return remainResponseList;
|
|
|
+ }
|
|
|
+
|
|
|
private GetDoctorByHisCodeResponse getDoctorByHisCode(String doctorCode, int hospitalId) {
|
|
|
GetDoctorByHisCodeRequest getDoctorByHisCodeRequest = GetDoctorByHisCodeRequest.newBuilder()
|
|
|
.setHospitalId(hospitalId)
|