CustomerApiServiceImpl.java 11.8 KB
package cn.fw.valhalla.controller.api;

import cn.fw.common.web.annotation.ControllerMethod;
import cn.fw.data.base.domain.common.Message;
import cn.fw.valhalla.common.utils.BeanUtils;
import cn.fw.valhalla.domain.dto.CustomerDetailDto;
import cn.fw.valhalla.domain.dto.NewCustomerDTO;
import cn.fw.valhalla.domain.vo.customer.CarArchiveVO;
import cn.fw.valhalla.sdk.api.CustomerApiService;
import cn.fw.valhalla.sdk.param.*;
import cn.fw.valhalla.sdk.result.*;
import cn.fw.valhalla.service.bus.cust.ContactBizService;
import cn.fw.valhalla.service.bus.cust.CustomerBizService;
import cn.fw.valhalla.service.bus.cust.CustomerChangeBizService;
import cn.fw.valhalla.service.bus.cust.PickUpCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

import java.util.*;

import static cn.fw.common.businessvalidator.Validator.BV;
import static cn.fw.common.web.util.ResultBuilder.success;

/**
 * 保有客相关
 *
 * @author kurisu
 */
@Slf4j
@RestController
@RequestMapping("/api/valhalla/customer")
public class CustomerApiServiceImpl implements CustomerApiService {
    /**
     * 保有客数据服务
     */
    private final CustomerBizService customerBiz;
    private final CustomerChangeBizService changeBizService;
    private final ContactBizService contactBizService;
    private final PickUpCustomerService pickUpCustomerService;


    @Autowired
    CustomerApiServiceImpl(final CustomerBizService customerBiz,
                           final CustomerChangeBizService changeBizService,
                           final ContactBizService contactBizService,
                           final PickUpCustomerService pickUpCustomerService) {
        this.customerBiz = customerBiz;
        this.changeBizService = changeBizService;
        this.contactBizService = contactBizService;
        this.pickUpCustomerService = pickUpCustomerService;
    }

    @PostMapping("/save")
    @Override
    @ControllerMethod("新增保有客档案")
    public Message<Boolean> addCustomer(@Valid @RequestBody CustomerParams customerParams) {
        Boolean added = customerBiz.save4api(customerParams);
        return success(added);
    }

    @PostMapping("/update/buyDate")
    @Override
    @ControllerMethod("更新保有客档案购车时间")
    public Message<Void> updateCustomerBuyDate(CustomerUpdateBuyDateParams updateBuyDateParams) {
        customerBiz.updateCustomerBuyDate(updateBuyDateParams.getFrameNo(), updateBuyDateParams.getBuyDate(), updateBuyDateParams.getGroupId());
        return success();
    }

    @Override
    @PostMapping("/new/save")
    @ControllerMethod("新增或更新售后保有客档案")
    public Message<Long> saveCustomer(@Valid @RequestBody final CustomerSaveReq param) {
        return success(changeBizService.saveCustomer(BeanUtils.copy(param, NewCustomerDTO.class)));
    }

    @Override
    @GetMapping("/query/by/id")
    @ControllerMethod("通过id查询保有客档案")
    public Message<CustomerInfoDto> queryById(@RequestParam("customerId") Long customerId) {
        CustomerDetailDto detailDto = customerBiz.queryById(customerId);
        if (Objects.isNull(detailDto)) {
            return success();
        }
        CustomerInfoDto dto = new CustomerInfoDto();
        BeanUtils.copyProperties(detailDto, dto);
        dto.setConsultantId(detailDto.getAdviserId());
        dto.setConsultantName(detailDto.getAdviserName());
        return success(dto);
    }

    @Override
    @GetMapping("/query/by/mobile")
    @ControllerMethod("通过电话号码查询保有客档案列表")
    public Message<List<CustomerInfoDto>> queryByMobile(@RequestParam("mobile") String mobile, Long groupId) {
        List<CustomerDetailDto> list = customerBiz.queryByMobile(mobile, groupId);
        List<CustomerInfoDto> dtoList = new ArrayList<>();
        for (CustomerDetailDto customer : list) {
            CustomerInfoDto dto = new CustomerInfoDto();
            BeanUtils.copyProperties(customer, dto);
            dto.setConsultantId(customer.getAdviserId());
            dto.setConsultantName(customer.getAdviserName());
            dtoList.add(dto);
        }
        return success(dtoList);
    }

