TdCCarServiceImpl.java 11.3 KB
package com.zteits.pay.biz;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.clouds.common.constants.ExamineStateEnum;
import com.github.pagehelper.PageInfo;
import com.zteits.clouds.api.apibase.bean.PageBean;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.pay.TdCCustPersonDTO;
import com.zteits.clouds.api.dto.pay.car.dto.CustCarInfoDTO;
import com.zteits.clouds.api.dto.pay.car.param.CustCarInfoCheckStatusUpdateReq;
import com.zteits.clouds.api.dto.pay.car.param.CustCarInfoQueryReq;
import com.zteits.clouds.api.dto.pay.car.param.UserCarInfoQueryForPageReq;
import com.zteits.clouds.api.dto.pay.param.AppIDcardReviewRequest;
import com.zteits.pay.dao.TdCCustPersonDao;
import com.zteits.pay.domain.TdCCarCheckRecord;
import com.zteits.pay.domain.TdCCustPerson;
import com.zteits.pay.pagepager.PageBeanUtil;
import com.zteits.pay.service.carcheckrecord.oper.TdCCarCheckRecordOperInnerService;
import com.zteits.pay.util.CredentialsReviewService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.clouds.common.utils.ListCopyUtil;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.dto.pay.TdCCarDTO;
import com.zteits.clouds.api.dto.pay.param.QueryTdCCarInfoByCustIdOrCarNumReq;
import com.zteits.clouds.api.dto.pay.param.TdCCarEditRequest;
import com.zteits.clouds.api.dto.pay.param.TdCCarRequest;
import com.zteits.clouds.api.service.pay.TdCCarService;
import com.zteits.pay.dao.TdCCarDao;
import com.zteits.pay.domain.TdCCar;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronizationAdapter;
import org.springframework.transaction.support.TransactionSynchronizationManager;

@Service("com.zteits.pay.biz.TdCCarServiceImpl")
public class TdCCarServiceImpl implements TdCCarService {
	@Autowired
	private TdCCarDao tdCCarDao;
	@Autowired
	private TdCCustPersonDao tdCCustPersonDao;

	@Autowired
	private CredentialsReviewService credentialsReviewService;

	@Autowired
	private TdCCarCheckRecordOperInnerService tdCCarCheckRecordOperInnerService;

	@Override
	public BizResult<List<TdCCarDTO>> selectCustInfoBycustId(TdCCarRequest request) {
		List<TdCCarDTO> carlistdto = new ArrayList<TdCCarDTO>();
		List<TdCCar> carlist = tdCCarDao.selectCustInfoBycustId(request);
		if(CollectionUtils.isNotEmpty(carlist)){
			for(TdCCar car :carlist){
				TdCCarDTO dto = new TdCCarDTO();
				BeanUtils.copyProperties(car, dto);
				carlistdto.add(dto);
			}
		}
		return new BizResult<List<TdCCarDTO>>(carlistdto);
	}
	@Override
	public BizResult<Integer> updateCars(TdCCarEditRequest request) {
		TdCCar car = new TdCCar();
		BeanUtils.copyProperties(request, car);
		Integer i = tdCCarDao.updateCars(car);
		return new BizResult<Integer>(i);
	}
	@Override
	public BizResult<Integer> insertCars(TdCCarEditRequest request) {
		TdCCar car = new TdCCar();
		BeanUtils.copyProperties(request, car);
		car.setDataState(1);
		Integer i = tdCCarDao.insertCars(car);
		return new BizResult<Integer>(i);
	}
	@Override
	public BizResult<Integer> deleteCars(TdCCarEditRequest request) {
		TdCCar car = new TdCCar();
		BeanUtils.copyProperties(request, car);
		Integer i = tdCCarDao.deleteCars(car);
		return new BizResult<Integer>(i);
	}
	@Override
	public BizResult<List<TdCCarDTO>> selectCustInfo(TdCCarRequest request) {
		List<TdCCarDTO> carlistdto = new ArrayList<TdCCarDTO>();
		TdCCar reqcar = new TdCCar();
		BeanUtils.copyProperties(request, reqcar);
		List<TdCCar> carlist = tdCCarDao.selectCustInfo(reqcar);
		if(CollectionUtils.isNotEmpty(carlist)){
			for(TdCCar car :carlist){
				TdCCarDTO dto = new TdCCarDTO();
				BeanUtils.copyProperties(car, dto);
				carlistdto.add(dto);
			}
		}
		return new BizResult<List<TdCCarDTO>>(carlistdto);
	}

