From bd3c29a8710d46dc1c2465e64521044d0f1cd356 Mon Sep 17 00:00:00 2001 From: Cui Zhi Feng <cuizf@fengyuntec.com> Date: 星期日, 01 九月 2024 18:05:57 +0800 Subject: [PATCH] 订单详情 兑换商品列表 --- src/main/java/com/mzl/flower/service/payment/OrderService.java | 174 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 146 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java index 44149e3..5d8fa5a 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java @@ -21,9 +21,11 @@ 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; +import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.partner.Partner; import com.mzl.flower.entity.payment.*; import com.mzl.flower.entity.supplier.Station; @@ -131,6 +133,9 @@ @Autowired private OrderItemCheckMapper orderItemCheckMapper; + @Autowired + private OrderPointGoodsMapper pointGoodsMapper; + public void changeFlower2Cart(CartSaveDTO dto) { String userId = SecurityUtils.getUserId(); Cart c = cartMapper.selectOne(new QueryWrapper<Cart>() @@ -211,13 +216,18 @@ if (ls != null && ls.size() > 0) { Customer customer = getCurrentCustomer(); Long partnerId = customer.getPartnerId(); + Long levelId = customer.getLevelId(); + Member member = getMember(levelId); Map<Long, FlowerCartListWrapDTO> map = new HashMap<>(); for (FlowerCartListDTO c : ls) { BigDecimal price = getFinalPrice(partnerId, c.getCategory() , c.getId(), c.getPrice(), c.getLevel()); c.setPrice(price); + c.setPriceMember(calculateMemberPrice(price, member)); + c.setTotal(price.multiply(new BigDecimal(c.getNum()))); + c.setTotalMember(c.getPriceMember().multiply(new BigDecimal(c.getNum()))); if (c.getSales() != null && c.getRealSales() != null) { c.setSales(c.getSales() + c.getRealSales()); @@ -265,10 +275,20 @@ List<FlowerCartListDTO> ls = flowerMapper.selectFlowerOrderList(ids); Customer customer = getCurrentCustomer(); 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() + "已下架,请重新提交"); @@ -288,7 +308,10 @@ , c.getId(), c.getPrice(), c.getLevel()); BigDecimal price = priceDTO.getPrice(); c.setPrice(price); + c.setPriceMember(calculateMemberPrice(price, member)); + c.setTotal(price.multiply(new BigDecimal(c.getNum()))); + c.setTotalMember(c.getPriceMember().multiply(new BigDecimal(c.getNum())));//使用会员价计算总价 if (priceMap != null) { priceMap.put(c.getId(), priceDTO); @@ -296,6 +319,7 @@ totalWeight += c.getWeight() * c.getNum(); totalAmount = totalAmount.add(c.getTotal()); + totalMemberAmount = totalMemberAmount.add(c.getTotalMember()); num += c.getNum(); } @@ -306,6 +330,7 @@ result.setFlowers(ls); result.setPacking(packing); result.setTotalAmount(totalAmount); + result.setTotalMemberAmount(totalMemberAmount); result.setTotalWeight(totalWeight); return result; @@ -339,7 +364,8 @@ } Address address = addressMapper.selectById(dto.getAddressId()); - List<TransportOrderDTO> tLs = transportService.getPreOrderTransportList(address, p.getTotalWeight(), dto.getTransportId()); + List<TransportOrderDTO> tLs = transportService.getPreOrderTransportList(address + , p.getTotalWeight(), dto.getTransportId()); BigDecimal transportFee = new BigDecimal(0); String deliveryName = ""; if (tLs != null && tLs.size() > 0) { @@ -351,18 +377,38 @@ String userId = SecurityUtils.getUserId(); Order order = new Order(); order.setId(UUIDGenerator.getUUID()); + + final List<Long> goodsRecordIdList = dto.getGoodsRecordIdList(); + usePointGoods(order.getId(), goodsRecordIdList);//使用积分商品兑换券 + order.create(userId); order.setRemarks(dto.getRemarks()); order.setSpecialNeeds(dto.getSpecialNeeds()); 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()); @@ -383,6 +429,8 @@ //商品列表处理 List<FlowerCartListDTO> flowers = p.getFlowers(); Map<Long, List<ParamItemDTO>> paramMap = new HashMap<>(); + final BigDecimal flowerAmount = order.getFlowerAmount();//订单商品总价 + final BigDecimal memberCouponAmount = order.getMemberCouponAmount();//使用优惠券面值 for (FlowerCartListDTO f : flowers) { OrderItem t = new OrderItem(); t.setId(UUIDGenerator.getUUID()); @@ -408,8 +456,13 @@ 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(memberCouponAmount, t.getTotal(), flowerAmount, t.getNum()); + t.setCouponAmount(couponAmount);//每扎平摊的优惠券面值 + t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交价 t.create(userId); orderItemMapper.insert(t); @@ -421,9 +474,52 @@ order.setPayOpenid(openId); orderMapper.insert(order); + //处理积分商品兑换券 + if(goodsRecordIdList != null && goodsRecordIdList.size() > 0){ + for(Long goodsRecordId : goodsRecordIdList){ + OrderPointGoods g = new OrderPointGoods(); + g.setId(UUIDGenerator.getUUID()); + g.setOrderId(order.getId()); + g.setGoodsRecordId(goodsRecordId); + g.create(userId); + pointGoodsMapper.insert(g); + } + } + Map map = paymentV3Service.wxPrepay(order); map.put("_testV2OrderId", order.getId()); return map; + } + + private void usePointGoods(String orderId, List<Long> goodsRecordIdList){ + //TODO 使用积分商品兑换券 + } + + /** + * 计算订单中每种商品每扎平摊的优惠券面值,保留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() { @@ -519,7 +615,27 @@ * 合伙人订单定时发货 */ public void setPartnerOrderSend() { - orderMapper.setPartnerOrderReceive(); + List<Order> orders = orderMapper.getPartnerOrderReceive(); + if(orders == null || orders.size() == 0){ + return; + } + for (Order o : orders) { + //set status_backend = 'RECEIVE', status = 'RECEIVE' + o.setStatusBackend("RECEIVE"); + o.setStatus("RECEIVE"); + //发送微信发货请求 + JSONObject jsonObject = sendWxDeliveryGood(o); + if (jsonObject != null && (int) jsonObject.get("errcode") == 0) { + o.setWxDeliveryGood(true); + o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); + } else { + o.setWxDeliveryGood(false); + o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); + } + + orderMapper.updateById(o); + } + //orderMapper.setPartnerOrderReceive(); } /** @@ -539,6 +655,17 @@ o.setStatus(Constants.ORDER_STATUS.RECEIVE.name()); o.setStatusBackend(Constants.ORDER_STATUS_BACKEND.RECEIVE.name()); o.update(SecurityUtils.getUserId()); + + //发送微信发货请求 + JSONObject jsonObject = sendWxDeliveryGood(o); + if (jsonObject != null && (int) jsonObject.get("errcode") == 0) { + o.setWxDeliveryGood(true); + o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); + } else { + o.setWxDeliveryGood(false); + o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); + } + orderMapper.updateById(o); } @@ -736,6 +863,9 @@ boolean couldCheckRefund = StringUtils.isEmpty(transferId) && count == 0 && cc == 0; dto.setCouldCheckRefund(couldCheckRefund); + List<OrderPointGoodsListDTO> pointGoodsList = orderMapper.getPointGoodsList(id); + dto.setPointGoodsList(pointGoodsList); + return dto; } @@ -787,17 +917,6 @@ o.setStatusBackend(Constants.ORDER_STATUS_BACKEND.EVALUATE.name()); o.setReceiveTime(LocalDateTime.now()); o.update("sys"); - - - //发送微信发货请求 - JSONObject jsonObject = sendWxDeliveryGood(o); - if (jsonObject != null && (int) jsonObject.get("errcode") == 0) { - o.setWxDeliveryGood(true); - o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); - } else { - o.setWxDeliveryGood(false); - o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); - } orderMapper.updateById(o); } @@ -860,17 +979,6 @@ o.setStatusBackend(Constants.ORDER_STATUS_BACKEND.EVALUATE.name()); o.setReceiveTime(LocalDateTime.now()); o.update(userId); - - //发送微信发货请求 - JSONObject jsonObject = sendWxDeliveryGood(o); - if (jsonObject != null && (int) jsonObject.get("errcode") == 0) { - o.setWxDeliveryGood(true); - o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); - } else { - o.setWxDeliveryGood(false); - o.setWxDeliveryMsg(GsonUtil.toJson(jsonObject)); - } - orderMapper.updateById(o); } @@ -1185,4 +1293,14 @@ order.update(SecurityUtils.getUserId()); orderMapper.updateById(order); } + + /** + * 获取用户最后收货时间 + * @param userId + * @return + */ + public LocalDateTime getUserLastOrderTime(String userId){ + Order o = orderMapper.getUserLastOrder(userId); + return o.getReceiveTime(); + } } -- Gitblit v1.9.3