ソースを参照

fix 新增分时排班信息接口

DYH2020 2 年 前
コミット
1d6b3c0635

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

@@ -135,6 +135,63 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
         return dataList;
     }
 
+
+    @Override
+    public List<QueryDoctorScheduleListResponseData> getDoctorScheduleList(QueryDoctorScheduleListRequest request) throws Exception {
+        int hospitalId = Checker.getIntegerValue(request.getHospitalId());
+        String deptCode = Checker.getStringValue(request.getDeptCode());
+        String doctorCode = Checker.getStringValue(request.getDoctorCode());
+        String serviceDate = Checker.getStringValue(request.getServiceDate());
+        Integer period = Checker.getIntegerValue(request.getPeriod());
+        if (StringHelper.isNullOrWhiteSpace(deptCode)) {
+            throw new AppMessageException("科室不存在");
+        }
+        if (StringHelper.isNullOrWhiteSpace(doctorCode)) {
+            throw new AppMessageException("医生不存在");
+        }
+
+        List<QueryDoctorScheduleListResponseData> dataList = new LinkedList<>();
+
+        if (!StringHelper.isNullOrWhiteSpace(serviceDate)) {
+            Date date = DateUtil.parseDate(serviceDate, "yyyy-MM-dd");
+            if (date == null) {
+                throw new AppMessageException("invalid serviceDate");
+            }
+            //查询医生某一天的排班分时信息
+            if (period == null) {
+                throw new AppMessageException("请选择时段");
+            }
+            if (DatePeriodEnum.valueOf(period) == null) {
+                throw new AppMessageException("时段不存在");
+            }
+
+            String strDate = DateUtil.formatDate(date, "yyyy-MM-dd");
+            QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, period, hospitalId);
+
+            if (map != null) {
+                dataList.add(map);
+            }
+        } else {
+            //取医生8天排班的分时信息
+            int[] periods = {DatePeriodEnum.MORNING.getValue(), DatePeriodEnum.AFTERNOON.getValue()};
+            Calendar calendar = Calendar.getInstance();
+
+            for (int offset = 0; offset < 8; offset++) {
+                calendar.add(Calendar.DATE, 1);
+                String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
+
+                for (int p : periods) {
+                    QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, p, hospitalId);
+
+                    if (map != null) {
+                        dataList.add(map);
+                    }
+                }
+            }
+        }
+        return dataList;
+    }
+
     @Override
     public PageVO<QueryDepDoctorListResponseData> queryDepDoctorList(QueryDepDoctorListRequest request) throws Exception {
         int hospitalId = BizUtil.getCurrentHospitalId();
@@ -381,7 +438,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
         if (hospitalId <= 0) {
             hospitalId = BizUtil.getHospitalIdByTerminalId(BizUtil.getCurrentTerminalWrapped());
         }
-        List<Map<String, Object>> dataList = new LinkedList<>();
+        List<QueryDoctorScheduleListResponseData> dataList = new LinkedList<>();
         if (!StringHelper.isNullOrWhiteSpace(serviceDate)) {
             Date date = DateUtil.parseDate(serviceDate, "yyyy-MM-dd");
             if (date == null) {
@@ -395,7 +452,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
                 throw new AppMessageException("时段不存在");
             }
             String strDate = DateUtil.formatDate(date, "yyyy-MM-dd");
-            Map<String, Object> map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, period, hospitalId);
+            QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, period, hospitalId);
             if (map != null) {
                 dataList.add(map);
             }
