Commit 60ef85fc by huluobin

卡券修改

parent 1fb2e031
...@@ -17,6 +17,7 @@ import com.gogirl.infrastructure.mapper.market.coupon.CouponCustomerRelevanceMap ...@@ -17,6 +17,7 @@ import com.gogirl.infrastructure.mapper.market.coupon.CouponCustomerRelevanceMap
import com.gogirl.infrastructure.mapper.market.coupon.CouponMapper; import com.gogirl.infrastructure.mapper.market.coupon.CouponMapper;
import com.gogirl.infrastructure.mapper.market.timescard.TimesCardCustomerRelevanceMapper; import com.gogirl.infrastructure.mapper.market.timescard.TimesCardCustomerRelevanceMapper;
import com.gogirl.infrastructure.mapper.market.timescard.TimesCardOrderServeDetailMapper; import com.gogirl.infrastructure.mapper.market.timescard.TimesCardOrderServeDetailMapper;
import com.gogirl.infrastructure.mapper.market.timescard.TimesCardUsedRecordMapper;
import com.gogirl.infrastructure.mapper.order.serve.OrderManageMapper; import com.gogirl.infrastructure.mapper.order.serve.OrderManageMapper;
import com.gogirl.infrastructure.mapper.order.serve.OrderServeMapper; import com.gogirl.infrastructure.mapper.order.serve.OrderServeMapper;
import com.gogirl.shared.market.command.SetTimesCardCommand; import com.gogirl.shared.market.command.SetTimesCardCommand;
...@@ -245,6 +246,8 @@ public class MarketServiceImpl implements MarketService { ...@@ -245,6 +246,8 @@ public class MarketServiceImpl implements MarketService {
} }
@Resource @Resource
TimesCardUsedRecordMapper timesCardUsedRecordMapper;
@Resource
TimesCardOrderServeDetailMapper timesCardOrderServeDetailMapper; TimesCardOrderServeDetailMapper timesCardOrderServeDetailMapper;
/** /**
...@@ -329,67 +332,72 @@ public class MarketServiceImpl implements MarketService { ...@@ -329,67 +332,72 @@ public class MarketServiceImpl implements MarketService {
List<Integer> serveIds = timesCardCustomerRelevanceMapper.queryTimesCardServeIds(timesCardUsedRecord.getCardTypeId()); List<Integer> serveIds = timesCardCustomerRelevanceMapper.queryTimesCardServeIds(timesCardUsedRecord.getCardTypeId());
//抵扣的服务为 作用范围内支付金额最高的服务 //抵扣的服务为 作用范围内支付金额最高的服务
OrderServe orderServe = this.queryMaxPayPrice(orderManage, serveIds); OrderServe orderServe = this.queryMaxPayPrice(orderManage, serveIds);
//如果有属于这个服务的辅助服务 就查出来一起折扣 if (orderServe != null) {
OrderServe supportServe = this.querySupportServe(orderManage, orderServe); //如果有属于这个服务的辅助服务 就查出来一起折扣
OrderServe supportServe = this.querySupportServe(orderManage, orderServe);
//更新次卡记录 已使用
timesCardUsedRecord.setStatus(TimesCardUsedRecord.STATUS_USED); //更新次卡记录 已使用
//次卡对应订单服务的美甲师 timesCardUsedRecord.setStatus(TimesCardUsedRecord.STATUS_USED);
timesCardUsedRecord.setTechnicianName(orderServe.getTechnicianName()); //次卡对应订单服务的美甲师
//次卡店铺名称 timesCardUsedRecord.setTechnicianName(orderServe.getTechnicianName());
timesCardUsedRecord.setDepartmentName(orderManage.getDepartmentName()); //次卡店铺名称
//次卡店铺id timesCardUsedRecord.setDepartmentName(orderManage.getDepartmentName());
timesCardUsedRecord.setDepartmentId(orderManage.getDepartmentId()); //次卡店铺id
//次卡折扣的 timesCardUsedRecord.setDepartmentId(orderManage.getDepartmentId());
timesCardUsedRecord.setServeName(orderServe.getServeName()); //次卡折扣的
//次卡作用的服务id timesCardUsedRecord.setServeName(orderServe.getServeName());
timesCardUsedRecord.setOrderServeId(orderServe.getServeId()); //次卡作用的服务id
timesCardUsedRecordService.updateById(timesCardUsedRecord); timesCardUsedRecord.setOrderServeId(orderServe.getServeId());
timesCardUsedRecordService.updateById(timesCardUsedRecord);
//在主服务上折扣的钱
TimesCardOrderServeDetail timesCardOrderServeDetail = new TimesCardOrderServeDetail(); //在主服务上折扣的钱
BigDecimal serveDiscountAmount = orderServe.getPayPrice().min(timesCardUsedRecord.getDiscountAmount()); TimesCardOrderServeDetail timesCardOrderServeDetail = new TimesCardOrderServeDetail();
timesCardOrderServeDetail.setDiscountAmount(serveDiscountAmount); BigDecimal serveDiscountAmount = orderServe.getPayPrice().min(timesCardUsedRecord.getDiscountAmount());
timesCardOrderServeDetail.setOrderServeId(orderServe.getId()); timesCardOrderServeDetail.setDiscountAmount(serveDiscountAmount);
timesCardOrderServeDetail.setOrderId(orderId); timesCardOrderServeDetail.setOrderServeId(orderServe.getId());
timesCardOrderServeDetail.setTimesCardUserRecordId(timesCardUsedRecord.getOrderServeId()); timesCardOrderServeDetail.setOrderId(orderId);
//业绩 timesCardOrderServeDetail.setTimesCardUserRecordId(timesCardUsedRecord.getOrderServeId());
timesCardOrderServeDetail.setAchievement(timesCardUsedRecord.getPayAmount());
timesCardOrderServeDetailMapper.insert(timesCardOrderServeDetail);
//订单折扣金额更新
orderServe.setBindCoupon(1);
orderServe.addDiscountPrice(serveDiscountAmount);
orderManage.addDiscountPrice(serveDiscountAmount);
//在从服务上折扣的钱
BigDecimal leftServeDiscountAmount = timesCardUsedRecord.getDiscountAmount().subtract(serveDiscountAmount);
if (supportServe != null && leftServeDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal actualSupportServeDiscountAmount = leftServeDiscountAmount.min(supportServe.getPayPrice());
TimesCardOrderServeDetail supportTimesCardOrderServeDetail = new TimesCardOrderServeDetail();
supportTimesCardOrderServeDetail.setDiscountAmount(actualSupportServeDiscountAmount);
supportTimesCardOrderServeDetail.setOrderServeId(supportServe.getId());
supportTimesCardOrderServeDetail.setOrderId(orderId);
supportTimesCardOrderServeDetail.setTimesCardUserRecordId(timesCardUsedRecord.getOrderServeId());
//业绩 //业绩
supportTimesCardOrderServeDetail.setAchievement(BigDecimal.ZERO); timesCardOrderServeDetail.setAchievement(timesCardUsedRecord.getPayAmount());
timesCardOrderServeDetailMapper.insert(supportTimesCardOrderServeDetail); timesCardOrderServeDetailMapper.insert(timesCardOrderServeDetail);
//订单折扣金额更新 //订单折扣金额更新
supportServe.setBindCoupon(1); orderServe.setBindCoupon(1);
supportServe.addDiscountPrice(actualSupportServeDiscountAmount); orderServe.addDiscountPrice(serveDiscountAmount);
orderManage.addDiscountPrice(actualSupportServeDiscountAmount); orderManage.addDiscountPrice(serveDiscountAmount);
}
//在从服务上折扣的钱
BigDecimal leftServeDiscountAmount = timesCardUsedRecord.getDiscountAmount().subtract(serveDiscountAmount);
if (supportServe != null && leftServeDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal actualSupportServeDiscountAmount = leftServeDiscountAmount.min(supportServe.getPayPrice());
TimesCardOrderServeDetail supportTimesCardOrderServeDetail = new TimesCardOrderServeDetail();
supportTimesCardOrderServeDetail.setDiscountAmount(actualSupportServeDiscountAmount);
supportTimesCardOrderServeDetail.setOrderServeId(supportServe.getId());
supportTimesCardOrderServeDetail.setOrderId(orderId);
supportTimesCardOrderServeDetail.setTimesCardUserRecordId(timesCardUsedRecord.getOrderServeId());
//业绩
supportTimesCardOrderServeDetail.setAchievement(BigDecimal.ZERO);
timesCardOrderServeDetailMapper.insert(supportTimesCardOrderServeDetail);
//订单折扣金额更新
supportServe.setBindCoupon(1);
supportServe.addDiscountPrice(actualSupportServeDiscountAmount);
orderManage.addDiscountPrice(actualSupportServeDiscountAmount);
}
//更新使用次数 //更新使用次数
TimesCardCustomerRelevance timesCardCustomerRelevance = timesCardCustomerRelevanceService.getById(timesCardUsedRecord.getCardRelevanceCustomerId()); TimesCardCustomerRelevance timesCardCustomerRelevance = timesCardCustomerRelevanceService.getById(timesCardUsedRecord.getCardRelevanceCustomerId());
timesCardCustomerRelevance.setUsedTimes(timesCardCustomerRelevance.getUsedTimes() + 1); timesCardCustomerRelevance.setUsedTimes(timesCardCustomerRelevance.getUsedTimes() + 1);
if (timesCardCustomerRelevance.getUsedTimes().equals(timesCardCustomerRelevance.getSumTimes())) { if (timesCardCustomerRelevance.getUsedTimes().equals(timesCardCustomerRelevance.getSumTimes())) {
//次数用完 //次数用完
timesCardCustomerRelevance.setStatus(2); timesCardCustomerRelevance.setStatus(2);
}
timesCardCustomerRelevanceService.updateById(timesCardCustomerRelevance);
} else {
timesCardUsedRecord.setOrderId(null);
timesCardUsedRecordMapper.updateById(timesCardUsedRecord);
} }
timesCardCustomerRelevanceService.updateById(timesCardCustomerRelevance);
}); });
} }
...@@ -412,76 +420,84 @@ public class MarketServiceImpl implements MarketService { ...@@ -412,76 +420,84 @@ public class MarketServiceImpl implements MarketService {
.sorted(Comparator.comparing(CouponCustomerRelevance::getDiscountAmount).reversed()) .sorted(Comparator.comparing(CouponCustomerRelevance::getDiscountAmount).reversed())
.forEach(couponCustomerRelevance -> { .forEach(couponCustomerRelevance -> {
//外部券能用的服务id //外部券能用的服务id
List<Integer> serveIds = couponCustomerRelevanceMapper.queryCouponCustomerServeRelevance(couponCustomerRelevance.getCouponId()); List<Integer> serveIds = couponCustomerRelevanceMapper.queryCouponCustomerServeRelevance(couponCustomerRelevance.getCouponId());
//抵扣的服务为 作用范围内支付金额最高的服务 //抵扣的服务为 作用范围内支付金额最高的服务
OrderServe orderServe = this.queryMaxPayPrice(orderManage, serveIds); OrderServe orderServe = this.queryMaxPayPrice(orderManage, serveIds);
//如果有属于这个服务的辅助服务 就查出来一起折扣 if(orderServe!=null){
OrderServe supportServe = this.querySupportServe(orderManage, orderServe); //如果有属于这个服务的辅助服务 就查出来一起折扣
OrderServe supportServe = this.querySupportServe(orderManage, orderServe);
BigDecimal serveDiscountAmount = orderServe.getPayPrice().min(couponCustomerRelevance.getDiscountAmount());
BigDecimal serveDiscountAmount = orderServe.getPayPrice().min(couponCustomerRelevance.getDiscountAmount());
//新增外部券抵扣情况记录
CouponOrderRelevance couponOrderRelevance = CouponOrderRelevance.builder()
.couponCustomerRelevanceId(couponCustomerRelevance.getId())
.couponId(couponCustomerRelevance.getCouponId())
.couponName(couponCustomerRelevance.getCouponName())
.orderServeId(orderServe.getId())
.serveName(orderServe.getServeName())
.orderId(orderManage.getId())
//支付金额
.payForOrderServe(couponCustomerRelevance.getPayAmount())
//折扣金额
.discountAmount(serveDiscountAmount)
.createTime(new Date())
.confirmTime(new Date())
.message(orderServe.getServeName())
.customerId(orderManage.getOrderUser())
.status(2)
.build();
//如果计算业绩
if (couponCustomerRelevance.getIsCalcAchievement() == 1) {
couponOrderRelevance.setAchievement(couponCustomerRelevance.getPayAmount());
} else {
couponOrderRelevance.setAchievement(couponOrderRelevance.getDiscountAmount());
}
orderServe.addDiscountPrice(serveDiscountAmount);
orderManage.addDiscountPrice(serveDiscountAmount);
orderServe.setBindCoupon(1);
couponOrderRelevanceService.save(couponOrderRelevance);
//在从服务上折扣的钱
BigDecimal leftServeDiscountAmount = couponCustomerRelevance.getDiscountAmount().subtract(serveDiscountAmount);
if (supportServe != null && leftServeDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal actualSupportServeDiscountAmount = leftServeDiscountAmount.min(supportServe.getPayPrice());
//新增外部券抵扣情况记录 //新增外部券抵扣情况记录
CouponOrderRelevance supportCouponOrderRelevance = CouponOrderRelevance.builder() CouponOrderRelevance couponOrderRelevance = CouponOrderRelevance.builder()
.couponCustomerRelevanceId(couponCustomerRelevance.getId()) .couponCustomerRelevanceId(couponCustomerRelevance.getId())
.couponId(couponCustomerRelevance.getCouponId()) .couponId(couponCustomerRelevance.getCouponId())
.couponName(couponCustomerRelevance.getCouponName()) .couponName(couponCustomerRelevance.getCouponName())
.orderServeId(supportServe.getId()) .orderServeId(orderServe.getId())
.serveName(supportServe.getServeName()) .serveName(orderServe.getServeName())
.orderId(orderManage.getId()) .orderId(orderManage.getId())
//支付金额 //支付金额
.payForOrderServe(BigDecimal.ZERO) .payForOrderServe(couponCustomerRelevance.getPayAmount())
//折扣金额 //折扣金额
.discountAmount(actualSupportServeDiscountAmount) .discountAmount(serveDiscountAmount)
.createTime(new Date()) .createTime(new Date())
.confirmTime(new Date()) .confirmTime(new Date())
.message(supportServe.getServeName()) .message(orderServe.getServeName())
.customerId(orderManage.getOrderUser()) .customerId(orderManage.getOrderUser())
.achievement(BigDecimal.ZERO)
//确认可用
.status(2) .status(2)
.build(); .build();
couponOrderRelevanceService.save(supportCouponOrderRelevance); //如果计算业绩
if (couponCustomerRelevance.getIsCalcAchievement() == 1) {
supportServe.addDiscountPrice(actualSupportServeDiscountAmount); couponOrderRelevance.setAchievement(couponCustomerRelevance.getPayAmount());
orderManage.addDiscountPrice(actualSupportServeDiscountAmount); } else {
couponOrderRelevance.setAchievement(couponOrderRelevance.getDiscountAmount());
}
orderServe.addDiscountPrice(serveDiscountAmount);
orderManage.addDiscountPrice(serveDiscountAmount);
orderServe.setBindCoupon(1); orderServe.setBindCoupon(1);
couponOrderRelevanceService.save(couponOrderRelevance);
//在从服务上折扣的钱
BigDecimal leftServeDiscountAmount = couponCustomerRelevance.getDiscountAmount().subtract(serveDiscountAmount);
if (supportServe != null && leftServeDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal actualSupportServeDiscountAmount = leftServeDiscountAmount.min(supportServe.getPayPrice());
//新增外部券抵扣情况记录
CouponOrderRelevance supportCouponOrderRelevance = CouponOrderRelevance.builder()
.couponCustomerRelevanceId(couponCustomerRelevance.getId())
.couponId(couponCustomerRelevance.getCouponId())
.couponName(couponCustomerRelevance.getCouponName())
.orderServeId(supportServe.getId())
.serveName(supportServe.getServeName())
.orderId(orderManage.getId())
//支付金额
.payForOrderServe(BigDecimal.ZERO)
//折扣金额
.discountAmount(actualSupportServeDiscountAmount)
.createTime(new Date())
.confirmTime(new Date())
.message(supportServe.getServeName())
.customerId(orderManage.getOrderUser())
.achievement(BigDecimal.ZERO)
//确认可用
.status(2)
.build();
couponOrderRelevanceService.save(supportCouponOrderRelevance);
supportServe.addDiscountPrice(actualSupportServeDiscountAmount);
orderManage.addDiscountPrice(actualSupportServeDiscountAmount);
orderServe.setBindCoupon(1);
}
}
else {
couponCustomerRelevance.setOrderId(null);
couponCustomerRelevanceMapper.updateById(couponCustomerRelevance);
} }
}); });
} }
//5.内部券 //5.内部券
...@@ -590,6 +606,9 @@ public class MarketServiceImpl implements MarketService { ...@@ -590,6 +606,9 @@ public class MarketServiceImpl implements MarketService {
return orderManage.getListOrderServer() return orderManage.getListOrderServer()
.stream() .stream()
.filter(orderServe -> serveIds.contains(orderServe.getServeId())) .filter(orderServe -> serveIds.contains(orderServe.getServeId()))
.filter(orderServe -> orderServe.getLeisureDiscountConfigId() == null)
.filter(orderServe -> orderServe.getProducePromotionTimeId() == null)
.filter(orderServe -> orderServe.getProduceCurrentPrice() == null)
.filter(orderServe -> orderServe.getBindCoupon() != 1) .filter(orderServe -> orderServe.getBindCoupon() != 1)
.max(Comparator.comparing(OrderServe::getPayPrice)) .max(Comparator.comparing(OrderServe::getPayPrice))
.orElseThrow(RRException::new); .orElseThrow(RRException::new);
......
package com.gogirl.domain.market.timescard; package com.gogirl.domain.market.timescard;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -44,6 +41,7 @@ public class TimesCardUsedRecord { ...@@ -44,6 +41,7 @@ public class TimesCardUsedRecord {
@ApiModelProperty("1.购卡记录;2;用卡记录") @ApiModelProperty("1.购卡记录;2;用卡记录")
private Integer type; private Integer type;
@TableField(strategy = FieldStrategy.IGNORED)
@ApiModelProperty("订单id") @ApiModelProperty("订单id")
private Integer orderId; private Integer orderId;
......
...@@ -191,6 +191,10 @@ public class OrderServe implements Serializable { ...@@ -191,6 +191,10 @@ public class OrderServe implements Serializable {
@ApiModelProperty("是否已经被卡券或者次卡折扣过 1-已经绑定了次卡或者优惠券 2-未绑定") @ApiModelProperty("是否已经被卡券或者次卡折扣过 1-已经绑定了次卡或者优惠券 2-未绑定")
private Integer bindCoupon = 2; private Integer bindCoupon = 2;
private BigDecimal promotionPrice;
private Integer producePromotionTimeId;
public void addDiscountPrice(BigDecimal discountPrice) { public void addDiscountPrice(BigDecimal discountPrice) {
this.discountPrice = this.discountPrice.add(discountPrice); this.discountPrice = this.discountPrice.add(discountPrice);
this.payPrice = this.price.subtract(discountPrice); this.payPrice = this.price.subtract(discountPrice);
......
...@@ -177,7 +177,6 @@ public class ScheduleServe implements Serializable { ...@@ -177,7 +177,6 @@ public class ScheduleServe implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Integer actualServeDuration; private Integer actualServeDuration;
private BigDecimal promotionPrice; private BigDecimal promotionPrice;
private Integer producePromotionTimeId; private Integer producePromotionTimeId;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment