fix - 用户可能会有多个订单的情况优化。保持订单幂等。
This commit is contained in:
@@ -3,6 +3,7 @@ package com.sv.api.controller;
|
||||
import com.enums.EnterEnum;
|
||||
import com.enums.PayTypeEnum;
|
||||
import com.sv.dto.BasketEnterResult;
|
||||
import com.sv.dto.api.BasketballPayResult;
|
||||
import com.sv.entity.Device;
|
||||
import com.sv.entity.Order;
|
||||
import com.sv.entity.Venue;
|
||||
@@ -204,7 +205,7 @@ public class VenueController extends BaseApiController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 篮球入场下订单
|
||||
* 篮球入场下订单(防重复下单)
|
||||
*/
|
||||
@RequestMapping(value = "/venue/basketball/pay", method = RequestMethod.POST)
|
||||
@AccessToken
|
||||
@@ -219,8 +220,14 @@ public class VenueController extends BaseApiController {
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
BasketballPayResult result = orderService.createEnterVenueOrder(venueId, memberId, enterFlag, PayTypeEnum.WEI_XIN, new BigDecimal(payMoney));
|
||||
if (result.getPaidFlag()) {
|
||||
return ResponseDTO.ok().addAttribute("paid_flag", true).addAttribute("order_sn", result.getOrderSn());
|
||||
}
|
||||
return ResponseDTO.ok().
|
||||
addAttribute("pay",orderService.createEnterVenueOrder(venueId, memberId, enterFlag, PayTypeEnum.WEI_XIN, new BigDecimal(payMoney)));
|
||||
addAttribute("paid_flag", false).
|
||||
addAttribute("order_sn", result.getOrderSn()).
|
||||
addAttribute("pay", result.getWechatPayParam());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.sv.service.api.MemberService;
|
||||
import com.sv.service.api.MemberTokenService;
|
||||
import com.sv.service.common.ApiConstants;
|
||||
import com.sv.service.common.CaptchaCacheServiceImpl;
|
||||
import com.sv.service.common.MemberKeyLock;
|
||||
import com.sv.service.common.OSSClientUtil;
|
||||
import com.ydd.framework.core.common.utils.ValidationUtils;
|
||||
import com.ydd.framework.core.entity.enums.DeletedEnum;
|
||||
@@ -64,6 +65,8 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
private OSSClientUtil ossClientUtil;
|
||||
@Resource
|
||||
private WechatService wechatService;
|
||||
@Resource
|
||||
private MemberKeyLock memberKeyLock;
|
||||
|
||||
/**
|
||||
* 手机号注册
|
||||
@@ -137,7 +140,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
public MemberTokenDTO loginWithXcx(String openId){
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
Integer platformId = PlatformContext.getPlatFormValue();
|
||||
synchronized (openId.intern()){
|
||||
synchronized (memberKeyLock.getLock(openId)){
|
||||
// 判断用户是否注册过,用微信登录过
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
// 登录过,则直接登录成功
|
||||
@@ -166,7 +169,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
throw new ServiceException("token过期");
|
||||
}
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (openId){
|
||||
synchronized (memberKeyLock.getLock(memberId)){
|
||||
// 1.根据openId,查找登录表,是否有记录,无,直接登录,插入信息到登录表
|
||||
Member member = memberService.findById(memberId);
|
||||
// memberService.verify(member);
|
||||
@@ -364,7 +367,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
String mobile = wechatResult.getPhoneNumber();
|
||||
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (openId.intern()){
|
||||
synchronized (memberKeyLock.getLock(openId)){
|
||||
Member member = memberService.findByMobile(mobile);
|
||||
if (member == null) {
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
|
||||
39
api/src/test/java/com/sv/wx/MakeBarcodeTest.java
Normal file
39
api/src/test/java/com/sv/wx/MakeBarcodeTest.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.sv.wx;
|
||||
|
||||
import com.WeiXinApplication;
|
||||
import com.enums.EnterEnum;
|
||||
import com.enums.VenueTypeEnum;
|
||||
import com.sv.entity.Constants;
|
||||
import com.sv.entity.Venue;
|
||||
import com.sv.entity.VenueLesson;
|
||||
import com.sv.mapper.WxConfigMapper;
|
||||
import com.sv.service.api.VenueLessonService;
|
||||
import com.sv.service.api.VenueService;
|
||||
import com.sv.service.api.util.DateUtilCard;
|
||||
import com.sv.service.common.BarcodeService;
|
||||
import com.sv.service.message.SendMsg;
|
||||
import com.sv.service.message.WeiXinSendUtils;
|
||||
import com.ydd.oms.entity.sys.WxConfig;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes={WeiXinApplication.class})
|
||||
public class MakeBarcodeTest {
|
||||
|
||||
@Resource
|
||||
BarcodeService barcodeService;
|
||||
|
||||
@Test
|
||||
public void testTask(){
|
||||
barcodeService.newBarcode("123123","2312313123", EnterEnum.ENTER, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -32,8 +32,8 @@ public class WxServiceTest {
|
||||
public void refund(){
|
||||
// wechatPayService.createUnifiedOrder("testlmq20231224",new BigDecimal(0.02),"127.0.0.1","JSAPI", 535);
|
||||
// 根据orderSn查出对应订单信息
|
||||
String orderSn = "231231014749545739";
|
||||
Integer memberId = 535;
|
||||
String orderSn = "260603140301802382";
|
||||
Integer memberId = 1;
|
||||
Order order = orderService.findOrderSn(orderSn,memberId);
|
||||
if (order == null){
|
||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.ORDER_ERROR);
|
||||
@@ -49,7 +49,7 @@ public class WxServiceTest {
|
||||
memberRefund.setOutRefundNo(orderService.createSn());//商户退款单号
|
||||
memberRefund.setPlatformId(1);
|
||||
memberRefundMapper.insert(memberRefund);
|
||||
wechatPayService.refundInputMoney(memberRefund, order.getPrice(), new BigDecimal(0.01));
|
||||
wechatPayService.refundInputMoney(memberRefund, order.getPrice(), new BigDecimal(0.02));
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user