@@ -409,7 +466,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
                 String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
 
                 for (int p : periods) {
-                    Map<String, Object> map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, p, hospitalId);
+                    QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, p, hospitalId);
 
                     if (map != null) {
                         dataList.add(map);
@@ -432,8 +489,8 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
         int doctorId = 0;
 
         if (dataList.size() > 0) {
-            Map<String, Object> map = dataList.get(0);
-            String strDate = map.get("serviceDate").toString();
+            QueryDoctorScheduleListResponseData map = dataList.get(0);
+            String strDate = map.getServiceDate();
             GetScheduleListRequest getScheduleListRequest = GetScheduleListRequest.newBuilder()
                     .setDeptCode(deptCode)
                     .setDoctorCode(doctorCode)
@@ -538,9 +595,9 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
      * @param period
      * @return
      */
-    private Map<String, Object> getScheduleTimeInfoResponse(String deptCode, String doctorCode, String serviceDate,
+    private QueryDoctorScheduleListResponseData getScheduleTimeInfoResponse(String deptCode, String doctorCode, String serviceDate,
                                                             int period, int hospitalId) {
-        List<Map<String, Object>> lst = new LinkedList<>();
+        List<ScheduleInfo> lst = new LinkedList<>();
 
         GetScheduleTimeInfoRequest getScheduleTimeInfoRequest = GetScheduleTimeInfoRequest.newBuilder()
                 .setDeptCode(deptCode)
@@ -577,25 +634,25 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
                     }
                 }
 
-                Map<String, Object> map = new HashMap<>();
-                map.put("scheduleItemCode", scheduleTimeInfo.getScheduleItemCode());
-                map.put("startTime", scheduleTimeInfo.getStartTime());
-                map.put("endTime", scheduleTimeInfo.getEndTime());
-                map.put("availableTotalNum", scheduleTimeInfo.getAvailableTotalNum());
-                map.put("availableLeftNum", left);
-                map.put("availableFlag", flag);
-                map.put("availableNumStr", scheduleTimeInfo.getAvailableNumStr());
+                ScheduleInfo map = new ScheduleInfo();
+                map.setScheduleItemCode(scheduleTimeInfo.getScheduleItemCode());
+                map.setStartTime(scheduleTimeInfo.getStartTime());
+                map.setEndTime(scheduleTimeInfo.getEndTime());
+                map.setAvailableTotalNum(scheduleTimeInfo.getAvailableTotalNum());
+                map.setAvailableLeftNum(left);
+                map.setAvailableFlag(flag);
+                map.setAvailableNumStr(scheduleTimeInfo.getAvailableNumStr());
 
                 lst.add(map);
             }
         }
 
         if (lst.size() > 0) {
-            Map<String, Object> dateMap = new HashMap<>();
-            dateMap.put("serviceDate", serviceDate);
-            dateMap.put("period", period);
-            dateMap.put("datePeriod", DatePeriodEnum.valueOf(period).getDisplayName());
-            dateMap.put("schedule", lst);
+            QueryDoctorScheduleListResponseData dateMap = new QueryDoctorScheduleListResponseData();
+            dateMap.setServiceDate(serviceDate);
+            dateMap.setPeriod(period);
+            dateMap.setDatePeriod(DatePeriodEnum.valueOf(period).getDisplayName());
+            dateMap.setSchedule(lst);
 
             return dateMap;
         }

+ 2 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/configs/WebMvcConfigure.java

@@ -16,8 +16,10 @@ public class WebMvcConfigure extends WebMvcConfigurerAdapter {
                 // 排除的接口,无法通过 ContextHelper 获取 userId, terminal & alipayUid,也无法通过 BizUtil 获取 hospitalId,需要自行获取
                 .excludePathPatterns("/auth/bind")
                 .excludePathPatterns("/dev/*")
+                .excludePathPatterns("/register/*")
                 .excludePathPatterns("/isvRequest.inpatient.list")
                 .excludePathPatterns("/isvRequest.home.dailyBill.list")
+                .excludePathPatterns("/isvRequest.order.doctorScheduleList")
         ;
         super.addInterceptors(registry);
     }

+ 180 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/controller/RegisterController.java

