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 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<Integer, List<TbUserCouponVo>> couponMap;
private HashMap<String, TbUserCouponVo> productCouponMap = new HashMap<>();
private HashMap<String, List<TbUserCouponVo>> couponMap;
}

View File

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

View File

@@ -705,7 +705,7 @@ public class CartService {
throw new MsgException(couponVo.getName() + "数量不足: " + couponVo.getNum());
}
couponVo.setCurrentUseNum(item.getNum());
infoDTO.getFullReductionCouponMap().put(couponVo.getId(), couponVo);
infoDTO.getFullReductionCouponMap().put(couponVo.getId().toString(), couponVo);
return;
}
couponVo = productCoupon.get(item.getUserCouponId());
@@ -713,7 +713,7 @@ public class CartService {
throw new MsgException("存在不可用优惠券");
}
couponVo.setCurrentUseNum(item.getNum());
infoDTO.getProductCouponMap().put(item.getUserCouponId(), couponVo);
infoDTO.getProductCouponMap().put(item.getUserCouponId().toString(), couponVo);
});
infoDTO.setShopUser(shopUser);
@@ -955,6 +955,7 @@ public class CartService {
tbActivateOutRecord.setStatus(TableConstant.ActivateOutRecord.Status.CLOSED.getValue());
tbActivateOutRecord.setCreateTime(DateUtil.date());
tbActivateOutRecord.setRefNum(0);
couponVo.setCurrentDiscountAmount(couponVo.getDiscountAmount());
}
@@ -1128,7 +1129,7 @@ public class CartService {
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,
ArrayList<TbActivateOutRecord> outRecords, Integer memberId) {
TbUserCouponVo couponVo = getCanUseCoupon(couponMap, cashierCart.getProductId());
@@ -1139,7 +1140,7 @@ public class CartService {
discountAmount = discountAmount.add(cashierCart.getTotalAmountByNum(null));
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);
TbCashierCart balanceCart = null;
@@ -1188,6 +1189,7 @@ public class CartService {
tbActivateOutRecord.setRefNum(0);
outRecords.add(tbActivateOutRecord);
couponVo.setCurrentDiscountAmount(couponVo.getCurrentDiscountAmount().add(couponVo.getCurrentDiscountAmount()));
// 优惠券未消耗完毕
if (balanceCart != null && getCanUseCoupon(couponMap, balanceCart.getProductId()) != null) {
discountAmount = reduceProCoupon(couponMap, balanceCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId);
@@ -1221,11 +1223,10 @@ public class CartService {
tbUserCouponVos.add(item);
}
});
HashMap<Integer, List<TbUserCouponVo>> usedCouponMap = new HashMap<>();
HashMap<String, List<TbUserCouponVo>> usedCouponMap = new HashMap<>();
ArrayList<TbActivateOutRecord> outRecords = new ArrayList<>();
for (TbCashierCart cashierCart : cartInfoDTO.getNewCashierCarts()) {
discountAmount = reduceProCoupon(couponMap, cashierCart, usedCouponMap, discountAmount, balanceCartList, outRecords, memberId);
}
if (!balanceCartList.isEmpty()) {
@@ -1399,11 +1400,14 @@ public class CartService {
if (outRecord != null) {
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);

View File

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