    @Override
    @GetMapping("/query/by/plateNo")
    @ControllerMethod("通过车牌号查询保有客档案列表")
    public Message<CustomerInfoDto> queryByPlateNo(@RequestParam("plateNo") String plateNo, @RequestParam("groupId") Long groupId) {
        BV.isTrue(StringUtils.isNotBlank(plateNo), "车牌号不正确");
        CustomerDetailDto detailDto = customerBiz.queryByPlateNo(plateNo, groupId);
        if (Objects.isNull(detailDto)) {
            return success();
        }
        CustomerInfoDto dto = new CustomerInfoDto();
        BeanUtils.copyProperties(detailDto, dto);
        dto.setConsultantId(detailDto.getAdviserId());
        dto.setConsultantName(detailDto.getAdviserName());
        return success(dto);
    }

    @Override
    @GetMapping("/query/by/frameNo")
    @ControllerMethod("通过车架号查询保有客档案列表")
    public Message<CustomerInfoDto> queryByFrameNo(@RequestParam("frameNo") String frameNo, @RequestParam("groupId") Long groupId) {
        BV.isTrue(StringUtils.isNotBlank(frameNo), "车架号不正确");
        CustomerDetailDto detailDto = customerBiz.queryByFrameNo(frameNo, groupId);
        if (Objects.isNull(detailDto)) {
            return success();
        }
        CustomerInfoDto dto = new CustomerInfoDto();
        BeanUtils.copyProperties(detailDto, dto);
        dto.setConsultantId(detailDto.getAdviserId());
        dto.setConsultantName(detailDto.getAdviserName());
        return success(dto);
    }

    @Override
    @GetMapping("/query/vehicle/by/frameNo")
    @ControllerMethod("通过车架号查询车辆信息,包含无档案")
    public Message<CustomerInfoDto> queryVehicleByFrameNo(@RequestParam("frameNo") final String frameNo, @RequestParam("shopId") final Long shopId) {
        CustomerDetailDto detailDto = customerBiz.queryVehicleByFrameNo(frameNo, shopId);
        if (Objects.isNull(detailDto)) {
            return success();
        }
        CustomerInfoDto dto = new CustomerInfoDto();
        BeanUtils.copyProperties(detailDto, dto);
        dto.setConsultantId(detailDto.getAdviserId());
        dto.setConsultantName(detailDto.getAdviserName());
        return success(dto);
    }

    @GetMapping("/query/batch")
    @Override
    @ControllerMethod("批量查询客户档案")
    public Message<List<CustomerInfoDto>> queryBatch(@RequestParam("customerIds") final Long[] customerIds) {
        return success(customerBiz.queryBatch(customerIds));
    }

    @PostMapping("/change/adviser")
    @Override
    @ControllerMethod("修改保有客专属顾问")
    public Message<Boolean> changeAdviser(@Valid @RequestBody final ChangeAdviserReq changeAdviserReq) {
        return success(changeBizService.changeAdviser(changeAdviserReq));
    }

    @GetMapping("/dealers")
    @Override
    @ControllerMethod("查询会员档案所在商家")
    public Message<List<Long>> dealers(@RequestParam("groupId") final Long groupId, @RequestParam("memberId") final Long memberId) {
        return success(customerBiz.getCustomerDealerId(groupId, memberId));
    }

    @Override
    @GetMapping("/receptioner")
    @ControllerMethod("查询接车送修人")
    public Message<CustomerContactDto> queryReceptioner(@RequestParam("customerId") final Long customerId, @RequestParam("plateNo") final String plateNo, @RequestParam("shopId") final Long shopId) {
        return success(contactBizService.queryReceptioner(customerId, plateNo, shopId));
    }

    @Override
    @GetMapping("/contactInfo")
    @ControllerMethod("查询联系人信息")
    public Message<CustomerContactDto> queryContactInfo(@RequestParam("customerId") Long customerId, @RequestParam("memberId") Long memberId) {
        return success(contactBizService.queryContactInfo(customerId, memberId));
    }