@@ -0,0 +1,180 @@
+package com.ywt.alipaympapi.web.controller;
+
+import com.ywt.alipaympapi.core.utils.*;
+import com.ywt.alipaympapi.models.BaseResponse;
+import com.ywt.alipaympapi.models.BaseResponse2;
+import com.ywt.alipaympapi.models.auth.*;
+import com.ywt.alipaympapi.models.enums.DatePeriodEnum;
+import com.ywt.alipaympapi.web.interceptors.WebAppContext;
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.gapi.ResultCode;
+import com.ywt.gapi.taihe.register.TaiheRegisterServiceGrpc;
+import com.ywt.gapi.third.taihe.*;
+import com.ywt.gapi.user.*;
+import com.ywt.model.Code;
+import com.ywt.model.PageVO;
+import com.ywt.model.Pagination;
+import com.ywt.model.ResponseVO;
+import com.ywt.request.register.QueryDoctorScheduleListRequest;
+import com.ywt.response.register.QueryDoctorScheduleListResponseData;
+import com.ywt.response.register.ScheduleInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * @author dyh2020
+ * Created on 2022/9/21
+ */
+@Slf4j
+@RestController("/register")
+@RequestMapping({"/register"})
+public class RegisterController {
+
+    @Autowired
+    private TaiheServiceGrpc.TaiheServiceBlockingStub taiheServiceBlockingStub;
+
+    /**
+     * 得到医生分时排班信息
+     */
+    @RequestMapping({"/doctorSchedule"})
+    public @ResponseBody
+    ResponseVO<List<QueryDoctorScheduleListResponseData>> getDoctorScheduleList(@RequestBody QueryDoctorScheduleListRequest request) {
+        try {
+            int hospitalId = Checker.getIntegerValue(request.getHospitalId());
+            String deptCode = Checker.getStringValue(request.getDeptCode());
+            String doctorCode = Checker.getStringValue(request.getDoctorCode());
+            String serviceDate = Checker.getStringValue(request.getServiceDate());
+            Integer period = Checker.getIntegerValue(request.getPeriod());
+            if (StringHelper.isNullOrWhiteSpace(deptCode)) {
+                throw new AppMessageException("科室不存在");
+            }
+            if (StringHelper.isNullOrWhiteSpace(doctorCode)) {
+                throw new AppMessageException("医生不存在");
+            }
+
+            List<QueryDoctorScheduleListResponseData> dataList = new LinkedList<>();
+
+            if (!StringHelper.isNullOrWhiteSpace(serviceDate)) {
+                Date date = DateUtil.parseDate(serviceDate, "yyyy-MM-dd");
+                if (date == null) {
+                    throw new AppMessageException("invalid serviceDate");
+                }
+                //查询医生某一天的排班分时信息
+                if (period == null) {
+                    throw new AppMessageException("请选择时段");
+                }
+                if (DatePeriodEnum.valueOf(period) == null) {
+                    throw new AppMessageException("时段不存在");
+                }
+
+                String strDate = DateUtil.formatDate(date, "yyyy-MM-dd");
+                QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, period, hospitalId);
+
+                if (map != null) {
+                    dataList.add(map);
+                }
+            } else {
+                //取医生8天排班的分时信息
+                int[] periods = {DatePeriodEnum.MORNING.getValue(), DatePeriodEnum.AFTERNOON.getValue()};
+                Calendar calendar = Calendar.getInstance();
+
+                for (int offset = 0; offset < 8; offset++) {
+                    calendar.add(Calendar.DATE, 1);
+                    String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
+
+                    for (int p : periods) {
+                        QueryDoctorScheduleListResponseData map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, p, hospitalId);
+
+                        if (map != null) {
+                            dataList.add(map);
+                        }
+                    }
+                }
+            }
+            return ResponseVO.success(dataList);
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(Code.RESP_CODE_PARAM_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("PlanController#queryDepDoctorList(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(Code.RESP_CODE_APP_EXCEPTION, e.getMessage());
+        }
+    }
+
+    /**
+     * 得到分时排班信息
+     *
+     * @param deptCode
+     * @param doctorCode
+     * @param serviceDate
+     * @param period
+     * @return
+     */
+    private QueryDoctorScheduleListResponseData getScheduleTimeInfoResponse(String deptCode, String doctorCode, String serviceDate,
+                                                                            int period, int hospitalId) {
+        List<ScheduleInfo> lst = new LinkedList<>();
+
+        GetScheduleTimeInfoRequest getScheduleTimeInfoRequest = GetScheduleTimeInfoRequest.newBuilder()
+                .setDeptCode(deptCode)
+                .setDoctorCode(doctorCode)
+                .setServiceDate(serviceDate)
+                .setDatePeriod(period)
+                .setHospitalId(hospitalId)
+                .build();
+        GetScheduleTimeInfoResponse getScheduleTimeInfoResponse = taiheServiceBlockingStub.getScheduleTimeInfo(getScheduleTimeInfoRequest);
+
+        if (getScheduleTimeInfoResponse.getCode() == ResultCode.SUCCEED_VALUE) {
+            List<ScheduleTimeInfo> scheduleTimeInfoList = getScheduleTimeInfoResponse.getScheduleTimeInfosList();
+            Calendar calendar = Calendar.getInstance();
+            String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
+            String strTime = DateUtil.formatDate(calendar.getTime(), "HHmm");
+            int time = Integer.parseInt(strTime);
+
+            String strEndTime;
+            String flag;
+            int tmp;
+            int left;
+
+            for (ScheduleTimeInfo scheduleTimeInfo : scheduleTimeInfoList) {
+                flag = scheduleTimeInfo.getAvailableFlag();
+                left = scheduleTimeInfo.getAvailableLeftNum();
+
+                if (strDate.equals(serviceDate) && !StringHelper.isNullOrWhiteSpace(scheduleTimeInfo.getEndTime())) {
+                    strEndTime = scheduleTimeInfo.getEndTime();
+                    tmp = Integer.parseInt(strEndTime.replace(":", ""));
+
+                    if (tmp < time) {
+                        left = 0;
+                        flag = "N";
+                    }
+                }
+
+                ScheduleInfo map = new ScheduleInfo();
+                map.setScheduleItemCode(scheduleTimeInfo.getScheduleItemCode());
+                map.setStartTime(scheduleTimeInfo.getStartTime());
+                map.setEndTime(scheduleTimeInfo.getEndTime());
+                map.setAvailableTotalNum(scheduleTimeInfo.getAvailableTotalNum());
+                map.setAvailableLeftNum(left);
+                map.setAvailableFlag(flag);
+                map.setAvailableNumStr(scheduleTimeInfo.getAvailableNumStr());
+
+                lst.add(map);
+            }
+        }
+
+        if (lst.size() > 0) {
+            QueryDoctorScheduleListResponseData dateMap = new QueryDoctorScheduleListResponseData();
+            dateMap.setServiceDate(serviceDate);
+            dateMap.setPeriod(period);
+            dateMap.setDatePeriod(DatePeriodEnum.valueOf(period).getDisplayName());
+            dateMap.setSchedule(lst);
+
+            return dateMap;
+        }
+
+        return null;
+    }
+
+}