	@Override
	public BizResult<PageBean<TdCCarDTO>> queryUserCarInfoForPage(UserCarInfoQueryForPageReq req) {

		PageBean<TdCCarDTO> pageBean = new PageBean<>();

		PageInfo<TdCCarDTO> pageInfo =  tdCCarDao.queryUserCarInfoForPageAndPN(req);

		PageBeanUtil.copyProperties(pageInfo,pageBean,TdCCarDTO.class);

		return new BizResult<>(pageBean);
	}

	@Override
	public BizResult<List<TdCCarDTO>> queryCustCarInfoByPhone(UserCarInfoQueryForPageReq req) {
		List<TdCCarDTO> list =  tdCCarDao.queryCustCarInfoByPhone(req);
		return new BizResult<>(list);
	}

	@Override
	public BizResult<CustCarInfoDTO> queryCustCarInfo(CustCarInfoQueryReq request) {
		if(StringUtils.isEmpty(request.getCustId())){
			throw new BizException(ErrorType.PAY_TYPE_ERROR,"客户ID");
		}

		/**
		 * 1、 查询 custPersonDTO
		 */

		TdCCustPerson person = tdCCustPersonDao.queryPersonByCustId(request.getCustId());
		TdCCustPersonDTO personDTO = null;
		if(null != person){
			personDTO = new TdCCustPersonDTO();
			BeanUtils.copyProperties(person,personDTO);

		}

		/**
		 * 2、查询 carDTOS
		 */
		TdCCar queryCar = new TdCCar();
		queryCar.setCustId(request.getCustId());
		queryCar.setCarNumber(request.getCarNumber());

		List<TdCCar> carList = tdCCarDao.selectCustInfo(queryCar);

		List<TdCCarDTO> carDTOS = null;
		if(CollectionUtils.isNotEmpty(carList)){
			carDTOS = new ArrayList<>();
			ListCopyUtil.listCopyProperties(carList,carDTOS,TdCCarDTO.class);
		}

		/**
		 * 3、赋值
		 */
		CustCarInfoDTO custCarInfoDTO = new CustCarInfoDTO();
		custCarInfoDTO.setCustPersonDTO(personDTO);
		custCarInfoDTO.setCarDTOS(carDTOS);

		return new BizResult<>(custCarInfoDTO);
	}

	@Override
	@Transactional
	public BizResult<Boolean> updateCustCarInfoCheckStatus(CustCarInfoCheckStatusUpdateReq req) {

		if(null == req.getId()){
			throw new BizException(ErrorType.PARAMM_NULL,"主键信息");
		}

		if(null == req.getCheckStatus()){
			throw new BizException(ErrorType.PARAMM_NULL,"审核状态");
		}

		if(StringUtils.isEmpty(req.getRemark())){
			throw new BizException(ErrorType.PARAMM_NULL,"备注信息");
		}
		//推送消息时用
		int checkStatus = req.getCheckStatus();
		//审核被撤销时,入参传入0,保存时为3
		if(req.getCheckStatus().equals(0)){
			req.setCheckStatus(3);
		}

		/**
		 * 1、根据主键查询车辆信息
		 */
		TdCCar car = tdCCarDao.selectCustCarInfoById(req.getId());
		if(null == car){
			throw new BizException(ErrorType.BIZ_ERROR,"查找不到车辆信息");
		}



		/**
		 * 2、更新车辆信息审核状态
		 */

		TdCCar updateCar = new TdCCar();
		updateCar.setId(car.getId());
		updateCar.setExamineState(req.getCheckStatus());
		int num = tdCCarDao.updateCars(updateCar);
		if(num < 1){
			throw new BizException(ErrorType.BIZ_ERROR,"更新审核状态失败");
		}


		/**
		 * 3、记录操作流水
		 */
		TdCCarCheckRecord record = new TdCCarCheckRecord();
		BeanUtils.copyProperties(car,record);
		record.setId(null);
		record.setCarShelfNum(car.getCarShelfNum());
		record.setCarEngineNum(car.getCarEngineNum());
		record.setPhoneNum(car.getPhoneNumber());
		record.setOperId(req.getsOpId().intValue());
		record.setOperName(req.getsOpName());
		record.setDataStatus(DataStatusEnum.DATA_STATUS_VALID.value());
		record.setCheckRemark(req.getRemark());
		record.setOperTime(new Date());
		record.setCheckState(req.getCheckStatus());
		record.setCheckRemark(req.getRemark());
		num = tdCCarCheckRecordOperInnerService.saveTdCCarCheckRecord(record);
		if(num < 1){
			throw new BizException(ErrorType.BIZ_ERROR,"保存车辆审核操作流水失败");
		}

		/**向车主推送车牌审核信息*/
		record.setCheckState(checkStatus);
		sendMsg(num,record);
		return new BizResult<>(true);
	}

