From ae1471f378f399f76518539ec8992e64a3673436 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期三, 08 一月 2025 15:26:06 +0800 Subject: [PATCH] 1.订单提交:订单最小金额配置 --- src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java | 107 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 90 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java index f9ae5d7..7d2009d 100644 --- a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java +++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java @@ -9,13 +9,15 @@ import com.mzl.flower.dto.request.payment.TransferDetailReqDTO; import com.mzl.flower.dto.request.payment.TransferReqDTO; import com.mzl.flower.dto.request.payment.UserPaymentDTO; +import com.mzl.flower.entity.flower.Flower; import com.mzl.flower.entity.payment.*; -import com.mzl.flower.entity.system.UserWechat; import com.mzl.flower.mapper.flower.FlowerMapper; import com.mzl.flower.mapper.payment.*; import com.mzl.flower.mapper.system.UserWechatMapper; import com.mzl.flower.service.BaseService; +import com.mzl.flower.service.coupon.CouponRecordService; import com.mzl.flower.service.flower.FlowerService; +import com.mzl.flower.service.point.PointGoodsService; import com.mzl.flower.utils.UUIDGenerator; import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.RequestParam; @@ -43,9 +45,7 @@ import java.io.InputStreamReader; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; @@ -103,6 +103,18 @@ @Autowired private OrderRefundMapper orderRefundMapper; + + @Autowired + private OrderPointGoodsMapper orderPointGoodsMapper; + + @Autowired + private PointGoodsService pointGoodsService; + + @Autowired + private CouponRecordService couponRecordService; + + @Autowired + private OrderService orderService; /** * 微信预支付 @@ -166,7 +178,7 @@ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"); // 使用formatter格式化ZonedDateTime - String formattedDateTime = zonedDateTime.plusMinutes(5).format(formatter); + String formattedDateTime = zonedDateTime.plusMinutes(15).format(formatter); return formattedDateTime; // 格式化日期 } @@ -316,6 +328,18 @@ order.setPaymentAmount(order.getTotalAmount()); } order.setPaymentTime(up.getPaymentTimeCallback()); + if(null!=order.getPaymentTime()){ + LocalDateTime paymentTime = order.getPaymentTime(); + LocalDate paymentDate = paymentTime.toLocalDate(); + LocalDateTime today1700 = paymentTime.with(LocalTime.of(17, 0)); + // 比较时间是否大于当天的 17:00 + if (paymentTime.isAfter(today1700)) { + // 如果大于 17:00,设置为下一天的日期 + paymentDate = paymentDate.plusDays(1); + } + order.setPaymentDateSta(paymentDate); + } + order.setStatus(Constants.ORDER_STATUS.SEND.name()); } else if (Constants.ORDER_STATUS_BACKEND.CANCEL.name().equals(orderStatus)){ order.setStatus(Constants.ORDER_STATUS.CANCEL.name()); @@ -439,11 +463,46 @@ } private void releasePrepayLock(Order order){ - log.info("恢复库存: " + order); + log.info("恢复库存 积分商品兑换券 优惠券: " + order); revertFlowerStock(order.getId()); + + //恢复积分商品兑换券 + revertPointGoodsRecord(order.getId()); + + //恢复优惠券 + String memberCouponId = order.getMemberCouponId(); + if(StringUtils.isNotEmpty(memberCouponId)) { + couponRecordService.cancelCouponUsage(order.getId()); + } + } + + private void revertPointGoodsRecord(String orderId){ + List<OrderPointGoods> ls = orderPointGoodsMapper.selectList(new QueryWrapper<OrderPointGoods>() + .eq("order_id", orderId)); + if(ls != null && ls.size() > 0){ + for(OrderPointGoods pg : ls){ + pointGoodsService.revertExchangeGoods(pg.getGoodsRecordId()); + } + } } public Map payAgain(String orderId){ + // 获取订单里面的商品是否有限购的,如果有则判断是否已经超过限购数量 + List<OrderItem> orderItemList = orderItemMapper.selectList(new QueryWrapper<OrderItem>() + .eq("order_id", orderId)); + + orderItemList.forEach(orderItem -> { + // 限购数量 鲜花数量校验 + Integer completeNumToday=orderService.getFlowerCompleteNumToday(orderItem.getCreateBy(),orderItem.getFlowerId()); + Integer tmp=completeNumToday+orderItem.getNum(); + Flower flower=flowerMapper.selectById(orderItem.getFlowerId()); + if(null!=flower.getLimited() && tmp.compareTo(flower.getLimited())>0){ + throw new ValidationException("商品:'"+flower.getName()+"' 昨天17:00到今天17:00 超过限售数量:"+flower.getLimited()+"!"); + } + + }); + + UserPayment up = userPaymentMapper.selectOne( new QueryWrapper<UserPayment>().eq("order_id", orderId)); if(StringUtils.isNotEmpty(up.getStatus())){ @@ -490,15 +549,6 @@ request.setTransactionId(o.getPaymentTrId()); request.setNotifyUrl(PyamentV3Configurer.notify_url_refund); - AmountReq amount = new AmountReq(); - int oa = prepareAmount(o.getPaymentAmount()); - amount.setTotal((long)oa); - amount.setRefund((long)oa); - amount.setCurrency("CNY"); - request.setAmount(amount); - // 调用接口 - refundService.create(request); - o.setRefundAmount(o.getPaymentAmount()); o.setRefundNo(request.getOutRefundNo()); o.setRefundTime(LocalDateTime.now()); @@ -512,6 +562,16 @@ deliveryOrderService.refundDelete(orderId); releasePrepayLock(o); + + //最后调用微信退款接口,防止回滚 + AmountReq amount = new AmountReq(); + int oa = prepareAmount(o.getPaymentAmount()); + amount.setTotal((long)oa); + amount.setRefund((long)oa); + amount.setCurrency("CNY"); + request.setAmount(amount); + // 调用接口 + refundService.create(request); } public String refundOrderSub(Order o, BigDecimal refundAmount){ @@ -652,8 +712,8 @@ InitiateBatchTransferRequest request = new InitiateBatchTransferRequest(); request.setAppid(dto.getAppId()); request.setOutBatchNo(transfer.getId());//【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 - request.setBatchName(transfer.getName());//【批次名称】 该笔批量转账的名称 - request.setBatchRemark(transfer.getRemarks());//【批次备注】 转账说明,UTF8编码,最多允许32个字符 + request.setBatchName(subString(transfer.getName(), 32));//【批次名称】 该笔批量转账的名称 + request.setBatchRemark(subString(transfer.getRemarks(), 32));//【批次备注】 转账说明,UTF8编码,最多允许32个字符 List<TransferDetailReqDTO> details = dto.getDetails(); transfer.setTotalNum(details.size()); @@ -698,6 +758,19 @@ return transfer.getId(); } + private String subString(String str, int len){ + if(StringUtils.isEmpty(str)){ + return str; + } + + int length = str.length(); + if(length > len){ + return str.substring(0, len - 1); + } + + return str; + } + public void checkTransferStatus(Transfer transfer) {//定时任务验证转账状态 GetTransferBatchByOutNoRequest request = new GetTransferBatchByOutNoRequest(); request.setOutBatchNo(transfer.getId()); -- Gitblit v1.9.3