package com.zteits.bill.biz.vipcard; import org.apache.commons.collections4.CollectionUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.cache.park.ParkingLotCacheUtil; import com.clouds.common.cache.sys.SysCodeValueCacheUtil; import com.clouds.common.constants.CodeValKindEnum; import com.clouds.common.utils.BeanValidatorsUtils; import com.clouds.common.utils.DateUtil; import com.clouds.common.utils.ListCopyUtil; import com.clouds.common.utils.SequenceUtil; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.util.CollectionUtil; import com.zteits.bill.biz.tailNumberLimited.inner.TailNumberLimitInnerService; import com.zteits.bill.dao.vipcard.*; import com.zteits.bill.domain.*; import com.zteits.bill.domain.sdomain.VipCardMaxBuyNumIsLimitDO; import com.zteits.bill.pagepager.PageBeanUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.*; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.bill.vipcard.*; import com.zteits.clouds.api.dto.bill.vipcard.param.*; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.sys.SysCodeValueDTO; import com.zteits.clouds.api.service.bill.vipcard.VipCardService; import jodd.util.StringUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.Instant; import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; /** * 停车场会员卡-(月卡/年卡规则serviceImpl) * * Copyright: Copyright (c) 2017 ZTE-ITS * * @ClassName: AmountUtils.java * @Description: * @version: v1.0.0 * @author: wangfs * @date: 2017年10月27日 * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2017年10月27日 wangfs v1.0.0 创建 */ @Service("com.zteits.bill.biz.vipcard.VipCardServiceImpl") public class VipCardServiceImpl implements VipCardService { private static final Logger logger = LoggerFactory.getLogger(VipCardServiceImpl.class); @Autowired private VipCardDao vipCardDao; @Autowired private VipCardCustInfoDao vipCardCustInfoDao; @Autowired private VipCardParkSaleRelDao vipCardParkSaleRelDao; @Autowired private VipCardParkCustRelDao vipCardParkCustRelDao; @Autowired private VipCardCustInfoIrainDao vipCardCustInfoIrainDao; @Autowired private TailNumberLimitInnerService tailNumberLimitInnerService; @Autowired private TVipCardLogsDao tVipCardLogsDao; /** * 新增会员卡(年卡/月卡等).
* @return */ @Override public BizResult insertVipCard(VipCardInsertRequest request) throws Exception { logger.info("---begin新增会员卡,入参={}",JSONObject.toJSON(request)); BeanValidatorsUtils.validateWithException(request); if(request == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } String vipCardSequenceId = SequenceUtil.getNextId(SequenceTypeEnum.VIP_ID_SQE); request.setPrice(request.getPrice() != null ? request.getPrice() * 100 :0L); request.setCardNo(vipCardSequenceId); if(CollectionUtils.isNotEmpty(request.getVipCardParkSaleRelDTOList())){ for(VipCardParkSaleRelDTO dto:request.getVipCardParkSaleRelDTOList()){ if(dto != null){ dto.setCardNo(vipCardSequenceId); dto.setCreateDate(new Date()); dto.setCreateEmpid(request.getCreateEmpid()); dto.setCreateName(request.getCreateName()); dto.setDataState(1); dto.setTotalNum(0); dto.setSellNum(0); dto.setDiscValue(request.getDiscValue()); dto.setPrice(request.getPrice()); dto.setOrgId(request.getOrgId()); } } } int insertCount = vipCardDao.insert(request); logger.info("---end新增会员卡,成功插入条数={}条。",insertCount); return new BizResult(insertCount > 0 ? true : false); } /** * 通过会员卡编码查询会员卡信息.
* @param request * @return * @throws Exception */ @Override public BizResult queryVipCardByCardNo(QueryVipCardByCardNoRequest request) throws Exception { logger.info("---begin通过会员卡编码查询会员卡信,入参={}",JSONObject.toJSON(request)); VipCardDTO vipCardDTO = new VipCardDTO(); if(request != null){ TVipCard vipCard = vipCardDao.queryVipCardByCardNo(request); if(vipCard != null){ BeanUtils.copyProperties(vipCard, vipCardDTO); List vipCardParkList = new ArrayList<>(); TVipCardParkSaleRel tVipCardParkSaleRel=new TVipCardParkSaleRel(); tVipCardParkSaleRel.setCardNo(vipCardDTO.getCardNo()); //查询会员卡可售卖的停车场编码 List list = vipCardParkSaleRelDao.queryVipCardParkSaleRelForListByCardNo(tVipCardParkSaleRel); ListCopyUtil.listCopyProperties(list, vipCardParkList, VIPCardParkDTO.class); vipCardDTO.setVipCardParkList(vipCardParkList); } }else{ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } logger.info("---end通过会员卡编码查询会员卡信.."); return new BizResult(vipCardDTO); } @Override public BizResult queryVipCardByVipCard(VipCardRequest request) throws Exception { logger.info("---begin通过会员卡编码查询会员卡信,入参={}",JSONObject.toJSON(request)); VipCardDTO vipCardDTO = new VipCardDTO(); if(request != null){ TVipCard tVipCard=new TVipCard(); BeanUtils.copyProperties(request, tVipCard); TVipCard vipCardNew = vipCardDao.queryVipCardByVipCard(tVipCard); if(vipCardNew != null){ BeanUtils.copyProperties(vipCardNew, vipCardDTO); } }else{ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } logger.info("---end通过会员卡编码查询会员卡信.."); return new BizResult(vipCardDTO); } @Override public BizResult> queryVipCardForPageByVipCard(VipCardForPageRequest request) { PageBean pageBean = new PageBean(); logger.info("---begin分页查询会员卡记录,入参={}",JSONObject.toJSON(request)); if(request == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } PageInfo pageInfo = vipCardDao.queryVipCardForPageByVipCard(request); if(pageInfo != null){ PageBeanUtil.copyProperties(pageInfo, pageBean, VipCardDTO.class); } logger.info("---end分页查询会员卡记录..."); return new BizResult>(pageBean); } @Override public BizResult> queryVipCardParkSaleRelForListByCardNo(VipCardRequest request) { List dtoList=new ArrayList(); TVipCardParkSaleRel tVipCardParkSaleRel=new TVipCardParkSaleRel(); if(request == null ){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } BeanUtils.copyProperties(request, tVipCardParkSaleRel); List list = vipCardParkSaleRelDao.queryVipCardParkSaleRelForListByCardNo(tVipCardParkSaleRel); if(CollectionUtils.isNotEmpty(list)){ for (TVipCardParkSaleRel vipdo : list) { VipCardParkSaleRelDTO dto=new VipCardParkSaleRelDTO(); if(vipdo !=null){ BeanUtils.copyProperties(vipdo, dto); // String discRuleNo=dto.getDiscRuleNo(); // if(discRuleNo != null && "".equals(discRuleNo)){ // TActivityDiscountRule a = activityDiscountRuleDao.queryDiscountRuleByDiscNo(discRuleNo); // dto.setDiscValue(a.getDiscValue()); // } } dtoList.add(dto); } } return new BizResult>(dtoList); } /** * 分页查询-会员卡规则.
* @param request * @return */ @Override public BizResult> queryVIPCardRuleForPage(QueryVIPCardRuleRequest request) { logger.info("---begin分页查询会员卡规则记录,入参={}",JSONObject.toJSON(request)); PageBean pageBean = new PageBean(); if(request == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } PageInfo pageInfo = vipCardDao.queryVIPCardRuleForPage(request); PageBeanUtil.copyProperties(pageInfo, pageBean, VipCardDTO.class); if(pageBean != null && CollectionUtils.isNotEmpty(pageBean.getDataList())){ for(VipCardDTO vipCardDTO:pageBean.getDataList()){ if(vipCardDTO == null){ continue; } List vipCardParkList = new ArrayList<>(); TVipCardParkSaleRel tVipCardParkSaleRel=new TVipCardParkSaleRel(); tVipCardParkSaleRel.setCardNo(vipCardDTO.getCardNo()); //查询会员卡可售卖的停车场编码 List list = vipCardParkSaleRelDao.queryVipCardParkSaleRelForListByCardNo(tVipCardParkSaleRel); ListCopyUtil.listCopyProperties(list, vipCardParkList, VIPCardParkDTO.class); vipCardDTO.setVipCardParkList(vipCardParkList); } } logger.info("---end分页查询会员卡规则记录"); return new BizResult>(pageBean); } /** * 校验对应的时间段内停车场是否重复办理.
* @param request * @return */ @Override public BizResult> checkVipCardPark(CheckVipCardParkRequest request) { logger.info("begin校验会员卡是否重复办理服务,入参={}",JSONObject.toJSON(request)); List listDTO = new ArrayList<>(); List list = vipCardDao.checkVipCardPark(request); ListCopyUtil.listCopyProperties(list, listDTO, CheckVipCardParkDTO.class); logger.info("end校验会员卡是否重复办理dubbo服务"); return new BizResult>(listDTO); } /** * 修改会员卡(年卡/月卡等).
* @return */ @Override public BizResult updateVipCard(VipCardUpdateRequest request) throws Exception { logger.info("begin修改会员卡,入参={}",JSONObject.toJSON(request)); if(CollectionUtils.isNotEmpty(request.getVipCardParkSaleRelDTOList())){ for(VipCardParkSaleRelDTO dto:request.getVipCardParkSaleRelDTOList()){ if(dto != null){ dto.setCardNo(request.getCardNo()); dto.setCreateDate(new Date()); dto.setCreateEmpid(request.getModifyEmpid()); dto.setCreateName(request.getModifyName()); dto.setDataState(1); dto.setTotalNum(0); dto.setSellNum(0); dto.setPrice(request.getPrice() != null ? request.getPrice() * 100 :0L); dto.setDiscValue(request.getDiscValue()); } } } int insertCount = vipCardDao.updateVipCard(request); logger.info("end修改会员卡"); return new BizResult(insertCount > 0 ? true:false); } /** * 下架(年卡/月卡等).
* @return */ @Override public BizResult deleteVipCard(VipCardUpdateRequest request) throws Exception { //判断是否改卡已经购买过 int buyNumber = vipCardCustInfoDao.selectVipCardCustInfoByCardNo(request.getCardNo()); if(buyNumber > 0){ logger.info("该会员卡["+request.getCardNo()+"]已经购买过,不允许删除!"); throw new BizException(ErrorType.VIP_CARD_ALREADY_BUY,ErrorType.VIP_CARD_ALREADY_BUY.getMsg()); } int updateCount = vipCardDao.deleteVipCard(request); return new BizResult(updateCount > 0 ? true:false); } /** * 查询未推送给第三发的会员卡 */ @Override public BizResult> queryNoPustVipCardCustInfo(VipPushRequest vipPushRequest) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentDate = format.format(new Date()); logger.info("begin查询未推送的会员信息...推送时间={}",currentDate); List list=vipCardCustInfoDao.queryNoPustVipCardCustInfo(currentDate,vipPushRequest.getId()); List dtoList=new ArrayList(); if(CollectionUtils.isNotEmpty(list)){ for (TVipNoPushCardCustInfoDO tVipCardCustInfo : list) { VipNoPushCardCustInfoDTO dto=new VipNoPushCardCustInfoDTO(); if(tVipCardCustInfo!=null){ BeanUtils.copyProperties(tVipCardCustInfo, dto); dtoList.add(dto); } } } logger.info("end查询未推送的会员信息...查询到未推送条数={}条。",dtoList.size()); return new BizResult>(dtoList); } /** * 查询推送和未推送给第三发的会员卡 */ @Override public BizResult> queryPustVipCardCustInfo(VipPushRequest vipPushRequest) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentDate = format.format(new Date()); logger.info("begin查询推送和未推送的会员信息...推送时间={}",currentDate); List list=vipCardCustInfoDao.queryPustVipCardCustInfo(currentDate,vipPushRequest.getId()); List dtoList=new ArrayList(); if(CollectionUtils.isNotEmpty(list)){ for (TVipNoPushCardCustInfoDO tVipCardCustInfo : list) { VipNoPushCardCustInfoDTO dto=new VipNoPushCardCustInfoDTO(); if(tVipCardCustInfo!=null){ BeanUtils.copyProperties(tVipCardCustInfo, dto); dtoList.add(dto); } } } logger.info("end查询未推送的会员信息...查询到未推送条数={}条。",dtoList.size()); return new BizResult>(dtoList); } @Override public VipCardCustInfoDTO queryParentCard(QueryVipCardCustInfoByCustIdRequest requestVip) { return vipCardCustInfoDao.queryParentCard(requestVip); } /** * 更新会员卡推送状态.
* @param vipPushRequest * @return * 2017年12月1日 wangfs.
*/ @Override public BizResult updateByPrimaryKeySelective(VipPushRequest vipPushRequest) { if(vipPushRequest == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } TVipCardParkCustRel record = new TVipCardParkCustRel(); record.setId(vipPushRequest.getId()); record.setPushState(vipPushRequest.getPushState()); record.setRecordNo(vipPushRequest.getRecordNo()); int updateCount = vipCardParkCustRelDao.updateByPrimaryKeySelective(record); return new BizResult(updateCount); } @Override public BizResult> queryVIPCard4App(QueryVIPCardRuleRequest request) { logger.info("---begin分页查询会员卡规则记录,入参={}",JSONObject.toJSON(request)); PageBean pageBean = new PageBean(); if(request == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } PageInfo pageInfo = vipCardParkSaleRelDao.querySaleVIPCardRuleForPage(request); PageBeanUtil.copyProperties(pageInfo, pageBean, VIPCardPark4AppDTO.class); if(pageBean != null && CollectionUtils.isNotEmpty(pageBean.getDataList())){ for(VIPCardPark4AppDTO vipCardDTO:pageBean.getDataList()){ if(vipCardDTO == null){ continue; } QueryVIPCardRuleRequest QueryVIPCardRuleRequest = new QueryVIPCardRuleRequest(); List plNos = new ArrayList(); plNos.add(vipCardDTO.getPlNo()); QueryVIPCardRuleRequest.setPlNos(plNos); QueryVIPCardRuleRequest.setSaleChannel(request.getSaleChannel()); List vipCardParkList = new ArrayList<>(); List vipCardList = vipCardDao.queryParkVipCardByPlNo(QueryVIPCardRuleRequest); ListCopyUtil.listCopyProperties(vipCardList, vipCardParkList, VipCardAppDTO.class); if(CollectionUtil.isNotEmpty(vipCardParkList)) { vipCardParkList.forEach(card->{ SysCodeValueDTO sysCodeValueDTO = SysCodeValueCacheUtil.getDTO(CodeValKindEnum.T_IVP_CARD_CARD_TYPE, card.getCardType()+""); if(sysCodeValueDTO ==null) { throw new BizException(ErrorType.RESOURCE_NOT_EXISTS, "请配置系统码表:"+CodeValKindEnum.T_IVP_CARD_CARD_TYPE); } card.setCardTypeColor(sysCodeValueDTO.getCodeValueColor()); card.setCardTypeName(sysCodeValueDTO.getCodeValueName()); }); } ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(vipCardDTO.getPlNo()); if(parkingLotDTO==null) { throw new BizException(ErrorType.RESOURCE_NOT_EXISTS, "请刷新缓存或者检查数据库配置"); } vipCardDTO.setPlName(parkingLotDTO.getPlName()); vipCardDTO.setPlAddress(vipCardDTO.getPlAddress()); vipCardDTO.setVipCardList(vipCardParkList); } } logger.info("---end分页查询会员卡规则记录"); return new BizResult>(pageBean); } @Override public BizResult insertVipCardIrain(VipCardCustIrainRequest request) { List irainVipCardList = new ArrayList<>(); List irainList = request.getIrainList(); if(CollectionUtil.isNotEmpty(irainList)) { irainList.forEach(cardInforeq->{ TVipCardCustInfoIrain tVipCardCustInfoIrain = new TVipCardCustInfoIrain(); BeanUtils.copyProperties(cardInforeq, tVipCardCustInfoIrain); irainVipCardList.add(tVipCardCustInfoIrain); }); } Integer i = vipCardCustInfoIrainDao.backInsertIrainVipCard(irainVipCardList); return new BizResult(i); } @Override public BizResult deleteVipCardIrainByParkCode(VipCardCustIrainRequest request) { if(StringUtil.isBlank(request.getParkCode())) { throw new BizException(ErrorType.PARAMM_NULL, "停车场编号不能为空"); } Integer i = vipCardCustInfoIrainDao.deleteByParkCode(request.getParkCode()); return new BizResult(i); } @Override public BizResult> queryPlNoList(QueryVipCardByPlNoRequest request) { List plNos = vipCardDao.queryPlNoList(request); return new BizResult>(plNos); } @Override public BizResult> queryVipCardNosByPlNos( QueryVipCardByPlNoRequest request) { List vipCardList = vipCardDao.queryVipCardNosByPlNos(request); return new BizResult>(vipCardList); } @Override public BizResult> queryVipCardParkSaleRelForListByPlNo( QueryVipCardByPlNoRequest request) { List vipCardList = vipCardDao.queryVipCardParkSaleRelForListByPlNo(request); return new BizResult>(vipCardList); } @Override public BizResult> queryVipCardParkListByPlNo( QueryVipCardByPlNoRequest request) { List vipCardListByCardTypeDTOs = new ArrayList<>(); List vipCardList = vipCardDao.queryVipCardParkSaleRelForListByPlNo(request); Map> vipMap = new HashMap<>(); vipMap = vipCardList.stream().collect(Collectors.groupingBy(VipCardAndCustInfoDTO::getCardType)); /**合并卡类型相同的会员卡*/ if(CollectionUtils.isNotEmpty(vipCardList)){ for(Integer key : vipMap.keySet()){ VipCardListByCardTypeDTO vipCardListByCardTypeDTO = new VipCardListByCardTypeDTO(); vipCardListByCardTypeDTO.setCardType(key); vipCardListByCardTypeDTO.setVipCardList(vipMap.get(key)); vipCardListByCardTypeDTOs.add(vipCardListByCardTypeDTO); } } return new BizResult>(vipCardListByCardTypeDTOs); } @Override public BizResult> queryVipCardByCustId(QueryVipCardCustInfoByCustIdRequest request) { List vipCardList = vipCardDao.queryVipCardByCustId(request); List vipCardResList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(vipCardList)){ for(VipCardAndCustInfoDTO dto:vipCardList){ //会员卡合并 logger.info(" 会员卡合并 "); Integer a = 0; for(VipCardAndCustInfoDTO dtoR:vipCardResList){ if(dtoR.getCustCardId().equals(dto.getCustCardId())){ a=1; dtoR.getPlNos().add(dto.getPlNo()); } } if(a==0){ List plNos = new ArrayList<>(); plNos.add(dto.getPlNo()); dto.setPlNos(plNos); vipCardResList.add(dto); } } } return new BizResult>(vipCardResList); } @Override public BizResult> queryVipCardAllByCustId(QueryVipCardCustInfoByCustIdRequest request) { List vipCardList = vipCardDao.queryVipCardAllByCustId(request); List vipCardResList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(vipCardList)){ for(VipCardAndCustInfoDTO dto:vipCardList){ //会员卡合并 logger.info(" 会员卡合并 "); Integer a = 0; for(VipCardAndCustInfoDTO dtoR:vipCardResList){ if(dtoR.getCustCardId().equals(dto.getCustCardId())){ a=1; dtoR.getPlNos().add(dto.getPlNo()); } } if(a==0){ List plNos = new ArrayList<>(); plNos.add(dto.getPlNo()); dto.setPlNos(plNos); vipCardResList.add(dto); } } } return new BizResult>(vipCardResList); } @Override public BizResult saveVipCardForCust(SaveVipCardAndPersonRequest request) throws Exception { /** 1.查询会员卡 */ logger.info(" 1.查询会员卡 "); QueryVipCardByCardNoRequest vipCardRequest = new QueryVipCardByCardNoRequest(); vipCardRequest.setCardNo(request.getCardNo()); vipCardRequest.setSysCode("1001"); TVipCard vipCard = vipCardDao.queryVipCardByCardNo(vipCardRequest); /** 2.新增会员卡个人购买记录 */ logger.info("2.新增会员卡个人购买记录 "); TVipCardCustInfo tVipCardCustInfo=this.getVipCardCustInfo(vipCard, request); if(tVipCardCustInfo !=null){ tVipCardCustInfo.setModifyName(null); vipCardCustInfoDao.saveVipCardCustInfo(tVipCardCustInfo); } List plNos=new ArrayList(); /** 3、判断是单体卡还是共享卡*/ logger.info("3、判断是单体卡还是共享卡:"+tVipCardCustInfo); if(vipCard.getUseType()==Integer.parseInt(VIPCardEnum.CARD_USE_TYPE_1.getValue())){ plNos.add(StringUtils.isNotEmpty(request.getPlNo()) ? request.getPlNo() : null); }else{ /*** 通过卡编码查询关联的停车场 */ TVipCardParkSaleRel tVipCardParkSaleRel=new TVipCardParkSaleRel(); tVipCardParkSaleRel.setCardNo(request.getCardNo()); List list = vipCardParkSaleRelDao.queryVipCardParkSaleRelForListByCardNo(tVipCardParkSaleRel); for (TVipCardParkSaleRel tdo : list) { if(tdo!=null){ if(!plNos.contains(tdo.getPlNo())){ plNos.add(tdo.getPlNo()); } } } } /*** 4、新增会员卡和停车场关联信息*/ logger.info("4、新增会员卡和停车场关联信息:"+plNos.toString()); for (String plNo : plNos) { TVipCardParkCustRel tVipCardParkCustRel =new TVipCardParkCustRel(); tVipCardParkCustRel.setPlNo(plNo); tVipCardParkCustRel.setCustId(request.getCustId()); tVipCardParkCustRel.setCustCardNo(tVipCardCustInfo.getCustCardNo()); tVipCardParkCustRel.setCarNumber(request.getCarNumber()); tVipCardParkCustRel.setCreateDate(new Date()); tVipCardParkCustRel.setCreateEmpid(request.getCreateEmpid()); tVipCardParkCustRel.setCreateName(request.getCreateName()); tVipCardParkCustRel.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); //推送状态 1:已推送 0:未推送 tVipCardParkCustRel.setPushState(0); //个人会员卡购买类型:1:购卡 2:续费 tVipCardParkCustRel.setCardBuyType(1); vipCardParkCustRelDao.saveVipCardParkCustRel(tVipCardParkCustRel); } /**5.插入会员卡购买日志**/ this.saveTVipCardLogs(tVipCardCustInfo,request); return new BizResult(tVipCardCustInfo.getCustCardNo()); } /** * 保存会员卡购买日志信息 * @param * @return * @Author: xiejianpeng * @Date: 2018/6/22 17:31 * */ private void saveTVipCardLogs(TVipCardCustInfo tVipCardCustInfo,SaveVipCardAndPersonRequest request) { TVipCardLogs record = new TVipCardLogs(); //个人客户id record.setCustId(request.getCustId()); //购买数量 record.setNum(request.getNum()); //卡编码 record.setCardNo(request.getCardNo()); //个人卡编码 record.setCustCardNo(tVipCardCustInfo.getCustCardNo()); //车牌号 record.setCarNumber(request.getCarNumber()); //停车场编号 record.setPlNo(request.getPlNo()); //业务类型:301:会员卡购买单,302:会员卡续费 ,303:变更车牌 record.setBusiType(request.getOptType()); //购买时优惠后金额 record.setDiscountAmount(tVipCardCustInfo.getDiscountAmount()); //购买时实收金额=优惠后金额 record.setCardActAmount(tVipCardCustInfo.getTotalAmount()-tVipCardCustInfo.getDiscountAmount()); //生效时间 record.setEffDate(request.getEffDate()); //失效效时间 record.setExpDate(request.getExpDate()); //数据状态 record.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); //创建人ID record.setCreateEmpid(request.getCreateEmpid() == null ? request.getModifyEmpid() + "" : request.getCreateEmpid() + ""); //创建人 record.setCreateName(StringUtils.isEmpty(request.getCreateName()) ? request.getModifyName() : request.getCreateName()); //创建时间 record.setCreateDate(new Date()); int insertSelective = tVipCardLogsDao.insertSelective(record); logger.info("会员卡办理,业务类型:(301:会员卡购买单,302:会员卡续费 ,303:变更车牌 业务类型={},插入日志数={}条。", record.getBusiType(), insertSelective); } /** * 获取个人用户购买会员卡记录.
* @param vipCard */ private TVipCardCustInfo getVipCardCustInfo(TVipCard vipCard,SaveVipCardAndPersonRequest request){ logger.info("begin获取个人用户购卡信息"); if (null == vipCard) { throw new BizException(ErrorType.PARAMM_NULL, "vipCard请求对象为空"); } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); TVipCardCustInfo vipCardCustInfo = new TVipCardCustInfo(); TVipCardParkSaleRel vipCardParkSaleRel = new TVipCardParkSaleRel(); try{ /**通过会员卡编码查询会员卡售卖关系.*/ if(StringUtils.isNotEmpty(vipCard.getCardNo())){ vipCardParkSaleRel = this.queryVipCardParkSaleRelForListByCardNo(vipCard.getCardNo()); } //个人会员卡编码 vipCardCustInfo.setCustCardNo(SequenceUtil.getNextId(SequenceTypeEnum.PERSON_CUST_CARD_NO_SQE)); //客户id vipCardCustInfo.setCustId(request.getCustId()); //卡编码 vipCardCustInfo.setCardNo(vipCard.getCardNo()); //绑定的车牌号 vipCardCustInfo.setCarNumber(request.getCarNumber()); //是否支持续费1:是,0否 vipCardCustInfo.setIsSupportRenew(vipCard.getIsSupportRenew()); //购卡来源: 1:App购买 2:公众号购买 3:线下购买 vipCardCustInfo.setCardRes(Integer.valueOf(VIPCardEnum.CARD_RES_1.getValue())); //车辆类型 1:大型车 2:小型车 if(vipCardCustInfo.getCarType() ==null){ vipCardCustInfo.setCarType(vipCard.getCarType()); } //卡单价:分 vipCardCustInfo.setPrice(vipCard.getPrice()); //购买时的数量 vipCardCustInfo.setNum(request.getNum()); //生效效时间 vipCardCustInfo.setEffDate(request.getEffDate()); //购买时的总金额 = 单价 * 数量 vipCardCustInfo.setTotalAmount(vipCard.getPrice() * request.getNum()); //优惠规则编码 vipCardCustInfo.setDiscNo(vipCardParkSaleRel.getDiscNo()); //折扣规则编码 vipCardCustInfo.setDiscRuleNo(vipCardParkSaleRel.getDiscRuleNo()); //购买时优惠金额 if(StringUtils.isNotEmpty(vipCardParkSaleRel.getDiscValue())){ Double discAmount = Math.ceil(vipCard.getPrice() * request.getNum() * (1-Double.valueOf(vipCardParkSaleRel.getDiscValue())/10)); vipCardCustInfo.setDiscountAmount(discAmount.longValue()); }else{ vipCardCustInfo.setDiscountAmount(0L); } //失效时间 vipCardCustInfo.setExpDate(request.getExpDate()); //备注 vipCardCustInfo.setRemark("APP购买会员卡"); //审核状态1:待审核 2: 审核不通过 3:审核通过 vipCardCustInfo.setCheckStatus(3); //数据状态 1:生效 0:失效 vipCardCustInfo.setDataState(1); vipCardCustInfo.setPlNo(request.getPlNo()); //创建时间 vipCardCustInfo.setCreateDate(new Date()); }catch (Exception e) { logger.info("获取个人用户购卡信息,获取数据异常...."); e.printStackTrace(); throw new BizException(ErrorType.BIZ_ERROR, "获取个人用户购卡信息,获取数据异常!"); } logger.info("end获取个人用户购卡信息"); return vipCardCustInfo; } /** * 通过会员卡编码查询会员卡售卖关系.
* @param cardNo * @return */ private TVipCardParkSaleRel queryVipCardParkSaleRelForListByCardNo(String cardNo){ logger.info("---begin通过会员卡编码查询会员卡售卖关系,入参={}",cardNo); TVipCardParkSaleRel vipCardParkSaleRel = new TVipCardParkSaleRel(); if(StringUtils.isNotEmpty(cardNo)){ TVipCardParkSaleRel vipCardParkSaleRelDO = new TVipCardParkSaleRel(); vipCardParkSaleRelDO.setCardNo(cardNo); List list = vipCardParkSaleRelDao.queryVipCardParkSaleRelForListByCardNo(vipCardParkSaleRelDO); if(CollectionUtils.isNotEmpty(list)){ vipCardParkSaleRel = list.get(0); } } logger.info("---begin通过会员卡编码查询会员卡售卖关系,结果={}",JSONObject.toJSON(vipCardParkSaleRel)); return vipCardParkSaleRel; } @Override public BizResult updateVipCardForCust(SaveVipCardAndPersonRequest request) { /**1.修改个人用户购买会员卡记录*/ logger.info("1、修改个人用户购买会员卡记录:"+JSONObject.toJSON(request)); TVipCardCustInfo vipCardCustInfo = vipCardCustInfoDao.queryCardCustInfoBycustCardNo(request.getCustCardNo()); TVipCardCustInfo tVipCardCustInfo=new TVipCardCustInfo(); tVipCardCustInfo.setPrice(request.getPrice()); tVipCardCustInfo.setNum(vipCardCustInfo.getNum() + request.getNum()); tVipCardCustInfo.setDiscountAmount(vipCardCustInfo.getDiscountAmount() + request.getDiscountAmount()); tVipCardCustInfo.setTotalAmount(vipCardCustInfo.getTotalAmount() + request.getPrice()*request.getNum()); tVipCardCustInfo.setModifyDate(new Date()); tVipCardCustInfo.setModifyEmpid(request.getCreateEmpid()); tVipCardCustInfo.setCustCardNo(request.getCustCardNo()); //失效时间 tVipCardCustInfo.setExpDate(request.getExpDate()); vipCardCustInfoDao.updateVipCardCustInfoByCustCardNo(tVipCardCustInfo); /**2.修改用户购买的会员卡关联的停车场**/ logger.info("2、修改用户购买的会员卡关联的停车场录:"+request.toString()); TVipCardParkCustRel tVipCardParkCustRel =new TVipCardParkCustRel(); tVipCardParkCustRel.setCustId(request.getCustId()); tVipCardParkCustRel.setCustCardNo(request.getCustCardNo()); tVipCardParkCustRel.setModifyDate(new Date()); tVipCardParkCustRel.setModifyEmpid(request.getCreateEmpid()); tVipCardParkCustRel.setModifyName(request.getCreateName()); //推送状态 1:已推送 0:未推送 tVipCardParkCustRel.setPushState(0); //个人会员卡购买类型:1:购卡 2:续费 tVipCardParkCustRel.setCardBuyType(2); vipCardParkCustRelDao.updateVipCardParkCustRelByCustCardId(tVipCardParkCustRel); /**3.插入会员卡购买日志*/ this.saveTVipCardLogs(tVipCardCustInfo,request); return new BizResult(tVipCardCustInfo.getCustCardNo()); } @Override public BizResult> queryVipCardMsgByCardNo(QueryVipCardByCardNoRequest request) { List vipCardList = vipCardDao.queryVipCardMsgByCardNo(request); List vipCardResList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(vipCardList)){ for(VipCardAndCustInfoDTO dto:vipCardList){ //会员卡合并 Integer a = 0; for(VipCardAndCustInfoDTO dtoR:vipCardResList){ if(dto.getCardNo().equals(dto.getCardNo())){ a=1; dtoR.getPlNos().add(dto.getPlNo()); } } if(a==0){ List plNos = new ArrayList<>(); plNos.add(dto.getPlNo()); dto.setPlNos(plNos); vipCardResList.add(dto); } } } return new BizResult>(vipCardResList); } @Override public BizResult queryVipCardFeeByCardNo(QueryVipCardFeeByCardNoRequest request) throws Exception { return new BizResult (vipCardDao.queryVipCardFeeByCardNo (request.getCardNo())); } @Override public BizResult> queryCouponNoPushInfo(VipPushRequest vipPushRequest) { List dtoList=new ArrayList(); String date = DateUtil.getDateString(vipPushRequest.getPushDate(), DateUtil.DATETIME_FORMAT); logger.info("查询购买了卡类型为:6-错峰停车年卡(周末免费),7-错峰停车月卡(周末免费)的会员卡信息...推送时间={}",date); List list=vipCardCustInfoDao.queryCouponNoPushInfo(date); BizResult> bizResult = new BizResult<>(); if(CollectionUtils.isEmpty(list)){ bizResult.setSuccess(false); bizResult.setErrMsg("没有查询到购买了卡类型为错峰停车的会员卡信息"); return bizResult; } logger.info("查询到购买了卡类型为错峰停车的会员卡信息{}条",list.size()); //判断是否周末,如果为周末全部下发优惠券 Instant instant = vipPushRequest.getPushDate().toInstant(); ZoneId zoneId = ZoneId.systemDefault(); DayOfWeek dayOfWeek = instant.atZone(zoneId).getDayOfWeek(); if(dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY){ for (TVipNoPushCardCustInfoDO tVipCardCustInfo : list) { VipNoPushCardCustInfoDTO dto=new VipNoPushCardCustInfoDTO(); BeanUtils.copyProperties(tVipCardCustInfo, dto); dtoList.add(dto); } logger.info("推送时间为周末,返回全部错峰停车会员卡信息...查询到条数={}条。",dtoList.size()); return new BizResult>(dtoList); } //判断车辆是否限行,目前只查询北京的 List limitedRules = tailNumberLimitInnerService.queryTailNumberLimitRules(110100L, DateUtil.to_date(date, DateUtil.DATE_FORMAT)); if(CollectionUtils.isEmpty(limitedRules)){ bizResult.setSuccess(false); bizResult.setErrMsg("该城市:110100(北京)没有查询到"+DateUtil.to_date(date, DateUtil.DATE_FORMAT)+"的限行规则"); return bizResult; } //筛选出限行的车辆信息 List cardCustInfoDOs = new ArrayList<>(); for(TVipNoPushCardCustInfoDO cardCustInfo:list){ if(tailNumberLimitInnerService.isLimitedForCarNumber(cardCustInfo.getCarNumber(), limitedRules)){ cardCustInfoDOs.add(cardCustInfo); } } if(CollectionUtils.isEmpty(cardCustInfoDOs)){ bizResult.setSuccess(false); bizResult.setErrMsg("根据限号规则,没有找到限号的车辆信息"); return bizResult; } for (TVipNoPushCardCustInfoDO tVipCardCustInfo : cardCustInfoDOs) { VipNoPushCardCustInfoDTO dto=new VipNoPushCardCustInfoDTO(); if(tVipCardCustInfo!=null){ BeanUtils.copyProperties(tVipCardCustInfo, dto); dtoList.add(dto); } } logger.info("根据限号规则查询到购买了错峰停车的会员卡信息条数={}条。",dtoList.size()); return new BizResult>(dtoList); } @Override public BizResult> queryVipCardStatisticPlNos(QueryVipCardByCarNumberAndPlNosRequest request) { logger.info("---通过停车场编码List查询的的授权车的信息,入参={}",JSONObject.toJSON(request)); if(request == null){ logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } List vipCardStatisticDTOs = vipCardDao.queryVipCardStatisticPlNos(request); return new BizResult>(vipCardStatisticDTOs); } /** * 通过停车场编码及卡编码查询会员卡规则售卖关系 * @param request * @return * 2018年5月19日 wangfs.
*/ @Override public BizResult queryCardParkSaleByPlNoAndCardNo( QueryCardParkSaleByPlNoAndCardNoReq request) { VipCardParkSaleRelDTO vipCardParkSaleRelDTO = new VipCardParkSaleRelDTO(); TVipCardParkSaleRel queryCardParkSaleByPlNoAndCardNo = vipCardParkSaleRelDao.queryCardParkSaleByPlNoAndCardNo(request); if(queryCardParkSaleByPlNoAndCardNo != null){ BeanUtils.copyProperties(queryCardParkSaleByPlNoAndCardNo, vipCardParkSaleRelDTO); } return new BizResult(vipCardParkSaleRelDTO); } /** * 查询停车场会员卡购买数量是否超过最大限制数量 * @param request * @return true : 超过最大数量 ; false:没有超过最大数量 */ @Override public BizResult queryVipCardMaxBuyNumIsLimit(VipCardBuyNumLimtReq request) { logger.info("begin查询停车场会员卡购买数量是否超过最大限制数量,入参={}",request); BizResult result = new BizResult(); Boolean flg = false; //true : 超过最大数量 ; false:没有超过最大数量 VipCardMaxBuyNumIsLimitDO vipCardMaxBuyNumIsLimitDO = vipCardDao.queryVipCardMaxBuyNumIsLimit(request); if(vipCardMaxBuyNumIsLimitDO != null ){ if(vipCardMaxBuyNumIsLimitDO.getMaxLimitNum() ==0 || null == vipCardMaxBuyNumIsLimitDO.getMaxLimitNum() ){ flg = false; }else if(vipCardMaxBuyNumIsLimitDO.getBuyTotal() == 0 && vipCardMaxBuyNumIsLimitDO.getMaxLimitNum() ==0){ flg = false; }else{ if(vipCardMaxBuyNumIsLimitDO.getBuyTotal() < vipCardMaxBuyNumIsLimitDO.getMaxLimitNum()){ flg = false; }else{ flg = true; } } }else{ flg = true; } //result.setData(flg); logger.info("end查询停车场会员卡购买数量是否超过最大限制数量,结果={},[true : 超过最大数量 ; false:没有超过最大数量]",flg); //校验入参数 return new BizResult(flg); } @Override public BizResult> queryParkListForVipCard(QueryVipCardPlNoListRequest req) { List list = vipCardDao.queryParkListForVipCard(req); return new BizResult<>(list); } @Override public BizResult> queryHotParkListForVipCard(QueryVipCardPlNoListRequest req) { List list = vipCardDao.queryHotParkListForVipCard(req); return new BizResult<>(list); } @Override public BizResult> queryVipCardInfoByPlNo(QueryVipCardByPlNoRequest req) { req.setNowDate(new Date()); List list = vipCardDao.queryVipCardInfoByPlNo(req); if(CollectionUtils.isEmpty(list)){ return new BizResult<>(list); } list.stream().forEach(dto -> dto.setDiscValue(StringUtils.isBlank(dto.getDiscValue()) ? "10" : dto.getDiscValue())); return new BizResult<>(list); } @Override public BizResult updateVipCardCarNumberBycustCardNo(SaveVipCardAndPersonRequest req) { logger.info("修改会员卡车牌入参={}", JSONObject.toJSON(req)); if (req == null || StringUtils.isEmpty(req.getCustCardNo()) || StringUtils.isEmpty(req.getCarNumber())) { throw new BizException(ErrorType.PARAMM_NULL, "入参为空或个人会员卡编码/车牌号为空!"); } try { // 1. 查询现有的会员卡信息 TVipCardCustInfo vipCardCustInfo = vipCardCustInfoDao.queryCardCustInfoBycustCardNo(req.getCustCardNo()); if (vipCardCustInfo == null) { throw new BizException(ErrorType.RESOURCE_NOT_EXISTS, "会员卡信息不存在!"); } // 2. 修改车牌信息 TVipCardCustInfo updateInfo = new TVipCardCustInfo(); updateInfo.setCustCardNo(req.getCustCardNo()); updateInfo.setCarNumber(req.getCarNumber()); updateInfo.setModifyDate(new Date()); updateInfo.setModifyEmpid(req.getModifyEmpid()); updateInfo.setModifyName(req.getModifyName()); updateInfo.setUpdateNum(vipCardCustInfo.getUpdateNum()-1); // 3. 更新会员卡信息 int updateCount = vipCardCustInfoDao.updateVipCardCustInfoByCustCardNo(updateInfo); if (updateCount <= 0) { throw new BizException(ErrorType.BIZ_ERROR, "修改会员卡车牌失败!"); } // 4. 更新关联的停车场信息 TVipCardParkCustRel parkCustRel = new TVipCardParkCustRel(); parkCustRel.setCustCardNo(req.getCustCardNo()); parkCustRel.setCarNumber(req.getCarNumber()); parkCustRel.setModifyDate(new Date()); parkCustRel.setModifyEmpid(req.getModifyEmpid()); parkCustRel.setModifyName(req.getModifyName()); // 推送状态 1:已推送 0:未推送 parkCustRel.setPushState(0); vipCardParkCustRelDao.updateVipCardParkCustRelByCustCardId(parkCustRel); // 5. 插入会员卡变更日志 // 设置业务类型为变更车牌 // req.setOptType(303); // this.saveTVipCardLogs(updateInfo, req); // logger.info("修改会员卡车牌成功,个人会员卡编码={}", req.getCustCardNo()); return new BizResult(req.getCustCardNo()); } catch (BizException e) { logger.error("修改会员卡车牌业务异常:", e); throw e; } catch (Exception e) { logger.error("修改会员卡车牌系统异常:", e); throw new BizException(ErrorType.BIZ_ERROR, "修改会员卡车牌失败!"); } } @Override public BizResult resetVipCardUpdateNum(int updateNum) { logger.info("---begin重置会员卡修改次数,入参={}", updateNum); int rows = vipCardCustInfoDao.resetVipCardUpdateNum(updateNum); logger.info("---end重置会员卡修改次数,影响行数={}", rows); return rows > 0 ? new BizResult(true) : new BizResult(false); } }