package com.zteits.bill.biz.discount; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.clouds.common.utils.SequenceUtil; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.date.DateUtil; import com.zteits.bill.dao.discount.ActivityDiscountDao; import com.zteits.bill.dao.discount.ActivityDiscountRuleDao; import com.zteits.bill.domain.TActivityDiscount; import com.zteits.bill.domain.TActivityDiscountRule; 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.discount.dto.ActivityDiscountRuleDTO; import com.zteits.clouds.api.dto.bill.discount.dto.QueryDiscountRuleDTO; import com.zteits.clouds.api.dto.bill.discount.dto.TActivityDiscountDTO; import com.zteits.clouds.api.dto.bill.discount.param.ActivityDiscountRuleReq; import com.zteits.clouds.api.dto.bill.discount.param.AddDiscountRuleRequest; import com.zteits.clouds.api.dto.bill.discount.param.DelDiscountRuleRequest; import com.zteits.clouds.api.dto.bill.discount.param.DiscountRuleForPageRequest; import com.zteits.clouds.api.dto.bill.discount.param.QueryDiscountByIdRequest; import com.zteits.clouds.api.dto.bill.discount.param.UpdateDiscountRuleRequest; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; import com.zteits.clouds.api.service.bill.discount.DiscountRuleService; import com.zteits.clouds.api.service.park.ParkingLotQueryService; 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 org.springframework.transaction.annotation.Transactional; /** * .
* * Copyright: Copyright (c) 2017 zteits * * @ClassName: DiscountRuleServiceImpl * @Description: * @version: v1.0.0 * @author: xiejianpeng * @date: 2017年11月16日 下午2:43:19 * Modification History: * Date Author Version Description * ---------------------------------------------------------* * 2017年11月16日 xiejianpeng v1.0.0 创建 */ @Service("com.zteits.bill.biz.discount.DiscountRuleServiceImpl") public class DiscountRuleServiceImpl implements DiscountRuleService { private static final Logger logger = LoggerFactory.getLogger(DiscountRuleServiceImpl.class); @Autowired private ActivityDiscountRuleDao activityDiscountRuleDao; @Autowired private ActivityDiscountDao activityDiscountDao; /** * 停车场service(park域) */ @Autowired private ParkingLotQueryService parkingLotQueryService; @Override public BizResult> queryDiscountRuleForPage(DiscountRuleForPageRequest request) { logger.info("begin分页查询折扣规则...入参={}", JSONObject.toJSON(request)); PageBean pageBean = new PageBean(); if (request == null) { logger.info("入参为空"); throw new BizException(ErrorType.PARAMM_NULL, "入参为空!"); } //1.设置分页 PageInfo pageInfo = activityDiscountDao.queryDiscountRuleForPage(request); PageBeanUtil.copyProperties(pageInfo, pageBean, TActivityDiscountDTO.class); logger.info("end分页查询白名单规则..."); return new BizResult>(pageBean); } /** * 查询折扣详情 */ @Override public BizResult queryDiscountRuleById(QueryDiscountByIdRequest request) { if (null == request) { throw new BizException(ErrorType.PARAMM_NULL, "请求对象为空"); } QueryDiscountRuleDTO queryDiscountRuleDTO = new QueryDiscountRuleDTO(); /**折扣主表信息**/ TActivityDiscount tActivityDiscount = activityDiscountDao.queryDiscountRuleById(request.getId()); if (tActivityDiscount != null) { BeanUtils.copyProperties(tActivityDiscount, queryDiscountRuleDTO); List discountRuleList = activityDiscountRuleDao.queryDiscountRuleById( tActivityDiscount.getDiscNo()); List discountRuleDTOList = new ArrayList(); if (CollectionUtils.isNotEmpty(discountRuleList)) { for (TActivityDiscountRule discountRule : discountRuleList) { if(discountRule.getDiscPayType() == PayTypeEnum.ZZTC_PAY.getValue()){ discountRule.setIsSelf(1); }else{ discountRule.setIsSelf(0); } ActivityDiscountRuleDTO discountRuleDTO = new ActivityDiscountRuleDTO(); BeanUtils.copyProperties(discountRule, discountRuleDTO); discountRuleDTOList.add(discountRuleDTO); } } queryDiscountRuleDTO.setDiscountRuleList(discountRuleDTOList); /** * 缓存中查询停车场名称 */ String plNo = tActivityDiscount.getPlNo(); QueryParkLotInfoByPkNoRequest parkLot = new QueryParkLotInfoByPkNoRequest(); parkLot.setPklNo(plNo); parkLot.setSysCode("parkLot"); BizResult bizResult = parkingLotQueryService.QueryParkingLotByPkNo(parkLot); if (bizResult.isSuccess()) { if (bizResult.getData() != null) { queryDiscountRuleDTO.setPlName(bizResult.getData().getPlName()); } } } return new BizResult(queryDiscountRuleDTO); } @Override @Transactional public BizResult deleteDiscountRuleById(DelDiscountRuleRequest request) { TActivityDiscount tActivityDiscount = new TActivityDiscount(); if (request != null) { BeanUtils.copyProperties(request, tActivityDiscount); tActivityDiscount.setDiscState(BillEnum.BILL_STAUES_DOWN.value()); tActivityDiscount.setDataState(DataStatusEnum.DATA_STATUS_NO_VALID.value()); } /**1.删除折扣信息******/ Integer flg = activityDiscountDao.updateDiscountRule(tActivityDiscount); if (flg > 0) { /**2.删除折扣规则信息******/ TActivityDiscountRule tActivityDiscountRule = new TActivityDiscountRule(); BeanUtils.copyProperties(tActivityDiscount, tActivityDiscountRule); activityDiscountRuleDao.updateDiscountRule(tActivityDiscountRule); } return new BizResult(flg > 0 ? true : false); } @Override @Transactional public BizResult addDiscountRule(AddDiscountRuleRequest request) { if (null == request) { throw new BizException(ErrorType.PARAMM_NULL, "请求对象为空"); } TActivityDiscount tActivityDiscount = new TActivityDiscount(); BeanUtils.copyProperties(request, tActivityDiscount); tActivityDiscount.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); tActivityDiscount.setAuditorStatus(AuditorStatusEnum.AUDITOR_STATUS_AUDIT_PASS.value()); tActivityDiscount.setCreateDate(request.getCreateDate()); tActivityDiscount.setCreateEmpid(request.getCreateEmpid()); tActivityDiscount.setCreateName(request.getCreateName()); tActivityDiscount.setModifyDate(request.getCreateDate()); tActivityDiscount.setModifyEmpid(request.getCreateEmpid()); tActivityDiscount.setModifyName(request.getCreateName()); //生成折扣编码 String discountNo = SequenceUtil.getNextId(SequenceTypeEnum.DISCOUNT); tActivityDiscount.setDiscNo(discountNo); // 兼容代码 多个停车场为空, 传单个停车场了 if(StringUtils.isNotEmpty(request.getPlNo()) && CollectionUtils.isEmpty(request.getPlNos())){ request.setPlNos(Arrays.asList(request.getPlNo())); } /**1.添加折扣信息******/ for(String plNo:request.getPlNos()){ tActivityDiscount.setPlNo(plNo); activityDiscountDao.addDiscountRule(tActivityDiscount); } List discountRuleReqList = request.getDiscountRuleList(); for(ActivityDiscountRuleReq req: discountRuleReqList){ if(req.getIsSelf() != null){ for(String plNo : request.getPlNos()){ // 查询当前车场的折扣 List discountList = activityDiscountDao.queryDiscountByPlNos(plNo); for(TActivityDiscount discount : discountList) { if (discount.getDiscNo() != null && !discount.getDiscNo().equals("")) { // 获取原有的折扣规则信息 List discountRuleList = activityDiscountRuleDao.queryDiscountRuleInfo(discount.getDiscNo()); for(TActivityDiscountRule discountRule : discountRuleList) { if(discountRule != null){ // 先判断是不是插入的自助折扣,如果是,将自主折扣置为无效 if(req.getIsSelf() == 1 ){ // 查询已存在的自主折扣 if(discountRule.getDiscPayType() == PayTypeEnum.ZZTC_PAY.getValue()){ //将已存在停车场折扣规则的 的失效时间置为生效规则之前 int num = activityDiscountDao.updateDiscountRuleExpireDateByPlNos(DateUtil.offsetDay(request.getBeginTime(),-1),request.getDiscType(),discountRule.getDiscNo()); logger.info("新增停车场(自助)折扣规则,修改折扣规则失效时间的折扣规则有{}条",num); } }else { if(discountRule.getDiscPayType() != PayTypeEnum.ZZTC_PAY.getValue()){ //将已存在停车场折扣规则的 的失效时间置为生效规则之前 int num = activityDiscountDao.updateDiscountRuleExpireDateByPlNos(DateUtil.offsetDay(request.getBeginTime(),-1),request.getDiscType(),discountRule.getDiscNo()); logger.info("新增停车场(普通)折扣规则,修改折扣规则失效时间的折扣规则有{}条",num); } } } } } } } } } List discountRuleList = new ArrayList(); if (CollectionUtils.isNotEmpty(discountRuleReqList)) { for (ActivityDiscountRuleReq discountRuleReq : discountRuleReqList) { TActivityDiscountRule discountRule = new TActivityDiscountRule(); BeanUtils.copyProperties(discountRuleReq, discountRule); discountRule.setDiscNo(discountNo); //生成折扣规则编码 String discountRuleNo = SequenceUtil.getNextId(SequenceTypeEnum.DISCOUNT_RULE); discountRule.setDiscRuleNo(discountRuleNo); discountRule.setCreateEmpid(tActivityDiscount.getCreateEmpid()); discountRule.setCreateName(tActivityDiscount.getCreateName()); discountRule.setCreateDate(tActivityDiscount.getCreateDate()); discountRule.setModifyEmpid(tActivityDiscount.getModifyEmpid()); discountRule.setModifyName(tActivityDiscount.getModifyName()); discountRule.setModifyDate(tActivityDiscount.getModifyDate()); if(discountRuleReq.getIsSelf() != null && discountRuleReq.getIsSelf() == 1){ discountRule.setDiscPayType(PayTypeEnum.ZZTC_PAY.getValue());// 自助停车类型 36 } discountRuleList.add(discountRule); } /**2.添加折扣规则详情****/ activityDiscountRuleDao.addDiscountRule(discountRuleList); } return new BizResult<>(true); } @Override @Transactional public BizResult updateDiscountRuleById(UpdateDiscountRuleRequest request) { logger.info("修改折扣信息入参:" + JSON.toJSONString(request)); if (request.getId() == null) { logger.info("折扣ID为空!"); throw new BizException(ErrorType.PARAMM_NULL, "白名单ID为空"); } /**1.修改折扣详情****/ TActivityDiscount tActivityDiscount = new TActivityDiscount(); BeanUtils.copyProperties(request, tActivityDiscount); Integer flg = activityDiscountDao.updateDiscountRule(tActivityDiscount); //修改折扣规则-先删除后插入 if (flg > 0) { /**2.删除折扣规则详情****/ activityDiscountRuleDao.deleteDiscountRuleByDiscNo(tActivityDiscount.getDiscNo()); /**3.插入折扣规则详情****/ List discountRuleReqList = request.getDiscountRuleList(); List discountRuleList = new ArrayList(); if (CollectionUtils.isNotEmpty(discountRuleReqList)) { for (ActivityDiscountRuleReq discountRuleReq : discountRuleReqList) { TActivityDiscountRule discountRule = new TActivityDiscountRule(); BeanUtils.copyProperties(discountRuleReq, discountRule); discountRule.setDiscNo(tActivityDiscount.getDiscNo()); //生成折扣规则编码 String discountRuleNo = SequenceUtil.getNextId(SequenceTypeEnum.DISCOUNT_RULE); discountRule.setDiscRuleNo(discountRuleNo); discountRule.setCreateEmpid(tActivityDiscount.getModifyEmpid()); discountRule.setCreateName(tActivityDiscount.getModifyName()); discountRule.setCreateDate(tActivityDiscount.getModifyDate()); if(discountRuleReq.getIsSelf() == 1){ discountRule.setDiscPayType(PayTypeEnum.ZZTC_PAY.getValue());// 自助停车类型 36 } discountRuleList.add(discountRule); } activityDiscountRuleDao.addDiscountRule(discountRuleList); } } return new BizResult(flg > 0 ? true : false); } }