篮球通过微信支付下订单,出场10分钟结束订单,该退钱退钱
This commit is contained in:
@@ -185,7 +185,7 @@ public class VenueController extends BaseApiController {
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/venue/generate/barcode", method = RequestMethod.POST)
|
||||
public ResponseDTO generateBarcode(@RequestParam("orderSn") String orderSn,@RequestParam("venueId") Integer venueId,Integer enterFlag) {
|
||||
public ResponseDTO generateBarcode(@RequestParam("orderSn") String orderSn,@RequestParam("venueId") Integer venueId,@RequestParam("enterFlag")Integer enterFlag) {
|
||||
Device byDevice = deviceService.findByDevice(venueId);
|
||||
if (byDevice == null) {
|
||||
throw new ServiceException("门禁通讯异常");
|
||||
@@ -209,7 +209,7 @@ public class VenueController extends BaseApiController {
|
||||
*/
|
||||
@RequestMapping(value = "/venue/basketball/pay", method = RequestMethod.POST)
|
||||
@AccessToken
|
||||
public ResponseDTO basketPay(@RequestParam("venueId") Integer venueId,@RequestParam("payMoney") Double payMoney){
|
||||
public ResponseDTO basketPay(@RequestParam("venueId") Integer venueId,@RequestParam("enterFlag")Integer enterFlag,@RequestParam("payMoney") Double payMoney){
|
||||
Device byDevice = deviceService.findByDevice(venueId);
|
||||
if (byDevice == null) {
|
||||
throw new ServiceException("门禁通讯异常");
|
||||
@@ -221,7 +221,7 @@ public class VenueController extends BaseApiController {
|
||||
}
|
||||
Integer memberId = getMemberIdByAccessToken();
|
||||
return ResponseDTO.ok().
|
||||
addAttribute("pay",orderService.createEnterVenueOrder(venueId, memberId, PayTypeEnum.WEI_XIN, new BigDecimal(payMoney)));
|
||||
addAttribute("pay",orderService.createEnterVenueOrder(venueId, memberId, enterFlag, PayTypeEnum.WEI_XIN, new BigDecimal(payMoney)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,6 +27,6 @@ CREATE TABLE `sv_member_enter_status` (
|
||||
ALTER TABLE sv_barcode
|
||||
ADD COLUMN order_sn varchar(200) AFTER barcode;
|
||||
ALTER TABLE `smart_venue`.`sv_barcode_order_time`
|
||||
ADD COLUMN `paying` int(11) NULL COMMENT '入场 paying = 0 出场未结算 paying = 1' AFTER `status`,
|
||||
ADD COLUMN `paying` int(11) NULL COMMENT '入场 paying = 0 出场未结算 paying = 1 出场补交费用已补交 paying = 2' AFTER `status`,
|
||||
ADD COLUMN `pay_money` int(11) NULL COMMENT '退款金额' AFTER `paying`,
|
||||
ADD COLUMN `order_sn` varchar(200) NULL COMMENT '退款订单号' AFTER `pay_money`;
|
||||
|
||||
@@ -23,6 +23,8 @@ public interface BarcodeOrderTimeMapper {
|
||||
|
||||
BarcodeOrderTime findLastOrder(@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
|
||||
|
||||
BarcodeOrderTime findLastOrderBySn(@Param("memberId") Integer memberId, @Param("venueId") Integer venueId,@Param("orderSn") String orderSn);
|
||||
|
||||
List<BarcodeOrderTime> endOrderList(@Param("currentDate") Date currentDate);
|
||||
|
||||
List<BarcodeOrderTime> needPayOrderList();
|
||||
|
||||
@@ -90,6 +90,8 @@ public interface OrderMapper {
|
||||
*/
|
||||
void updatePrepayId(@Param("orderSn") String orderSn,@Param("prepayId") String prepayId);
|
||||
|
||||
Order findLastOrder(@Param("memberId") Integer memberId);
|
||||
|
||||
/**
|
||||
* api 根据订单编号查询总价钱
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.sv.service.api;
|
||||
|
||||
import com.enums.BarCodeStatusEnum;
|
||||
import com.enums.OrderPayEnum;
|
||||
import com.enums.OrderTypeEnum;
|
||||
import com.enums.PayTypeEnum;
|
||||
import com.enums.*;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.sv.dto.api.wechat.BaseResult;
|
||||
import com.sv.dto.api.wechat.OrderPaySignResponse;
|
||||
@@ -63,6 +60,8 @@ public class OrderService extends BaseServiceImpl {
|
||||
private MemberService memberService;
|
||||
@Resource
|
||||
private VenuePriceMapper venuePriceMapper;
|
||||
@Resource
|
||||
private BarcodeOrderTimeMapper barcodeOrderTimeMapper;
|
||||
|
||||
/**
|
||||
* 创建订单
|
||||
@@ -250,7 +249,7 @@ public class OrderService extends BaseServiceImpl {
|
||||
* @param memberId
|
||||
* @return
|
||||
*/
|
||||
public OrderPaySignResponse.WechatPayParam createEnterVenueOrder(Integer venueId, Integer memberId, PayTypeEnum payTypeEnum, BigDecimal price){
|
||||
public OrderPaySignResponse.WechatPayParam createEnterVenueOrder(Integer venueId, Integer memberId, Integer enterFlag,PayTypeEnum payTypeEnum, BigDecimal price){
|
||||
Venue venue = venueMapper.findById(venueId);
|
||||
if (venue == null) {
|
||||
throw new ServiceException("未找到该场馆");
|
||||
@@ -288,11 +287,23 @@ public class OrderService extends BaseServiceImpl {
|
||||
order.setPlatformId(venue.getPlatformId());
|
||||
order.setMemberId(memberId);
|
||||
order.setParentOrderId(venueId); /** 篮球入场这里输入场馆ID */
|
||||
order.setCreatedId(enterFlag); /** 篮球入场这里输入出场结算还是入场结算 */
|
||||
orderMapper.insert(order);
|
||||
//扣除用户余额 目前篮球订单不支持余额支付
|
||||
// if(payTypeEnum.value.equals(PayTypeEnum.BALANCE.value)) {
|
||||
// memberMoneyLogService.create(memberId, venue.getPlatformId(), MoneyLogEnum.JOIN.value, price.negate(), PayTypeEnum.BALANCE.value, null, venue.getId(), venue.getType(), null);
|
||||
// }
|
||||
if (EnterEnum.OUT.value == enterFlag) {
|
||||
// 出场的话,将出场的订单设定 未结算 支付金额为 -1 , 这样批处理不会被结算,需要支付回调处理
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastOrder != null) {
|
||||
lastOrder.setPaying(1);
|
||||
lastOrder.setPayMoney(-1);
|
||||
lastOrder.setOrderSn(order.getOrderSn());
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
}
|
||||
}
|
||||
OrderPaySignResponse.WechatPayParam wechatPayParam = memberCardOrderService.createUnifiedOrder(order.getOrderSn(), memberId, RequestUtils.getIp(),"入场结算订单");
|
||||
return wechatPayParam;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.sv.dto.api.VenueDTO;
|
||||
import com.sv.entity.*;
|
||||
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.util.DateUtilCard;
|
||||
import com.sv.service.api.util.GeoHashUtils;
|
||||
@@ -16,6 +17,7 @@ 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;
|
||||
@@ -43,22 +45,17 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
|
||||
@Resource
|
||||
private VenueMapper venueMapper;
|
||||
|
||||
@Resource
|
||||
private MemberCardService memberCardService;
|
||||
|
||||
@Resource
|
||||
private MemberService memberService;
|
||||
|
||||
@Resource
|
||||
private MemberEnterVenueLogService memberEnterVenueLogService;
|
||||
|
||||
@Resource
|
||||
private MemberMoneyLogService memberMoneyLogService;
|
||||
@Resource
|
||||
private VenuePriceService venuePriceService;
|
||||
@Resource
|
||||
BarcodeOrderTimeMapper barcodeOrderTimeMapper;
|
||||
@Resource
|
||||
OrderMapper orderMapper;
|
||||
|
||||
|
||||
/**
|
||||
* api 接口
|
||||
@@ -86,12 +83,10 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
// 按时入场余额需要包含两个小时的场地费
|
||||
price = price.multiply(new BigDecimal(2));
|
||||
}
|
||||
if (venuePrice == null) {
|
||||
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
||||
}
|
||||
int effOrder = barcodeOrderTimeMapper.findEffOrder(new Date(), memberId, venueId);
|
||||
if (effOrder <= 0) {
|
||||
if (price.compareTo(BigDecimal.ZERO) > 0) {
|
||||
checkOrderPaying(memberId);
|
||||
basketEnterResult.setFlg(2);
|
||||
basketEnterResult.setMsg("订单金额"+ price + "元,请确认!");
|
||||
basketEnterResult.setMoney(price);
|
||||
@@ -110,11 +105,11 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
}
|
||||
} else {
|
||||
// 还沿用原来订单
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastOrder != null) {
|
||||
lastOrder.setPaying(0);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
BarcodeOrderTime lastEnterOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastEnterOrder != null) {
|
||||
lastEnterOrder.setPaying(0);
|
||||
lastEnterOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastEnterOrder);
|
||||
}
|
||||
}
|
||||
// 3.判断用户有没有人脸识别的图像,根据用户ID查找,一个用户只能有一条
|
||||
@@ -156,7 +151,7 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
String enterTime = DateUtilCard.getTimeFromDate(lastOrder.getOrderStart());
|
||||
Date dateNow = new Date();
|
||||
if (dateNow.after(lastOrder.getOrderEnd())) {
|
||||
if (dateNow.after(lastOrder.getOrderEnd()) && 2 != lastOrder.getPaying()) {
|
||||
// 当前时间已经超过订单结束日期,则该订单需要重新补收费
|
||||
// 取入场的价格
|
||||
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
||||
@@ -170,6 +165,7 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
// 需要补收的价格
|
||||
price = price.multiply(new BigDecimal(hours - 1));
|
||||
if (price.compareTo(BigDecimal.ZERO) > 0 ) {
|
||||
checkOrderPaying(memberId);
|
||||
result.setFlg(2);
|
||||
result.setMoney(price);
|
||||
result.setMsg("您此次入场超过2小时,需补交" + price + "元");
|
||||
@@ -187,6 +183,19 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户五分钟内有过微信支付,不能在结果未出来之前就让用户付款
|
||||
* @param memberId
|
||||
*/
|
||||
private void checkOrderPaying(Integer memberId) {
|
||||
Order mOrder = orderMapper.findLastOrder(memberId);
|
||||
// 有未支付的订单,且订单未超过五分钟未支付
|
||||
int diffMinute = DateUtilCard.diffMinute(mOrder.getModifiedTime(), new Date());
|
||||
if (mOrder != null && PayStatusEnum.NOT_PAY.value == mOrder.getPayStatus() && diffMinute < 5) {
|
||||
throw new ServiceException("您有处理中的订单,或刚刚取消支付,请稍后再试");
|
||||
}
|
||||
}
|
||||
|
||||
// 记录入场记录
|
||||
/**
|
||||
*
|
||||
@@ -242,10 +251,13 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
* @param order
|
||||
*/
|
||||
public void paySuccess(Order order) {
|
||||
// order.getCreatedId() 如果等于1 则是出场的付费
|
||||
Integer enterFlag = order.getCreatedId();
|
||||
Integer memberId = order.getMemberId();
|
||||
Integer venueId = order.getParentOrderId();
|
||||
Venue venue = venueMapper.findById(venueId);
|
||||
createMemberMoneyLog(MoneyLogEnum.JOIN.value, order.getPrice(), memberId, order.getPlatformId(), PayTypeEnum.WEI_XIN.value, null,venue.getId(), venue.getType());
|
||||
if (EnterEnum.OUT.value != enterFlag) {
|
||||
Integer timePayHour = 2;
|
||||
if(PayStyleEnum.TIME.getValue() == venue.getPayStyle()){
|
||||
// 按次入场先收钱,且多久不收钱,出场不收钱
|
||||
@@ -256,5 +268,13 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
}
|
||||
}
|
||||
createBarcodeTimeOrder(memberId,venueId,timePayHour,order.getOrderSn());
|
||||
} else {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrderBySn(memberId, venueId,order.getOrderSn());
|
||||
if (lastOrder != null) {
|
||||
lastOrder.setPaying(2);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +146,10 @@ public class WechatPayService extends BaseServiceImpl {
|
||||
if (params.get("result_code").equals("SUCCESS")) {
|
||||
String orderSn = params.get("out_trade_no");
|
||||
Order order = orderService.findOrderSn(orderSn,null);
|
||||
if (order == null) {
|
||||
logger.error("找不到订单号!!!!!!!!!" + orderSn);
|
||||
return;
|
||||
}
|
||||
if (order.getPayStatus().intValue() > 0) {
|
||||
//已支付 不需要在判断
|
||||
return;
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
status = #{status,jdbcType=INTEGER},
|
||||
paying = #{paying,jdbcType=INTEGER},
|
||||
pay_money = #{payMoney,jdbcType=INTEGER}
|
||||
order_sn = #{orderSn,jdbcType=INTEGER}
|
||||
order_sn = #{orderSn,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
|
||||
@@ -175,6 +175,15 @@
|
||||
order by order_end desc LIMIT 1
|
||||
</select>
|
||||
|
||||
<select id="findLastOrderBySn" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from sv_barcode_order_time
|
||||
where member_id = #{memberId,jdbcType=INTEGER} and venue_id = #{venueId,jdbcType=INTEGER}
|
||||
and order_sn = #{orderSn,jdbcType=VARCHAR}
|
||||
order by order_end desc LIMIT 1
|
||||
</select>
|
||||
|
||||
<select id="endOrderList" resultMap="BaseResultMap" >
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
|
||||
@@ -435,4 +435,13 @@
|
||||
WHERE
|
||||
order_sn = #{orderSn}
|
||||
</select>
|
||||
|
||||
<select id="findLastOrder" resultMap="OrderMap">
|
||||
SELECT
|
||||
<include refid="Field"></include>
|
||||
FROM
|
||||
<include refid="tableName"></include>
|
||||
WHERE
|
||||
deleted = 0 and member_id = #{memberId} order by modified_time desc limit 1
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user