From c83b580b0f51a2cdf16f2b1537aa3cb113ef112f Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 20 十二月 2024 17:56:10 +0800
Subject: [PATCH] add: 花材销售统计商品分类
---
src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java | 80 +++++++++++++++++++++++++++++++--------
1 files changed, 63 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 d77abfb..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,8 +9,8 @@
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;
@@ -45,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;
@@ -115,6 +113,9 @@
@Autowired
private CouponRecordService couponRecordService;
+ @Autowired
+ private OrderService orderService;
+
/**
* 微信预支付
*
@@ -177,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; // 格式化日期
}
@@ -327,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());
@@ -457,7 +470,10 @@
revertPointGoodsRecord(order.getId());
//恢复优惠券
- couponRecordService.cancelCouponUsage(order.getId());
+ String memberCouponId = order.getMemberCouponId();
+ if(StringUtils.isNotEmpty(memberCouponId)) {
+ couponRecordService.cancelCouponUsage(order.getId());
+ }
}
private void revertPointGoodsRecord(String orderId){
@@ -471,6 +487,22 @@
}
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())){
@@ -517,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());
@@ -539,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){
@@ -679,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());
@@ -725,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