Commit 60ef85fc by huluobin

卡券修改

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