diff --git a/api/src/main/java/com/sv/api/controller/FootballTicketController.java b/api/src/main/java/com/sv/api/controller/FootballTicketController.java new file mode 100644 index 0000000..87d562e --- /dev/null +++ b/api/src/main/java/com/sv/api/controller/FootballTicketController.java @@ -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"); + } + +} diff --git a/api/src/main/java/com/sv/netty/netty/service/MessageService.java b/api/src/main/java/com/sv/netty/netty/service/MessageService.java index 41ec8cb..85d3474 100644 --- a/api/src/main/java/com/sv/netty/netty/service/MessageService.java +++ b/api/src/main/java/com/sv/netty/netty/service/MessageService.java @@ -46,6 +46,13 @@ public interface MessageService { */ void enterVenue(String barcode); + /** + * 足球场开门逻辑 + * @param ticketId + * @param memberId + */ + void footballOpenDoor(Integer ticketId,Integer memberId); + public void adminEnter(String deviceName, Integer venueId); public void adminOut(String deviceName, Integer venueId); diff --git a/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java b/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java index f4bd576..f19fd97 100644 --- a/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java +++ b/api/src/main/java/com/sv/netty/netty/service/impl/ServerMessageHandlerAdapter.java @@ -4,10 +4,7 @@ import com.enums.BarCodeStatusEnum; import com.enums.EnterEnum; import com.enums.EnterVenuePayTypeEnum; import com.sv.entity.*; -import com.sv.mapper.BarcodeEnterLogMapper; -import com.sv.mapper.BarcodeMapper; -import com.sv.mapper.BarcodeOfflineMapper; -import com.sv.mapper.BarcodeOrderTimeMapper; +import com.sv.mapper.*; import com.sv.netty.config.*; import com.sv.netty.netty.service.MessageService; import com.sv.netty.utils.JsonUtils; @@ -73,6 +70,9 @@ public class ServerMessageHandlerAdapter implements MessageService { private BarcodeEnterLogMapper barcodeEnterLogMapper; @Resource private BarcodeOrderTimeMapper barcodeOrderTimeMapper; + + @Resource + private MemberLessonTicketMapper memberLessonTicketMapper; /** * 处理心跳信息,存储心跳信息 * @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 diff --git a/entity/src/main/java/com/sv/dto/api/MemberTicketEnterDTO.java b/entity/src/main/java/com/sv/dto/api/MemberTicketEnterDTO.java index 6545e79..53275a1 100644 --- a/entity/src/main/java/com/sv/dto/api/MemberTicketEnterDTO.java +++ b/entity/src/main/java/com/sv/dto/api/MemberTicketEnterDTO.java @@ -11,7 +11,6 @@ import java.util.Date; import java.util.List; public class MemberTicketEnterDTO extends MemberLessonTicket { - private String venueName; /** * 上课日期 2018-03-30 */ @@ -31,9 +30,20 @@ public class MemberTicketEnterDTO extends MemberLessonTicket { @DateTimeFormat(iso = DateTimeFormat.ISO.TIME) @JsonSerialize(using= LocalTimeSerializer.class) private LocalTime endTime; + /** + * 地址 + */ + private String address; - // TODO 增加场馆位置信息 + /** + * 场馆经度 + */ + private String longitude; + /** + * 场馆纬度 + */ + private String latitude; private String mobile; private String errCode; private String msg; @@ -41,14 +51,6 @@ public class MemberTicketEnterDTO extends MemberLessonTicket { private List memberTicketInviteList; - public String getVenueName() { - return venueName; - } - - public void setVenueName(String venueName) { - this.venueName = venueName; - } - public String getMobile() { return mobile; } @@ -89,6 +91,30 @@ public class MemberTicketEnterDTO extends MemberLessonTicket { 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() { return errCode; } diff --git a/entity/src/main/java/com/sv/entity/MemberTicketInvite.java b/entity/src/main/java/com/sv/entity/MemberTicketInvite.java index 09e5f54..a8c7c34 100644 --- a/entity/src/main/java/com/sv/entity/MemberTicketInvite.java +++ b/entity/src/main/java/com/sv/entity/MemberTicketInvite.java @@ -31,9 +31,11 @@ public class MemberTicketInvite { private Integer deleted; + private String memberName; + 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.ownerId = ownerId; this.memberId = memberId; @@ -44,6 +46,7 @@ public class MemberTicketInvite { this.createdTime = createdTime; this.modifiedTime = modifiedTime; this.deleted = deleted; + this.memberName = memberName; this.mobile = mobile; } @@ -131,6 +134,14 @@ public class MemberTicketInvite { this.deleted = deleted; } + public String getMemberName() { + return memberName; + } + + public void setMemberName(String memberName) { + this.memberName = memberName; + } + public String getMobile() { return mobile; } diff --git a/service/src/main/java/com/sv/service/api/MemberTicketEnterService.java b/service/src/main/java/com/sv/service/api/MemberTicketEnterService.java index 12abd90..021d5e7 100644 --- a/service/src/main/java/com/sv/service/api/MemberTicketEnterService.java +++ b/service/src/main/java/com/sv/service/api/MemberTicketEnterService.java @@ -5,6 +5,7 @@ import com.sv.entity.*; import com.sv.mapper.MemberLessonTicketMapper; import com.sv.mapper.MemberTicketInviteMapper; import com.sv.mapper.VenueLessonMapper; +import com.sv.mapper.VenueMapper; import com.ydd.framework.core.service.impl.BaseServiceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,26 +36,40 @@ public class MemberTicketEnterService extends BaseServiceImpl { private MemberLessonTicketMapper memberLessonTicketMapper; @Resource private VenueLessonMapper venueLessonMapper; + @Resource + private VenueMapper venueMapper; /** * api 足球预约详情 */ public MemberTicketEnterDTO memberTicketEnterDetail(Integer memberId, Integer ticketId) { MemberTicketEnterDTO res = new MemberTicketEnterDTO(); - res.setOpenFlag(true); + res.setOpenFlag(false); res.setErrCode("0"); MemberLessonTicket memberLessonTicket = memberLessonTicketMapper.findById(ticketId); if (memberLessonTicket == null) { res.setErrCode("2"); res.setMsg("未找到对应的预订信息"); - }// TODO 查询场馆表 + } + BeanUtils.copyProperties(memberLessonTicket,res); // 判断场馆是否已经超时 VenueLesson venueLesson = venueLessonMapper.findById(memberLessonTicket.getLessonId()); - LocalTime endTime = venueLesson.getEndTime(); - LocalTime startTime = venueLesson.getStartTime(); - if (endTime.isAfter(LocalTime.now().plus(15, ChronoUnit.MINUTES)) && startTime.isBefore(LocalTime.now())){ - // 十五分钟之内都可以开门 - res.setOpenFlag(true); + if (venueLesson != null) { + res.setDate(venueLesson.getDate()); + res.setStartTime(venueLesson.getStartTime()); + res.setEndTime(venueLesson.getEndTime()); + 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 先判断是否已经报名,如果没有报名就默认报名 int count = memberTicketInviteMapper.findByTicketIdAndMember(ticketId, memberId); @@ -63,7 +78,6 @@ public class MemberTicketEnterService extends BaseServiceImpl { orderMyself(memberId,memberLessonTicket); } // 查询报名人员列表 - BeanUtils.copyProperties(memberLessonTicket,res); List inviteList = memberTicketInviteMapper.findByTicketId(ticketId); List memberTicketInviteList = new ArrayList<>(); for (MemberTicketInvite ticketInvite : inviteList) { diff --git a/service/src/main/resources/mybatis/mapper/sv/MemberTicketInviteMapper.xml b/service/src/main/resources/mybatis/mapper/sv/MemberTicketInviteMapper.xml index e88f450..b6e1425 100644 --- a/service/src/main/resources/mybatis/mapper/sv/MemberTicketInviteMapper.xml +++ b/service/src/main/resources/mybatis/mapper/sv/MemberTicketInviteMapper.xml @@ -13,6 +13,7 @@ + @@ -157,7 +158,7 @@