DiscountRuleServiceImpl.java 15 KB
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;

/**
 * .<br/>
 *
 * 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<PageBean<TActivityDiscountDTO>> queryDiscountRuleForPage(DiscountRuleForPageRequest request) {
        logger.info("begin分页查询折扣规则...入参={}", JSONObject.toJSON(request));
        PageBean<TActivityDiscountDTO> pageBean = new PageBean<TActivityDiscountDTO>();
        if (request == null) {
            logger.info("入参为空");
            throw new BizException(ErrorType.PARAMM_NULL, "入参为空!");
        }
        //1.设置分页
        PageInfo<TActivityDiscount> pageInfo = activityDiscountDao.queryDiscountRuleForPage(request);
        PageBeanUtil.copyProperties(pageInfo, pageBean, TActivityDiscountDTO.class);
        logger.info("end分页查询白名单规则...");
        return new BizResult<PageBean<TActivityDiscountDTO>>(pageBean);
    }

    /**
     * 查询折扣详情
     */
    @Override
    public BizResult<QueryDiscountRuleDTO> 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<TActivityDiscountRule> discountRuleList = activityDiscountRuleDao.queryDiscountRuleById(
                tActivityDiscount.getDiscNo());
            List<ActivityDiscountRuleDTO> discountRuleDTOList = new ArrayList<ActivityDiscountRuleDTO>();
            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<ParkingLotDTO> bizResult = parkingLotQueryService.QueryParkingLotByPkNo(parkLot);
            if (bizResult.isSuccess()) {
                if (bizResult.getData() != null) {
                    queryDiscountRuleDTO.setPlName(bizResult.getData().getPlName());
                }
            }
        }

        return new BizResult<QueryDiscountRuleDTO>(queryDiscountRuleDTO);
    }

    @Override
    @Transactional
    public BizResult<Boolean> 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<Boolean>(flg > 0 ? true : false);
    }

    @Override
    @Transactional
    public BizResult<Boolean> 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<ActivityDiscountRuleReq> discountRuleReqList = request.getDiscountRuleList();

        for(ActivityDiscountRuleReq req: discountRuleReqList){
            if(req.getIsSelf() != null){
                for(String plNo : request.getPlNos()){
                    // 查询当前车场的折扣
                    List<TActivityDiscount> discountList = activityDiscountDao.queryDiscountByPlNos(plNo);
                    for(TActivityDiscount discount : discountList) {
                        if (discount.getDiscNo() != null && !discount.getDiscNo().equals("")) {
                            // 获取原有的折扣规则信息
                            List<TActivityDiscountRule> 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<TActivityDiscountRule> discountRuleList = new ArrayList<TActivityDiscountRule>();
        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<Boolean> 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<ActivityDiscountRuleReq> discountRuleReqList = request.getDiscountRuleList();
            List<TActivityDiscountRule> discountRuleList = new ArrayList<TActivityDiscountRule>();
            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<Boolean>(flg > 0 ? true : false);
    }

}