src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/entity/payment/Order.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/entity/payment/OrderItem.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/payment/OrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/script/db-v2.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/表设计.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java
@@ -26,4 +26,10 @@ @NotBlank(message = "微信code不能为空") private String wxcode; @ApiModelProperty(value = "用户优惠券id") private String couponRecordId; @ApiModelProperty(value = "用户积分商品兑换券id列表") private List<Long> goodsRecordIdList; } src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java
@@ -19,7 +19,25 @@ @ApiModelProperty(value = "商品总金额") private BigDecimal totalAmount; @ApiModelProperty(value = "商品会员价总金额") private BigDecimal totalMemberAmount; @ApiModelProperty(value = "打包费") private BigDecimal packing; @ApiModelProperty(value = "会员等级id") private Long memberId; @ApiModelProperty(value = "会员等级名称") private String memberName; @ApiModelProperty(value = "折扣类型(discount_type)") private String memberDiscountType; @ApiModelProperty(value = "会员折扣") private BigDecimal memberDiscountRatio; @ApiModelProperty(value = "优惠金额(每扎)") private BigDecimal memberDiscountAmount; } src/main/java/com/mzl/flower/entity/payment/Order.java
@@ -16,7 +16,7 @@ private String orderNo;//单号 @TableField("flower_amount") private BigDecimal flowerAmount;//商品金额 private BigDecimal flowerAmount;//商品金额(会员价) @TableField("packing_fee") private BigDecimal packingFee;//打包费 @@ -134,4 +134,32 @@ @TableField("wx_delivery_msg") private String wxDeliveryMsg;// 微信发货返回消息 @TableField("member_coupon_id") private String memberCouponId;//用户优惠券id @TableField("member_coupon_code") private String memberCouponCode;//优惠券编码 @TableField("member_coupon_name") private String memberCouponName;//优惠券名称 @TableField("member_coupon_amount") private BigDecimal memberCouponAmount;//优惠券金额 @TableField("member_id") private Long memberId;//会员等级id @TableField("member_name") private String memberName;//会员等级名称 @TableField("member_discount_type") private String memberDiscountType;//折扣类型(discount_type) @TableField("member_discount_ratio") private BigDecimal memberDiscountRatio;//会员折扣 @TableField("member_discount_amount") private BigDecimal memberDiscountAmount;//优惠金额(每扎) } src/main/java/com/mzl/flower/entity/payment/OrderItem.java
@@ -61,7 +61,7 @@ private BigDecimal markupPartner;//合伙人加价 @TableField("price") private BigDecimal price;//商品售价 private BigDecimal price;//商品售价(会员价) @TableField("total") private BigDecimal total;//总金额 @@ -84,4 +84,13 @@ @TableField("deduct_amount") private BigDecimal deductAmount;//扣款金额 @TableField("coupon_amount") private BigDecimal couponAmount;//优惠券金额/扎 @TableField("original_price") private BigDecimal originalPrice;//优惠前售价/扎 @TableField("real_price") private BigDecimal realPrice;//真实成交价格/每扎 } src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -21,6 +21,7 @@ import com.mzl.flower.dto.response.system.CodeValueDTO; import com.mzl.flower.dto.response.transport.TransportOrderDTO; import com.mzl.flower.dto.response.warehouse.WarehouseLocationDTO; import com.mzl.flower.entity.coupon.CouponRecordDO; import com.mzl.flower.entity.customer.Address; import com.mzl.flower.entity.customer.Customer; import com.mzl.flower.entity.flower.FlowerSupplierSaleNum; @@ -273,10 +274,18 @@ Long partnerId = customer.getPartnerId(); Long levelId = customer.getLevelId(); Member member = getMember(levelId); if (member != null) { result.setMemberId(levelId); result.setMemberName(member.getName()); result.setMemberDiscountType(member.getDiscountType()); result.setMemberDiscountRatio(member.getDiscountRatio()); result.setMemberDiscountAmount(member.getDiscountAmount()); } double totalWeight = 0D; int num = 0; BigDecimal totalAmount = new BigDecimal(0); BigDecimal totalMemberAmount = new BigDecimal(0); for (FlowerCartListDTO c : ls) { if (!Constants.FLOWER_STATUS.UP.name().equals(c.getStatus())) { throw new ValidationException("商品" + c.getName() + "已下架,请重新提交"); @@ -307,6 +316,7 @@ totalWeight += c.getWeight() * c.getNum(); totalAmount = totalAmount.add(c.getTotal()); totalMemberAmount = totalMemberAmount.add(c.getTotalMember()); num += c.getNum(); } @@ -317,6 +327,7 @@ result.setFlowers(ls); result.setPacking(packing); result.setTotalAmount(totalAmount); result.setTotalMemberAmount(totalMemberAmount); result.setTotalWeight(totalWeight); return result; @@ -359,8 +370,6 @@ deliveryName = d.getName(); } //TODO 优惠券和会员价相关修改 String userId = SecurityUtils.getUserId(); Order order = new Order(); order.setId(UUIDGenerator.getUUID()); @@ -370,12 +379,28 @@ order.setStatusBackend(Constants.ORDER_STATUS_BACKEND.PENDING.name()); order.setStatus(Constants.ORDER_STATUS.PENDING.name()); order.setFlowerAmount(p.getTotalAmount()); //设置下单时的会员信息 order.setMemberId(p.getMemberId()); order.setMemberName(p.getMemberName()); order.setMemberDiscountType(p.getMemberDiscountType()); order.setMemberDiscountRatio(p.getMemberDiscountRatio()); order.setMemberCouponAmount(p.getMemberDiscountAmount()); order.setFlowerAmount(p.getTotalMemberAmount());//使用会员价总价 order.setPackingFee(p.getPacking()); order.setTransportFee(transportFee); order.setDeliveryName(deliveryName); BigDecimal totalAmount = order.getFlowerAmount().add(p.getPacking()).add(transportFee); BigDecimal totalAmount = order.getFlowerAmount().add(p.getPacking()).add(transportFee);//使用优惠券之前的总价 CouponRecordDO coupon = useCouponRecord(order.getId(), totalAmount, dto.getCouponRecordId()); if(coupon != null){ order.setMemberCouponId(coupon.getId()); order.setMemberCouponCode(coupon.getCouponCode()); order.setMemberCouponName(coupon.getCouponName()); order.setMemberCouponAmount(coupon.getCouponDiscountValue()); totalAmount = totalAmount.subtract(order.getMemberCouponAmount());//满足条件需要减去优惠券金额 } order.setTotalAmount(totalAmount); order.setCustomer(address.getName()); @@ -396,6 +421,7 @@ //商品列表处理 List<FlowerCartListDTO> flowers = p.getFlowers(); Map<Long, List<ParamItemDTO>> paramMap = new HashMap<>(); BigDecimal flowerAmount = order.getFlowerAmount();//订单商品总价 for (FlowerCartListDTO f : flowers) { OrderItem t = new OrderItem(); t.setId(UUIDGenerator.getUUID()); @@ -421,8 +447,14 @@ t.setMarkupOne(pp.getFirstFee()); t.setMarkupTwo(pp.getSecondFee()); t.setMarkupPartner(pp.getPartnerFee()); t.setPrice(pp.getPrice()); t.setTotal(f.getTotal()); t.setPrice(f.getPriceMember());//使用会员单价 t.setTotal(f.getTotalMember());//使用会员总价 t.setOriginalPrice(pp.getPrice());//非会员售价 BigDecimal couponAmount = calculateCoupon(order.getMemberCouponAmount() , t.getTotal(), order.getFlowerAmount(), t.getNum()); t.setCouponAmount(couponAmount);//每扎平摊的优惠券面值 t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交价 t.create(userId); orderItemMapper.insert(t); @@ -434,11 +466,40 @@ order.setPayOpenid(openId); orderMapper.insert(order); //TODO 处理积分商品兑换券 Map map = paymentV3Service.wxPrepay(order); map.put("_testV2OrderId", order.getId()); return map; } /** * 计算订单中每种商品每扎平摊的优惠券面值,保留2位小数 * * @param couponAmount * @param itemTotalAmount * @param totalAmount * @param num * @return */ private BigDecimal calculateCoupon(BigDecimal couponAmount, BigDecimal itemTotalAmount , BigDecimal totalAmount, Integer num){ if(couponAmount == null){ return new BigDecimal(0); } BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比 BigDecimal subCoupon = couponAmount.multiply(radio);//占有的优惠券面值 return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP); } private CouponRecordDO useCouponRecord(String orderId, BigDecimal amount, String couponRecordId){ if(StringUtils.isNotEmpty(couponRecordId)){ //TODO 优惠券使用和验证,如果不符合使用条件需要抛出异常。需调用优惠券使用方法 } return null; } private String getOrderNo() { String seq = sequenceNo.getSeqNo(SequenceNo.ORDER_FLOWER); return "XH" + format(LocalDateTime.now(), "yyyyMMdd") + seq; src/main/resources/script/db-v2.sql
对比新文件 @@ -0,0 +1,22 @@ ==================================================20240831 ALTER TABLE `t_order` ADD `member_coupon_id` varchar(50) COMMENT '用户优惠券id'; ALTER TABLE `t_order` ADD `member_coupon_code` varchar(50) COMMENT '优惠券编码'; ALTER TABLE `t_order` ADD `member_coupon_name` varchar(50) COMMENT '优惠券名称'; ALTER TABLE `t_order` ADD `member_coupon_amount` DECIMAL(11,2) COMMENT '优惠券金额'; ALTER TABLE `t_order` ADD `member_id` bigint(25) COMMENT '会员等级id'; ALTER TABLE `t_order` ADD `member_name` varchar(50) COMMENT '会员等级名称'; ALTER TABLE `t_order` ADD `member_discount_type` varchar(50) COMMENT '折扣类型(discount_type)'; ALTER TABLE `t_order` ADD `member_discount_ratio` DECIMAL(11,2) COMMENT '会员折扣'; ALTER TABLE `t_order` ADD `member_discount_amount` DECIMAL(11,2) COMMENT '优惠金额(每扎)'; ALTER TABLE `t_order_item` ADD `coupon_amount` DECIMAL(11,2) COMMENT '优惠券金额/扎'; ALTER TABLE `t_order_item` ADD `original_price` DECIMAL(11,2) COMMENT '优惠前售价/扎'; ALTER TABLE `t_order_item` ADD `real_price` DECIMAL(11,2) COMMENT '真实成交价格/每扎'; src/main/表设计.xlsxBinary files differ