Переглянути джерело

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

Walker 2 роки тому
батько
коміт
4046a7b4f5
18 змінених файлів з 593 додано та 43 видалено
  1. 4 4
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/core/utils/ContextHelper.java
  2. 43 0
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/enums/LastChoiceEnum.java
  3. 34 0
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/vo/InpatientVo.java
  4. 34 0
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/vo/MedicalCardVo.java
  5. 230 8
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/InpatientServiceImpl.java
  6. 2 0
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/IsvRegisterServiceImpl.java
  7. 172 5
      onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/IsvReportServiceImpl.java
  8. 35 9
      onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/InpatientController.java
  9. 22 10
      onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/ReportController.java
  10. 5 4
      onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/service/InpatientService.java
  11. 3 2
      onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/service/IsvReportService.java
  12. 2 0
      onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DailyBillDetailsRequest.java
  13. 0 1
      onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DailyBillRequest.java
  14. 2 0
      onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DepositTradeDetailsRequest.java
  15. 2 0
      onemini-hospital-sdk/src/main/java/com/ywt/request/report/QueryReportDetailRequest.java
  16. 1 0
      onemini-hospital-sdk/src/main/java/com/ywt/request/report/QueryReportListRequest.java
  17. 1 0
      onemini-hospital-sdk/src/main/java/com/ywt/response/register/QueryDepartmentListResponseData.java
  18. 1 0
      onemini-hospital-sdk/src/main/java/com/ywt/response/report/ReportItem.java

+ 4 - 4
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/core/utils/ContextHelper.java

