2021-10-27-ServiceUtils-kye

package com.kyexpress.erp.tms.bill.provider.utils;

import com.kyexpress.erp.tms.bill.provider.constant.ResponseCode;
import com.kyexpress.framework.exception.ApplicationException;
import com.kyexpress.framework.model.GenericBO;
import com.kyexpress.framework.model.Pagination;
import com.kyexpress.framework.model.ResponseData;
import com.kyexpress.framework.service.GenericService;
import org.apache.poi.ss.formula.functions.T;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;

public class ServiceUtils {

    /**
     * 调用方法
     */
    public static <T> ResponseData call(T param, Consumer<T> callProcess) {
        return call(param, callProcess, p -> {});
    }

    /**
     * 调用方法
     */
    public static <T> ResponseData call(T param, Consumer<T> callProcess, Consumer<T> valid) {
        valid.accept(param);
        callProcess.accept(param);
        return CommonUtils.buildResponseData();
    }

    /**
     * 调用方法
     */
    public static <T, R> ResponseData call(T param, Consumer<R> callProcess, Function<T, R> valid) {
        callProcess.accept(valid.apply(param));
        return CommonUtils.buildResponseData();
    }

    /**
     * 调用方法
     */
    public static <T, R> ResponseData<R> callWithReturn(T param, Function<T, R> callProcess) {
        return callWithReturn(param, callProcess, p -> {});
    }

    /**
     * 调用方法
     */
    public static <T, R> ResponseData<R> callWithReturn(T param, Function<T, R> callProcess, Consumer<T> valid) {
        valid.accept(param);
        return CommonUtils.buildResponseData(callProcess.apply(param));
    }

    /**
     * 调用方法
     */
    public static <T, R, RS> ResponseData<RS> callWithReturn(T param, Function<R, RS> callProcess, Function<T, R> valid) {
        return CommonUtils.buildResponseData(callProcess.apply(valid.apply(param)));
    }

    /**
     * 查询
     */
    public static <T> ResponseData<Pagination<T>> search(GenericBO<T> bo, GenericService<T, Long> service) {
        return search(bo, service, BO -> {});
    }

    /**
     * 查询
     */
    public static <T> ResponseData<Pagination<T>> search(GenericBO<T> bo, GenericService<T, Long> service, Consumer<GenericBO<T>> queryBuilder) {
        return search(bo, service::search, queryBuilder);
    }

    /**
     * 查询
     */
    private static <T> ResponseData<Pagination<T>> search(GenericBO<T> bo, Consumer<Pagination<T>> searchProcess, Consumer<GenericBO<T>> queryBuilder) {
        queryBuilder.accept(bo);
        ResponseData<Pagination<T>> resp = new ResponseData<>();
        Pagination<T> pagination = Pagination.getInstance4BO(bo);
        searchProcess.accept(pagination);
        resp.setData(pagination).ok();
        return resp;
    }

    /**
     * 批量操作
     */
    public static <T, R> ResponseData<R> batch(GenericBO<T> bo, Function<Long[], R> deleteProcess, ResponseCode listIsNullError) {
        return CommonUtils.buildResponseData(batchByIdsWithReturn(bo, deleteProcess, listIsNullError));
    }

    /**
     * 删除
     */
    public static ResponseData delete(GenericBO<T> bo, GenericService<T, Long> service) {
        return delete(bo, service, Function.identity());
    }

    /**
     * 删除
     */
    public static ResponseData delete(GenericBO<T> bo, GenericService<T, Long> service, Function<Long[], Long[]> valid) {
        deleteByIds(bo, service::disable, valid);
        return CommonUtils.buildResponseData();
    }

    /**
     * 删除
     */
    private static <T> void deleteByIds(GenericBO<T> bo, Consumer<Long[]> deleteProcess, Function<Long[], Long[]> valid) {
        if (bo.getIds() == null || bo.getIds().length == 0) {
            throw new ApplicationException(ResponseCode.DELETE_LIST_IS_NULL);
        }
        Long[] ids = Stream.of(bo.getIds()).map(Long::parseLong).toArray(Long[]::new);
        ids = valid.apply(ids);
        deleteProcess.accept(ids);
    }

    /**
     * 批量操作
     */
    private static <T, R> R batchByIdsWithReturn(GenericBO<T> bo, Function<Long[], R> deleteProcess, ResponseCode listIsNullError) {
        return batchByIdsWithReturn(bo, deleteProcess, listIsNullError, Function.identity());
    }

    /**
     * 批量操作
     */
    private static <T, R> R batchByIdsWithReturn(GenericBO<T> bo, Function<Long[], R> deleteProcess, ResponseCode listIsNullError, Function<Long[], Long[]> valid) {
        if (bo.getIds() == null || bo.getIds().length == 0) {
            throw new ApplicationException(listIsNullError);
        }
        Long[] ids = Stream.of(bo.getIds()).map(Long::parseLong).toArray(Long[]::new);
        ids = valid.apply(ids);
        return deleteProcess.apply(valid.apply(ids));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值