2024-04 足球场开门逻辑

This commit is contained in:
2024-05-22 18:54:15 +08:00
parent e0abce8e48
commit 9fd95bfdad
7 changed files with 157 additions and 24 deletions

View File

@@ -0,0 +1,37 @@
package com.sv.api.controller;
import com.sv.netty.netty.service.MessageService;
import com.ydd.framework.core.common.dto.ResponseDTO;
import com.ydd.framework.core.controller.BaseApiController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* Controller - 用户预约的场馆课程票号
*
* @author lihong
* @since 2018-08-06
*/
@RestController
public class FootballTicketController extends BaseApiController {
private final Logger logger = LoggerFactory.getLogger(FootballTicketController.class);
@Resource
private MessageService messageService;
/**
* 订单详情开门链接
*/
@RequestMapping(value = "/member/lesson/tickets/opendoor", method = RequestMethod.POST)
public ResponseDTO memberTicketInvite(@RequestParam("ticketId") Integer ticketId){
messageService.footballOpenDoor(ticketId,getLoginMemberId());
return ResponseDTO.ok().addAttribute("enterFlag","OK");
}
}

View File

@@ -46,6 +46,13 @@ public interface MessageService {
*/ */
void enterVenue(String barcode); void enterVenue(String barcode);
/**
* 足球场开门逻辑
* @param ticketId
* @param memberId
*/
void footballOpenDoor(Integer ticketId,Integer memberId);
public void adminEnter(String deviceName, Integer venueId); public void adminEnter(String deviceName, Integer venueId);
public void adminOut(String deviceName, Integer venueId); public void adminOut(String deviceName, Integer venueId);

View File

@@ -4,10 +4,7 @@ import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum; import com.enums.EnterEnum;
import com.enums.EnterVenuePayTypeEnum; import com.enums.EnterVenuePayTypeEnum;
import com.sv.entity.*; import com.sv.entity.*;
import com.sv.mapper.BarcodeEnterLogMapper; import com.sv.mapper.*;
import com.sv.mapper.BarcodeMapper;
import com.sv.mapper.BarcodeOfflineMapper;
import com.sv.mapper.BarcodeOrderTimeMapper;
import com.sv.netty.config.*; import com.sv.netty.config.*;
import com.sv.netty.netty.service.MessageService; import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils; import com.sv.netty.utils.JsonUtils;
@@ -73,6 +70,9 @@ public class ServerMessageHandlerAdapter implements MessageService {
private BarcodeEnterLogMapper barcodeEnterLogMapper; private BarcodeEnterLogMapper barcodeEnterLogMapper;
@Resource @Resource
private BarcodeOrderTimeMapper barcodeOrderTimeMapper; private BarcodeOrderTimeMapper barcodeOrderTimeMapper;
@Resource
private MemberLessonTicketMapper memberLessonTicketMapper;
/** /**
* 处理心跳信息,存储心跳信息 * 处理心跳信息,存储心跳信息
* @param clientId * @param clientId
@@ -110,6 +110,43 @@ public class ServerMessageHandlerAdapter implements MessageService {
} }
} }
/**
* 足球场开门逻辑
* @param ticketId
*/
@Override
@Transactional
public void footballOpenDoor(Integer ticketId,Integer memberId) {
MemberLessonTicket memberLessonTicket = memberLessonTicketMapper.findById(ticketId);
if (memberLessonTicket == null) {
logger.error("足球开门失败,未找到对应的订单!");
throw new ServiceException("足球开门失败,未找到对应的订单!");
}
Device device = deviceService.findByDevice(memberLessonTicket.getVenueId());
String doorSn = device.getName();
boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
if (lockStat) {
logger.error("有人正在操作,请稍后再出场!!!");
throw new ServiceException("有人正在操作,请稍后再试");
}
Channel channel = getCurrentChannel(device.getName(), memberLessonTicket.getVenueId());
Member member = memberService.findByMember(memberId);
if (member != null) {
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
memberEnterVenueLog.setOrderSn(memberLessonTicket.getOrderSn());
memberEnterVenueLog.setType(EnterEnum.ENTER.getValue());
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(memberLessonTicket.getVenueId());
memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn);
// writeOffCode(barcode); 足球不需要二维码
logger.info("用户" + member.getId() + "&" + member.getNickname() + "足球入场");
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.ENTER_DOOR,"OK"));
}
}
/** /**
* 核销扫码出场逻辑 * 核销扫码出场逻辑
* @param barcode * @param barcode

View File

@@ -11,7 +11,6 @@ import java.util.Date;
import java.util.List; import java.util.List;
public class MemberTicketEnterDTO extends MemberLessonTicket { public class MemberTicketEnterDTO extends MemberLessonTicket {
private String venueName;
/** /**
* 上课日期 2018-03-30 * 上课日期 2018-03-30
*/ */
@@ -31,9 +30,20 @@ public class MemberTicketEnterDTO extends MemberLessonTicket {
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME) @DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
@JsonSerialize(using= LocalTimeSerializer.class) @JsonSerialize(using= LocalTimeSerializer.class)
private LocalTime endTime; private LocalTime endTime;
/**
* 地址
*/
private String address;
// TODO 增加场馆位置信息 /**
* 场馆经度
*/
private String longitude;
/**
* 场馆纬度
*/
private String latitude;
private String mobile; private String mobile;
private String errCode; private String errCode;
private String msg; private String msg;
@@ -41,14 +51,6 @@ public class MemberTicketEnterDTO extends MemberLessonTicket {
private List<MemberTicketInviteDTO> memberTicketInviteList; private List<MemberTicketInviteDTO> memberTicketInviteList;
public String getVenueName() {
return venueName;
}
public void setVenueName(String venueName) {
this.venueName = venueName;
}
public String getMobile() { public String getMobile() {
return mobile; return mobile;
} }
@@ -89,6 +91,30 @@ public class MemberTicketEnterDTO extends MemberLessonTicket {
this.memberTicketInviteList = memberTicketInviteList; this.memberTicketInviteList = memberTicketInviteList;
} }
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getErrCode() { public String getErrCode() {
return errCode; return errCode;
} }

