MeiZhongYiHeServiceClient.java 2.93 KB
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.GetCustomersByConditionRpcRequest;
import com.infoloop.rpc.meizhongyiheservice.MeiZhongYiHeServiceRpcGrpc;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MeiZhongYiHeServiceClient {

    private final MeiZhongYiHeServiceRpcGrpc.MeiZhongYiHeServiceRpcBlockingStub meiZhongYiHeServiceRpcBlockingStub;

    @Cacheable(value = "customerAllergies", key = "#hisCustomerId")
    public GetCustomerAllergiesByCustomerIdsRpcResponse getHisCustomerAllergiesByCustomerId(
            String hisCustomerId) {
        final var request = GetCustomerAllergiesByCustomerIdsRpcRequest.newBuilder()
                .addAllCustomerIds(List.of(hisCustomerId))
                .build();
        return meiZhongYiHeServiceRpcBlockingStub.getCustomerAllergiesByCustomerIds(request);
    }

    @Cacheable(value = "customerMedicalAdvices", key = "#contractNo")
    public GetCustomerMedicalAdvicesByHospitalRecordIdsRpcResponse getHisCustomerMedicalAdvicesByContractNo(String contractNo) {
        final var request = GetCustomerMedicalAdvicesByHospitalRecordIdsRpcRequest.newBuilder()
                .addAllHospitalRecordIds(List.of(contractNo))
                .build();
        return meiZhongYiHeServiceRpcBlockingStub.getCustomerMedicalAdvicesByHospitalRecordIds(request);
    }

    @Cacheable(value = "customerDetails", key = "#HISCustomerId + '_' + #contractNo")
    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();
    }

    public List<Customer> getCustomersByCondition(List<String> stallCodes) {
        final var request = GetCustomersByConditionRpcRequest.newBuilder()
                .addAllDeptCode(stallCodes)
                .build();
        return meiZhongYiHeServiceRpcBlockingStub.getCustomersByCondition(request).getCustomersList();
    }
}