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 addCustomer(@Valid @RequestBody CustomerParams customerParams) { Boolean added = customerBiz.save4api(customerParams); return success(added); } @PostMapping("/update/buyDate") @Override @ControllerMethod("更新保有客档案购车时间") public Message updateCustomerBuyDate(CustomerUpdateBuyDateParams updateBuyDateParams) { customerBiz.updateCustomerBuyDate(updateBuyDateParams.getFrameNo(), updateBuyDateParams.getBuyDate(), updateBuyDateParams.getGroupId()); return success(); } @Override @PostMapping("/new/save") @ControllerMethod("新增或更新售后保有客档案") public Message saveCustomer(@Valid @RequestBody final CustomerSaveReq param) { return success(changeBizService.saveCustomer(BeanUtils.copy(param, NewCustomerDTO.class))); } @Override @GetMapping("/query/by/id") @ControllerMethod("通过id查询保有客档案") public Message 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> queryByMobile(@RequestParam("mobile") String mobile, Long groupId) { List list = customerBiz.queryByMobile(mobile, groupId); List 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 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 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 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> queryBatch(@RequestParam("customerIds") final Long[] customerIds) { return success(customerBiz.queryBatch(customerIds)); } @PostMapping("/change/adviser") @Override @ControllerMethod("修改保有客专属顾问") public Message changeAdviser(@Valid @RequestBody final ChangeAdviserReq changeAdviserReq) { return success(changeBizService.changeAdviser(changeAdviserReq)); } @GetMapping("/dealers") @Override @ControllerMethod("查询会员档案所在商家") public Message> dealers(@RequestParam("groupId") final Long groupId, @RequestParam("memberId") final Long memberId) { return success(customerBiz.getCustomerDealerId(groupId, memberId)); } @Override @GetMapping("/receptioner") @ControllerMethod("查询接车送修人") public Message 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 queryContactInfo(@RequestParam("customerId") Long customerId, @RequestParam("memberId") Long memberId) { return success(contactBizService.queryContactInfo(customerId, memberId)); } @Deprecated @Override @GetMapping("/modifySpecCode") @ControllerMethod("修改档案车型代码") public Message modifySpecCode(@RequestParam("customerId") Long customerId, @RequestParam("specCode") String specCode) { return success(customerBiz.modifySpecCode(customerId, specCode)); } @Override @PostMapping("/modify/spec_code") @ControllerMethod("修改档案车型代码") public Message updateSpecCode(@Valid @RequestBody ChangeSpecCodeReq changeSpecCodeReq) { return success(customerBiz.fixSpecCode(changeSpecCodeReq)); } @Override @GetMapping("/queryReceivable") @ControllerMethod("查询能否接车") public Message queryReceivable(@RequestParam("userId") Long userId, @RequestParam("plateNo") String plateNo) { return success(customerBiz.queryReceivable(userId, plateNo)); } @Override @GetMapping("/query/illegal/adviser") @ControllerMethod("查询不能接车的售后接待人员") public Message> queryIllegalAdviser(final Long cusId) { return success(customerBiz.queryIllegalAdviser(cusId)); } @Override @PostMapping("/updatePlateNo") @ControllerMethod("通过vin修改车牌号") public Message updatePlateNo(@Valid @RequestBody ChangePlateNoReq changePlateNoReq) { return success(pickUpCustomerService.fixPlateNo(changePlateNoReq.getFrameNo(), changePlateNoReq.getPlateNo(), changePlateNoReq.getGroupId())); } @Override @GetMapping("/queryByMemberId") @ControllerMethod("查询对应memberId的所有保有客档案") public Message> queryByMemberId(@RequestParam("memberId") Long memberId) { List list = new ArrayList<>(); List 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> queryVehicleByMemberId(@RequestParam("memberId") final Long memberId) { return success(customerBiz.queryVehicleByMemberId(memberId)); } @Override @GetMapping("/query/by/engineNo") @ControllerMethod("通过发动机号查询保有客档案") public Message 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> queryByKeyword(@RequestParam("keyword") String keyword, @RequestParam("groupId") Long groupId) { return success(customerBiz.queryByKeyword(keyword, groupId)); } @Override @GetMapping("/query/vehicle/by/vin") @ControllerMethod("查询车辆认证信息") public Message queryVehicle(@RequestParam("vin") final String vin) { return success(customerBiz.queryVehicleByVin(vin)); } @Override @PostMapping("/query/cus/cnt") @ControllerMethod("查询保有客户数量") public Message> queryCusCnt(@RequestBody final CusCntReq req) { return success(customerBiz.queryCusCnt(req)); } }