    @Deprecated
    @Override
    @GetMapping("/modifySpecCode")
    @ControllerMethod("修改档案车型代码")
    public Message<Boolean> modifySpecCode(@RequestParam("customerId") Long customerId, @RequestParam("specCode") String specCode) {
        return success(customerBiz.modifySpecCode(customerId, specCode));
    }

    @Override
    @PostMapping("/modify/spec_code")
    @ControllerMethod("修改档案车型代码")
    public Message<Boolean> updateSpecCode(@Valid @RequestBody ChangeSpecCodeReq changeSpecCodeReq) {
        return success(customerBiz.fixSpecCode(changeSpecCodeReq));
    }

    @Override
    @GetMapping("/queryReceivable")
    @ControllerMethod("查询能否接车")
    public Message<ReceptionResultDto> queryReceivable(@RequestParam("userId") Long userId, @RequestParam("plateNo") String plateNo) {
        return success(customerBiz.queryReceivable(userId, plateNo));
    }

    @Override
    @GetMapping("/query/illegal/adviser")
    @ControllerMethod("查询不能接车的售后接待人员")
    public Message<List<Long>> queryIllegalAdviser(final Long cusId) {
        return success(customerBiz.queryIllegalAdviser(cusId));
    }

    @Override
    @PostMapping("/updatePlateNo")
    @ControllerMethod("通过vin修改车牌号")
    public Message<Boolean> updatePlateNo(@Valid @RequestBody ChangePlateNoReq changePlateNoReq) {
        return success(pickUpCustomerService.fixPlateNo(changePlateNoReq.getFrameNo(), changePlateNoReq.getPlateNo(), changePlateNoReq.getGroupId()));
    }

    @Override
    @GetMapping("/queryByMemberId")
    @ControllerMethod("查询对应memberId的所有保有客档案")
    public Message<List<CarArchiveDTO>> queryByMemberId(@RequestParam("memberId") Long memberId) {
        List<CarArchiveDTO> list = new ArrayList<>();
        List<CarArchiveVO> voList = customerBiz.defaultCustomer(memberId);
        for (CarArchiveVO vo : voList) {
            CarArchiveDTO dto = new CarArchiveDTO();
            BeanUtils.copyProperties(vo, dto);
            list.add(dto);
        }
        return success(list);
    }

    @Override
    @GetMapping("/query/vehicle/by/memberId")
    @ControllerMethod("查询会员认证车辆")
    public Message<List<MemberVehicleDTO>> queryVehicleByMemberId(@RequestParam("memberId") final Long memberId) {
        return success(customerBiz.queryVehicleByMemberId(memberId));
    }

    @Override
    @GetMapping("/query/by/engineNo")
    @ControllerMethod("通过发动机号查询保有客档案")
    public Message<CustomerInfoDto> queryByEngineNo(@RequestParam("engineNo") String engineNo, @RequestParam("groupId") Long groupId) {
        BV.isTrue(StringUtils.isNotBlank(engineNo), "发动机号号不正确");
        CustomerDetailDto detailDto = customerBiz.queryByEngineNo(engineNo, groupId);
        if (Objects.nonNull(detailDto)) {
            CustomerInfoDto dto = new CustomerInfoDto();
            BeanUtils.copyProperties(detailDto, dto);
            dto.setConsultantId(detailDto.getAdviserId());
            dto.setConsultantName(detailDto.getAdviserName());
            return success(dto);
        }
        return success();
    }

    @Override
    @GetMapping("/query/by/keyword")
    @ControllerMethod("通过关键字查询档案列表")
    public Message<List<BasicsCustomerDTO>> queryByKeyword(@RequestParam("keyword") String keyword, @RequestParam("groupId") Long groupId) {
        return success(customerBiz.queryByKeyword(keyword, groupId));
    }

    @Override
    @GetMapping("/query/vehicle/by/vin")
    @ControllerMethod("查询车辆认证信息")
    public Message<MemberVehicleDTO> queryVehicle(@RequestParam("vin") final String vin) {
        return success(customerBiz.queryVehicleByVin(vin));
    }

    @Override
    @PostMapping("/query/cus/cnt")
    @ControllerMethod("查询保有客户数量")
    public Message<List<CusCntResult>> queryCusCnt(@RequestBody final CusCntReq req) {
        return success();
    }
}