@@ -11,13 +11,13 @@ public final class ContextHelper {
 
     // 提供一些包装方法,方便本地调试使用
     public static int getCurrentTerminalWrapped() {
-//        return TerminalEnum.NFYYBYFY_ALIPAY_MP.getValue();
-        return WebAppContext.current().getTerminal();
+        return TerminalEnum.NFYYBYFY_ALIPAY_MP.getValue();
+//        return WebAppContext.current().getTerminal();
     }
 
     public static int getCurrentUserIdWrapped() {
-//        return 5;
-        return WebAppContext.current().getUserId();
+        return 173140;
+//        return WebAppContext.current().getUserId();
     }
 
     public static String getAlipayUidWrapped() {

+ 43 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/enums/LastChoiceEnum.java

@@ -0,0 +1,43 @@
+package com.ywt.alipaympapi.models.enums;
+
+public enum LastChoiceEnum {
+
+    False("否", 0),
+    True("是", 1);
+
+    private final String displayName;
+
+    private int value = 0;
+
+    LastChoiceEnum(String displayName, int value) {
+        this.displayName = displayName;
+        this.value = value;
+    }
+
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public static LastChoiceEnum valueOf(int value) {
+        switch (value) {
+            case 1:
+                return True;
+            default:
+                return False;
+        }
+    }
+
+    public static String getSexDisplayName(int value){
+        LastChoiceEnum enumValue = valueOf(value);
+
+        if(enumValue != null){
+            return enumValue.getDisplayName();
+        }
+
+        return "未知";
+    }
+}

+ 34 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/vo/InpatientVo.java

@@ -0,0 +1,34 @@
+package com.ywt.alipaympapi.models.vo;
+
+public class InpatientVo {
+
+    private String admNo;
+
+    private String totalAmount;
+
+    private String depositBalance;
+
+    public String getAdmNo() {
+        return admNo;
+    }
+
+    public void setAdmNo(String admNo) {
+        this.admNo = admNo;
+    }
+
+    public String getTotalAmount() {
+        return totalAmount;
+    }
+
+    public void setTotalAmount(String totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+
+    public String getDepositBalance() {
+        return depositBalance;
+    }
+
+    public void setDepositBalance(String depositBalance) {
+        this.depositBalance = depositBalance;
+    }
+}

+ 34 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/models/vo/MedicalCardVo.java

@@ -0,0 +1,34 @@
+package com.ywt.alipaympapi.models.vo;
+
+public class MedicalCardVo {
+
+    private String patientName;
+
+    private String hisPatientId;
+
+    private int sex;
+
+    public String getPatientName() {
+        return patientName;
+    }
+
+    public void setPatientName(String patientName) {
+        this.patientName = patientName;
+    }
+
+    public String getHisPatientId() {
+        return hisPatientId;
+    }
+
+    public void setHisPatientId(String hisPatientId) {
+        this.hisPatientId = hisPatientId;
+    }
+
+    public int getSex() {
+        return sex;
+    }
+
+    public void setSex(int sex) {
+        this.sex = sex;
+    }
+}

+ 230 - 8
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/InpatientServiceImpl.java

@@ -1,5 +1,17 @@
 package com.ywt.alipaympapi.service.impl;
 
+import com.ywt.alipaympapi.core.utils.*;
+import com.ywt.alipaympapi.models.BaseResponse;
+import com.ywt.alipaympapi.models.enums.LastChoiceEnum;
+import com.ywt.alipaympapi.models.vo.InpatientVo;
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.gapi.Result;
+import com.ywt.gapi.ResultCode;
+import com.ywt.gapi.third.taihe.*;
+import com.ywt.gapi.user.GetMedicalCardListRequest;
+import com.ywt.gapi.user.GetMedicalCardListResponse;
+import com.ywt.gapi.user.MedicalCard;
+import com.ywt.gapi.user.UserServiceGrpc;
 import com.ywt.request.inpatient.DailyBillDetailsRequest;
 import com.ywt.request.inpatient.DailyBillRequest;
 import com.ywt.request.inpatient.DepositTradeDetailsRequest;
@@ -37,10 +49,14 @@ import com.ywt.response.inpatient.SettlementExecuteResponseData;
 import com.ywt.response.inpatient.SettlementListResponseData;
 import com.ywt.response.inpatient.SettlementQueryResponseData;
 import com.ywt.alipaympapi.service.InpatientService;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import sun.util.calendar.BaseCalendar;
 
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @author
@@ -49,6 +65,14 @@ import java.util.List;
 @Service
 public class InpatientServiceImpl implements InpatientService {
 
+
+    @Autowired
+    private TaiheServiceGrpc.TaiheServiceBlockingStub taiheServiceBlockingStub;
+
+
+    @Autowired
+    private UserServiceGrpc.UserServiceBlockingStub userServiceBlockingStub;
+
     @Override
     public SettlementQueryResponseData informTradeResult(SettlementQueryRequest request) {
         return null;
@@ -65,8 +89,30 @@ public class InpatientServiceImpl implements InpatientService {
     }
 
     @Override
-    public List<InpatientListResponseData> inpatientList(InpatientListRequest request) {
-        return null;
+    public List<InpatientListResponseData> inpatientList(InpatientListRequest request) throws Exception {
+        int userId = ContextHelper.getCurrentUserIdWrapped();
+        int hospId = BizUtil.getCurrentHospitalId();
+        List<InpatientListResponseData> list = new ArrayList<>();
+        GetMedicalCardListRequest getMedicalCardListRequest = GetMedicalCardListRequest.newBuilder()
+                .setHospitalId(hospId)
+                .setUserId(userId)
+                .setFlag(0)
+                .build();
+        GetMedicalCardListResponse getMedicalCardListResponse = userServiceBlockingStub.getMedicalCardList(getMedicalCardListRequest);
+        Result result = getMedicalCardListResponse.getResult();
+        if (result.getCode() == ResultCode.SUCCEED) {
+            for (MedicalCard medicalCard : getMedicalCardListResponse.getMedicalCardsList()) {
+                InpatientListResponseData data = new InpatientListResponseData();
+                data.setPatientId(medicalCard.getPatientId());
+                data.setInpatientName(medicalCard.getPatientName());
+                data.setSex(medicalCard.getSex() == 1 ? "男" : "女");
+                Date date = DateUtil.stringToDate(medicalCard.getBirthday(), DateUtil.DADE_FROMAT_YMD);
+                data.setInpatientAge(IdCardUtil.getCurrentAgeCommon(date));
+                list.add(data);
+            }
+            return list;
+        }
+        throw new AppMessageException("该用户没有绑定诊疗卡");
     }
 
     @Override
@@ -75,13 +121,169 @@ public class InpatientServiceImpl implements InpatientService {
     }
 
     @Override
-    public List<DailyBillResponseData> dailyBillList(DailyBillRequest request) {
-        return null;
+    public List<DailyBillResponseData> dailyBillList(DailyBillRequest request) throws Exception {
+        List<DailyBillResponseData> dailyBillList = new ArrayList<>();
+        List<MedicalCard> userMedCardList = new ArrayList<>();
+        int userId = ContextHelper.getCurrentUserIdWrapped();
+        String hospitalId = request.getHospitalDistrictId();
+        String date = DateUtil.formatDate(new Date(), "yyyy-MM-dd");
+        int hospId = Integer.parseInt(hospitalId); // fixme
+//        String hisPatientId = "";
+        userMedCardList = getUserMedCardList(userId, hospId);
+        if (Checker.isNone(userMedCardList)) {
+            return dailyBillList;
+        }
+        for (MedicalCard m : userMedCardList) {
+            DailyBillResponseData data = new DailyBillResponseData();
+            InpatientVo vo = null;
+            String admNo = "";
+            String hisPatientId = m.getHisPatientId();
+            vo = getInpatientVo(userId, hisPatientId);
+            String totalAmount = Checker.getStringValue(vo.getTotalAmount());
+            String depositBalance = Checker.getStringValue(vo.getDepositBalance());
+            admNo = Checker.getStringValue(vo.getAdmNo());
+            GetDayFeeListRequest req = GetDayFeeListRequest.newBuilder()
+                    .setPatientId(hisPatientId)
+                    .setBillDate(date)
+                    .setHospitalId(hospId)
+                    .setAdmNo(admNo)
+                    .build();
+            GetDayFeeListResponse resp = taiheServiceBlockingStub.getDayFeeList(req);
+            int todaySpend = 0;
+            if (resp.getCode() == BaseResponse.SUCCEED) {
+                List<DayFeeListItem> list = resp.getListList();
+                for (DayFeeListItem item : list) {
+                    todaySpend += item.getTotalAmt();
+                }
+                String patientName = Checker.getStringValue(resp.getPatientName());
+                data.setDepositBalance(depositBalance);
+                data.setSpendTotal(totalAmount);
+                data.setInpatientName(patientName);
+                data.setInpatientId(Checker.getStringValue(hisPatientId));
+                data.setCheckInDate(Checker.getStringValue(""));
+                data.setSpendToday(String.format("%.2f", todaySpend / 100d));
+                data.setId(Checker.getStringValue(""));
+                dailyBillList.add(data);
+            }
+        }
+        return dailyBillList;
+    }
+
+
+    /**
+     * 根据 userId & hospitalId 获取用户可用就诊卡列表
+     */
+    public List<MedicalCard> getUserMedCardList(int userId, int hospitalId) throws AppMessageException {
+        GetMedicalCardListRequest getMedicalCardListRequest = GetMedicalCardListRequest.newBuilder()
+                .setHospitalId(hospitalId)
+                .setUserId(userId)
+                .build();
+        GetMedicalCardListResponse getMedicalCardListResponse = userServiceBlockingStub.getMedicalCardList(getMedicalCardListRequest);
+        Result result = getMedicalCardListResponse.getResult();
+        if (result.getCode() != ResultCode.SUCCEED) throw new AppMessageException(result.getInfo());
+        return getMedicalCardListResponse.getMedicalCardsList();
+    }
+
+
+    private InpatientVo getInpatientVo(int userId, String hisPatientId) throws Exception {
+        InpatientVo vo = new InpatientVo();
+        GetInPatInfoRequest req = GetInPatInfoRequest.newBuilder()
+                .setPatientId(hisPatientId)
+                .setHospitalId(BizUtil.getCurrentHospitalId())
+                .build();
+        GetInPatInfoResponse resp = taiheServiceBlockingStub.getInPatInfo(req);
+        if (resp.getCode() == BaseResponse.SUCCEED) {
+            String totalAmount = String.format("%.2f", resp.getTotalAmount() / 100d);
+            String.format("%.2f", resp.getDepositAmount() / 100d);
+            String depositBalance = String.format("%.2f", resp.getDepositBalance() / 100d);
+            vo.setAdmNo(resp.getAdmNo());
+            vo.setTotalAmount(totalAmount);
+            vo.setDepositBalance(depositBalance);
+            return vo;
+        }
+        return vo;
+    }
+
+
+    /**
+     * 根据用户ID获取用户诊疗卡信息(选择上一次选择的诊疗卡,或者是第一张)
+     *
+     * @return {@link MedicalCard}
+     */
+    private MedicalCard getMedicalCardByHisPatientId(int userId) {
+        MedicalCard medicalCard = null;
+        // 则获取当前用户的第一张诊疗卡,或者是上一次选择的诊疗卡(优先)
+        GetMedicalCardListRequest getMedicalCardListRequest = GetMedicalCardListRequest.newBuilder()
+                .setUserId(userId)
+                .build();
+        GetMedicalCardListResponse getMedicalCardListResponse = userServiceBlockingStub.getMedicalCardList(getMedicalCardListRequest);
+        Result result = getMedicalCardListResponse.getResult();
+        if (result.getCode() == ResultCode.SUCCEED) {
+            List<MedicalCard> cardList = getMedicalCardListResponse.getMedicalCardsList();
+            if (!Checker.isNone(cardList)) {
+                medicalCard = cardList.stream().filter(p -> p.getLastChoice() == LastChoiceEnum.True.getValue()).findFirst().orElse(null);
+                if (Checker.isNone(medicalCard)) {
+                    medicalCard = cardList.get(0);
+                }
+            }
+        }
+        return medicalCard;
     }
 
     @Override
-    public DailyBillDetailsResponseData dailyBillDetail(DailyBillDetailsRequest request) {
-        return null;
+    public DailyBillDetailsResponseData dailyBillDetail(DailyBillDetailsRequest request) throws Exception {
+        DailyBillDetailsResponseData data = new DailyBillDetailsResponseData();
+        int userId = ContextHelper.getCurrentUserIdWrapped();
+        int hospitalId = BizUtil.getCurrentHospitalId();
+        String date = request.getBillDate();
+        List<MedicalCard> userMedCardList = new ArrayList<>();
+        userMedCardList = getUserMedCardList(userId, hospitalId);
+        if (Checker.isNone(userMedCardList)) {
+            throw new AppMessageException("该用户没有绑定诊疗卡");
+        }
+        for (MedicalCard m : userMedCardList) {
+            if (m.getPatientId().equals(request.getHisPatientId())) {
+                InpatientVo vo = null;
+                String admNo = "";
+                String hisPatientId = m.getHisPatientId();
+                vo = getInpatientVo(userId, hisPatientId);
+                String totalAmount = Checker.getStringValue(vo.getTotalAmount());
+                String depositBalance = Checker.getStringValue(vo.getDepositBalance());
+                admNo = Checker.getStringValue(vo.getAdmNo());
+                GetDayFeeListRequest req = GetDayFeeListRequest.newBuilder()
+                        .setPatientId(hisPatientId)
+                        .setBillDate(request.getBillDate())
+                        .setHospitalId(hospitalId)
+                        .setAdmNo(admNo)
+                        .build();
+                GetDayFeeListResponse resp = taiheServiceBlockingStub.getDayFeeList(req);
+                int todaySpend = 0;
+                if (resp.getCode() == BaseResponse.SUCCEED) {
+                    List<SettlementQueryResponseData.Item> payItemList = new ArrayList<>();
+                    List<DayFeeListItem> list = resp.getListList();
+                    for (DayFeeListItem item : list) {
+                        SettlementQueryResponseData.Item it = new SettlementQueryResponseData.Item();
+                        it.setItemName(Checker.getStringValue(item.getItemName()));
+                        it.setItemCount(Checker.getIntegerValue(Integer.parseInt(Checker.getStringValue(item.getQuantity()))));
+                        it.setItemPrice(String.format("%.2f", item.getPrice() / 100d));
+                        it.setItemAmount(String.format("%.2f", item.getTotalAmt() / 100d));
+                        todaySpend += item.getTotalAmt();
+                        payItemList.add(it);
+                    }
+                    data.setBillDate(request.getBillDate());
+                    data.setDepositBalance(depositBalance);
+                    data.setInpatientName(m.getPatientName());
+                    data.setPayItemList(payItemList);
+                    data.setSpendTotal(totalAmount);
+                    data.setSpendToday(String.format("%.2f", todaySpend / 100d));
+                    data.setCheckInDate(Checker.getStringValue(""));
+                    data.setInpatientId(resp.getPatientId());
+                    data.setId(Checker.getStringValue(""));
+                }
+            }
+
+        }
+        return data;
     }
 
     @Override
@@ -100,7 +302,27 @@ public class InpatientServiceImpl implements InpatientService {
     }
 
     @Override
-    public DepositTradeDetailsResponseData queryTradeDetails(DepositTradeDetailsRequest request) {
+    public DepositTradeDetailsResponseData queryTradeDetails(DepositTradeDetailsRequest request) throws Exception{
+        String hisPatientId = request.getHisPatientId();
+        if(Checker.isNone(hisPatientId)){
+            throw new AppMessageException("该用户没有绑定诊疗卡");
+        }
+        GetInPatInfoRequest req = GetInPatInfoRequest.newBuilder()
+                .setPatientId(hisPatientId)
+                .setHospitalId(BizUtil.getHospitalIdByTerminalId(BizUtil.getCurrentTerminalWrapped()))
+                .build();
+        GetInPatInfoResponse resp = taiheServiceBlockingStub.getInPatInfo(req);
+        if (resp.getCode() == BaseResponse.SUCCEED) {
+            String admNo = resp.getAdmNo();
+            GetCashListRequest requ = GetCashListRequest.newBuilder()
+                    .setPatientId(hisPatientId)
+                    .setAdmNo(admNo)
+                    .setHospitalId(BizUtil.getHospitalIdByTerminalId(BizUtil.getCurrentTerminalWrapped()))
+                    .build();
+            GetCashListResponse res = taiheServiceBlockingStub.getCashList(requ);
+            DepositTradeDetailsResponseData data = new DepositTradeDetailsResponseData();
+        }
+
         return null;
     }
 

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

@@ -94,6 +94,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
             if (deptParentId == 0) {
                 QueryDepartmentListResponseData map = new QueryDepartmentListResponseData();
                 map.setDepartmentId(d.getDeptId() + "");
+                map.setDepartmentCode(d.getDeptCode());
                 map.setName(d.getDeptName());
                 map.setHasChildren(d.getDeptListList().size() > 0);
                 map.setRemain(0);
@@ -105,6 +106,7 @@ public class IsvRegisterServiceImpl implements IsvRegisterService {
                     for (Dept secDept : d.getDeptListList()) {
                         QueryDepartmentListResponseData map = new QueryDepartmentListResponseData();
                         map.setDepartmentId(secDept.getDeptId() + "");
+                        map.setDepartmentCode(secDept.getDeptCode());
                         map.setName(secDept.getDeptName());
                         map.setHasChildren(false);
                         map.setRemain(0);

+ 172 - 5
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/service/impl/IsvReportServiceImpl.java

@@ -1,37 +1,204 @@
 package com.ywt.alipaympapi.service.impl;
 
+import com.ywt.alipaympapi.core.utils.BizUtil;
+import com.ywt.alipaympapi.core.utils.Checker;
 import com.ywt.alipaympapi.core.utils.ContextHelper;
+import com.ywt.alipaympapi.core.utils.StringHelper;
+import com.ywt.alipaympapi.models.vo.MedicalCardVo;
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.gapi.Result;
+import com.ywt.gapi.ResultCode;
+import com.ywt.gapi.third.taihe.*;
+import com.ywt.gapi.user.GetMedicalCardListRequest;
+import com.ywt.gapi.user.GetMedicalCardListResponse;
+import com.ywt.gapi.user.MedicalCard;
+import com.ywt.gapi.user.UserServiceGrpc;
 import com.ywt.model.PageVO;
+import com.ywt.model.Pagination;
 import com.ywt.request.report.QueryReportDetailRequest;
 import com.ywt.request.report.QueryReportListRequest;
+import com.ywt.response.register.QueryDoctorListResponseData;
 import com.ywt.response.report.QueryReportDetailResponseData;
 import com.ywt.response.report.QueryReportListResponseData;
 import com.ywt.alipaympapi.service.IsvReportService;
+import com.ywt.response.report.ReportItem;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 public class IsvReportServiceImpl implements IsvReportService {
 
+    @Autowired
+    private UserServiceGrpc.UserServiceBlockingStub userServiceBlockingStub;
+
+    @Autowired
+    private TaiheServiceGrpc.TaiheServiceBlockingStub taiheServiceBlockingStub;
 
     @Override
-    public QueryReportDetailResponseData queryReportDetail(QueryReportDetailRequest request) {
-        return null;
+    public QueryReportDetailResponseData queryReportDetail(QueryReportDetailRequest request) throws AppMessageException {
+        QueryReportDetailResponseData data = new QueryReportDetailResponseData();
+        if (StringHelper.isNullOrWhiteSpace(request.getRecordId())) {
+            throw new AppMessageException("没有检验检查报告Id");
+        }
+
+        if (StringHelper.isNullOrWhiteSpace(request.getRecordId())) {
+            throw new AppMessageException("没有报告类型");
+        }
+        try {
+            int userId = ContextHelper.getCurrentUserIdWrapped();
+            int hospitalId = BizUtil.getCurrentHospitalId();
+            String cardNum = request.getCardNum();
+            MedicalCardVo card = getCard(userId, hospitalId, cardNum);
+            String type = request.getType();
+            if ("检查报告".equals(type)) {
+
+                GetInspectionDetailRequest req = GetInspectionDetailRequest.newBuilder()
+                        .setReportId(request.getRecordId())
+                        .setHospitalId(hospitalId)
+                        .build();
+                GetInspectionDetailResponse res = taiheServiceBlockingStub.getInspectionDetail(req);
+                if (res.getCode() == ResultCode.SUCCEED_VALUE) {
+                    List<String> reportItem = new ArrayList<>();
+                    InspectionDetail detail = res.getDetail();
+                    data.setRecordId(request.getRecordId());
+                    data.setUserName(card.getPatientName());
+                    data.setUserSex(card.getSex() == 1 ? "男" : "女");
+                    data.setCardNum(cardNum);
+                    data.setDepartmentName(detail.getDeptName());
+                    data.setApplyDoctorName(detail.getDoctorName());
+                    reportItem.add(detail.getDiagnose());
+                    data.setDiagnosis(reportItem);
+                    data.setConfirmDoctorName(detail.getInspectionDoctor());
+                    data.setReportDate(detail.getInspectionDate());
+                    data.setReportImageDesc(detail.getInspectionResult());
+
+                }
+                throw new AppMessageException("没有此报告");
+            }
+            if ("检验报告".equals(type)) {
+                GetLaboratoryDetailRequest req = GetLaboratoryDetailRequest.newBuilder()
+                        .setInspectionId(request.getRecordId())
+                        .setHospitalId(hospitalId)
+                        .build();
+                GetLaboratoryDetailResponse res = taiheServiceBlockingStub.getLaboratoryDetail(req);
+                if (res.getCode() == ResultCode.SUCCEED_VALUE) {
+                    List<ReportItem> reportItemList = new ArrayList<>();
+                    List<String> reportItem = new ArrayList<>();
+
+                    data.setItemName(res.getTitle());
+                    data.setReportDate(res.getTime());
+                    data.setConfirmDoctorName(res.getDoctor());
+                    for (LaboratoryDetail detail : res.getDetailList()) {
+                        ReportItem r = new ReportItem();
+                        r.setItemName(detail.getItemName());
+                        String flag = detail.getResultFlag() == 1 ? "HIGH" : detail.getResultFlag() == 2 ? "LOW" : "NORMAL";
+                        r.setPnFlag(flag);
+                        r.setReference(detail.getItemRef());
+                        r.setTxtVal(detail.getTestResult());
+                        r.setUnit(detail.getUnit());
+                        reportItemList.add(r);
+                    }
+                    data.setReportItemList(reportItemList);
+
+                }
+                throw new AppMessageException("没有此报告");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return data;
     }
 
     @Override
     public PageVO<QueryReportListResponseData> queryReportList(QueryReportListRequest request) {
+         List<QueryReportListResponseData> list = new ArrayList<>();
         int userId = ContextHelper.getCurrentUserIdWrapped();
         String cardNum = request.getCardNum();
         // 报告类型:分为"检查报告"、"检验报告"两种
         String type = request.getType();
-        if ("检查报告".equals(type)){
+        int hospitalId = BizUtil.getCurrentHospitalId();
+        int pageIndex = request.getPageIndex();
+        int pageSize = request.getPageSize();
+        String hisPatientId = request.getHisPatientId();
+        int total = 0;
+        try {
+            MedicalCardVo card = getCard(userId, hospitalId, hisPatientId);
 
+            if ("检查报告".equals(type)) {
+                GetInspectionListRequest getInspectionListRequest = GetInspectionListRequest.newBuilder()
+                        .setPatientId(hisPatientId)
+                        .setHospitalId(hospitalId)
+                        .build();
+                GetInspectionListResponse res = taiheServiceBlockingStub.getInspectionList(getInspectionListRequest);
+                if (res.getCode() == ResultCode.SUCCEED_VALUE) {
+                    total = res.getInspectionReportList().size();
+                    for (InspectionReport q : res.getInspectionReportList()) {
+                        QueryReportListResponseData da = new QueryReportListResponseData();
+                        da.setCardNum(cardNum);
+                        da.setItemName(Checker.getStringValue(q.getReportTitle()));
+                        da.setRecordId(Checker.getStringValue(q.getReportId()));
+                        list.add(da);
+                    }
+                }
+
+            }
+            if ("检验报告".equals(type)) {
+                GetLaboratoryListRequest req = GetLaboratoryListRequest.newBuilder()
+                        .setPatientId(hisPatientId)
+                        .setHospitalId(hospitalId)
+                        .build();
+                GetLaboratoryListResponse thRes = taiheServiceBlockingStub.getLaboratoryList(req);
+                if (thRes.getCode() == ResultCode.SUCCEED_VALUE) {
+                    total = thRes.getReportList().size();
+                    for (LaboratoryReport q : thRes.getReportList()) {
+                        QueryReportListResponseData da = new QueryReportListResponseData();
+                        da.setCardNum(cardNum);
+                        da.setItemName(Checker.getStringValue(q.getReportTitle()));
+                        da.setDepartmentName(Checker.getStringValue(q.getDeptName()));
+                        da.setRecordId(Checker.getStringValue(q.getReportId()));
+                        list.add(da);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-        if ("检验报告".equals(type)){
+        Pagination pagination = new Pagination(pageIndex, pageSize, total);
+        PageVO<QueryReportListResponseData> res = new PageVO<>(pagination, list);
+        return res;
+    }
+
+
+    /**
+     * 根据 userId & hospitalId 获取用户可用就诊卡列表
+     */
+    public List<MedicalCard> getUserMedCardList(int userId, int hospitalId) throws AppMessageException {
+        GetMedicalCardListRequest getMedicalCardListRequest = GetMedicalCardListRequest.newBuilder()
+                .setHospitalId(hospitalId)
+                .setUserId(userId)
+                .build();
+        GetMedicalCardListResponse getMedicalCardListResponse = userServiceBlockingStub.getMedicalCardList(getMedicalCardListRequest);
+        Result result = getMedicalCardListResponse.getResult();
+        if (result.getCode() != ResultCode.SUCCEED) throw new AppMessageException(result.getInfo());
+        return getMedicalCardListResponse.getMedicalCardsList();
+    }
 
+    public MedicalCardVo getCard(int userId, int hospitalId, String hisPatientId) throws Exception {
+        List<MedicalCard> list = getUserMedCardList(userId, hospitalId);
+        if (Checker.isNone(list)) throw new AppMessageException("没有诊疗卡");
+        for(MedicalCard card: list){
+            if(hisPatientId.equals(card.getPatientId())){
+                MedicalCardVo v = new MedicalCardVo();
+                v.setSex(card.getSex());
+                v.setHisPatientId(card.getPatientId());
+                v.setPatientName(card.getPatientName());
+                return v;
+            }
         }
 
-        return null;
+        throw new AppMessageException("没有此报告");
     }
 }

+ 35 - 9
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/InpatientController.java

@@ -1,6 +1,8 @@
 package com.ywt.alipaympapi.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.model.BaseResponse;
 import com.ywt.model.ResponseVO;
 import com.ywt.request.inpatient.DailyBillDetailsRequest;
 import com.ywt.request.inpatient.DailyBillRequest;
@@ -89,8 +91,14 @@ public class InpatientController {
      */
     @PostMapping("isvRequest.inpatient.list")
     public ResponseVO<List<InpatientListResponseData>> inpatientList(InpatientListRequest request) {
-        log.info("request:{}", JSON.toJSONString(request));
-        return ResponseVO.success(inpatientService.inpatientList(request));
+        try {
+            return ResponseVO.success(inpatientService.inpatientList(request));
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(BaseResponse.APP_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("InpatientController#inpatient.list(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(BaseResponse.APP_EXCEPTION, e.getMessage());
+        }
     }
 
     /**
@@ -124,9 +132,18 @@ public class InpatientController {
      * @return
      */
     @PostMapping("isvRequest.home.dailyBill.list")
-    public ResponseVO<List<DailyBillResponseData>> dailyBillList(DailyBillRequest request) {
-        log.info("request:{}", JSON.toJSONString(request));
-        return ResponseVO.success(inpatientService.dailyBillList(request));
+    public ResponseVO<List<DailyBillResponseData>> dailyBillList(DailyBillRequest request) throws Exception {
+        try {
+            List<DailyBillResponseData> list = inpatientService.dailyBillList(request);
+            return ResponseVO.success(list);
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(BaseResponse.APP_ERROR, e.getMessage());
+
+        } catch (Exception e) {
+            log.error("InpatientController#list(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(BaseResponse.APP_EXCEPTION, e.getMessage());
+
+        }
     }
 
     /**
@@ -136,9 +153,18 @@ public class InpatientController {
      * @return
      */
     @PostMapping("isvRequest.dailyBill.details")
-    public ResponseVO<DailyBillDetailsResponseData> dailyBillDetails(DailyBillDetailsRequest request) {
-        log.info("request:{}", JSON.toJSONString(request));
-        return ResponseVO.success(inpatientService.dailyBillDetail(request));
+    public ResponseVO<DailyBillDetailsResponseData> dailyBillDetails(DailyBillDetailsRequest request) throws Exception {
+        try {
+            return ResponseVO.success(inpatientService.dailyBillDetail(request));
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(BaseResponse.APP_ERROR, e.getMessage());
+
+        } catch (Exception e) {
+            log.error("InpatientController#dailyBill.details(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(BaseResponse.APP_EXCEPTION, e.getMessage());
+
+        }
+
     }
 
     /**
@@ -184,7 +210,7 @@ public class InpatientController {
      * @return
      */
     @PostMapping("isvRequest.deposit.details")
-    public ResponseVO<DepositTradeDetailsResponseData> queryDepositTradeDetails(DepositTradeDetailsRequest request) {
+    public ResponseVO<DepositTradeDetailsResponseData> queryDepositTradeDetails(DepositTradeDetailsRequest request) throws Exception {
         log.info("request:{}", JSON.toJSONString(request));
         return ResponseVO.success(inpatientService.queryTradeDetails(request));
     }

+ 22 - 10
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/controller/ReportController.java

@@ -1,5 +1,7 @@
 package com.ywt.alipaympapi.controller;
 
+import com.ywt.core.exception.AppMessageException;
+import com.ywt.model.Code;
 import com.ywt.model.PageVO;
 import com.ywt.model.ResponseVO;
 import com.ywt.request.report.QueryReportDetailRequest;
@@ -32,8 +34,16 @@ public class ReportController {
      * @return
      */
     @PostMapping("isvRequest.report.queryDetail")
-    public ResponseVO<QueryReportDetailResponseData> queryDetail(QueryReportDetailRequest request) {
-        return ResponseVO.success(reportService.queryReportDetail(request));
+    public ResponseVO<QueryReportDetailResponseData> queryDetail(QueryReportDetailRequest request) throws Exception {
+        try{
+            return ResponseVO.success(reportService.queryReportDetail(request));
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(Code.RESP_CODE_PARAM_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("ReportController#queryDetail(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(Code.RESP_CODE_APP_EXCEPTION, e.getMessage());
+        }
+
     }
 
     /**
@@ -43,14 +53,16 @@ public class ReportController {
      * @return
      */
     @RequestMapping("isvRequest.report.queryList")
-    public ResponseVO<PageVO<QueryReportListResponseData>> queryList(QueryReportListRequest request) {
-
-        log.info("request is {}", request);
-
-        PageVO<QueryReportListResponseData> data = reportService.queryReportList(request);
-
-
-        return ResponseVO.success(data);
+    public ResponseVO<PageVO<QueryReportListResponseData>> queryList(QueryReportListRequest request) throws Exception {
+        try {
+            PageVO<QueryReportListResponseData> data = reportService.queryReportList(request);
+            return ResponseVO.success(data);
+        } catch (AppMessageException e) {
+            return ResponseVO.fail(Code.RESP_CODE_PARAM_ERROR, e.getMessage());
+        } catch (Exception e) {
+            log.error("ReportController#queryList(request = {}):\n {}", request, e.getMessage(), e);
+            return ResponseVO.fail(Code.RESP_CODE_APP_EXCEPTION, e.getMessage());
+        }
     }
 
 }

+ 5 - 4
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/service/InpatientService.java

@@ -1,5 +1,6 @@
 package com.ywt.alipaympapi.service;
 
+import com.ywt.core.exception.AppMessageException;
 import com.ywt.request.inpatient.DailyBillDetailsRequest;
 import com.ywt.request.inpatient.DailyBillRequest;
 import com.ywt.request.inpatient.DepositTradeDetailsRequest;
@@ -75,7 +76,7 @@ public interface InpatientService {
      * @param request
      * @return
      */
-    List<InpatientListResponseData> inpatientList(InpatientListRequest request);
+    List<InpatientListResponseData> inpatientList(InpatientListRequest request) throws AppMessageException, Exception;
 
     /**
      * 删除住院记录
@@ -91,7 +92,7 @@ public interface InpatientService {
      * @param request
      * @return
      */
-    List<DailyBillResponseData> dailyBillList(DailyBillRequest request);
+    List<DailyBillResponseData> dailyBillList(DailyBillRequest request) throws Exception;
 
     /**
      * 日清详情
@@ -99,7 +100,7 @@ public interface InpatientService {
      * @param request
      * @return
      */
-    DailyBillDetailsResponseData dailyBillDetail(DailyBillDetailsRequest request);
+    DailyBillDetailsResponseData dailyBillDetail(DailyBillDetailsRequest request) throws AppMessageException, Exception;
 
     /**
      * 押金缴纳(创建支付宝订单,返回支付宝交易号)
@@ -131,7 +132,7 @@ public interface InpatientService {
      * @param request
      * @return
      */
-    DepositTradeDetailsResponseData queryTradeDetails(DepositTradeDetailsRequest request);
+    DepositTradeDetailsResponseData queryTradeDetails(DepositTradeDetailsRequest request) throws Exception;
 
     /**
      * 出院信息结算列表查询

+ 3 - 2
onemini-hospital-sdk/src/main/java/com/ywt/alipaympapi/service/IsvReportService.java

@@ -1,6 +1,7 @@
 package com.ywt.alipaympapi.service;
 
 
+import com.ywt.core.exception.AppMessageException;
 import com.ywt.model.PageVO;
 import com.ywt.request.report.QueryReportDetailRequest;
 import com.ywt.request.report.QueryReportListRequest;
@@ -18,7 +19,7 @@ public interface IsvReportService {
      * @param request
      * @return 查询结果
      **/
-    QueryReportDetailResponseData queryReportDetail(QueryReportDetailRequest request);
+    QueryReportDetailResponseData queryReportDetail(QueryReportDetailRequest request) throws AppMessageException;
 
     /**
      * 就诊卡列表查询
@@ -26,6 +27,6 @@ public interface IsvReportService {
      * @param request
      * @return 查询结果
      **/
-    PageVO<QueryReportListResponseData> queryReportList(QueryReportListRequest request);
+    PageVO<QueryReportListResponseData> queryReportList(QueryReportListRequest request) throws Exception;
 
 }

+ 2 - 0
onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DailyBillDetailsRequest.java

@@ -20,6 +20,8 @@ public class DailyBillDetailsRequest implements IsvRequest<DailyBillDetailsRespo
 
     private String billDate;//日清账单日期,格式:yyyy-MM-dd HH:mm:ss,不传时返回最近一条数据
 
+    private String hisPatientId; //hisPatientId
+
     @Override
     public String serviceName() {
         return "isvRequest.dailyBill.details";

+ 0 - 1
onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DailyBillRequest.java

@@ -17,7 +17,6 @@ public class DailyBillRequest implements IsvRequest<DailyBillResponseData>, IApp
     private String userId;//用户唯一id
 
     private String hospitalDistrictId;//院区id
-
     @Override
     public String serviceName() {
         return "isvRequest.home.dailyBill.list";

+ 2 - 0
onemini-hospital-sdk/src/main/java/com/ywt/request/inpatient/DepositTradeDetailsRequest.java

@@ -18,6 +18,8 @@ public class DepositTradeDetailsRequest implements IsvRequest<DepositTradeDetail
 
     private String depositId;//押金缴费id
 
+    private String hisPatientId; ////hisPatientId
+
     @Override
     public String serviceName() {
         return "isvRequest.deposit.details";

+ 2 - 0
onemini-hospital-sdk/src/main/java/com/ywt/request/report/QueryReportDetailRequest.java

@@ -19,6 +19,8 @@ public class QueryReportDetailRequest implements IsvRequest<QueryReportDetailRes
     private String appId;//医院小程序的AppId
     private String userId;//用户唯一id
     private String recordId;//检查流水号
+    private String type;//报告类型
+    private String cardNum;//就诊卡卡号
 
     @Override
     public String serviceName() {

+ 1 - 0
onemini-hospital-sdk/src/main/java/com/ywt/request/report/QueryReportListRequest.java

@@ -24,6 +24,7 @@ public class QueryReportListRequest implements IsvPageRequest<QueryReportListRes
     private String type;//报告类型
     private int pageIndex;//页码
     private int pageSize;//页条数
+    private String hisPatientId;
 
     @Override
     public String serviceName() {

+ 1 - 0
onemini-hospital-sdk/src/main/java/com/ywt/response/register/QueryDepartmentListResponseData.java

@@ -13,6 +13,7 @@ import lombok.ToString;
 @ToString
 public class QueryDepartmentListResponseData implements IsvResponseData {
     private String departmentId;//科室id
+    private String departmentCode;//科室code
     private String name;//科室名称
     private Boolean hasChildren;//是否有子科室
     private Integer remain;//当天余号数量

+ 1 - 0
onemini-hospital-sdk/src/main/java/com/ywt/response/report/ReportItem.java

@@ -8,4 +8,5 @@ public class ReportItem {
     private String txtVal;             //结果
     private String pnFlag;             //正常标志
     private String reference;             //参考值
+    private String unit;              //单位
 }