IsvRegisterServiceImpl.java 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955
  1. package com.ywt.alipaympapi.service.impl;
  2. import com.ywt.alipaympapi.core.ConstantDef;
  3. import com.ywt.alipaympapi.core.utils.*;
  4. import com.ywt.alipaympapi.models.enums.DatePeriodEnum;
  5. import com.ywt.alipaympapi.models.enums.PaymentChannelEnum;
  6. import com.ywt.alipaympapi.models.enums.SexEnum;
  7. import com.ywt.alipaympapi.models.enums.TerminalEnum;
  8. import com.ywt.alipaympapi.models.union_reg.HospitalCustomInfo;
  9. import com.ywt.alipaympapi.service.IsvRegisterService;
  10. import com.ywt.alipaympapi.service.services.DoctorSrv;
  11. import com.ywt.alipaympapi.service.services.SystemSrv;
  12. import com.ywt.core.exception.AppMessageException;
  13. import com.ywt.gapi.Result;
  14. import com.ywt.gapi.ResultCode;
  15. import com.ywt.gapi.order.CreateTaiheRegisteredOrderRequest;
  16. import com.ywt.gapi.order.CreateTaiheRegisteredOrderResponse;
  17. import com.ywt.gapi.order.OrderServiceGrpc;
  18. import com.ywt.gapi.system.Dept;
  19. import com.ywt.gapi.system.*;
  20. import com.ywt.gapi.taihe.register.CancelRegisteredRequest;
  21. import com.ywt.gapi.taihe.register.CancelRegisteredResponse;
  22. import com.ywt.gapi.taihe.register.TaiheRegisterServiceGrpc;
  23. import com.ywt.gapi.third.taihe.*;
  24. import com.ywt.gapi.user.*;
  25. import com.ywt.model.BaseResponse;
  26. import com.ywt.model.PageVO;
  27. import com.ywt.model.Pagination;
  28. import com.ywt.request.queue.QueryQueueListRequest;
  29. import com.ywt.request.register.*;
  30. import com.ywt.response.queue.QueryQueueListResponse;
  31. import com.ywt.response.register.*;
  32. import lombok.extern.slf4j.Slf4j;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.stereotype.Service;
  35. import redis.clients.jedis.JedisCommands;
  36. import java.time.LocalDate;
  37. import java.util.*;
  38. import java.util.stream.Collectors;
  39. import java.util.stream.IntStream;
  40. @Service
  41. @Slf4j
  42. public class IsvRegisterServiceImpl implements IsvRegisterService {
  43. @Autowired
  44. private TaiheRegisterServiceGrpc.TaiheRegisterServiceBlockingStub taiheRegisterServiceBlockingStub;
  45. @Autowired
  46. private SystemServiceGrpc.SystemServiceBlockingStub systemServiceBlockingStub;
  47. @Autowired
  48. private TaiheServiceGrpc.TaiheServiceBlockingStub taiheServiceBlockingStub;
  49. @Autowired
  50. private SystemSrv systemSrv;
  51. @Autowired
  52. private JedisCommands jedisCommands;
  53. @Autowired
  54. private DoctorSrv doctorSrv;
  55. @Autowired
  56. private DoctorServiceGrpc.DoctorServiceBlockingStub doctorServiceBlockingStub;
  57. @Autowired
  58. private OrderServiceGrpc.OrderServiceBlockingStub orderServiceBlockingStub;
  59. @Override
  60. public List<QueryDepartmentListResponseData> queryDepartmentList(QueryDepartmentListRequest request) throws Exception {
  61. log.info("IsvRegisterServiceImpl#queryDepartmentList--QueryDepartmentListRequest:{}", JsonSerializer.toJson(request));
  62. int hospitalId = BizUtil.getCurrentHospitalId();
  63. String hospitalDistrictId = request.getHospitalDistrictId();
  64. int subHospitalId = 0;
  65. if (!Checker.isNone(hospitalDistrictId)) {
  66. subHospitalId = Integer.parseInt(hospitalDistrictId);
  67. }
  68. List<HospitalDept> deptList = null;
  69. HospitalDeptListRequest req = HospitalDeptListRequest.newBuilder()
  70. .setHospitalId(hospitalId)
  71. .setSubHospitalId(subHospitalId)
  72. .build();
  73. HospitalDeptListResponse res = systemServiceBlockingStub.getHospitalDeptList(req);
  74. if (res.getResult().getCode() != ResultCode.SUCCEED) {
  75. throw new AppMessageException(res.getResult().getInfo());
  76. }
  77. Result result = res.getResult();
  78. if (result.getCode() == ResultCode.SUCCEED) {
  79. deptList = res.getHospitalDeptListList();
  80. }
  81. if (deptList == null) {
  82. throw new AppMessageException("科室不存在");
  83. }
  84. String parentId = request.getParentId();
  85. int deptParentId = 0;
  86. if (!Checker.isNone(parentId)) {
  87. deptParentId = Integer.parseInt(parentId);
  88. }
  89. List<QueryDepartmentListResponseData> lst = new LinkedList<>();
  90. for (HospitalDept d : deptList) {
  91. if (deptParentId == 0) {
  92. QueryDepartmentListResponseData map = new QueryDepartmentListResponseData();
  93. map.setDepartmentId(d.getDeptId() + "");
  94. map.setDepartmentCode(d.getDeptCode());
  95. map.setName(d.getDeptName());
  96. map.setHasChildren(d.getDeptListList().size() > 0);
  97. map.setRemain(0);
  98. //院区id
  99. map.setHospitalDistrictId(hospitalDistrictId);
  100. lst.add(map);
  101. } else {
  102. if (deptParentId == d.getDeptId()) {
  103. for (Dept secDept : d.getDeptListList()) {
  104. QueryDepartmentListResponseData map = new QueryDepartmentListResponseData();
  105. map.setDepartmentId(secDept.getDeptId() + "");
  106. map.setDepartmentCode(secDept.getDeptCode());
  107. map.setName(secDept.getDeptName());
  108. map.setHasChildren(false);
  109. map.setRemain(0);
  110. map.setHospitalDistrictId(hospitalDistrictId);
  111. lst.add(map);
  112. }
  113. }
  114. }
  115. }
  116. return lst;
  117. }
  118. @Override
  119. public List<QueryDepOrderSourceRemainResponseData> queryDepOrderSourceRemain(QueryDepOrderSourceRemainRequest request) throws Exception {
  120. int hospitalId = BizUtil.getCurrentHospitalId();
  121. String deptCode = Checker.getStringValue(request.getDepCode());
  122. String doctorCode = "";
  123. String serviceDate = "";
  124. String serviceCode = "";
  125. Map<String, Object> dataMap = getScheduleListCommon(hospitalId, deptCode, doctorCode, serviceCode, serviceDate,-1, -1);
  126. List<QueryDepOrderSourceRemainResponseData> dataList = new ArrayList<>();
  127. if (!Checker.isNone(dataMap.get("hasSchedulingList"))) {
  128. dataList = (List<QueryDepOrderSourceRemainResponseData>) dataMap.get("hasSchedulingList");
  129. }
  130. return dataList;
  131. }
  132. @Override
  133. public PageVO<QueryDepDoctorListResponseData> queryDepDoctorList(QueryDepDoctorListRequest request) throws Exception {
  134. int hospitalId = BizUtil.getCurrentHospitalId();
  135. String deptCode = Checker.getStringValue(request.getDepCode());
  136. String doctorCode = Checker.getStringValue(request.getDoctorCode());
  137. String serviceDate = Checker.getStringValue(request.getDate());
  138. String serviceCode = Checker.getStringValue(request.getServiceCode());
  139. Map<String, Object> dataMap = getScheduleListCommon(hospitalId, deptCode, doctorCode, serviceCode, serviceDate,-1, -1);
  140. List<QueryDepDoctorListResponseData> dataList = new ArrayList<>();
  141. if (!Checker.isNone(dataMap.get("groupByDoctorList"))) {
  142. dataList = (List<QueryDepDoctorListResponseData>) dataMap.get("groupByDoctorList");
  143. }
  144. Pagination pagination = new Pagination(1, dataList.size(), dataList.size());
  145. PageVO<QueryDepDoctorListResponseData> res = new PageVO<>(pagination, dataList);
  146. return res;
  147. }
  148. /**
  149. * 原来的获取科室排班列表方法抽离
  150. *
  151. * @param startOffset 开始日期 offset, 值取 0 表示当天;
  152. * @param endOffset 结束日期 offset, 值取 0 表示当天;
  153. * @param serviceDate 指定时间,具体某一天:yyyy-MM-dd
  154. * <p>
  155. * startOffset 和 endOffset 其中一个为负值时,表示不指定日期范围,默认按照“太和查未来 8 天,不包括当天;白云查未来 6 天,包括当天”的规则查询。
  156. * 都不为负值时,按照传入的 offset 计算开始结束日期。
  157. */
  158. private Map<String, Object> getScheduleListCommon(int hospitalId, String deptCode, String doctorCode,
  159. String serviceCode, String serviceDate, int startOffset, int endOffset) throws AppMessageException {
  160. String redisKeyPattern = "ALI_SCHEDULE_LIST_%s_%s_%d_%s_%s";
  161. String key = String.format(redisKeyPattern, deptCode, doctorCode, hospitalId, serviceCode, serviceDate);
  162. if (startOffset >= 0 && endOffset >= 0) {
  163. redisKeyPattern = "ALI_SCHEDULE_LIST_%s_%s_%d_%s_%s_%d_%d";
  164. key = String.format(redisKeyPattern, deptCode, doctorCode, hospitalId, serviceCode, serviceDate, startOffset, endOffset);
  165. }
  166. String value = jedisCommands.get(key);
  167. if (!StringHelper.isNullOrWhiteSpace(value)) {
  168. Map<String, Object> cacheMap = JsonSerializer.from(value, Map.class);
  169. if (cacheMap != null) {
  170. return cacheMap;
  171. }
  172. }
  173. List<Dept> deptList = systemSrv.getDeptListByHospitalId(hospitalId);
  174. if (deptList == null || deptList.size() == 0) {
  175. throw new AppMessageException(String.format("无法获取科室数据(%d)", hospitalId));
  176. }
  177. List<Dept> tmpDeptList = deptList.stream().filter(p -> p.getDeptCode().equals(deptCode)).collect(Collectors.toList());
  178. if (tmpDeptList.size() == 0) {
  179. log.error(String.format("deptCode 不存在(%d-%s-%s)", hospitalId, deptCode, doctorCode));
  180. throw new AppMessageException("暂无出诊信息");
  181. }
  182. Dept secDept = tmpDeptList.get(0);
  183. tmpDeptList = deptList.stream().filter(p -> p.getDeptId() == secDept.getParentId()).collect(Collectors.toList());
  184. if (tmpDeptList.size() == 0) {
  185. log.error(String.format("deptCode 不合法(%d-%s-%s)", hospitalId, deptCode, doctorCode));
  186. throw new AppMessageException("暂无出诊信息");
  187. }
  188. Map<String, Object> map = new HashMap<>();
  189. map.put("hospitalId", hospitalId);
  190. map.put("hospitalName", BizUtil.getHospitalNameByIdSimply(hospitalId));
  191. map.put("deptCode", deptCode);
  192. map.put("deptName", secDept.getDeptName());
  193. // 批量日期查询 HIS 接口
  194. boolean isTaihe = hospitalId == ConstantDef.TAIHE_HOSPITAL_ID;
  195. if (startOffset < 0 || endOffset < 0) {
  196. startOffset = isTaihe ? 1 : 0;
  197. endOffset = isTaihe ? 9 : 7;
  198. }
  199. Calendar calendar = Calendar.getInstance();
  200. if (startOffset > 0) {
  201. calendar.add(Calendar.DATE, startOffset);
  202. }
  203. String startDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd"); //日期
  204. calendar = Calendar.getInstance();
  205. calendar.add(Calendar.DATE, endOffset);
  206. String endDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd"); //日期
  207. // 如果传了具体的日期,那之查这一天的
  208. if (!Checker.isNone(serviceDate)){
  209. startDate = serviceDate;
  210. endDate = serviceDate;
  211. }
  212. GetScheduleListRequest getScheduleListRequest = GetScheduleListRequest.newBuilder()
  213. .setDeptCode(deptCode)
  214. .setDoctorCode(doctorCode)
  215. .setServiceDate(startDate)
  216. .setServiceEndDate(endDate)
  217. .setHospitalId(hospitalId)
  218. .setServiceCode(serviceCode)
  219. .build();
  220. GetScheduleListResponse getScheduleListResponse = taiheServiceBlockingStub.getScheduleList(getScheduleListRequest);
  221. List<Schedule> scheduleList;
  222. if (getScheduleListResponse.getCode() == ResultCode.SUCCEED_VALUE) {
  223. scheduleList = getScheduleListResponse.getSchedulesList();
  224. } else {
  225. log.error("NfyyByfyRegisterController#getConvertedScheduleList(): HIS 获取排班接口出错:{}", getScheduleListResponse.getMsg());
  226. scheduleList = new LinkedList<>();
  227. }
  228. List<QueryDepDoctorListResponseData> groupByDoctorList = convertToScheduleListGroupByDoctor(scheduleList, hospitalId);
  229. map.put("groupByDoctorList", groupByDoctorList);
  230. List<QueryDepOrderSourceRemainResponseData> hasSchedulingList = checkHasSchedulingGroupByDate(scheduleList, startOffset, endOffset);
  231. map.put("hasSchedulingList", hasSchedulingList);
  232. jedisCommands.set(key, JsonSerializer.toJson(map));
  233. jedisCommands.expire(key, 3 * 60);
  234. return map;
  235. }
  236. /**
  237. * 排班记录转为List(按医生分组)
  238. */
  239. private List<QueryDepDoctorListResponseData> convertToScheduleListGroupByDoctor(List<Schedule> scheduleList, int hospitalId) {
  240. Map<Integer, QueryDepDoctorListResponseData> doctorSet = new HashMap<>();
  241. GetDoctorByHisCodeResponse getDoctorByHisCodeResponse;
  242. String avatar;
  243. int doctorId;
  244. for (Schedule s : scheduleList) {
  245. doctorId = 0;
  246. avatar = ConstantDef.DOCTOR_AVATAR_URL;
  247. getDoctorByHisCodeResponse = getDoctorByHisCode(s.getDoctorCode(), hospitalId);
  248. if (getDoctorByHisCodeResponse.getResult().getCode() == ResultCode.SUCCEED) {
  249. if (!StringHelper.isNullOrWhiteSpace(getDoctorByHisCodeResponse.getAvatar())) {
  250. avatar = getDoctorByHisCodeResponse.getAvatar();
  251. }
  252. doctorId = getDoctorByHisCodeResponse.getDoctorId();
  253. }
  254. if (doctorId <= 0) {
  255. continue;
  256. }
  257. if (s.getScheduleStatus() != 1) {
  258. continue;
  259. }
  260. QueryDepDoctorListResponseData item = doctorSet.get(doctorId);
  261. if (Checker.isNone(item)) {
  262. item = new QueryDepDoctorListResponseData();
  263. item.setDoctorId(doctorId + "");
  264. item.setName(s.getDoctorName());
  265. item.setDesc(s.getDoctorSpec());
  266. item.setPicUrl(avatar);
  267. // 这个数后面再统计
  268. item.setRemain(0);
  269. // 目前系统里面并没有专家号和普通号的区分,目前统一用普通号
  270. item.setType("normal");
  271. item.setLevel(s.getDoctorTitle());
  272. item.setDoctorCode(s.getDoctorCode());
  273. item.setDeptCode(s.getDeptCode());
  274. }
  275. List<OrderSource> orderSourceList = item.getOrderSources();
  276. if (Checker.isNone(orderSourceList)) {
  277. orderSourceList = new ArrayList<>();
  278. }
  279. OrderSource os = new OrderSource();
  280. //号源id
  281. os.setOrderSourceId(s.getScheduleItemCode());
  282. //号源开始时间段
  283. os.setStartTime(s.getDatePeriod() + "");
  284. //号源截止时间段
  285. os.setEndTime(s.getDatePeriodName());
  286. //挂号费用
  287. os.setCost(BizUtil.cent2Yuan(s.getFee())+"");
  288. //剩余数量
  289. os.setRemain(Checker.getIntegerValue(s.getAvailableLeftNum()));
  290. //true:确认挂号时支付,false:就诊时支付
  291. os.setOnlinePay(true);
  292. os.setDatePeriodName(s.getDatePeriodName());
  293. os.setServiceDate(s.getServiceDate());
  294. orderSourceList.add(os);
  295. item.setOrderSources(orderSourceList);
  296. doctorSet.put(doctorId, item);
  297. }
  298. List<QueryDepDoctorListResponseData> dataList = new ArrayList<>();
  299. Set<Integer> doctorIdSet = doctorSet.keySet();
  300. for (Integer doctorIdInt : doctorIdSet) {
  301. QueryDepDoctorListResponseData data = doctorSet.get(doctorIdInt);
  302. List<OrderSource> sourceList = data.getOrderSources();
  303. if (!Checker.isNone(sourceList)) {
  304. int remain = sourceList.stream().mapToInt(OrderSource::getRemain).sum();
  305. data.setRemain(remain);
  306. }
  307. dataList.add(data);
  308. }
  309. // 过滤掉没有号的医生数据
  310. dataList = dataList.stream().filter(p -> p.getRemain() > 0).collect(Collectors.toList());
  311. return dataList;
  312. }
  313. /**
  314. * 排班记录转为List(按日期判断是否有医生排班)
  315. */
  316. private List<QueryDepOrderSourceRemainResponseData> checkHasSchedulingGroupByDate(List<Schedule> scheduleList, int startOffset, int endOffset) {
  317. List<QueryDepOrderSourceRemainResponseData> remainResponseList = new ArrayList<>();
  318. if (endOffset > startOffset && !Checker.isNone(scheduleList)) {
  319. for (int offset = startOffset; offset < endOffset; offset++ ){
  320. Calendar c = Calendar.getInstance();
  321. if (offset > 0) {
  322. c.add(Calendar.DATE, offset);
  323. }
  324. String strDate = DateUtil.formatDate(c.getTime(), "yyyy-MM-dd"); //日期
  325. List<Schedule> itemScheduleList = scheduleList.stream().filter(s -> strDate.equals(s.getServiceDate())).collect(Collectors.toList());
  326. QueryDepOrderSourceRemainResponseData data = new QueryDepOrderSourceRemainResponseData();
  327. int remain = 0; //当期日期是否有排班
  328. if (!Checker.isNone(itemScheduleList)){
  329. remain = itemScheduleList.stream().mapToInt(Schedule::getAvailableLeftNum).sum();
  330. }
  331. data.setDate(strDate);
  332. data.setRemain(remain);
  333. remainResponseList.add(data);
  334. }
  335. }
  336. return remainResponseList;
  337. }
  338. private GetDoctorByHisCodeResponse getDoctorByHisCode(String doctorCode, int hospitalId) {
  339. GetDoctorByHisCodeRequest getDoctorByHisCodeRequest = GetDoctorByHisCodeRequest.newBuilder()
  340. .setHospitalId(hospitalId)
  341. .setHisCode(doctorCode)
  342. .build();
  343. return doctorServiceBlockingStub.getDoctorByHisCode(getDoctorByHisCodeRequest);
  344. }
  345. @Override
  346. public List<QueryDoctorOrderSourceListResponseData> queryDoctorOrderSourceList(QueryDoctorOrderSourceListRequest request) throws Exception {
  347. int hospitalId = BizUtil.getCurrentHospitalId();
  348. String deptCode = request.getDepCode();
  349. String doctorCode = request.getDoctorCode();
  350. String serviceDate = request.getServiceDate();
  351. Integer period = request.getPeriod();
  352. if (StringHelper.isNullOrWhiteSpace(deptCode)) {
  353. throw new AppMessageException("科室不存在");
  354. }
  355. if (StringHelper.isNullOrWhiteSpace(doctorCode)) {
  356. throw new AppMessageException("医生不存在");
  357. }
  358. if (hospitalId <= 0) {
  359. hospitalId = BizUtil.getHospitalIdByTerminalId(BizUtil.getCurrentTerminalWrapped());
  360. }
  361. List<Map<String, Object>> dataList = new LinkedList<>();
  362. if (!StringHelper.isNullOrWhiteSpace(serviceDate)) {
  363. Date date = DateUtil.parseDate(serviceDate, "yyyy-MM-dd");
  364. if (date == null) {
  365. throw new AppMessageException("invalid serviceDate");
  366. }
  367. //查询医生某一天的排班分时信息
  368. if (period == null) {
  369. throw new AppMessageException("请选择时段");
  370. }
  371. if (DatePeriodEnum.valueOf(period) == null) {
  372. throw new AppMessageException("时段不存在");
  373. }
  374. String strDate = DateUtil.formatDate(date, "yyyy-MM-dd");
  375. Map<String, Object> map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, period, hospitalId);
  376. if (map != null) {
  377. dataList.add(map);
  378. }
  379. } else {
  380. //取医生8天排班的分时信息
  381. int[] periods = {DatePeriodEnum.MORNING.getValue(), DatePeriodEnum.AFTERNOON.getValue()};
  382. Calendar calendar = Calendar.getInstance();
  383. for (int offset = 0; offset < 8; offset++) {
  384. calendar.add(Calendar.DATE, 1);
  385. String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
  386. for (int p : periods) {
  387. Map<String, Object> map = getScheduleTimeInfoResponse(deptCode, doctorCode, strDate, p, hospitalId);
  388. if (map != null) {
  389. dataList.add(map);
  390. }
  391. }
  392. }
  393. }
  394. String deptName = "";
  395. String doctorName = "";
  396. String avatar = "";
  397. String doctorTitle = "";
  398. String doctorSpec = "";
  399. double fee = 0; //单位:元
  400. int regFee = 0; //单位:分
  401. int treatFee = 0; //单位:分
  402. int amount = 0; //单位:分
  403. String feeStr = "";
  404. String regFeeStr = "";
  405. String treatFeeStr = "";
  406. int doctorId = 0;
  407. if (dataList.size() > 0) {
  408. Map<String, Object> map = dataList.get(0);
  409. String strDate = map.get("serviceDate").toString();
  410. GetScheduleListRequest getScheduleListRequest = GetScheduleListRequest.newBuilder()
  411. .setDeptCode(deptCode)
  412. .setDoctorCode(doctorCode)
  413. .setServiceDate(strDate)
  414. .setHospitalId(hospitalId)
  415. .build();
  416. GetScheduleListResponse getScheduleListResponse = taiheServiceBlockingStub.getScheduleList(getScheduleListRequest);
  417. if (getScheduleListResponse.getCode() == ResultCode.SUCCEED_VALUE) {
  418. List<Schedule> scheduleList = getScheduleListResponse.getSchedulesList();
  419. if (scheduleList.size() > 0) {
  420. Schedule schedule = scheduleList.stream().filter(s -> s.getDatePeriod() == Checker.getIntegerValue(period)).findFirst().orElse(null);
  421. if (schedule != null) {
  422. deptName = schedule.getDeptName();
  423. doctorName = schedule.getDoctorName();
  424. avatar = schedule.getAvatar();
  425. doctorTitle = schedule.getDoctorTitle();
  426. doctorSpec = schedule.getDoctorSpec();
  427. amount = schedule.getFee();
  428. fee = schedule.getFee() / 100d;
  429. regFee = schedule.getRegFee();
  430. treatFee = schedule.getCheckupFee();
  431. } else {
  432. throw new AppMessageException("当前时间段没有匹配的排班数据");
  433. }
  434. }
  435. }
  436. }
  437. GetDoctorByHisCodeResponse getDoctorByHisCodeResponse = getDoctorByHisCode(doctorCode, hospitalId);
  438. if (getDoctorByHisCodeResponse.getResult().getCode() == ResultCode.SUCCEED) {
  439. if (!StringHelper.isNullOrWhiteSpace(getDoctorByHisCodeResponse.getAvatar())) {
  440. avatar = getDoctorByHisCodeResponse.getAvatar();
  441. } else {
  442. avatar = ConstantDef.DOCTOR_AVATAR_URL;
  443. }
  444. doctorId = getDoctorByHisCodeResponse.getDoctorId();
  445. }
  446. if (systemSrv.checkIsNetDept(deptCode, hospitalId)) {
  447. //南方医院太和分院(互联网医院名医诊区)
  448. // v3.2.0 线下就诊费用单独设置
  449. // v3.3.8 即使咨询关闭,仍然可以线下问诊,问诊费用要正常显示
  450. DoctorRequest doctorRequest = DoctorRequest.newBuilder()
  451. .setUserid(doctorId)
  452. .build();
  453. DoctorInfoResponse doctorInfoResponse = doctorServiceBlockingStub.getDoctorInfo(doctorRequest);
  454. if (doctorInfoResponse.getResult().getCode() != ResultCode.SUCCEED) {
  455. throw new AppMessageException(String.format("无法获取医生信息: %s", doctorInfoResponse.getResult().getInfo()));
  456. }
  457. // 线下就诊费用跟问诊费分开,线下就诊费用读取 offline_fee 字段
  458. int consultFee = Checker.getIntegerValue(doctorInfoResponse.getInfo().getOfflineFee());
  459. amount = consultFee;
  460. fee = consultFee / 100d;
  461. regFee = 0;
  462. treatFee = 0;
  463. }
  464. // amount = 1;
  465. // fee = 0.01;
  466. // regFee = 0;
  467. // treatFee = 1;//测试
  468. feeStr = String.format("¥%.2f", fee);
  469. regFeeStr = String.format("¥%.2f", regFee / 100d);
  470. treatFeeStr = String.format("¥%.2f", treatFee / 100d);
  471. Map<String, Object> data = new HashMap<>();
  472. data.put("list", dataList);
  473. data.put("hospitalName", BizUtil.getHospitalNameByIdSimply(hospitalId));
  474. data.put("deptCode", deptCode);
  475. data.put("deptName", deptName);
  476. data.put("doctorCode", doctorCode);
  477. data.put("doctorName", doctorName);
  478. data.put("avatar", avatar);
  479. data.put("doctorTitle", doctorTitle);
  480. data.put("doctorSpec", doctorSpec);
  481. data.put("amount", amount);
  482. data.put("fee", fee);
  483. data.put("regFee", regFee);
  484. data.put("treatFee", treatFee);
  485. data.put("feeStr", feeStr);
  486. data.put("regFeeStr", regFeeStr);
  487. data.put("treatFeeStr", treatFeeStr);
  488. data.put("doctorId", doctorId); //医生ID
  489. // todo:20210527 为了提高预约挂号速度,弄一个列表用作缓冲
  490. // String userKey = String.format(ConstantDef.YWT_COVID19_LIST_KEY, userService.getCurrentOpenId());
  491. // if (!checkExistYwtCovid19ListKey(userKey)) {
  492. // return response.failedWithParameterError("请稍后再查询,谢谢!");
  493. // }
  494. return null;
  495. }
  496. /**
  497. * 得到分时排班信息
  498. *
  499. * @param deptCode
  500. * @param doctorCode
  501. * @param serviceDate
  502. * @param period
  503. * @return
  504. */
  505. private Map<String, Object> getScheduleTimeInfoResponse(String deptCode, String doctorCode, String serviceDate,
  506. int period, int hospitalId) {
  507. List<Map<String, Object>> lst = new LinkedList<>();
  508. GetScheduleTimeInfoRequest getScheduleTimeInfoRequest = GetScheduleTimeInfoRequest.newBuilder()
  509. .setDeptCode(deptCode)
  510. .setDoctorCode(doctorCode)
  511. .setServiceDate(serviceDate)
  512. .setDatePeriod(period)
  513. .setHospitalId(hospitalId)
  514. .build();
  515. GetScheduleTimeInfoResponse getScheduleTimeInfoResponse = taiheServiceBlockingStub.getScheduleTimeInfo(getScheduleTimeInfoRequest);
  516. if (getScheduleTimeInfoResponse.getCode() == ResultCode.SUCCEED_VALUE) {
  517. List<ScheduleTimeInfo> scheduleTimeInfoList = getScheduleTimeInfoResponse.getScheduleTimeInfosList();
  518. Calendar calendar = Calendar.getInstance();
  519. String strDate = DateUtil.formatDate(calendar.getTime(), "yyyy-MM-dd");
  520. String strTime = DateUtil.formatDate(calendar.getTime(), "HHmm");
  521. int time = Integer.parseInt(strTime);
  522. String strEndTime;
  523. String flag;
  524. int tmp;
  525. int left;
  526. for (ScheduleTimeInfo scheduleTimeInfo : scheduleTimeInfoList) {
  527. flag = scheduleTimeInfo.getAvailableFlag();
  528. left = scheduleTimeInfo.getAvailableLeftNum();
  529. if (strDate.equals(serviceDate) && !StringHelper.isNullOrWhiteSpace(scheduleTimeInfo.getEndTime())) {
  530. strEndTime = scheduleTimeInfo.getEndTime();
  531. tmp = Integer.parseInt(strEndTime.replace(":", ""));
  532. if (tmp < time) {
  533. left = 0;
  534. flag = "N";
  535. }
  536. }
  537. Map<String, Object> map = new HashMap<>();
  538. map.put("scheduleItemCode", scheduleTimeInfo.getScheduleItemCode());
  539. map.put("startTime", scheduleTimeInfo.getStartTime());
  540. map.put("endTime", scheduleTimeInfo.getEndTime());
  541. map.put("availableTotalNum", scheduleTimeInfo.getAvailableTotalNum());
  542. map.put("availableLeftNum", left);
  543. map.put("availableFlag", flag);
  544. map.put("availableNumStr", scheduleTimeInfo.getAvailableNumStr());
  545. lst.add(map);
  546. }
  547. }
  548. if (lst.size() > 0) {
  549. Map<String, Object> dateMap = new HashMap<>();
  550. dateMap.put("serviceDate", serviceDate);
  551. dateMap.put("period", period);
  552. dateMap.put("datePeriod", DatePeriodEnum.valueOf(period).getDisplayName());
  553. dateMap.put("schedule", lst);
  554. return dateMap;
  555. }
  556. return null;
  557. }
  558. // 挂号确认
  559. @Override
  560. public OrderConfirmResponseData orderConfirm(OrderConfirmRequest request) throws Exception {
  561. log.info("IsvRegisterServiceImpl#orderConfirm--OrderConfirmRequest:{}", JsonSerializer.toJson(request));
  562. int userId = ContextHelper.getCurrentUserIdWrapped();//用户唯一识别号
  563. int hospitalId = BizUtil.getCurrentHospitalId();
  564. String deptCode = request.getDeptCode();
  565. String deptName = request.getDeptName();
  566. String doctorCode = request.getDoctorCode();
  567. String doctorName = request.getDoctorName();
  568. double registeredFee = request.getRegisteredFee();
  569. double medicalFee = request.getMedicalFee();
  570. String registeredDate = request.getRegisteredDate();
  571. int period = request.getPeriod();
  572. String startTime = request.getStartTime();
  573. String endTime = request.getEndTime();
  574. int medicalCardId = request.getMedicalCardId();
  575. String scheduleItemCode = request.getScheduleItemCode();
  576. if (hospitalId < 1) {
  577. throw new AppMessageException("医院不存在");
  578. }
  579. if (StringHelper.isNullOrWhiteSpace(deptCode) || StringHelper.isNullOrWhiteSpace(deptName)) {
  580. throw new AppMessageException("科室不存在");
  581. }
  582. if (StringHelper.isNullOrWhiteSpace(doctorCode) || StringHelper.isNullOrWhiteSpace(doctorName)) {
  583. throw new AppMessageException("医生不存在");
  584. }
  585. if (StringHelper.isNullOrWhiteSpace(registeredDate)) {
  586. throw new AppMessageException("请选择挂号日期");
  587. }
  588. Date date = DateUtil.parseDate(registeredDate, "yyyy-MM-dd");
  589. if (date == null) {
  590. throw new AppMessageException("预约日期格式不正确");
  591. }
  592. DatePeriodEnum datePeriodEnum = DatePeriodEnum.valueOf(period);
  593. if (datePeriodEnum == null) {
  594. throw new AppMessageException("预约时段不存在");
  595. }
  596. if (StringHelper.isNullOrWhiteSpace(startTime)) {
  597. throw new AppMessageException("预约开始时间不存在");
  598. }
  599. if (StringHelper.isNullOrWhiteSpace(endTime)) {
  600. throw new AppMessageException("预约结束时间不存在");
  601. }
  602. if (medicalCardId < 1) {
  603. throw new AppMessageException("请选择就诊人");
  604. }
  605. if (StringHelper.isNullOrWhiteSpace(scheduleItemCode)) {
  606. throw new AppMessageException("门诊排班项记录标识不能为空");
  607. }
  608. int total = (int) ((registeredFee + medicalFee) * 100);
  609. int source;
  610. int terminal = ContextHelper.getCurrentTerminalWrapped();
  611. switch (TerminalEnum.valueOf(terminal)) {
  612. case TAI_HE_OFFICIAL:
  613. source = TerminalEnum.TAI_HE_OFFICIAL.getValue();
  614. break;
  615. case NFYYBYFY_WXAPP:
  616. source = TerminalEnum.NFYYBYFY_WXAPP.getValue();
  617. break;
  618. default:
  619. source = TerminalEnum.TaiheWxOfficial.getValue();
  620. break;
  621. }
  622. int paymentChannel = total > 0 ? PaymentChannelEnum.WX_PAY.getValue() : PaymentChannelEnum.FREE.getValue();
  623. CreateTaiheRegisteredOrderRequest req = CreateTaiheRegisteredOrderRequest.newBuilder()
  624. .setHospitalId(hospitalId)
  625. .setDeptCode(deptCode)
  626. .setDeptName(deptName)
  627. .setDoctorCode(doctorCode)
  628. .setDoctorName(doctorName)
  629. .setTotal(total)
  630. .setRegisteredFee((int) (registeredFee * 100))
  631. .setMedicalFee((int) (medicalFee * 100))
  632. .setRegisteredDate(date.getTime())
  633. .setStartTime(startTime)
  634. .setEndTime(endTime)
  635. .setUserId(userId)
  636. .setMedicalCardId(medicalCardId)
  637. .setScheduleItemCode(scheduleItemCode)
  638. .setPaymentChannel(paymentChannel)
  639. .setSource(source)
  640. .build();
  641. CreateTaiheRegisteredOrderResponse res = orderServiceBlockingStub.createTaiheRegisteredOrder(req);
  642. Result result = res.getResult();
  643. if (result.getCode() != ResultCode.SUCCEED) {
  644. throw new AppMessageException(result.getInfo()); //预约失败
  645. }
  646. if (!systemSrv.checkIsNetDept(deptCode, hospitalId)) {
  647. //非互联网医院名医诊区挂号
  648. OrderConfirmResponseData responseData = new OrderConfirmResponseData();
  649. responseData.setOrderId(res.getOrderId() + "");
  650. responseData.setOrderType(res.getOrderType());
  651. responseData.setAmount(String.format("%.2f", (registeredFee + medicalFee)));
  652. responseData.setStatus(res.getStatus());
  653. return responseData;
  654. }
  655. return null;
  656. }
  657. @Override
  658. public QueryOrderDetailResponseData queryOrderDetail(QueryOrderDetailRequest request) {
  659. return null;
  660. }
  661. @Override
  662. public PageVO<QueryOrderListResponseData> queryOrderList(QueryOrderListRequest request) {
  663. return null;
  664. }
  665. @Override
  666. public CancelOrderResponseData cancelOrder(CancelOrderRequest request) throws Exception {
  667. CancelOrderResponseData responseData = new CancelOrderResponseData();
  668. String orderIdStr = request.getOrderId();
  669. if (Checker.isNone(orderIdStr) || Integer.parseInt(orderIdStr) <= 0) {
  670. throw new AppMessageException("订单不存在");
  671. }
  672. int orderId = Integer.parseInt(orderIdStr);
  673. int userId = ContextHelper.getCurrentUserIdWrapped();
  674. CancelRegisteredRequest req = CancelRegisteredRequest.newBuilder()
  675. .setOrderId(orderId)
  676. .setUserId(userId)
  677. .build();
  678. CancelRegisteredResponse res = taiheRegisterServiceBlockingStub.cancelRegistered(req);
  679. responseData.setIsSuccess(false);
  680. if (res.getCode() == ResultCode.SUCCEED_VALUE) {
  681. responseData.setIsSuccess(true);
  682. }
  683. return responseData;
  684. }
  685. @Override
  686. public List<QueryHospitalDistrictListResponseData> queryHospitalDistrictList(QueryHospitalDistrictListRequest request) throws Exception {
  687. int hospitalId = BizUtil.getCurrentHospitalId();
  688. List<Integer> hospitalIds = new ArrayList<>();
  689. hospitalIds.add(hospitalId);
  690. GetHospitalByHospitalIdsRequest req = GetHospitalByHospitalIdsRequest.newBuilder()
  691. .addAllHospitalId(hospitalIds)
  692. .build();
  693. GetHospitalByHospitalIdsResponse res = systemServiceBlockingStub.getHospitalByHospitalIds(req);
  694. if (res.getCode() != ResultCode.SUCCEED.getNumber()) {
  695. throw new AppMessageException(res.getMessage());
  696. }
  697. List<Map<String, Object>> list = new LinkedList<>();
  698. List<Hospital> hospitalList = res.getHospitalList();
  699. List<Hospital> subHospList = hospitalList.stream().filter(h -> Checker.getIntegerValue(h.getParentId()) > 0).collect(Collectors.toList());
  700. Set<Integer> parentHospitalIds = subHospList.stream().map(h -> Checker.getIntegerValue(h.getParentId())).collect(Collectors.toSet());
  701. List<Hospital> filteredParentHospitalList = hospitalList.stream().filter(h -> Checker.getIntegerValue(h.getParentId()) == 0 && !parentHospitalIds.contains(h.getHospitalId())).collect(Collectors.toList());
  702. List<QueryHospitalDistrictListResponseData> responseDataList = new ArrayList<>();
  703. for (Hospital h : subHospList) {
  704. QueryHospitalDistrictListResponseData item = new QueryHospitalDistrictListResponseData();
  705. item.setHospitalDistrictId(h.getHospitalId() + "");
  706. item.setName(h.getHospitalName());
  707. item.setAddress(h.getAddress());
  708. item.setDescription("");
  709. Map<String, String> map = new HashMap<>();
  710. map.put("hospitalId", h.getParentId() + "");
  711. map.put("subHospitalId", h.getHospitalId() + "");
  712. map.put("hospitalLogo", h.getLogo());
  713. HospitalCustomInfo p = BizUtil.getHospitalCustomInfo(h.getHospitalId());
  714. if (p != null) {
  715. map.put("alias", p.getAlias());
  716. map.put("areaName", p.getAreaName());
  717. }
  718. item.setExtInfo(map);
  719. responseDataList.add(item);
  720. }
  721. for (Hospital h : filteredParentHospitalList) {
  722. QueryHospitalDistrictListResponseData item = new QueryHospitalDistrictListResponseData();
  723. item.setHospitalDistrictId(h.getHospitalId() + "");
  724. item.setName(h.getHospitalName());
  725. item.setAddress(h.getAddress());
  726. item.setDescription("");
  727. Map<String, String> map = new HashMap<>();
  728. map.put("hospitalId", h.getHospitalId() + "");
  729. map.put("subHospitalId", "0");
  730. map.put("hospitalLogo", h.getLogo());
  731. HospitalCustomInfo p = BizUtil.getHospitalCustomInfo(h.getHospitalId());
  732. if (p != null) {
  733. map.put("alias", p.getAlias());
  734. map.put("areaName", p.getAreaName());
  735. }
  736. item.setExtInfo(map);
  737. responseDataList.add(item);
  738. }
  739. return responseDataList;
  740. }
  741. @Override
  742. public List<QueryQueueListResponse> queryQueueList(QueryQueueListRequest request) throws Exception {
  743. log.info("IsvRegisterServiceImpl#queryQueueList--QueryQueueListRequest:{}", JsonSerializer.toJson(request));
  744. int hospitalId = BizUtil.getCurrentHospitalId();
  745. //用户唯一识别号
  746. int userId = ContextHelper.getCurrentUserIdWrapped();
  747. List<QueryQueueListResponse> list = new LinkedList<>();
  748. com.ywt.gapi.taihe.register.GetQueueListRequest req = com.ywt.gapi.taihe.register.GetQueueListRequest.newBuilder()
  749. .setUserId(userId)
  750. .setHospitalId(hospitalId)
  751. .build();
  752. com.ywt.gapi.taihe.register.GetQueueListResponse res = taiheRegisterServiceBlockingStub.getQueueList(req);
  753. if (res.getCode() != ResultCode.SUCCEED_VALUE) {
  754. throw new AppMessageException(res.getMsg());
  755. }
  756. List<com.ywt.gapi.taihe.register.RegisteredOrder> queueList = res.getOrderList();
  757. LocalDate now = LocalDate.now();
  758. for (com.ywt.gapi.taihe.register.RegisteredOrder order : queueList) {
  759. QueryQueueListResponse reportItem = new QueryQueueListResponse();
  760. int cancel = 0; //是否显示退号按钮,1-是,0-否
  761. LocalDate regDate = DateUtil.convertToLocalDate(new Date(order.getRegisteredDate()));//预约日期
  762. if (now.isBefore(regDate)) {
  763. cancel = 1;
  764. }
  765. String statusName = order.getStatusName();
  766. int status = order.getStatus();
  767. if (order.getStatus() == 1) {
  768. //已预约
  769. statusName = "未取号";
  770. if (DateUtil.convertTimestampToDateString(order.getRegisteredDate(), "yyyy-MM-dd").equals(
  771. DateUtil.formatDate(new Date(), "yyyy-MM-dd"))) {
  772. } else {
  773. status = 0;
  774. }
  775. }
  776. reportItem.setCardNum(order.getMedicalCardId() + "");//就诊卡卡号
  777. reportItem.setName(order.getPatientName());//就诊人姓名
  778. reportItem.setSex(SexEnum.getSexDisplayName(order.getSex()));//性别
  779. reportItem.setAge("");//年龄
  780. reportItem.setTitle(statusName);//排队标题
  781. reportItem.setDepName(order.getDeptName());//科室
  782. reportItem.setDoctorName(order.getDoctorName());//医生姓名
  783. reportItem.setDoctorDesc("");//医生描述
  784. reportItem.setAddress(order.getAddress());//就诊地点
  785. int queueNum = 0, leftOver = 0;
  786. GetQueueInfoRequest getQueueInfoRequest = GetQueueInfoRequest.newBuilder()
  787. .setRegistrationId(order.getHisSeqCode())
  788. .setHospitalId(hospitalId)
  789. .build();
  790. GetQueueInfoResponse getQueueInfoResponse = taiheServiceBlockingStub.getQueueInfo(getQueueInfoRequest);
  791. if (getQueueInfoResponse.getCode() == ResultCode.SUCCEED_VALUE) {
  792. QueueInfo data = getQueueInfoResponse.getQueueInfo();
  793. queueNum = data.getWaitingNumber();
  794. }
  795. reportItem.setQueueNum(queueNum + "");//排队编号
  796. reportItem.setLeftover("0");//前面排队剩余人数
  797. reportItem.setStatus(statusName);//状态,expired:已过号,queuing:排队中,ringing:叫号中,completed:已完成
  798. reportItem.setContext(order.getRemark());//排队结束显示内容
  799. list.add(reportItem);
  800. }
  801. return list;
  802. }
  803. @Override
  804. public QueryDoctorInfoResponseData queryDoctorInfo(QueryDoctorInfoRequest request) throws Exception {
  805. int doctorId = Integer.parseInt(Checker.getStringValue(request.getDoctorId(), "0"));
  806. int hospitalId = BizUtil.getCurrentHospitalId();
  807. if (doctorId < 1) {
  808. throw new AppMessageException("invalid doctorId");
  809. }
  810. QueryDoctorInfoResponseData responseData = new QueryDoctorInfoResponseData();
  811. GetDoctorRequest req = GetDoctorRequest.newBuilder().setDoctorId(doctorId).build();
  812. GetDoctorResponse resp = doctorServiceBlockingStub.getDoctor(req);
  813. Result result = resp.getResult();
  814. if (result.getCode() != ResultCode.SUCCEED) {
  815. throw new AppMessageException(result.getInfo());
  816. }
  817. DoctorInfo info = resp.getDoctorInfo();
  818. responseData.setDoctorId(info.getDoctorid() + "");//医生id
  819. responseData.setName(info.getName());//医生姓名
  820. responseData.setLevel(info.getTitle());//医生职级
  821. responseData.setPicUrl(info.getAvatar());//医生头像地址
  822. responseData.setDescription(info.getBriefIntro());//医生简介
  823. responseData.setSpecialty(info.getSpecialty());//擅长领域
  824. responseData.setDistrictName(systemSrv.getHospitalNameById(hospitalId));//院区名称
  825. List<Department> departmentList = new ArrayList<>();
  826. Department department = new Department();
  827. department.setName(info.getDept());
  828. department.setDepartmentId(info.getDeptIds());
  829. departmentList.add(department);
  830. responseData.setDepartments(departmentList);
  831. return responseData;
  832. }
  833. @Override
  834. public PageVO<QueryDoctorListResponseData> queryDoctorList(QueryDoctorListRequest request) throws Exception {
  835. log.info("IsvRegisterServiceImpl#queryDoctorList--QueryDoctorListRequest:{}", JsonSerializer.toJson(request));
  836. int pageIndex = request.getPageIndex();
  837. int pageSize = request.getPageSize();
  838. String deptCode = request.getDeptCode();
  839. String doctorName = request.getDoctorName();
  840. int hospitalId = BizUtil.getCurrentHospitalId();
  841. GetDoctorListRequest getDoctorListRequest = GetDoctorListRequest.newBuilder()
  842. .setDeptCode(deptCode)
  843. .setDoctorName(doctorName)
  844. .setHospitalId(hospitalId)
  845. .build();
  846. GetDoctorListResponse getDoctorListResponse = taiheServiceBlockingStub.getDoctorList(getDoctorListRequest);
  847. int total = 0;
  848. List<QueryDoctorListResponseData> doctorList = new LinkedList<>();
  849. if (getDoctorListResponse.getCode() == ResultCode.SUCCEED_VALUE) {
  850. List<com.ywt.gapi.third.taihe.Doctor> doctorsList = getDoctorListResponse.getDoctorsList();
  851. total = doctorsList.size();
  852. for (com.ywt.gapi.third.taihe.Doctor doctor : doctorsList) {
  853. QueryDoctorListResponseData doctorItem = new QueryDoctorListResponseData();
  854. //医生id
  855. doctorItem.setDoctorId(doctor.getDoctorCode());
  856. //医生姓名
  857. doctorItem.setName(doctor.getDoctorName());
  858. //医生简介
  859. doctorItem.setDesc(doctor.getDoctorIntro());
  860. //医生头像地址
  861. doctorItem.setPicUrl("");
  862. //职级,医生职级
  863. doctorItem.setLevel(doctor.getDoctorTitle());
  864. //医生所在科室
  865. Department department = new Department();
  866. department.setDepartmentId(doctor.getDoctorDeptCode());
  867. department.setName(doctor.getDoctorDept());
  868. List<Department> deptList = new ArrayList();
  869. deptList.add(department);
  870. doctorItem.setDepartments(deptList);
  871. doctorList.add(doctorItem);
  872. }
  873. }
  874. Pagination pagination = new Pagination(pageIndex, pageSize, total);
  875. PageVO<QueryDoctorListResponseData> res = new PageVO<>(pagination, doctorList);
  876. return res;
  877. }
  878. }