Bläddra i källkod

Merge branch 'master' of http://gogs.ywtinfo.com/guochengfeng/alipay-mp-service

wuyongyi 2 år sedan
förälder
incheckning
3456d63975

+ 64 - 70
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/IsvRegisterServiceImpl.java

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

+ 8 - 2
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/PlanController.java

@@ -52,8 +52,14 @@ public class PlanController {
      */
     @PostMapping("isvRequest.order.depOrderSourceRemain")
     public ResponseVO<List<QueryDepOrderSourceRemainResponseData>> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request) {
-
-        return ResponseVO.success(isvRegisterService.queryDepOrderSourceRemain(request));
+        try {
+            return ResponseVO.success(isvRegisterService.queryDepOrderSourceRemain(request));
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(Code.RESP_CODE_PARAM_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("PlanController#queryDepOrderSourceRemain(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(Code.RESP_CODE_APP_EXCEPTION, e.getMessage());
+        }
     }
 
     /**

+ 1 - 1
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/service/IsvRegisterService.java

@@ -27,7 +27,7 @@ public interface IsvRegisterService {
      * @param request
      * @return 查询结果
      **/
-    List<QueryDepOrderSourceRemainResponseData> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request);
+    List<QueryDepOrderSourceRemainResponseData> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request) throws Exception;
 
     /**
      * 科室医生查询

+ 0 - 5
onemini-hospital-sdk/src/main/java/com/ywt/response/register/QueryDepDoctorListResponseData.java

@@ -22,11 +22,6 @@ public class QueryDepDoctorListResponseData implements IsvResponseData {
     private String type;//类型,expert:专家号,normal:普通号
     private String level;//职级,医生职级
     private List<OrderSource> orderSources;//医生号源列表,存在查询日期参数,才可能返回,非必传
-    private String serviceDate;
-    private int offset;
-    private String week;
     private String doctorCode;//医生code
     private String deptCode;//科室code
-    private String serviceName;//亚专科名称
-    private String serviceCode;//亚专科代码
 }