View File

@@ -31,9 +31,11 @@ public class MemberTicketInvite {
private Integer deleted; private Integer deleted;
private String memberName;
private String mobile; private String mobile;
public MemberTicketInvite(Integer id, Integer ownerId, Integer memberId, Integer status, Integer platformId, Integer createdId, Integer modifiedId, Date createdTime, Date modifiedTime, Integer deleted, String mobile) { public MemberTicketInvite(Integer id, Integer ownerId, Integer memberId, Integer status, Integer platformId, Integer createdId, Integer modifiedId, Date createdTime, Date modifiedTime, Integer deleted, String memberName,String mobile) {
this.id = id; this.id = id;
this.ownerId = ownerId; this.ownerId = ownerId;
this.memberId = memberId; this.memberId = memberId;
@@ -44,6 +46,7 @@ public class MemberTicketInvite {
this.createdTime = createdTime; this.createdTime = createdTime;
this.modifiedTime = modifiedTime; this.modifiedTime = modifiedTime;
this.deleted = deleted; this.deleted = deleted;
this.memberName = memberName;
this.mobile = mobile; this.mobile = mobile;
} }
@@ -131,6 +134,14 @@ public class MemberTicketInvite {
this.deleted = deleted; this.deleted = deleted;
} }
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMobile() { public String getMobile() {
return mobile; return mobile;
} }

View File

@@ -5,6 +5,7 @@ import com.sv.entity.*;
import com.sv.mapper.MemberLessonTicketMapper; import com.sv.mapper.MemberLessonTicketMapper;
import com.sv.mapper.MemberTicketInviteMapper; import com.sv.mapper.MemberTicketInviteMapper;
import com.sv.mapper.VenueLessonMapper; import com.sv.mapper.VenueLessonMapper;
import com.sv.mapper.VenueMapper;
import com.ydd.framework.core.service.impl.BaseServiceImpl; import com.ydd.framework.core.service.impl.BaseServiceImpl;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -35,26 +36,40 @@ public class MemberTicketEnterService extends BaseServiceImpl {
private MemberLessonTicketMapper memberLessonTicketMapper; private MemberLessonTicketMapper memberLessonTicketMapper;
@Resource @Resource
private VenueLessonMapper venueLessonMapper; private VenueLessonMapper venueLessonMapper;
@Resource
private VenueMapper venueMapper;
/** /**
* api 足球预约详情 * api 足球预约详情
*/ */
public MemberTicketEnterDTO memberTicketEnterDetail(Integer memberId, Integer ticketId) { public MemberTicketEnterDTO memberTicketEnterDetail(Integer memberId, Integer ticketId) {
MemberTicketEnterDTO res = new MemberTicketEnterDTO(); MemberTicketEnterDTO res = new MemberTicketEnterDTO();
res.setOpenFlag(true); res.setOpenFlag(false);
res.setErrCode("0"); res.setErrCode("0");
MemberLessonTicket memberLessonTicket = memberLessonTicketMapper.findById(ticketId); MemberLessonTicket memberLessonTicket = memberLessonTicketMapper.findById(ticketId);
if (memberLessonTicket == null) { if (memberLessonTicket == null) {
res.setErrCode("2"); res.setErrCode("2");
res.setMsg("未找到对应的预订信息"); res.setMsg("未找到对应的预订信息");
}// TODO 查询场馆表 }
BeanUtils.copyProperties(memberLessonTicket,res);
// 判断场馆是否已经超时 // 判断场馆是否已经超时
VenueLesson venueLesson = venueLessonMapper.findById(memberLessonTicket.getLessonId()); VenueLesson venueLesson = venueLessonMapper.findById(memberLessonTicket.getLessonId());
LocalTime endTime = venueLesson.getEndTime(); if (venueLesson != null) {
LocalTime startTime = venueLesson.getStartTime(); res.setDate(venueLesson.getDate());
if (endTime.isAfter(LocalTime.now().plus(15, ChronoUnit.MINUTES)) && startTime.isBefore(LocalTime.now())){ res.setStartTime(venueLesson.getStartTime());
// 十五分钟之内都可以开门 res.setEndTime(venueLesson.getEndTime());
res.setOpenFlag(true); LocalTime endTime = venueLesson.getEndTime();
LocalTime startTime = venueLesson.getStartTime();
if (endTime.isAfter(LocalTime.now().plus(15, ChronoUnit.MINUTES)) && startTime.isBefore(LocalTime.now())){
// 十五分钟之内都可以开门
res.setOpenFlag(true);
}
}
Venue venue = venueMapper.findById(memberLessonTicket.getVenueId());
if (venue != null){
res.setAddress(venue.getAddress());
res.setLatitude(venue.getLatitude());
res.setLongitude(venue.getLongitude());
} }
// 1 先判断是否已经报名,如果没有报名就默认报名 // 1 先判断是否已经报名,如果没有报名就默认报名
int count = memberTicketInviteMapper.findByTicketIdAndMember(ticketId, memberId); int count = memberTicketInviteMapper.findByTicketIdAndMember(ticketId, memberId);
@@ -63,7 +78,6 @@ public class MemberTicketEnterService extends BaseServiceImpl {
orderMyself(memberId,memberLessonTicket); orderMyself(memberId,memberLessonTicket);
} }
// 查询报名人员列表 // 查询报名人员列表
BeanUtils.copyProperties(memberLessonTicket,res);
List<MemberTicketInvite> inviteList = memberTicketInviteMapper.findByTicketId(ticketId); List<MemberTicketInvite> inviteList = memberTicketInviteMapper.findByTicketId(ticketId);
List<MemberTicketInviteDTO> memberTicketInviteList = new ArrayList<>(); List<MemberTicketInviteDTO> memberTicketInviteList = new ArrayList<>();
for (MemberTicketInvite ticketInvite : inviteList) { for (MemberTicketInvite ticketInvite : inviteList) {

View File

@@ -13,6 +13,7 @@
<arg column="created_time" jdbcType="TIMESTAMP" javaType="java.util.Date" /> <arg column="created_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
<arg column="modified_time" jdbcType="TIMESTAMP" javaType="java.util.Date" /> <arg column="modified_time" jdbcType="TIMESTAMP" javaType="java.util.Date" />
<arg column="deleted" jdbcType="INTEGER" javaType="java.lang.Integer" /> <arg column="deleted" jdbcType="INTEGER" javaType="java.lang.Integer" />
<arg column="memberName" jdbcType="VARCHAR" javaType="java.lang.String" />
<arg column="mobile" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="mobile" jdbcType="VARCHAR" javaType="java.lang.String" />
</constructor> </constructor>
</resultMap> </resultMap>
@@ -157,7 +158,7 @@
<select id="findByTicketId" resultMap="BaseResultMap" parameterType="java.lang.Integer" > <select id="findByTicketId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select select
a.id, a.owner_id, a.member_id, a.status, a.platform_id, a.created_id, a.modified_id, a.created_time, a.id, a.owner_id, a.member_id, a.status, a.platform_id, a.created_id, a.modified_id, a.created_time,
a.modified_time, a.deleted,b.mobile a.modified_time, a.deleted,b.mobile,b.nickname memberName
from sv_member_lesson_ticket_invite a,sv_member b from sv_member_lesson_ticket_invite a,sv_member b
where a.member_id = b.id where a.member_id = b.id
and owner_id = #{ticketId,jdbcType=INTEGER} and owner_id = #{ticketId,jdbcType=INTEGER}