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);
}
}