	private void sendMsg(int num, TdCCarCheckRecord record) {
		if (TransactionSynchronizationManager.isActualTransactionActive()) {
			//存在事物
			TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
				@Override
				public void afterCommit() {
					//成功后推送,否则不推送
					if(num > 0) {
						credentialsReviewService.driverLicenseResPush(record);
					}
				}
			});
		} else {
			if(num > 0) {
				credentialsReviewService.driverLicenseResPush(record);
			}
		}
	}

	/**
	 * 通过个人客户id或车牌查询车牌信息.<br/>
	 * @param custId
	 * @return
	 * @author wangfs
	 */
	@Override
	public BizResult<List<TdCCarDTO>> queryTdCCarInfoByCustIdOrCarNum(QueryTdCCarInfoByCustIdOrCarNumReq request) {
		List<TdCCarDTO> list = new ArrayList<>();
		TdCCar reqcar = new TdCCar();
		reqcar.setCarNumber(request.getCarNumber());
		reqcar.setCustId(request.getCustId());
		List<TdCCar> selectCustInfo = tdCCarDao.selectCustInfo(reqcar);
		ListCopyUtil.listCopyProperties(selectCustInfo, list, TdCCarDTO.class);
		return  new BizResult<>(list);
	}
	@Override
	public BizResult<CustCarInfoDTO> queryCustCarInfoByCarNumber(CustCarInfoQueryReq request) {
		CustCarInfoDTO dto = new CustCarInfoDTO();
		List<TdCCarDTO> carDTOS = new ArrayList<>();
		TdCCustPersonDTO personDTO = new TdCCustPersonDTO();
		//查询车辆信息
		List<TdCCar> list = tdCCarDao.selectCustInfoByCarNumber(request);
		if(CollectionUtils.isEmpty(list)){
			return new BizResult<>(dto);
		}
		ListCopyUtil.listCopyProperties(list, carDTOS, TdCCarDTO.class);
		dto.setCarDTOS(carDTOS);
		//查询用户信息
		String custId = list.get(0).getCustId();
		TdCCustPerson person = tdCCustPersonDao.queryPersonByCustId(custId);
		if(null != person){
			personDTO = new TdCCustPersonDTO();
			BeanUtils.copyProperties(person,personDTO);
			dto.setCustPersonDTO(personDTO);
		}
		return new BizResult<>(dto);
	}

	@Transactional(rollbackFor = Exception.class)
	@Override
	public BizResult<Boolean> DriverLicenseReview(TdCCarEditRequest request) {
		/**主表车辆表保存驾驶证图片并更新审核状态信息*/
		TdCCar car = new TdCCar();
		BeanUtils.copyProperties(request, car);
		Integer i = tdCCarDao.updateCars(car);
		/**审核记录表新增审核记录,状态为待审核*/
		TdCCar tdCCar = tdCCarDao.selectCustCarInfoById(request.getId());
		TdCCarCheckRecord tdCCarCheckRecord = new TdCCarCheckRecord();
		BeanUtils.copyProperties(tdCCar,tdCCarCheckRecord);
		tdCCarCheckRecord.setId(null);
		tdCCarCheckRecord.setCarCheckType(1);
		tdCCarCheckRecord.setCheckState(ExamineStateEnum.NoAudit.getValue());
		int j = tdCCarCheckRecordOperInnerService.saveTdCCarCheckRecord(tdCCarCheckRecord);
		return new BizResult<>(i>0 & j>0);
	}

	@Override
	public BizResult<Boolean> IDcardReview(AppIDcardReviewRequest request) {
		/**主表车辆表更新车主审核状态信息*/
		TdCCar car = new TdCCar();
		BeanUtils.copyProperties(request,car);
		car.setCardCheckState(ExamineStateEnum.NoAudit.getValue());
		Integer i = tdCCarDao.updateCars(car);
		/**审核记录表新增车主身份审核记录,状态为未审核*/
		TdCCar tdCCar = tdCCarDao.selectCustCarInfoById(request.getId());
		TdCCarCheckRecord tdCCarCheckRecord = new TdCCarCheckRecord();
		BeanUtils.copyProperties(tdCCar,tdCCarCheckRecord);
		BeanUtils.copyProperties(request,tdCCarCheckRecord);
		tdCCarCheckRecord.setId(null);
		tdCCarCheckRecord.setCarCheckType(2);
		tdCCarCheckRecord.setCheckState(ExamineStateEnum.NoAudit.getValue());
		int j = tdCCarCheckRecordOperInnerService.saveTdCCarCheckRecord(tdCCarCheckRecord);
		return new BizResult<>(i>0 & j>0);
	}

}