package com.zteits.pay.biz.impl; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.constants.ExamineStateEnum; import com.github.pagehelper.PageInfo; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.AccountTypeEnum; import com.zteits.clouds.api.apibase.constants.DataStatusEnum; import com.zteits.clouds.api.dto.clouds.param.BatchDeleteByPrimaryKeyRequest; import com.zteits.clouds.api.dto.clouds.param.DeleteByPrimaryKeyRequest; import com.zteits.clouds.api.dto.pay.TdCAcctNoSecretDTO; import com.zteits.clouds.api.dto.pay.car.param.CustCarInfoQueryReq; import com.zteits.clouds.api.dto.pay.dto.SpecialCarnumberBillingDTO; import com.zteits.clouds.api.dto.pay.param.SaveCustPersonRequest; import com.zteits.clouds.api.dto.pay.param.SpecialCarnumberBillingRequest; import com.zteits.clouds.api.dto.pay.param.TdCAcctNoSecretRequest; import com.zteits.clouds.api.service.pay.SpecialCarnumberBillingService; import com.zteits.clouds.api.service.pay.TdCAcctNoSecretService; import com.zteits.clouds.api.service.pay.TdCCustPersonService; import com.zteits.pay.dao.SpecialCarnumberBillingDao; import com.zteits.pay.dao.TdCAcctPersonDao; import com.zteits.pay.dao.TdCCarDao; import com.zteits.pay.dao.TdCCustPersonDao; import com.zteits.pay.domain.SpecialCarnumberBilling; import com.zteits.pay.domain.TdCCar; import com.zteits.pay.domain.TdCCustPerson; import com.zteits.pay.pagepager.PageBeanUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Optional; @Component public class SpecialCarnumberBillingServiceImpl implements SpecialCarnumberBillingService { private static final Logger logger = LoggerFactory.getLogger(SpecialCarnumberBillingServiceImpl.class); @Autowired private SpecialCarnumberBillingDao specialCarnumberBillingDao; @Autowired private TdCCustPersonDao tdCCustPersonDao; @Autowired private TdCCustPersonService tdCCustPersonService; @Autowired private TdCAcctPersonDao tdCAcctPersonDao; @Resource(name="tdCAcctNoSecretServiceImpl") private TdCAcctNoSecretService tdCAcctNoSecretService; @Autowired private TdCCarDao tdCCarDao; @Override public BizResult> querySpecialCarnumberBilling(SpecialCarnumberBillingRequest request) { List specialCarnumberBillingDTOS = new ArrayList<>(); List specialCarnumberBillings = specialCarnumberBillingDao.querySpecialCarnumberBilling(request); if (CollectionUtils.isEmpty(specialCarnumberBillings)) { return new BizResult<>(specialCarnumberBillingDTOS); } for (SpecialCarnumberBilling source : specialCarnumberBillings) { SpecialCarnumberBillingDTO dto = new SpecialCarnumberBillingDTO(); BeanUtils.copyProperties(source, dto); specialCarnumberBillingDTOS.add(dto); } return new BizResult<>(specialCarnumberBillingDTOS); } @Override public BizResult> querySpecialCarnumberBillingForPage(SpecialCarnumberBillingRequest request) { PageBean pageBean = new PageBean<>(); PageInfo pageInfo = specialCarnumberBillingDao.querySpecialCarnumberBillingForPage(request); if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) { PageBeanUtil.copyProperties(pageInfo, pageBean, SpecialCarnumberBillingDTO.class); } return new BizResult<>(pageBean); } @Override public BizResult batchDeleteSpecialCarnumberBillingByPrimaryKey(BatchDeleteByPrimaryKeyRequest request) { int delenum = specialCarnumberBillingDao.batchDeleteSpecialCarnumberBillingByPrimaryKey(request.getIds(), request.getOpId(), request.getsOpName()); return new BizResult<>(delenum > 0); } @Transactional(rollbackFor = Exception.class) @Override public BizResult delSpecialCarnumberBillingByPrimaryKey(DeleteByPrimaryKeyRequest request) { SpecialCarnumberBilling specialCarnumberBilling = specialCarnumberBillingDao.queryByPrimaryKey(request.getId()); int delenum = specialCarnumberBillingDao.delSpecialCarnumberBillingByPrimaryKey(request.getId(), request.getOpId(), request.getsOpName()); logger.info("西城特殊车-逻辑删除special_carnumber_billing, id:{}", request.getId()); if (StringUtils.isNotEmpty(specialCarnumberBilling.getCustId())) { // 关闭该账户自动扣费 TdCAcctNoSecretRequest acctNoSecretRequest = new TdCAcctNoSecretRequest(); acctNoSecretRequest.setCustId(specialCarnumberBilling.getCustId()); acctNoSecretRequest.setIsOpen(0); acctNoSecretRequest.setAcctType(5); tdCAcctNoSecretService.switchPaymentState(acctNoSecretRequest); logger.info("西城特殊车-关闭td_c_acct_no_secret, custid:{}", specialCarnumberBilling.getCustId()); } return new BizResult<>(delenum > 0); } @Transactional(rollbackFor = Exception.class) @Override public BizResult saveSpecialCarnumberBilling(SpecialCarnumberBillingRequest request) { logger.info("西城特殊车-添加, custidrequest:{}", JSONObject.toJSONString(request)); SpecialCarnumberBilling specialCarnumberBilling = new SpecialCarnumberBilling(); BeanUtils.copyProperties(request, specialCarnumberBilling); specialCarnumberBilling.setOrgId(String.valueOf(request.getOrgId())); specialCarnumberBilling.setCreateEmpid(request.getCreateEmpId()); specialCarnumberBilling.setCreateName(request.getCreateEmpName()); specialCarnumberBilling.setCreateDate(new Date()); if (StringUtils.isNotEmpty(request.getPhoneNum())) { TdCCustPerson custPerson = tdCCustPersonDao.selectByUserPhone(request.getPhoneNum()); if (custPerson != null && StringUtils.isNotEmpty(custPerson.getCustId())) { String custId = custPerson.getCustId(); // 添加td_c_acct_person tdCAcctPersonDao.addFeeForCustPresentAcct(request.getOrgId(), 0L, AccountTypeEnum.ACCT_RECHARGE.value(), custId); logger.info("西城特殊车-添加td_c_acct_person, custid:{}", custId); // 添加td_c_acct_no_secret addAcctNoSecret(custId); // 添加车牌到td_c_car addTdCCar(request, custId); specialCarnumberBilling.setCustId(custId); } else { // 添加td_c_cust_person SaveCustPersonRequest saveCustPersonRequest = new SaveCustPersonRequest(); saveCustPersonRequest.setCustName(request.getName()); saveCustPersonRequest.setUserPhone(request.getPhoneNum()); String custId = tdCCustPersonService.saveCustPerson(saveCustPersonRequest).getData(); logger.info("西城特殊车-添加td_c_cust_person成功, custid:{}", custId); // 添加td_c_acct_person tdCAcctPersonDao.addFeeForCustPresentAcct(request.getOrgId(), 0L, AccountTypeEnum.ACCT_RECHARGE.value(), custId); logger.info("西城特殊车-添加td_c_acct_person, custid:{}", custId); // 添加td_c_acct_no_secret addAcctNoSecret(custId); // 添加车牌到td_c_car addTdCCar(request, custId); specialCarnumberBilling.setCustId(custId); } } int saveNum = specialCarnumberBillingDao.saveSpecialCarnumberBilling(specialCarnumberBilling); logger.info("西城特殊车-添加special_carnumber_billing, custid:{}", specialCarnumberBilling.getCustId()); return new BizResult<>(saveNum > 0); } /** * 判断有没有绑定该车 * 绑定了则datastate改为0 * 然后添加绑定车辆 * @param request * @param custId */ private void addTdCCar(SpecialCarnumberBillingRequest request, String custId) { // 查询车牌号之前有没有绑定过 TdCCar reqCar = new TdCCar(); reqCar.setCarNumber(request.getCarNumber()); List cars = tdCCarDao.selectCustInfo(reqCar); if (CollectionUtils.isNotEmpty(cars)) { for (TdCCar car : cars) { // 修改 datastate = 0 tdCCarDao.deleteCars(car); } } // 添加车牌到td_c_car TdCCar tdCCar = new TdCCar(); tdCCar.setCarNumber(request.getCarNumber()); tdCCar.setCustId(custId); tdCCar.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); tdCCar.setCarNumberColor(Integer.valueOf(Optional.ofNullable(request.getCarNumberColor()).orElse("0"))); tdCCar.setPlateTypeId(1); tdCCar.setExamineState(ExamineStateEnum.ReviewPass.getValue()); tdCCar.setCardCheckState(0); tdCCar.setCreditScore(0); tdCCar.setCreateDate(new Date()); tdCCar.setCreateEmpid(request.getCreateEmpId()); tdCCarDao.insertCars(tdCCar); } /** * 添加td_c_acct_no_secret * @param custId */ private void addAcctNoSecret(String custId) { TdCAcctNoSecretRequest acctNoSecretRequest = new TdCAcctNoSecretRequest(); acctNoSecretRequest.setCustId(custId); acctNoSecretRequest.setAcctType(5); acctNoSecretRequest.setAcctOrder(1); acctNoSecretRequest.setIsOpen(1); boolean isOpen = false; List tdCAcctNoSecrets = tdCAcctNoSecretService.queryInFoByCustIdAndType(acctNoSecretRequest).getData(); logger.info("西城特殊车-查询是否开通自动扣费,{}", JSONObject.toJSONString(tdCAcctNoSecrets)); for (TdCAcctNoSecretDTO tdCAcctNoSecret : tdCAcctNoSecrets) { // 如果已经开通了并且优先扣费则返回 if (tdCAcctNoSecret.getIsOpen() == 1 && tdCAcctNoSecret.getAcctOrder() == 1) { logger.info("西城特殊车-已经添加过td_c_acct_no_secrety, custid:{}", custId); } else { tdCAcctNoSecretService.switchPaymentState(acctNoSecretRequest); logger.info("西城特殊车-修改并保存td_c_acct_no_secrety:custid:{}", custId); } isOpen = true; } if (!isOpen) { tdCAcctNoSecretService.insertNonSensePayment(acctNoSecretRequest); logger.info("西城特殊车-添加td_c_acct_no_secret, custid:{}", custId); } } @Transactional(rollbackFor = Exception.class) @Override public BizResult updateByPrimaryKeySelective(SpecialCarnumberBillingRequest request) { SpecialCarnumberBilling oriSpecialCarnumberBilling = specialCarnumberBillingDao.queryByPrimaryKey(request.getId()); if(!oriSpecialCarnumberBilling.getPhoneNum().equals(request.getPhoneNum())) { TdCCustPerson custPerson = new TdCCustPerson(); custPerson.setCustId(oriSpecialCarnumberBilling.getCustId()); custPerson.setUserPhone(request.getPhoneNum()); tdCCustPersonDao.updateByCustId(custPerson); logger.info("西城特殊车-更新td_c_cust_person, 手机号:{}", request.getPhoneNum()); } if(!oriSpecialCarnumberBilling.getCarNumber().equals(request.getCarNumber())) { CustCarInfoQueryReq custCarInfoQueryReq = new CustCarInfoQueryReq(); custCarInfoQueryReq.setCarNumber(oriSpecialCarnumberBilling.getCarNumber()); List cars = tdCCarDao.selectCustInfoByCarNumber(custCarInfoQueryReq); for ( TdCCar car: cars) { car.setCarNumber(request.getCarNumber()); car.setModfiyDate(new Date()); car.setModfiyEmpid(request.getModifyEmpId()); tdCCarDao.updateCars(car); logger.info("西城特殊车-更新td_c_car, 车牌号:{}", request.getCarNumber()); } } SpecialCarnumberBilling specialCarnumberBilling = new SpecialCarnumberBilling(); BeanUtils.copyProperties(request, specialCarnumberBilling); int upNum = specialCarnumberBillingDao.updateByPrimaryKeySelective(specialCarnumberBilling); logger.info("西城特殊车-更新special_carnumber_billing, id:{}", request.getId()); return new BizResult<>(upNum > 0); } /** * 根据手机号动态查询 * * @param request * @return */ @Override public BizResult> querySpecialCarnumberBillingByPhone(SpecialCarnumberBillingRequest request) { List specialCarnumberBillingDTOS = new ArrayList<>(); List specialCarnumberBillings = specialCarnumberBillingDao.querySpecialCarnumberBillingByPhone(request); if (CollectionUtils.isEmpty(specialCarnumberBillings)) { return new BizResult<>(specialCarnumberBillingDTOS); } for (SpecialCarnumberBilling source : specialCarnumberBillings) { SpecialCarnumberBillingDTO dto = new SpecialCarnumberBillingDTO(); BeanUtils.copyProperties(source, dto); specialCarnumberBillingDTOS.add(dto); } return new BizResult<>(specialCarnumberBillingDTOS); } /** * 根据车牌号动态查询 * * @param request * @return */ @Override public BizResult> querySpecialCarnumberBillingByCarNum(SpecialCarnumberBillingRequest request) { List specialCarnumberBillingDTOS = new ArrayList<>(); List specialCarnumberBillings = specialCarnumberBillingDao.querySpecialCarnumberBillingByCarNum(request); if (CollectionUtils.isEmpty(specialCarnumberBillings)) { return new BizResult<>(specialCarnumberBillingDTOS); } for (SpecialCarnumberBilling source : specialCarnumberBillings) { SpecialCarnumberBillingDTO dto = new SpecialCarnumberBillingDTO(); BeanUtils.copyProperties(source, dto); specialCarnumberBillingDTOS.add(dto); } return new BizResult<>(specialCarnumberBillingDTOS); } }