+ 18 - 0
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/PlanController.java

@@ -81,6 +81,24 @@ public class PlanController {
     }
 
     /**
+     * 医生分时排班信息查询 (todo: 这个接口是后面添加的,是自定义的,通过代理过不来)
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("isvRequest.order.doctorScheduleList")
+    public ResponseVO<List<QueryDoctorScheduleListResponseData>> getDoctorScheduleList(QueryDoctorScheduleListRequest request) {
+        try {
+            return ResponseVO.success(isvRegisterService.getDoctorScheduleList(request));
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(Code.RESP_CODE_PARAM_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("PlanController#getDoctorScheduleList(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(Code.RESP_CODE_APP_EXCEPTION, e.getMessage());
+        }
+    }
+
+    /**
      * 医生号院查询
      *
      * @param request

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

@@ -38,6 +38,14 @@ public interface IsvRegisterService {
     PageVO<QueryDepDoctorListResponseData> queryDepDoctorList(QueryDepDoctorListRequest request) throws Exception;
 
     /**
+     * 得到医生分时排班信息
+     *
+     * @param request
+     * @return 查询结果
+     **/
+    List<QueryDoctorScheduleListResponseData> getDoctorScheduleList(QueryDoctorScheduleListRequest request) throws Exception;
+
+    /**
      * 医生号源查询
      *
      * @param request

+ 32 - 0
onemini-hospital-sdk/src/main/java/com/ywt/request/register/QueryDoctorScheduleListRequest.java

@@ -0,0 +1,32 @@
+package com.ywt.request.register;
+
+import com.ywt.model.IsvListRequest;
+import com.ywt.model.IsvPageRequest;
+import com.ywt.request.IAppIdRequest;
+import com.ywt.response.register.QueryDepDoctorListResponseData;
+import com.ywt.response.register.QueryDoctorScheduleListResponseData;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * 科室医生查询请求体
+ **/
+@Getter
+@Setter
+@ToString
+public class QueryDoctorScheduleListRequest implements IsvListRequest<QueryDoctorScheduleListResponseData>, IAppIdRequest {
+
+    private String appId;//医院小程序的AppId
+    private String deptCode;//科室code
+    private String doctorCode;//医生code
+    private String serviceDate;//日期
+    private Integer period;//时间段
+    private Integer hospitalId;
+
+    @Override
+    public String serviceName() {
+        return "isvRequest.order.doctorScheduleList";
+    }
+
+}

+ 21 - 0
onemini-hospital-sdk/src/main/java/com/ywt/response/register/QueryDoctorScheduleListResponseData.java

@@ -0,0 +1,21 @@
+package com.ywt.response.register;
+
+import com.ywt.model.IsvResponseData;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * 得到医生分时排班信息
+ **/
+@Getter
+@Setter
+@ToString
+public class QueryDoctorScheduleListResponseData implements IsvResponseData {
+    private int period;         // 时间段,参考 {@link DatePeriodEnum }
+    private String serviceDate; //日期
+    private String datePeriod;  //时间段
+    private List<ScheduleInfo> schedule;    //分时排班信息list
+}

+ 18 - 0
onemini-hospital-sdk/src/main/java/com/ywt/response/register/ScheduleInfo.java

@@ -0,0 +1,18 @@
+package com.ywt.response.register;
+
+import lombok.Data;
+
+
+/**
+ * 分时排班信息
+ */
+@Data
+public class ScheduleInfo {
+    private String availableNumStr;//号源id
+    private String scheduleItemCode;//号源开始时间段
+    private Integer availableLeftNum;//号源截止时间段
+    private String startTime;//挂号费用
+    private String endTime;//剩余数量
+    private String availableFlag;//true:确认挂号时支付,false:就诊时支付
+    private Integer availableTotalNum;//时间(eg:2022-09-20)
+}