fix: 订单保存优惠券折扣价格

This commit is contained in:
张松
2024-11-15 13:57:07 +08:00
parent 641a85d478
commit 7d2f08b605
5 changed files with 20 additions and 15 deletions

View File

@@ -14,8 +14,8 @@ public class OrderCouponInfoDTO {
private TbShopUser shopUser; private TbShopUser shopUser;
private List<TbActivateOutRecord> outRecordList = new ArrayList<>(); private List<TbActivateOutRecord> outRecordList = new ArrayList<>();
// 满减优惠券 // 满减优惠券
private HashMap<Integer, TbUserCouponVo> fullReductionCouponMap = new HashMap<>(); private HashMap<String, TbUserCouponVo> fullReductionCouponMap = new HashMap<>();
// 商品优惠券 // 商品优惠券
private HashMap<Integer, TbUserCouponVo> productCouponMap = new HashMap<>(); private HashMap<String, TbUserCouponVo> productCouponMap = new HashMap<>();
private HashMap<Integer, List<TbUserCouponVo>> couponMap; private HashMap<String, List<TbUserCouponVo>> couponMap;
} }

View File

@@ -27,6 +27,7 @@ public class TbUserCouponVo {
private boolean isUse = false; private boolean isUse = false;
private Integer currentUseNum = 0; private Integer currentUseNum = 0;
private BigDecimal currentDiscountAmount = new BigDecimal(0);
public void setEndTime(Date endTime) { public void setEndTime(Date endTime) {

View File

@@ -705,7 +705,7 @@ public class CartService {
throw new MsgException(couponVo.getName() + "数量不足: " + couponVo.getNum()); throw new MsgException(couponVo.getName() + "数量不足: " + couponVo.getNum());
} }
couponVo.setCurrentUseNum(item.getNum()); couponVo.setCurrentUseNum(item.getNum());
infoDTO.getFullReductionCouponMap().put(couponVo.getId(), couponVo); infoDTO.getFullReductionCouponMap().put(couponVo.getId().toString(), couponVo);
return; return;
} }
couponVo = productCoupon.get(item.getUserCouponId()); couponVo = productCoupon.get(item.getUserCouponId());
@@ -713,7 +713,7 @@ public class CartService {
throw new MsgException("存在不可用优惠券"); throw new MsgException("存在不可用优惠券");
} }
couponVo.setCurrentUseNum(item.getNum()); couponVo.setCurrentUseNum(item.getNum());
infoDTO.getProductCouponMap().put(item.getUserCouponId(), couponVo); infoDTO.getProductCouponMap().put(item.getUserCouponId().toString(), couponVo);
}); });
infoDTO.setShopUser(shopUser); infoDTO.setShopUser(shopUser);
@@ -955,6 +955,7 @@ public class CartService {
tbActivateOutRecord.setStatus(TableConstant.ActivateOutRecord.Status.CLOSED.getValue()); tbActivateOutRecord.setStatus(TableConstant.ActivateOutRecord.Status.CLOSED.getValue());
tbActivateOutRecord.setCreateTime(DateUtil.date()); tbActivateOutRecord.setCreateTime(DateUtil.date());
tbActivateOutRecord.setRefNum(0); tbActivateOutRecord.setRefNum(0);
couponVo.setCurrentDiscountAmount(couponVo.getDiscountAmount());
} }
@@ -1128,7 +1129,7 @@ public class CartService {
return null; return null;
} }
private BigDecimal reduceProCoupon(HashMap<String, List<TbUserCouponVo>> couponMap, TbCashierCart cashierCart, HashMap<Integer, private BigDecimal reduceProCoupon(HashMap<String, List<TbUserCouponVo>> couponMap, TbCashierCart cashierCart, HashMap<String,
List<TbUserCouponVo>> usedCouponMap, BigDecimal discountAmount, ArrayList<TbCashierCart> balanceCartList, List<TbUserCouponVo>> usedCouponMap, BigDecimal discountAmount, ArrayList<TbCashierCart> balanceCartList,
ArrayList<TbActivateOutRecord> outRecords, Integer memberId) { ArrayList<TbActivateOutRecord> outRecords, Integer memberId) {
TbUserCouponVo couponVo = getCanUseCoupon(couponMap, cashierCart.getProductId()); TbUserCouponVo couponVo = getCanUseCoupon(couponMap, cashierCart.getProductId());
@@ -1139,7 +1140,7 @@ public class CartService {
discountAmount = discountAmount.add(cashierCart.getTotalAmountByNum(null)); discountAmount = discountAmount.add(cashierCart.getTotalAmountByNum(null));
couponVo.setCurrentUseNum(couponVo.getCurrentUseNum() - cashierCart.getNumber()); couponVo.setCurrentUseNum(couponVo.getCurrentUseNum() - cashierCart.getNumber());
} }
List<TbUserCouponVo> tbUserCouponVos = usedCouponMap.computeIfAbsent(Integer.valueOf(cashierCart.getProductId()), k -> new ArrayList<>()); List<TbUserCouponVo> tbUserCouponVos = usedCouponMap.computeIfAbsent(cashierCart.getProductId(), k -> new ArrayList<>());
tbUserCouponVos.add(couponVo); tbUserCouponVos.add(couponVo);
TbCashierCart balanceCart = null; TbCashierCart balanceCart = null;
@@ -1188,6 +1189,7 @@ public class CartService {
tbActivateOutRecord.setRefNum(0); tbActivateOutRecord.setRefNum(0);
outRecords.add(tbActivateOutRecord); outRecords.add(tbActivateOutRecord);
couponVo.setCurrentDiscountAmount(couponVo.getCurrentDiscountAmount().add(couponVo.getCurrentDiscountAmount()));
// 优惠券未消耗完毕 // 优惠券未消耗完毕
if (balanceCart != null && getCanUseCoupon(couponMap, balanceCart.getProductId()) != null) { if (balanceCart != null && getCanUseCoupon(couponMap, balanceCart.getProductId()) != null) {
discountAmount = reduceProCoupon(couponMap, balanceCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId); discountAmount = reduceProCoupon(couponMap, balanceCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId);
@@ -1221,11 +1223,10 @@ public class CartService {
tbUserCouponVos.add(item); tbUserCouponVos.add(item);
} }
}); });
HashMap<Integer, List<TbUserCouponVo>> usedCouponMap = new HashMap<>(); HashMap<String, List<TbUserCouponVo>> usedCouponMap = new HashMap<>();
ArrayList<TbActivateOutRecord> outRecords = new ArrayList<>(); ArrayList<TbActivateOutRecord> outRecords = new ArrayList<>();
for (TbCashierCart cashierCart : cartInfoDTO.getNewCashierCarts()) { for (TbCashierCart cashierCart : cartInfoDTO.getNewCashierCarts()) {
discountAmount = reduceProCoupon(couponMap, cashierCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId); discountAmount = reduceProCoupon(couponMap, cashierCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId);
} }
if (!balanceCartList.isEmpty()) { if (!balanceCartList.isEmpty()) {
@@ -1399,11 +1400,14 @@ public class CartService {
if (outRecord != null) { if (outRecord != null) {
couponInfo.getOutRecordList().add(outRecord); couponInfo.getOutRecordList().add(outRecord);
} }
orderInfo.setCouponInfoList(JSONObject.toJSONString(couponInfo));
couponInfo.setProductCouponMap(BeanUtil.copyProperties(couponInfo.getProductCouponMap(), HashMap.class));
HashMap<String, Object> map = new HashMap<>();
map.put("outRecordList", couponInfo.getOutRecordList());
map.put("couponInfo", couponInfo.getProductCouponMap().values().addAll(couponInfo.getFullReductionCouponMap().values()));
orderInfo.setCouponInfoList(JSONObject.toJSONString(map));
} }
// 修改订单详情并打票 // 修改订单详情并打票
updateDetailAndPrint(orderInfo, detailPriceDTO, shopEatTypeInfoDTO); updateDetailAndPrint(orderInfo, detailPriceDTO, shopEatTypeInfoDTO);

View File

@@ -472,8 +472,8 @@ public class PayService {
// 设置优惠券信息 // 设置优惠券信息
OrderCouponInfoDTO couponInfoDTO = new OrderCouponInfoDTO(); OrderCouponInfoDTO couponInfoDTO = new OrderCouponInfoDTO();
couponInfoDTO.setFullReductionCouponMap(new HashMap<Integer, TbUserCouponVo>() {{ couponInfoDTO.setFullReductionCouponMap(new HashMap<String, TbUserCouponVo>() {{
put(userCouponVo.getId(), userCouponVo); put(userCouponVo.getId().toString(), userCouponVo);
}}); }});
orderInfo.setCouponInfoList(JSONObject.toJSONString(couponInfoDTO)); orderInfo.setCouponInfoList(JSONObject.toJSONString(couponInfoDTO));
orderInfo.setUserCouponAmount(userCouponVo.getDiscountAmount()); orderInfo.setUserCouponAmount(userCouponVo.getDiscountAmount());

View File

@@ -43,7 +43,7 @@ public class TbCashierCartServiceImpl extends ServiceImpl<MpCashierCartMapper, T
} }
// 所有订单信息 // 所有订单信息
return list(queryWrapper); return list(queryWrapper.orderByAsc(TbCashierCart::getTotalAmount));
} }
} }