修改包时订单的扣费逻辑 - 不按照分钟扣费
This commit is contained in:
@@ -21,6 +21,8 @@ public interface BarcodeOrderTimeMapper {
|
|||||||
|
|
||||||
int findEffOrder(@Param("currentDate") Date currentDate,@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
|
int findEffOrder(@Param("currentDate") Date currentDate,@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
|
||||||
|
|
||||||
|
BarcodeOrderTime findLastOrder(@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
|
||||||
|
|
||||||
List<BarcodeOrderTime> endOrderList(@Param("currentDate") Date currentDate);
|
List<BarcodeOrderTime> endOrderList(@Param("currentDate") Date currentDate);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -246,20 +246,23 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
Member member = memberService.findById(memberId);
|
Member member = memberService.findById(memberId);
|
||||||
if (member.getMoney().compareTo(price) == -1) {
|
if (member.getMoney().compareTo(price) == -1) {
|
||||||
barCodeResult.setFlg(2);
|
barCodeResult.setFlg(2);
|
||||||
if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
// if (PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
||||||
// 按时入场余额需要包含两个小时的场地费
|
// // 按时入场余额需要包含两个小时的场地费
|
||||||
barCodeResult.setMsg("请保证账户至少有两个小时余额:" + price + "元,余额不足,请先充值");
|
// barCodeResult.setMsg("请保证账户至少有两个小时余额:" + price + "元,余额不足,请先充值");
|
||||||
}else {
|
// }else {
|
||||||
barCodeResult.setMsg("此次订单金额为:" + price + "元,余额不足,请先充值");
|
// barCodeResult.setMsg("此次订单金额为:" + price + "元,余额不足,请先充值");
|
||||||
}
|
// }
|
||||||
|
barCodeResult.setMsg("此次订单金额为:" + price + "元,余额不足,请先充值");
|
||||||
|
return barCodeResult;
|
||||||
}
|
}
|
||||||
}
|
Integer timePayHour = 1;
|
||||||
if(PayStyleEnum.TIME.getValue() == venue.getPayStyle()){
|
if(PayStyleEnum.TIME.getValue() == venue.getPayStyle()){
|
||||||
// 按次入场先收钱,且多久不收钱,出场不收钱
|
// 按次入场先收钱,且多久不收钱,出场不收钱
|
||||||
// 该用户上次订单的是否逾期
|
// 该用户上次订单的是否逾期
|
||||||
Integer timePayHour = venue.getTimePayHour();
|
timePayHour = venue.getTimePayHour();
|
||||||
if (timePayHour == null) {
|
if (timePayHour == null) {
|
||||||
timePayHour = 4;
|
timePayHour = 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int effOrder = barcodeOrderTimeMapper.findEffOrder(new Date(), memberId, venueId);
|
int effOrder = barcodeOrderTimeMapper.findEffOrder(new Date(), memberId, venueId);
|
||||||
if (effOrder <= 0) {
|
if (effOrder <= 0) {
|
||||||
@@ -358,33 +361,35 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
*/
|
*/
|
||||||
//判断余额是否够
|
//判断余额是否够
|
||||||
// 1、找到入场时间
|
// 1、找到入场时间
|
||||||
MemberEnterVenueLog memberLastLog = memberEnterVenueLogService.findMemberLastLog(memberId, venueId);
|
|
||||||
String enterTime = DateUtilCard.getTimeFromDate(memberLastLog.getCreatedTime());
|
|
||||||
String outTime = DateUtilCard.nowTime().toString();
|
|
||||||
BigDecimal price = BigDecimal.ZERO;
|
|
||||||
if(PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
if(PayStyleEnum.HOUR.getValue() == venue.getPayStyle()){
|
||||||
// 按次出场不扣钱
|
// 按次出场不扣钱
|
||||||
// 取入场的价格
|
BigDecimal price = BigDecimal.ZERO;
|
||||||
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
BarcodeOrderTime lastOrder = barcodeOrderTimeMapper.findLastOrder(memberId, venueId);
|
||||||
if (venuePriceEnter == null) {
|
String enterTime = DateUtilCard.getTimeFromDate(lastOrder.getOrderStart());
|
||||||
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
Date dateNow = new Date();
|
||||||
}
|
if (dateNow.after(lastOrder.getOrderEnd())) {
|
||||||
// 按时出场选择按照分钟四舍五入到角扣款
|
// 当前时间已经超过订单结束日期,则该订单需要重新补收费
|
||||||
price = venuePriceEnter.getPrice();
|
// 取入场的价格
|
||||||
int minutes = DateUtilCard.diffMinute(enterTime, outTime);
|
VenuePrice venuePriceEnter = venuePriceService.findPrice(venueId, enterTime);
|
||||||
price = price.divide(new BigDecimal(60),4,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(minutes)).setScale(1,BigDecimal.ROUND_HALF_UP);
|
if (venuePriceEnter == null) {
|
||||||
if (price.compareTo(BigDecimal.ZERO) < 0) {
|
throw new ServiceException(ExceptionCodeTemplate.VENUE_ERROR);
|
||||||
price = BigDecimal.ZERO;
|
}
|
||||||
}
|
// 按时出场选择按照分钟四舍五入到角扣款
|
||||||
if (memberService.isMoneyEnough(member.getId(), price)) {
|
price = venuePriceEnter.getPrice();
|
||||||
logger.info("用户" + member.getNickname() + "使用余额核销订单");
|
int minutes = DateUtilCard.diffMinute(lastOrder.getOrderStart(), dateNow);
|
||||||
createMemberMoneyLog(MoneyLogEnum.JOIN.value, price, member.getId(), member.getPlatformId(), PayTypeEnum.BALANCE.value, null,
|
int hours = (minutes - 1) / 60;
|
||||||
venue.getId(), venue.getType());
|
// 需要补收的价格
|
||||||
} else {
|
price = price.multiply(new BigDecimal(hours));
|
||||||
//余额不足
|
if (memberService.isMoneyEnough(member.getId(), price)) {
|
||||||
logger.error("用户" + member.getNickname() + "余额不足核销失败");
|
logger.info("用户" + member.getId() + "使用余额核销订单");
|
||||||
result.setFlg(2);
|
createMemberMoneyLog(MoneyLogEnum.JOIN.value, price, member.getId(), member.getPlatformId(), PayTypeEnum.BALANCE.value, null,
|
||||||
result.setMsg("此次订单金额为:" + price + "元,余额不足,请先充值");
|
venue.getId(), venue.getType());
|
||||||
|
} else {
|
||||||
|
//余额不足
|
||||||
|
logger.error("用户" + member.getId() + "需补交金额,余额不足核销失败");
|
||||||
|
result.setFlg(2);
|
||||||
|
result.setMsg("您此次入场超过一小时,需补交" + price + "元,余额不足,请先充值");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -456,6 +461,10 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
private void createBarcodeTimeOrder(Integer memberId, Integer venueId, Integer timePayHour) {
|
private void createBarcodeTimeOrder(Integer memberId, Integer venueId, Integer timePayHour) {
|
||||||
Date startDate = new Date();
|
Date startDate = new Date();
|
||||||
Date endDate = DateUtilCard.addHours(startDate, timePayHour);
|
Date endDate = DateUtilCard.addHours(startDate, timePayHour);
|
||||||
|
// 如果是一个小时,则默认给15分钟宽限期
|
||||||
|
if (timePayHour == 1) {
|
||||||
|
endDate = DateUtilCard.addMinute(endDate,15);
|
||||||
|
}
|
||||||
BarcodeOrderTime barcodeOrderTime = new BarcodeOrderTime();
|
BarcodeOrderTime barcodeOrderTime = new BarcodeOrderTime();
|
||||||
barcodeOrderTime.setMemberId(memberId);
|
barcodeOrderTime.setMemberId(memberId);
|
||||||
barcodeOrderTime.setVenueId(venueId);
|
barcodeOrderTime.setVenueId(venueId);
|
||||||
|
|||||||
@@ -158,42 +158,33 @@ public class DateUtilCard {
|
|||||||
public static Date addOneDay(Date date){
|
public static Date addOneDay(Date date){
|
||||||
Calendar calendar = new GregorianCalendar();
|
Calendar calendar = new GregorianCalendar();
|
||||||
calendar.setTime(date);
|
calendar.setTime(date);
|
||||||
calendar.add(calendar.DATE,1); //把日期往后增加一天,整数 往后推,负数往前移动
|
calendar.add(Calendar.DATE,1); //把日期往后增加一天,整数 往后推,负数往前移动
|
||||||
return calendar.getTime(); //这个时间就是日期往后推一天的结果
|
return calendar.getTime(); //这个时间就是日期往后推一天的结果
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Date addDays(Date date,int days){
|
public static Date addDays(Date date,int days){
|
||||||
Calendar calendar = new GregorianCalendar();
|
Calendar calendar = new GregorianCalendar();
|
||||||
calendar.setTime(date);
|
calendar.setTime(date);
|
||||||
calendar.add(calendar.DATE,days); //把日期往后增加一天,整数 往后推,负数往前移动
|
calendar.add(Calendar.DATE,days); //把日期往后增加一天,整数 往后推,负数往前移动
|
||||||
return calendar.getTime(); //这个时间就是日期往后推一天的结果
|
return calendar.getTime(); //这个时间就是日期往后推一天的结果
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Date addHours(Date date,int hours){
|
public static Date addHours(Date date,int hours){
|
||||||
Calendar calendar = new GregorianCalendar();
|
Calendar calendar = new GregorianCalendar();
|
||||||
calendar.setTime(date);
|
calendar.setTime(date);
|
||||||
calendar.add(calendar.HOUR,hours); //把日期往后增加一小时,整数 往后推,负数往前移动
|
calendar.add(Calendar.HOUR,hours); //整数 往后推,负数往前移动
|
||||||
return calendar.getTime(); //这个时间就是日期往后推一天的结果
|
return calendar.getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int diffMinute(String startTime,String endTime){
|
public static Date addMinute(Date date,int minutes){
|
||||||
if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)){
|
Calendar calendar = new GregorianCalendar();
|
||||||
return 1;
|
calendar.setTime(date);
|
||||||
}
|
calendar.add(Calendar.MINUTE,minutes);
|
||||||
try {
|
return calendar.getTime();
|
||||||
String[] split1 = startTime.split(":");
|
}
|
||||||
String[] split2 = endTime.split(":");
|
|
||||||
int t1 = 0;
|
public static int diffMinute(Date startTime,Date endTime){
|
||||||
int t2 = 0;
|
return (int) ((endTime.getTime() - startTime.getTime()) / (60 * 1000));
|
||||||
t1 = (Integer.parseInt(split1[0]) * 3600)
|
|
||||||
+ (Integer.parseInt(split1[1]) * 60) + Integer.parseInt(split1[2]);
|
|
||||||
t2 = (Integer.parseInt(split2[0]) * 3600)
|
|
||||||
+ (Integer.parseInt(split2[1]) * 60) + Integer.parseInt(split2[2]);
|
|
||||||
int diff = t2 - t1;
|
|
||||||
return (diff / 60) + 1;
|
|
||||||
}catch (Exception e){
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,14 @@
|
|||||||
where status = 0 and order_end >= #{currentDate} and member_id = #{memberId,jdbcType=INTEGER} and venue_id = #{venueId,jdbcType=INTEGER}
|
where status = 0 and order_end >= #{currentDate} and member_id = #{memberId,jdbcType=INTEGER} and venue_id = #{venueId,jdbcType=INTEGER}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="findLastOrder" 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}
|
||||||
|
order by order_end desc LIMIT 1
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="endOrderList" resultMap="BaseResultMap" >
|
<select id="endOrderList" resultMap="BaseResultMap" >
|
||||||
select
|
select
|
||||||
<include refid="Base_Column_List" />
|
<include refid="Base_Column_List" />
|
||||||
|
|||||||
Reference in New Issue
Block a user