MealOrderServiceRpcClient.java 15 KB
package com.infoloop.tianting.service.client;

import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.enums.LoginSourceEnum;
import com.infoloop.tianting.mealorderservice.BatchCreateMealOrdersRpcRequest;
import com.infoloop.tianting.mealorderservice.BatchCreateMealOrdersRpcResponse;
import com.infoloop.tianting.mealorderservice.CreateDinerRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateDinerRpcResponse;
import com.infoloop.tianting.mealorderservice.CreateMealOrderRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateMealOrderRpcResponse;
import com.infoloop.tianting.mealorderservice.CreateMpAccountDinerRefRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateMpAccountDinerRefRpcResponse;
import com.infoloop.tianting.mealorderservice.CreateMpAccountRpcRequest;
import com.infoloop.tianting.mealorderservice.CreateMpAccountRpcResponse;
import com.infoloop.tianting.mealorderservice.DeleteDinersByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.DeleteMpAccountDinerRefsByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.DinerCreation;
import com.infoloop.tianting.mealorderservice.DinerModification;
import com.infoloop.tianting.mealorderservice.GetDinerByIdRpcRequest;
import com.infoloop.tianting.mealorderservice.GetDinerByIdRpcResponse;
import com.infoloop.tianting.mealorderservice.GetDinersByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.GetGradeClassByIdRpcRequest;
import com.infoloop.tianting.mealorderservice.GetGradeClassesByIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.GetMealOrderByIdRpcRequest;
import com.infoloop.tianting.mealorderservice.GetMpAccountByIdRpcRequest;
import com.infoloop.tianting.mealorderservice.GetMpAccountByIdRpcResponse;
import com.infoloop.tianting.mealorderservice.GetMpAccountByOpenIdRpcRequest;
import com.infoloop.tianting.mealorderservice.GetMpAccountByOpenIdRpcResponse;
import com.infoloop.tianting.mealorderservice.MealOrderCreation;
import com.infoloop.tianting.mealorderservice.MealOrderServiceRpcGrpc;
import com.infoloop.tianting.mealorderservice.MpAccountCreation;
import com.infoloop.tianting.mealorderservice.MpAccountDinerRefCreation;
import com.infoloop.tianting.mealorderservice.MpAccountModification;
import com.infoloop.tianting.mealorderservice.QueryDinersByConditionRpcRequest;
import com.infoloop.tianting.mealorderservice.QueryGradeClassesByConditionRpcRequest;
import com.infoloop.tianting.mealorderservice.QueryLatestMealMenuRecordsByClientIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.QueryMealOrdersByConditionRpcRequest;
import com.infoloop.tianting.mealorderservice.QueryMpAccountDinerRefsByConditionRpcRequest;
import com.infoloop.tianting.mealorderservice.QueryReserveMealOrdersByDinerIdsRpcRequest;
import com.infoloop.tianting.mealorderservice.SingleDinerRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleGradeClassRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleMealMenuRecordRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleMealOrderRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleMpAccountDinerRefRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleMpAccountRpcResponse;
import com.infoloop.tianting.mealorderservice.UpdateDinerRpcRequest;
import com.infoloop.tianting.mealorderservice.UpdateDinerRpcResponse;
import com.infoloop.tianting.mealorderservice.UpdateMpAccountRpcRequest;
import com.infoloop.tianting.mealorderservice.UpdateMpAccountRpcResponse;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;

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

    private final MealOrderServiceRpcGrpc.MealOrderServiceRpcBlockingStub mealOrderServiceRpcBlockingStub;

    @Nullable
    public SingleMpAccountRpcResponse getMpAccountByOpenId(String openId) {
        final GetMpAccountByOpenIdRpcResponse mpAccountByOpenId = mealOrderServiceRpcBlockingStub.getMpAccountByOpenId(GetMpAccountByOpenIdRpcRequest.newBuilder().setOpenId(openId).build());
        if (!mpAccountByOpenId.hasResponse()) {
            return null;
        }
        return mpAccountByOpenId.getResponse();
    }

    public CreateMpAccountRpcResponse createMpAccount(int enterpriseId, MpAccountCreation mpAccountCreation) {
        return mealOrderServiceRpcBlockingStub.createMpAccount(CreateMpAccountRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setCreatedBy(0)
                .setCreationSource(LoginSourceEnum.MINI_PROGRAM.getValue())
                .setCreation(mpAccountCreation)
                .build());
    }

    @Nullable
    public SingleMpAccountRpcResponse getMpAccountById(Integer enterpriseId, Integer id) {
        final GetMpAccountByIdRpcResponse mpAccountById = mealOrderServiceRpcBlockingStub.getMpAccountById(GetMpAccountByIdRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setId(id)
                .build());
        if (!mpAccountById.hasResponse()) {
            return null;
        }
        return mpAccountById.getResponse();
    }

    public UpdateMpAccountRpcResponse updateMpAccount(LoginContextHolder.LoginInfo loginInfo, MpAccountModification mpAccountModification) {
        return mealOrderServiceRpcBlockingStub.updateMpAccount(UpdateMpAccountRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setUpdatedBy(loginInfo.getId())
                .setUpdateSource(loginInfo.getLoginSource().getValue())
                .setModification(mpAccountModification)
                .build());
    }

    public List<SingleMpAccountDinerRefRpcResponse> queryMpAccountDinerRefsByCondition(int enterpriseId, List<Integer> mpAccountIds, List<Integer> dinerIds) {
        return mealOrderServiceRpcBlockingStub.queryMpAccountDinerRefsByCondition(QueryMpAccountDinerRefsByConditionRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setShouldFilterAccountIds(!mpAccountIds.isEmpty()).addAllAccountIds(mpAccountIds)
                .setShouldFilterDinerIds(!dinerIds.isEmpty()).addAllDinerIds(dinerIds)
                .build()).getResponsesList();
    }

    @Nullable
    public SingleDinerRpcResponse getDinerById(int enterpriseId, int dinerId) {
        final GetDinerByIdRpcResponse dinerById = mealOrderServiceRpcBlockingStub.getDinerById(GetDinerByIdRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setId(dinerId)
                .build());
        if (!dinerById.hasResponse()) {
            return null;
        }
        return dinerById.getResponse();
    }

    public List<SingleDinerRpcResponse> getDinersByIds(int enterpriseId, List<Integer> dinerIds) {
        if (CollectionUtils.isEmpty(dinerIds)) {
            return Collections.emptyList();
        }
        return mealOrderServiceRpcBlockingStub.getDinersByIds(GetDinersByIdsRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .addAllIds(dinerIds)
                .build()).getResponsesList();
    }

    public List<SingleDinerRpcResponse> queryDinersByCondition(int enterpriseId, List<Integer> clientIds, List<Integer> gradeClassIds, @Nullable String studentNo) {
        return mealOrderServiceRpcBlockingStub.queryDinersByCondition(QueryDinersByConditionRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setShouldFilterClientIds(CollectionUtils.isNotEmpty(clientIds)).addAllClientIds(CollectionUtils.isEmpty(clientIds) ? Collections.emptyList() : clientIds)
                .setShouldFilterClassIds(CollectionUtils.isNotEmpty(gradeClassIds)).addAllClassIds(CollectionUtils.isNotEmpty(gradeClassIds) ? gradeClassIds : Collections.emptyList())
                .setShouldFilterStudentNo(StringUtils.isNotEmpty(studentNo)).setStudentNo(StringUtils.isNotEmpty(studentNo) ? studentNo : "")
                .build()).getResponsesList();
    }

    public boolean deleteDinersByIds(LoginContextHolder.LoginInfo loginInfo, List<Integer> ids) {
        return mealOrderServiceRpcBlockingStub.deleteDinersByIds(DeleteDinersByIdsRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .addAllIds(ids)
                .setUpdatedBy(loginInfo.getId())
                .setUpdateSource(loginInfo.getLoginSource().getValue())
                .build()).getIsDeleted();
    }

    public List<SingleGradeClassRpcResponse> getGradeClassesByIds(int enterpriseId, List<Integer> gradeClassIds) {
        if (CollectionUtils.isEmpty(gradeClassIds)) {
            return Collections.emptyList();
        }
        return mealOrderServiceRpcBlockingStub.getGradeClassesByIds(GetGradeClassesByIdsRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .addAllIds(gradeClassIds)
                .build()).getResponsesList();
    }

    @Nullable
    public SingleGradeClassRpcResponse getGradeClassById(int enterpriseId, int id) {
        final var response = mealOrderServiceRpcBlockingStub.getGradeClassById(GetGradeClassByIdRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setId(id)
                .build());
        if (!response.hasResponse()) {
            return null;
        }
        return response.getResponse();
    }

    public List<SingleMealOrderRpcResponse> queryReserveMealOrdersByDinerIds(int enterpriseId, List<Integer> dinerIds) {
        if (CollectionUtils.isEmpty(dinerIds)) {
            return Collections.emptyList();
        }
        return mealOrderServiceRpcBlockingStub.queryReserveMealOrdersByDinerIds(QueryReserveMealOrdersByDinerIdsRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .addAllDinerIds(dinerIds)
                .build()).getResponsesList();
    }

    public CreateDinerRpcResponse createDiner(LoginContextHolder.LoginInfo loginInfo, DinerCreation dinerCreation) {
        return mealOrderServiceRpcBlockingStub.createDiner(CreateDinerRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setCreatedBy(loginInfo.getId())
                .setCreationSource(loginInfo.getLoginSource().getValue())
                .setCreation(dinerCreation)
                .build());
    }

    public UpdateDinerRpcResponse updateDiner(LoginContextHolder.LoginInfo loginInfo, DinerModification dinerModification) {
        return mealOrderServiceRpcBlockingStub.updateDiner(UpdateDinerRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setUpdatedBy(loginInfo.getId())
                .setUpdateSource(loginInfo.getLoginSource().getValue())
                .setModification(dinerModification)
                .build());
    }

    public CreateMpAccountDinerRefRpcResponse createMpAccountDinerRef(LoginContextHolder.LoginInfo loginInfo, MpAccountDinerRefCreation dinerCreation) {
        return mealOrderServiceRpcBlockingStub.createMpAccountDinerRef(CreateMpAccountDinerRefRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setCreatedBy(loginInfo.getId())
                .setCreationSource(loginInfo.getLoginSource().getValue())
                .setCreation(dinerCreation)
                .build());
    }

    public boolean deleteMpAccountDinerRefsByIds(int enterpriseId, List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return mealOrderServiceRpcBlockingStub.deleteMpAccountDinerRefsByIds(DeleteMpAccountDinerRefsByIdsRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .addAllIds(ids)
                .build()).getIsDeleted();
    }

    public List<SingleGradeClassRpcResponse> queryGradeClassesByCondition(int enterpriseId, List<Integer> clientIds) {
        return mealOrderServiceRpcBlockingStub.queryGradeClassesByCondition(QueryGradeClassesByConditionRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setShouldFilterClientIds(!clientIds.isEmpty()).addAllClientIds(clientIds)
                .build()).getResponsesList();
    }

    public List<SingleMealMenuRecordRpcResponse> queryLatestMealMenuRecordsByClientIds(int enterpriseId, List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return Collections.emptyList();
        }
        return mealOrderServiceRpcBlockingStub.queryLatestMealMenuRecordsByClientIds(QueryLatestMealMenuRecordsByClientIdsRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .addAllClientId(ids)
                .build()).getResponsesList();
    }

    @Nullable
    public SingleMealOrderRpcResponse getMealOrderById(int enterpriseId, int id) {
        final var mealOrderById = mealOrderServiceRpcBlockingStub.getMealOrderById(GetMealOrderByIdRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setId(id)
                .build());
        if (!mealOrderById.hasResponse()) {
            return null;
        }
        return mealOrderById.getResponse();
    }

    public CreateMealOrderRpcResponse createMealOrder(LoginContextHolder.LoginInfo loginInfo, MealOrderCreation mealOrderCreation) {
        return mealOrderServiceRpcBlockingStub.createMealOrder(CreateMealOrderRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setCreatedBy(loginInfo.getId())
                .setCreationSource(loginInfo.getLoginSource().getValue())
                .setCreation(mealOrderCreation)
                .build());
    }

    public BatchCreateMealOrdersRpcResponse batchCreateMealOrders(LoginContextHolder.LoginInfo loginInfo, List<MealOrderCreation> mealOrderCreations) {
        return mealOrderServiceRpcBlockingStub.batchCreateMealOrders(BatchCreateMealOrdersRpcRequest.newBuilder()
                .setEnterpriseId(loginInfo.getEnterpriseId())
                .setCreatedBy(loginInfo.getId())
                .setCreationSource(loginInfo.getLoginSource().getValue())
                .addAllCreations(mealOrderCreations)
                .build());
    }

    public List<SingleMealOrderRpcResponse> queryMealOrdersByCondition(int enterpriseId, Integer accountId, Long reserveDateStart, Long reserveDateEnd) {
        return mealOrderServiceRpcBlockingStub.queryMealOrdersByCondition(QueryMealOrdersByConditionRpcRequest.newBuilder()
                .setEnterpriseId(enterpriseId)
                .setShouldFilterAccountIds(accountId != null).addAccountIds(accountId == null ? 0 : accountId)
                .setShouldFilterReserveDateStart(reserveDateStart != null).setReserveDateStart(reserveDateStart == null ? 0 : reserveDateStart)
                .setShouldFilterReserveDateEnd(reserveDateEnd != null).setReserveDateEnd(reserveDateEnd == null ? 0 : reserveDateEnd)
                .build()).getResponsesList();
    }
}