fix - 简单修改篮球入场订单逻辑
This commit is contained in:
@@ -696,7 +696,7 @@ public class MemberLessonTicketService extends BaseServiceImpl {
|
||||
for (MemberLessonTicketDetailDTO t : tickets) {
|
||||
if (new Integer(1).equals(t.getVenueLesson().getType())) {
|
||||
//是公益课 加上本次未签到 三个月内超过两次 拉入黑名单
|
||||
memberService.updateMemberBanStatus(ticket.getMemberId(), 1);
|
||||
// memberService.updateMemberBanStatus(ticket.getMemberId(), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -615,6 +615,7 @@ public class MemberService extends BaseServiceImpl {
|
||||
* @param stauts
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Deprecated
|
||||
public void updateMemberBanStatus(Integer memberId,Integer stauts){
|
||||
Member member = new Member();
|
||||
member.setId(memberId);
|
||||
|
||||
@@ -78,45 +78,42 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
// 按时入场余额需要包含两个小时的场地费
|
||||
price = price.multiply(new BigDecimal(2));
|
||||
}
|
||||
int effOrder = barcodeOrderTimeMapper.findEffOrder(new Date(), memberId, venueId);
|
||||
if (effOrder <= 0) {
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
boolean hasEffOrder = lastOrder != null
|
||||
&& lastOrder.getStatus() == BarCodeStatusEnum.INIT.getValue()
|
||||
&& lastOrder.getOrderEnd().after(new Date());
|
||||
|
||||
if (!hasEffOrder) {
|
||||
logger.info(memberId + "&用户创建订单,开始进场,需要支付金额");
|
||||
if (price.compareTo(BigDecimal.ZERO) > 0) {
|
||||
checkOrderPaying(memberId);
|
||||
basketEnterResult.setFlg(2);
|
||||
basketEnterResult.setMsg("订单金额"+ price + "元,请确认!");
|
||||
if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
||||
basketEnterResult.setMsg("预付押金"+ price + "元,出门后结算,收费规则见场馆主页详情");
|
||||
basketEnterResult.setMsg("预付押金"+ price + "元,出门后按分钟结算,收费规则见场馆主页详情");
|
||||
} else {
|
||||
basketEnterResult.setMsg("订单金额"+ price + "元,请确认!");
|
||||
}
|
||||
basketEnterResult.setMoney(price);
|
||||
}else {
|
||||
logger.info(memberId + "&用户创建订单,开始进场");
|
||||
// 不需要交钱,则不需要微信支付,直接展示二维码
|
||||
Integer timePayHour = 2; // 此处修改押金小时数
|
||||
if(PayStyleEnum.TIME.getValue() == venue.getPayStyle()){
|
||||
// 按次入场先收钱,且多久不收钱,出场不收钱
|
||||
// 如果是按次的订单,免费订单只能撑两个小时
|
||||
timePayHour = 2;
|
||||
}
|
||||
} else {
|
||||
logger.info(memberId + "&用户创建订单,开始进场,免费入场");
|
||||
Integer timePayHour = 2;
|
||||
if(PayStyleEnum.TIME.getValue() == venue.getPayStyle()){
|
||||
timePayHour = venue.getTimePayHour() != null ? venue.getTimePayHour() : 4;
|
||||
}
|
||||
createBarcodeTimeOrder(memberId,venueId,timePayHour,"000");
|
||||
}
|
||||
} else {
|
||||
// 还沿用原来订单
|
||||
logger.info(memberId + "&用户重新入场,沿用原来订单");
|
||||
BarcodeOrderTime lastEnterOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastEnterOrder != null) {
|
||||
lastEnterOrder.setPaying(0);
|
||||
lastEnterOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastEnterOrder);
|
||||
// 已有有效订单
|
||||
if (lastOrder.getPaying() == 1 && PayStyleEnum.TIME.getValue() == venue.getPayStyle()) {
|
||||
// 按次计费:10分钟内重新入场,沿用原订单
|
||||
lastOrder.setPaying(0);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
logger.info(memberId + "&用户10分钟内重新入场,沿用原订单");
|
||||
} else {
|
||||
logger.info(memberId + "&用户已在场内,无需重复入场");
|
||||
}
|
||||
}
|
||||
// 3.判断用户有没有人脸识别的图像,根据用户ID查找,一个用户只能有一条
|
||||
// MemberFaceInfo memberFaceInfo = memberFaceInfoService.findByMemberId(memberId);
|
||||
// if (memberFaceInfo == null) {
|
||||
// flag = 1;
|
||||
// return flag;
|
||||
// }
|
||||
return basketEnterResult;
|
||||
}
|
||||
|
||||
@@ -129,65 +126,69 @@ public class VenueEnterService extends BaseServiceImpl {
|
||||
public BasketEnterResult out(Integer memberId, Integer venueId) {
|
||||
BasketEnterResult result = new BasketEnterResult();
|
||||
result.setFlg(0);
|
||||
// 判断用户是否登录
|
||||
if (memberId == null) {
|
||||
throw new ServiceException(com.ydd.framework.core.exception.ExceptionCodeTemplate.NEED_LOGIN);
|
||||
}
|
||||
//参数校验
|
||||
ValidationUtils.assertNotNull(venueId);
|
||||
Venue venue = venueMapper.findById(venueId);
|
||||
// 查询当前时间内,场馆对应的价格(健身房没有价格)
|
||||
Member member = memberService.findByMember(memberId);
|
||||
memberService.verify(member);
|
||||
/**
|
||||
* 篮球出场核心逻辑
|
||||
*/
|
||||
//判断余额是否够
|
||||
// 1、找到入场时间
|
||||
if(PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
||||
// 按次出场不扣钱
|
||||
BigDecimal price = BigDecimal.ZERO;
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
|
||||
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||
if (lastOrder == null || lastOrder.getPaying() == 2) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()) {
|
||||
String enterTime = DateUtilCard.getTimeFromDate(lastOrder.getOrderStart());
|
||||
Date dateNow = new Date();
|
||||
logger.info(memberId + "&用户出场");
|
||||
if (2 != lastOrder.getPaying()) {
|
||||
// 取入场的价格
|
||||
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
||||
if (venuePriceEnter == null) {
|
||||
logger.info(memberId + "&用户出场,场馆暂未开放");
|
||||
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
||||
}
|
||||
// 按时出场选择按照分钟四舍五入到角扣款
|
||||
BigDecimal basePrice = venuePriceEnter.getPrice();
|
||||
price = venuePriceEnter.getPrice();
|
||||
int minutes = DateUtilCard.diffMinute(lastOrder.getOrderStart(), dateNow);
|
||||
int hours = minutes / 60;
|
||||
// 需要补收的价格
|
||||
price = price.multiply(new BigDecimal(hours - 1)); // 此处修改押金小时数
|
||||
int mod = new BigDecimal(minutes).divideAndRemainder(new BigDecimal(60))[1].intValue();
|
||||
if (hours >= 1 && mod <= 30 && basePrice.compareTo(BigDecimal.ZERO) > 0) {
|
||||
// 超过一个小时 且不满半小时,只收一半的钱
|
||||
price = price.subtract(basePrice.divide(new BigDecimal(2)).setScale(1,BigDecimal.ROUND_HALF_UP));
|
||||
}
|
||||
logger.info("用户出场$" + memberId + "$经过时间为" + minutes + "分钟,价格为:"+ price);
|
||||
if (price.compareTo(BigDecimal.ZERO) > 0 ) {
|
||||
checkOrderPaying(memberId);
|
||||
result.setFlg(2);
|
||||
result.setMoney(price);
|
||||
result.setMsg("您此次入场超过2小时,需补交" + price + "元");
|
||||
} else {
|
||||
// 不需要补交钱且需要退钱
|
||||
lastOrder.setPayMoney(price.abs().intValue());
|
||||
if (lastOrder.getPayMoney() > 0) {
|
||||
lastOrder.setPaying(1);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
}
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
result.setFlg(888);
|
||||
result.setMsg("如要继续订单,请在10分钟内进入,否则将结束订单");
|
||||
}
|
||||
logger.info(memberId + "&用户出场(按时)");
|
||||
|
||||
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
||||
if (venuePriceEnter == null) {
|
||||
logger.info(memberId + "&用户出场,场馆暂未开放");
|
||||
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
||||
}
|
||||
|
||||
BigDecimal basePrice = venuePriceEnter.getPrice();
|
||||
int minutes = DateUtilCard.diffMinute(lastOrder.getOrderStart(), dateNow);
|
||||
|
||||
BigDecimal actualCost = basePrice.multiply(new BigDecimal(minutes))
|
||||
.divide(new BigDecimal(60), 2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal deposit = basePrice.multiply(new BigDecimal(2));
|
||||
BigDecimal difference = actualCost.subtract(deposit);
|
||||
|
||||
logger.info("用户出场$" + memberId + "$经过" + minutes + "分钟,实际费用:" + actualCost + ",押金:" + deposit + ",差额:" + difference);
|
||||
|
||||
if (difference.compareTo(BigDecimal.ZERO) > 0) {
|
||||
checkOrderPaying(memberId);
|
||||
result.setFlg(2);
|
||||
result.setMoney(difference);
|
||||
result.setMsg("您此次入场" + minutes + "分钟,实际费用" + actualCost + "元,需补交" + difference + "元");
|
||||
} else if (difference.compareTo(BigDecimal.ZERO) < 0) {
|
||||
BigDecimal refundAmount = difference.abs();
|
||||
lastOrder.setPayMoney(refundAmount.multiply(new BigDecimal(100)).intValue());
|
||||
lastOrder.setPaying(1);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
result.setFlg(0);
|
||||
result.setMsg("出场成功,退款" + refundAmount + "元将在24小时内到账");
|
||||
} else {
|
||||
lastOrder.setPaying(2);
|
||||
lastOrder.setStatus(BarCodeStatusEnum.USED.getValue());
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
result.setFlg(0);
|
||||
result.setMsg("出场成功");
|
||||
}
|
||||
} else if (PayStyleEnum.TIME.getValue() == venue.getPayStyle()) {
|
||||
// 按次计费:出场设置 paying=1,10分钟内可重新入场
|
||||
logger.info(memberId + "&用户出场(按次)");
|
||||
lastOrder.setPaying(1);
|
||||
lastOrder.setModifiedTime(new Date());
|
||||
barcodeOrderTimeMapper.updateByPrimaryKey(lastOrder);
|
||||
result.setFlg(0);
|
||||
result.setMsg("出场成功,10分钟内重新入场无需付费");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
<result column="modified_time" property="modifiedTime" />
|
||||
<result column="deleted" property="deleted" />
|
||||
</resultMap>
|
||||
|
||||
|
||||
<!--表名 -->
|
||||
<sql id="tableName">
|
||||
sv_venue_price
|
||||
</sql>
|
||||
|
||||
|
||||
<!-- 字段 -->
|
||||
<sql id="Field">
|
||||
id,
|
||||
@@ -38,7 +38,7 @@
|
||||
modified_time,
|
||||
deleted
|
||||
</sql>
|
||||
|
||||
|
||||
<!-- 字段值 -->
|
||||
<sql id="FieldValue">
|
||||
#{id, jdbcType=INTEGER},
|
||||
@@ -159,7 +159,7 @@
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
||||
<!-- 删除-->
|
||||
<delete id="delete" parameterType="java.lang.Integer">
|
||||
delete from
|
||||
@@ -180,7 +180,7 @@
|
||||
#{item}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
|
||||
<!-- 更新记录 -->
|
||||
<update id="update" parameterType="com.sv.entity.VenuePrice">
|
||||
UPDATE
|
||||
@@ -222,7 +222,7 @@
|
||||
</set>
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 通过编号查询 -->
|
||||
<select id="findById" parameterType="java.lang.Integer" resultMap="VenuePriceMap">
|
||||
SELECT
|
||||
@@ -274,5 +274,6 @@
|
||||
AND end_time > #{time}
|
||||
AND deleted = 0
|
||||
AND venue_tye = 1
|
||||
LIMIT 1
|
||||
</select>
|
||||
</mapper>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user