fix - 篮球入场出场逻辑优化、丢弃二维码的逻辑、优化入场出场锁逻辑。
This commit is contained in:
@@ -117,7 +117,6 @@ public class VenueController extends BaseApiController {
|
||||
* @param orderSn 订单号
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
@RequestMapping(value = "/member/isPayed", method = RequestMethod.POST)
|
||||
public ResponseDTO isPayed(@RequestParam("orderSn") String orderSn) {
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
@@ -153,7 +152,7 @@ public class VenueController extends BaseApiController {
|
||||
logger.warn("[入场] memberId={}, venueId={}, 门锁被占用 doorSn={}", memberId, venueId, doorSn);
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
join = venueEnterService.join(memberId, venueId);
|
||||
join = venueEnterService.join(memberId, venueId,doorSn);
|
||||
logger.info("[入场] 结果 memberId={}, venueId={}, flg={}, msg={}, orderSn={}",
|
||||
memberId, venueId, join.getFlg(), join.getMsg(), join.getOrderSn());
|
||||
return ResponseDTO.ok().addAttribute("join", join);
|
||||
@@ -183,7 +182,7 @@ public class VenueController extends BaseApiController {
|
||||
logger.warn("[出场] memberId={}, venueId={}, 门锁被占用 doorSn={}", memberId, venueId, doorSn);
|
||||
throw new ServiceException("有人正在使用门禁,请稍后再试");
|
||||
}
|
||||
out = venueEnterService.out(memberId, venueId);
|
||||
out = venueEnterService.out(memberId, venueId,doorSn);
|
||||
logger.info("[出场] 结果 memberId={}, venueId={}, flg={}, msg={}, orderSn={}",
|
||||
memberId, venueId, out.getFlg(), out.getMsg(), out.getOrderSn());
|
||||
return ResponseDTO.ok().addAttribute("out", out);
|
||||
@@ -198,7 +197,7 @@ public class VenueController extends BaseApiController {
|
||||
@RequestMapping(value = "/venue/generate/barcode", method = RequestMethod.POST)
|
||||
public ResponseDTO generateBarcode(@RequestParam("orderSn") String orderSn,@RequestParam("venueId") Integer venueId,@RequestParam("enterFlag")Integer enterFlag) {
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
logger.info("[生成二维码] memberId={}, venueId={}, orderSn={}, enterFlag={}", memberId, venueId, orderSn, enterFlag);
|
||||
logger.info("[真正进场] memberId={}, venueId={}, orderSn={}, enterFlag={}", memberId, venueId, orderSn, enterFlag);
|
||||
Device byDevice = deviceService.findByDevice(venueId);
|
||||
if (byDevice == null) {
|
||||
throw new ServiceException("门禁通讯异常");
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.sv.wx;
|
||||
|
||||
import com.WeiXinApplication;
|
||||
import com.sv.entity.Order;
|
||||
import com.sv.netty.netty.service.MessageService;
|
||||
import com.sv.service.api.OrderService;
|
||||
import com.sv.service.api.VenueEnterService;
|
||||
import com.sv.service.common.DoorLockUtil;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
@@ -17,10 +20,18 @@ public class VenueJoinTest {
|
||||
@Resource
|
||||
VenueEnterService venueEnterService;
|
||||
@Resource
|
||||
MessageService messageService;
|
||||
@Resource
|
||||
DoorLockUtil doorLockUtil;
|
||||
OrderService orderService;
|
||||
|
||||
/**
|
||||
* 给订单支付成功!
|
||||
*/
|
||||
@Test
|
||||
public void test() {
|
||||
String orderSn = "260613225858443661";
|
||||
Order order = orderService.findOrderSn(orderSn,null);
|
||||
orderService.paySuccess(order.getId(),"testggg");
|
||||
venueEnterService.paySuccess(order);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -34,53 +34,53 @@ public class ListenKeyFrame {
|
||||
// frame.add(jTextField); // 注释
|
||||
// frame.add(buttonSubmit); // 注释
|
||||
// frame.add(buttonPlay); // 播放音乐的可注释
|
||||
frame.setFocusableWindowState(true);
|
||||
frame.setAlwaysOnTop(true);
|
||||
// frame.setFocusableWindowState(true);
|
||||
// frame.setAlwaysOnTop(true);
|
||||
// frame.setExtendedState(JFrame.MAXIMIZED_BOTH); //最大化
|
||||
frame.setFocusTraversalKeysEnabled(false);
|
||||
frame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowIconified(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowStateChanged(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowDeiconified(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowGainedFocus(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowLostFocus(WindowEvent e) {
|
||||
frame.setExtendedState(JFrame.NORMAL);
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
// frame.setFocusTraversalKeysEnabled(false);
|
||||
// frame.addWindowListener(new WindowAdapter() {
|
||||
// @Override
|
||||
// public void windowClosing(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void windowIconified(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void windowStateChanged(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void windowDeiconified(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void windowGainedFocus(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void windowLostFocus(WindowEvent e) {
|
||||
// frame.setExtendedState(JFrame.NORMAL);
|
||||
// frame.setFocusable(true);
|
||||
// frame.setVisible(true);
|
||||
// }
|
||||
// });
|
||||
frame.setFocusable(true);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
@@ -24,11 +24,8 @@ import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -73,9 +70,6 @@ public class OrderService extends BaseServiceImpl {
|
||||
@Resource
|
||||
private MemberKeyLock memberKeyLock;
|
||||
|
||||
@Resource
|
||||
private PlatformTransactionManager transactionManager;
|
||||
|
||||
@Transactional
|
||||
public void save(Order order) {
|
||||
if (order.getId() != null && order.getId() > 0) {
|
||||
@@ -218,23 +212,25 @@ public class OrderService extends BaseServiceImpl {
|
||||
logger.warn("[篮球][下单] 价格非法 memberId={}, venueId={}, priceList为空", memberId, venueId);
|
||||
throw new ServiceException("价格非法!");
|
||||
}
|
||||
boolean checkPrice = false;
|
||||
for (VenuePrice venuePrice : priceList) {
|
||||
if (price.divideAndRemainder(price)[1].compareTo(BigDecimal.ZERO) == 0) {
|
||||
checkPrice = true;
|
||||
}
|
||||
}
|
||||
if (!checkPrice) {
|
||||
logger.warn("[篮球][下单] 价格非法 memberId={}, venueId={}, price={}", memberId, venueId, price);
|
||||
throw new ServiceException("价格非法!");
|
||||
}
|
||||
|
||||
logger.info("[篮球][下单] 开始创建订单 memberId={}, venueId={}, enterFlag={}, price={}", memberId, venueId, enterFlag, price);
|
||||
|
||||
synchronized (memberKeyLock.getLock(memberId)) {
|
||||
String orderSn;
|
||||
Order pendingOrder = orderMapper.findPendingBasketballOrder(memberId, venueId);
|
||||
if (pendingOrder != null) {
|
||||
logger.info("[篮球][下单] 存在待处理订单 memberId={}, orderSn={}", memberId, pendingOrder.getOrderSn());
|
||||
orderSn = pendingOrder.getOrderSn();
|
||||
if (EnterEnum.OUT.value == enterFlag) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if(lastOrder == null || StringUtils.isEmpty(lastOrder.getOrderAddSn())){
|
||||
logger.error("memberId={}, venueId={}, 出场的时候的订单有问题!!!",memberId,venueId);
|
||||
} else {
|
||||
if (!orderSn.equals(lastOrder.getOrderAddSn())){
|
||||
logger.error("memberId={}, venueId={},这是重复下单,怎么会生成新的orderNo呢,orderSn={}, 应该的orderNo={}",
|
||||
memberId, venueId, orderSn, lastOrder.getOrderAddSn());
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.info("[篮球][下单] 存在待处理订单 memberId={}, mobile={}, orderSn={}", memberId,member.getMobile(), pendingOrder.getOrderSn());
|
||||
OrderResponse wxResponse = wechatPayService.queryWechatOrder(pendingOrder.getOrderSn());
|
||||
if (wxResponse != null && wxResponse.isSuccess() && "SUCCESS".equals(wxResponse.getTradeState())) {
|
||||
pendingOrder.setPayStatus(PayStatusEnum.PAYED.value);
|
||||
@@ -242,39 +238,28 @@ public class OrderService extends BaseServiceImpl {
|
||||
pendingOrder.setPayTime(new Date());
|
||||
orderMapper.update(pendingOrder);
|
||||
venueEnterService.paySuccess(pendingOrder);
|
||||
logger.info("[篮球][下单] 微信已支付成功 orderSn={}, tradeSn={}", pendingOrder.getOrderSn(), wxResponse.getTransactionId());
|
||||
|
||||
logger.info("[篮球][下单] memberId={}, mobile={},微信已支付成功 orderSn={}, tradeSn={}", memberId,member.getMobile(), pendingOrder.getOrderSn(), wxResponse.getTransactionId());
|
||||
BasketballPayResult paidResult = new BasketballPayResult();
|
||||
paidResult.setPaidFlag(true);
|
||||
paidResult.setOrderSn(pendingOrder.getOrderSn());
|
||||
return paidResult;
|
||||
}
|
||||
|
||||
OrderPaySignResponse.WechatPayParam wechatPayParam;
|
||||
if (pendingOrder.getPrepayId() != null) {
|
||||
wechatPayParam = wechatPayService.resignPayParam(pendingOrder.getOrderSn(), pendingOrder.getPrepayId());
|
||||
logger.info("[篮球][下单] 复用prepayId orderSn={}", pendingOrder.getOrderSn());
|
||||
logger.info("[篮球][下单] memberId={}, mobile={},复用prepayId orderSn={}",memberId,member.getMobile(), pendingOrder.getOrderSn());
|
||||
} else {
|
||||
wechatPayParam = memberCardOrderService.createUnifiedOrder(pendingOrder.getOrderSn(), memberId, RequestUtils.getIp(), "入场结算订单");
|
||||
logger.info("[篮球][下单] 重新统一下单 orderSn={}", pendingOrder.getOrderSn());
|
||||
wechatPayParam = memberCardOrderService.createUnifiedOrder(pendingOrder.getOrderSn(), memberId, RequestUtils.getIp(), "篮球结算订单");
|
||||
logger.info("[篮球][下单] memberId={}, mobile={},重新统一下单 orderSn={}", memberId,member.getMobile(), pendingOrder.getOrderSn());
|
||||
}
|
||||
wechatPayParam.setOrderSn(pendingOrder.getOrderSn());
|
||||
|
||||
BasketballPayResult result = new BasketballPayResult();
|
||||
result.setPaidFlag(false);
|
||||
result.setOrderSn(pendingOrder.getOrderSn());
|
||||
result.setWechatPayParam(wechatPayParam);
|
||||
return result;
|
||||
}
|
||||
|
||||
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
|
||||
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
TransactionStatus txStatus = transactionManager.getTransaction(def);
|
||||
Order order;
|
||||
try {
|
||||
order = orderMapper.findPendingBasketballOrder(memberId, venueId);
|
||||
if (order == null) {
|
||||
order = new Order();
|
||||
}else {
|
||||
Order order = new Order();
|
||||
order.setOrderSn(createSn());
|
||||
order.setPayType(payTypeEnum.value);
|
||||
order.setPrice(price);
|
||||
@@ -285,39 +270,34 @@ public class OrderService extends BaseServiceImpl {
|
||||
order.setParentOrderId(venueId);
|
||||
order.setCreatedId(enterFlag);
|
||||
orderMapper.insert(order);
|
||||
logger.info("[篮球][下单] 插入新订单 orderSn={}, memberId={}, venueId={}, enterFlag={}",
|
||||
order.getOrderSn(), memberId, venueId, enterFlag);
|
||||
}
|
||||
transactionManager.commit(txStatus);
|
||||
} catch (RuntimeException e) {
|
||||
transactionManager.rollback(txStatus);
|
||||
logger.error("[篮球][下单] 事务异常 memberId={}, venueId={}", memberId, venueId, e);
|
||||
throw e;
|
||||
}
|
||||
orderSn = order.getOrderSn();
|
||||
logger.info("[篮球][下单] 插入新订单 orderSn={}, memberId={},mobile={}, venueId={}, enterFlag={}",
|
||||
order.getOrderSn(), memberId, member.getMobile(), venueId, enterFlag);
|
||||
OrderPaySignResponse.WechatPayParam wechatPayParam = memberCardOrderService.createUnifiedOrder(order.getOrderSn(), memberId, RequestUtils.getIp(),"篮球结算订单");
|
||||
wechatPayParam.setOrderSn(orderSn);
|
||||
|
||||
if (EnterEnum.OUT.value == enterFlag) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastOrder != null) {
|
||||
lastOrder.setPaying(1);
|
||||
lastOrder.setPayMoney(new BigDecimal(-1));
|
||||
lastOrder.setOrderAddSn(order.getOrderSn());
|
||||
lastOrder.setOrderAddSn(orderSn);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
logger.info("[篮球][下单] 出场补费订单关联 lastOrderSn={}, addOrderSn={}",
|
||||
lastOrder.getOrderSn(), order.getOrderSn());
|
||||
logger.info("[篮球][下单] memberId={}, mobile={},出场补费订单关联 lastOrderSn={}, addOrderSn={}",
|
||||
memberId, member.getMobile(),lastOrder.getOrderSn(), orderSn);
|
||||
} else {
|
||||
logger.warn("[篮球][下单] 出场补费但未找到原始订单 memberId={}", memberId);
|
||||
}
|
||||
}
|
||||
OrderPaySignResponse.WechatPayParam wechatPayParam = memberCardOrderService.createUnifiedOrder(order.getOrderSn(), memberId, RequestUtils.getIp(),"入场结算订单");
|
||||
wechatPayParam.setOrderSn(order.getOrderSn());
|
||||
|
||||
BasketballPayResult result = new BasketballPayResult();
|
||||
result.setPaidFlag(false);
|
||||
result.setOrderSn(order.getOrderSn());
|
||||
result.setOrderSn(orderSn);
|
||||
result.setWechatPayParam(wechatPayParam);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,20 +10,20 @@ import com.sv.exception.api.ExceptionCodeTemplate;
|
||||
import com.sv.mapper.BarcodeOrderTimeMapper;
|
||||
import com.sv.mapper.OrderMapper;
|
||||
import com.sv.mapper.VenueMapper;
|
||||
import com.sv.service.api.OrderService;
|
||||
import com.sv.service.api.config.WechatPayService;
|
||||
import com.sv.service.api.util.DateUtilCard;
|
||||
import com.sv.service.common.DoorLockUtil;
|
||||
import com.ydd.framework.core.common.Pagination;
|
||||
import com.ydd.framework.core.common.utils.ValidationUtils;
|
||||
import com.ydd.framework.core.exception.ServiceException;
|
||||
import com.ydd.framework.core.service.impl.BaseServiceImpl;
|
||||
import com.ydd.oms.entity.enums.PayStatusEnum;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
@@ -59,12 +59,14 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
@Lazy
|
||||
@Resource
|
||||
private WechatPayService wechatPayService;
|
||||
@Resource
|
||||
DoorLockUtil doorLockUtil;
|
||||
|
||||
/**
|
||||
* api 接口
|
||||
* 我要进场
|
||||
*/
|
||||
public BasketEnterResult join(Integer memberId, Integer venueId) {
|
||||
public BasketEnterResult join(Integer memberId, Integer venueId, String doorSn) {
|
||||
BasketEnterResult basketEnterResult = new BasketEnterResult();
|
||||
basketEnterResult.setFlg(0);
|
||||
if (memberId == null) {
|
||||
@@ -95,10 +97,11 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
boolean hasEffOrder = lastOrder != null
|
||||
&& lastOrder.getStatus() == BarCodeStatusEnum.INIT.getValue()
|
||||
&& lastOrder.getOrderEnd().after(new Date());
|
||||
|
||||
doorLockUtil.lockOpeDoor(doorSn);
|
||||
if (!hasEffOrder) {
|
||||
basketballLog.info("[篮球][入场] memberId={}, 无有效订单,创建新订单", memberId);
|
||||
if (price.compareTo(BigDecimal.ZERO) > 0) {
|
||||
checkOrderPaying(memberId);
|
||||
Order pendingOrder = orderMapper.findPendingBasketballOrder(memberId, venueId);
|
||||
if (pendingOrder != null) {
|
||||
basketballLog.info("[篮球][入场] memberId={}, 存在待支付订单 orderSn={}", memberId, pendingOrder.getOrderSn());
|
||||
@@ -127,7 +130,6 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
basketballLog.info("[篮球][入场] memberId={}, 待支付订单未完成支付 orderSn={}", memberId, pendingOrder.getOrderSn());
|
||||
return basketEnterResult;
|
||||
}
|
||||
checkOrderPaying(memberId);
|
||||
basketEnterResult.setFlg(2);
|
||||
if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()) {
|
||||
basketEnterResult.setMsg("预付押金" + price + "元,出门后按分钟结算,收费规则见场馆主页详情");
|
||||
@@ -170,9 +172,10 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
*
|
||||
* @param memberId
|
||||
* @param venueId
|
||||
* @param doorSn
|
||||
* @return
|
||||
*/
|
||||
public BasketEnterResult out(Integer memberId, Integer venueId) {
|
||||
public BasketEnterResult out(Integer memberId, Integer venueId, String doorSn) {
|
||||
BasketEnterResult result = new BasketEnterResult();
|
||||
result.setFlg(0);
|
||||
if (memberId == null) {
|
||||
@@ -184,25 +187,25 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
memberService.verify(member);
|
||||
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastOrder == null || lastOrder.getPaying() == 2) {
|
||||
basketballLog.warn("[篮球][出场] memberId={}, venueId={}, 无可结算订单 lastOrder={}",
|
||||
memberId, venueId, lastOrder == null ? "null" :
|
||||
if (lastOrder == null) {
|
||||
basketballLog.error("[篮球][出场] memberId={}, mobile={} ,venueId={}, 无可结算订单 lastOrder={}",
|
||||
memberId, member.getMobile(), venueId, lastOrder == null ? "null" :
|
||||
String.format("orderSn=%s,paying=%s,status=%s", lastOrder.getOrderSn(), lastOrder.getPaying(), lastOrder.getStatus()));
|
||||
return result;
|
||||
throw new ServiceException("门禁异常,无可结算订单,请联系管理员出门!");
|
||||
}
|
||||
|
||||
basketballLog.info("[篮球][出场] memberId={}, venueId={}, payStyle={}, orderSn={}, orderStart={}, lastEnter={}, paying={}",
|
||||
memberId, venueId, venue.getPayStyle(), lastOrder.getOrderSn(),
|
||||
lastOrder.getOrderStart(), lastOrder.getLastEnter(), lastOrder.getPaying());
|
||||
|
||||
doorLockUtil.lockOpeDoor(doorSn);
|
||||
if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()) {
|
||||
String enterTime = DateUtilCard.getTimeFromDate(lastOrder.getOrderStart());
|
||||
Date dateNow = new Date();
|
||||
basketballLog.info("[篮球][出场] memberId={}, 按时计费结算 venueId={}", memberId, venueId);
|
||||
basketballLog.info("[篮球][出场] memberId={} ,mobile={} , 按时计费结算 venueId={}", memberId, member.getMobile(),venueId);
|
||||
|
||||
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
||||
if (venuePriceEnter == null) {
|
||||
basketballLog.warn("[篮球][出场] memberId={}, 场馆暂未开放 venueId={}", memberId, venueId);
|
||||
basketballLog.warn("[篮球][出场] memberId={}, 未找到价格 venueId={}", memberId, venueId);
|
||||
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
||||
}
|
||||
|
||||
@@ -214,13 +217,22 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
BigDecimal deposit = basePrice.multiply(new BigDecimal(2));
|
||||
BigDecimal difference = actualCost.subtract(deposit);
|
||||
|
||||
basketballLog.info("[篮球][出场] memberId={}, 费用结算: basePrice={}, 停留{}分钟, 实际费用={}, 押金={}, 差额={}",
|
||||
memberId, basePrice, minutes, actualCost, deposit, difference);
|
||||
|
||||
basketballLog.info("[篮球][出场] memberId={}, mobile={}, 费用结算: basePrice={}, 停留{}分钟, 实际费用={}, 押金={}, 差额={}",
|
||||
memberId, member.getMobile(), basePrice, minutes, actualCost, deposit, difference);
|
||||
if (difference.compareTo(BigDecimal.ZERO) > 0) {
|
||||
Order pendingOrder = orderMapper.findPendingBasketballOrder(memberId, venueId);
|
||||
String orderAddSn = lastOrder.getOrderAddSn();
|
||||
if (!StringUtils.isEmpty(orderAddSn)){
|
||||
// 这时是已经有过新增的订单了
|
||||
Order pendingOrder = orderService.findOrderSn(orderAddSn, memberId);
|
||||
if (pendingOrder != null) {
|
||||
OrderResponse wxResponse = wechatPayService.queryWechatOrder(pendingOrder.getOrderSn());
|
||||
if (PayStatusEnum.PAYED.value.equals(pendingOrder.getPayStatus())) {
|
||||
result.setFlg(0);
|
||||
result.setMsg("补交费用已支付成功,出场成功");
|
||||
basketballLog.info("[篮球][出场] memberId={}, 补交费用已支付 orderSn={}, 补交金额={}",
|
||||
memberId, pendingOrder.getOrderSn(), difference);
|
||||
return result;
|
||||
}
|
||||
OrderResponse wxResponse = wechatPayService.queryWechatOrder(orderAddSn);
|
||||
if (wxResponse != null && wxResponse.isSuccess() && "SUCCESS".equals(wxResponse.getTradeState())) {
|
||||
pendingOrder.setPayStatus(PayStatusEnum.PAYED.value);
|
||||
pendingOrder.setTradeSn(wxResponse.getTransactionId());
|
||||
@@ -233,6 +245,7 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
memberId, pendingOrder.getOrderSn(), wxResponse.getTransactionId(), difference);
|
||||
return result;
|
||||
}
|
||||
checkOrderPaying(memberId);
|
||||
result.setFlg(2);
|
||||
result.setMoney(difference);
|
||||
result.setOrderSn(pendingOrder.getOrderSn());
|
||||
@@ -240,6 +253,7 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
basketballLog.info("[篮球][出场] memberId={}, 需补交费用 orderSn={}, 需补交={}", memberId, pendingOrder.getOrderSn(), difference);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
checkOrderPaying(memberId);
|
||||
result.setFlg(2);
|
||||
result.setMoney(difference);
|
||||
|
||||
@@ -11,6 +11,8 @@ public class DoorLockUtil {
|
||||
private final static String DOOR_LOCK = "DOOR_LOCK_";
|
||||
private final static Integer LOCK_TIMEOUT = 20;
|
||||
|
||||
private final static Integer LOCK_OPE_TIMEOUT = 10;
|
||||
|
||||
@Resource
|
||||
RedisCache redisCache;
|
||||
|
||||
@@ -35,4 +37,9 @@ public class DoorLockUtil {
|
||||
redisCache.setCacheObject(doorKey,true,LOCK_TIMEOUT, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public void lockOpeDoor(String doorSn){
|
||||
String doorKey = DOOR_LOCK + doorSn;
|
||||
redisCache.setCacheObject(doorKey,true,LOCK_OPE_TIMEOUT, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user