CustomerServiceImpl.java 6.11 KB
package cn.fw.valhalla.service.data.impl;

import cn.fw.valhalla.dao.mapper.CustomerMapper;
import cn.fw.valhalla.domain.db.customer.Customer;
import cn.fw.valhalla.domain.dto.CustomerDetailDto;
import cn.fw.valhalla.domain.dto.StammkundeAnalyseDTO;
import cn.fw.valhalla.domain.query.CustomCustomerQuery;
import cn.fw.valhalla.domain.query.CustomerQueryVO;
import cn.fw.valhalla.domain.query.StammkundeAnalyseQueryVO;
import cn.fw.valhalla.domain.vo.customer.CustomerListVO;
import cn.fw.valhalla.sdk.param.CusCntReq;
import cn.fw.valhalla.sdk.result.BasicsCustomerDTO;
import cn.fw.valhalla.sdk.result.CusCntResult;
import cn.fw.valhalla.service.data.CustomerService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * @author : kurisu
 * @className : CustomerServiceImpl
 * @description : 档案
 * @date: 2020-08-12 11:20
 */
@Service
@Slf4j
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements CustomerService {
    @Override
    public List<CustomerListVO> getAppPageList(Integer startIndex, Integer pageSize, CustomerQueryVO queryVO) {
        List<CustomerListVO> appPageList = getBaseMapper().getAppPageList(startIndex, queryVO.getPageSize(), queryVO);
        return CollectionUtils.isEmpty(appPageList) ? new ArrayList<>() : appPageList;
    }

    @Override
    public Customer queryById(Long id) {
        return this.getBaseMapper().selectOne(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getId, id)
                .eq(Customer::getYn, Boolean.TRUE)
                .last("limit 1"));
    }

    @Override
    public Customer queryByIdWithInvalid(Long id) {
        return this.getBaseMapper().selectOne(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getId, id)
                .last("limit 1"));
    }

    @Override
    public Customer queryByPlateNo(String plateNo, Long groupId) {
        return this.getBaseMapper().selectOne(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getPlateNo, plateNo)
                .eq(Customer::getYn, Boolean.TRUE)
                .eq(Customer::getGroupId, groupId)
                .orderByDesc(Customer::getUpdateTime)
                .last("limit 1"));
    }

    @Override
    public Customer queryByFrameNo(String frameNo, Long groupId) {
        return this.getBaseMapper().selectOne(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getFrameNo, frameNo)
                .eq(Customer::getYn, Boolean.TRUE)
                .eq(Customer::getGroupId, groupId)
                .orderByDesc(Customer::getUpdateTime)
                .last("limit 1"));
    }

    @Override
    public Customer queryByEngineNo(String engineNo, Long groupId) {
        return this.getBaseMapper().selectOne(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getEngineNo, engineNo)
                .eq(Customer::getYn, Boolean.TRUE)
                .eq(Customer::getGroupId, groupId)
                .orderByDesc(Customer::getUpdateTime)
                .last("limit 1"));
    }

    @Override
    public List<Customer> queryByBaseId(Long baseId) {
        return this.list(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getBaseId, baseId)
                .eq(Customer::getYn, Boolean.TRUE)
        );
    }

    @Override
    public void forbidden(Long customerId) {
        this.update(Wrappers.<Customer>lambdaUpdate()
                .set(Customer::getYn, Boolean.FALSE)
                .eq(Customer::getId, customerId)
        );
    }

    @Override
    public void forbiddenPlate(String plateNo) {
        this.update(Wrappers.<Customer>lambdaUpdate()
                .set(Customer::getYn, Boolean.FALSE)
                .eq(Customer::getPlateNo, plateNo)
                .eq(Customer::getYn, Boolean.TRUE)
        );
    }

    @Override
    @Nullable
    public List<Customer> queryByAdviserId(@NonNull Long adviserId) {
        return this.list(Wrappers.<Customer>lambdaQuery()
                .eq(Customer::getAdviserId, adviserId)
                .eq(Customer::getYn, Boolean.TRUE)
        );
    }

    @Override
    public List<StammkundeAnalyseDTO> analyseList(final StammkundeAnalyseQueryVO queryVO) {
        List<StammkundeAnalyseDTO> list = this.getBaseMapper().analyseList(queryVO);
        return Optional.ofNullable(list).orElse(new ArrayList<>());
    }

    @Override
    public List<CustomerDetailDto> queryCustomList(CustomCustomerQuery query) {
        return Optional.ofNullable(getBaseMapper().queryCustomList(query)).orElse(new ArrayList<>());
    }

    @Override
    public Long queryCustomListCount(CustomCustomerQuery query) {
        return Optional.ofNullable(getBaseMapper().queryCustomCount(query)).orElse(0L);
    }

    @Override
    public List<BasicsCustomerDTO> queryByKeyword(String keyword, Long groupId) {
        return Optional.ofNullable(this.getBaseMapper().queryByKeyword(keyword, groupId)).orElse(new ArrayList<>());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void afterDistributePubClue(final List<String> vinList, final Long userId, final Long shopId, final Long groupId) {
        update(Wrappers.<Customer>lambdaUpdate()
                .set(Customer::getAdviserId, userId)
                .set(Customer::getShopId, shopId)
                .set(Customer::getTemporary, Boolean.TRUE)
                .eq(Customer::getYn, Boolean.TRUE)
                .eq(Customer::getGroupId, groupId)
                .in(Customer::getFrameNo, vinList)
                .isNull(Customer::getAdviserId)
        );
    }

    @Override
    public List<CusCntResult> queryCusCnt(final CusCntReq req) {
        if(!CollectionUtils.isEmpty(req.getShopIds())){
            return getBaseMapper().queryShopCusCnt(req);
        }
        return getBaseMapper().queryAdviserCusCnt(req);
    }
}