zhuyifan

HIS客户登录校验

package com.infoloop.tianting.service.client;
import com.infoloop.rpc.meizhongyiheservice.Customer;
import com.infoloop.rpc.meizhongyiheservice.GetCustomerAllergiesByCustomerIdsRpcRequest;
import com.infoloop.rpc.meizhongyiheservice.GetCustomerAllergiesByCustomerIdsRpcResponse;
import com.infoloop.rpc.meizhongyiheservice.GetCustomerDetailByIdRpcRequest;
import com.infoloop.rpc.meizhongyiheservice.GetCustomerMedicalAdvicesByHospitalRecordIdsRpcRequest;
import com.infoloop.rpc.meizhongyiheservice.GetCustomerMedicalAdvicesByHospitalRecordIdsRpcResponse;
import com.infoloop.rpc.meizhongyiheservice.MeiZhongYiHeServiceRpcGrpc;
......@@ -31,4 +33,15 @@ public class MeiZhongYiHeServiceClient {
.build();
return meiZhongYiHeServiceRpcBlockingStub.getCustomerMedicalAdvicesByHospitalRecordIds(request);
}
public Customer getCustomerDetailById(String HISCustomerId, String contractNo) {
final var customer = meiZhongYiHeServiceRpcBlockingStub.getCustomerDetailById(GetCustomerDetailByIdRpcRequest.newBuilder()
.setCustomerId(HISCustomerId)
.setHospitalRecordId(contractNo)
.build());
if (!customer.hasCustomer()) {
return null;
}
return customer.getCustomer();
}
}
......
......@@ -3,6 +3,7 @@ package com.infoloop.tianting.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.infoloop.rpc.meizhongyiheservice.HospitalStatus;
import com.infoloop.tianting.clientcustomerservice.ClientCustomerHospitalRecordHospitalStatusEnum;
import com.infoloop.tianting.constant.CommonConstants;
import com.infoloop.tianting.exception.ClientEndExceptions;
......@@ -10,6 +11,7 @@ import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.dto.PermissionDTO.LoginDto;
import com.infoloop.tianting.service.LoginService;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.MeiZhongYiHeServiceClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.service.client.WOperatorServiceRpcClient;
import com.infoloop.tianting.service.client.WxMiniProgramHttpClient;
......@@ -30,6 +32,7 @@ public class LoginServiceImpl implements LoginService {
private final OperatorServiceRpcClient operatorServiceRpcClient;
private final WxMiniProgramHttpClient wxMiniProgramHttpClient;
private final WOperatorServiceRpcClient wOperatorServiceRpcClient;
private final MeiZhongYiHeServiceClient meiZhongYiHeServiceClient;
@Override
public SaTokenInfo login(LoginDto loginDto) throws NoSuchAlgorithmException {
......@@ -58,6 +61,11 @@ public class LoginServiceImpl implements LoginService {
if (!record.hasResponse() || record.getResponse().getHospitalStatus() != ClientCustomerHospitalRecordHospitalStatusEnum.CURRENT) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
//还需要去读取HIS系统最新用户住院信息
final var hisCustomerHospitalRecord = meiZhongYiHeServiceClient.getCustomerDetailById(customer.getHISCustomerId(), record.getResponse().getContractNo()).getCustomerHospitalRecord();
if (hisCustomerHospitalRecord.getHospitalStatus() != HospitalStatus.CURRENT) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.VALIDATE_FAILED.name());
}
}
final var wxUserOpenIdDto = wxMiniProgramHttpClient.getUserOpenIdByCode(loginDto.getOpenCode());
StpUtil.login(customer.getId(), SaLoginModel.create()
......