diff --git a/api/pom.xml b/api/pom.xml
index 922e96e..b47add7 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -17,11 +17,6 @@
sv-service
-
- smartvenue
- netty-model
-
-
mysql
mysql-connector-java
diff --git a/api/src/main/java/com/sv/api/controller/VenueController.java b/api/src/main/java/com/sv/api/controller/VenueController.java
index 098ae94..8c8c96f 100644
--- a/api/src/main/java/com/sv/api/controller/VenueController.java
+++ b/api/src/main/java/com/sv/api/controller/VenueController.java
@@ -1,18 +1,13 @@
package com.sv.api.controller;
-import com.enums.BarCodeStatusEnum;
import com.enums.EnterEnum;
import com.sv.dto.BarCodeResult;
-import com.sv.entity.Barcode;
import com.sv.entity.Device;
import com.sv.entity.Venue;
import com.sv.mapper.BarcodeMapper;
-import com.sv.netty.config.NettyConstant;
-import com.sv.netty.utils.AesUtil;
-import com.sv.netty.utils.MakeCode;
import com.sv.service.api.VenueService;
+import com.sv.service.common.BarcodeService;
import com.sv.service.common.DoorLockUtil;
-import com.sv.service.common.RedisCache;
import com.sv.service.oms.DeviceService;
import com.ydd.framework.core.common.Pagination;
import com.ydd.framework.core.common.dto.ResponseDTO;
@@ -20,12 +15,9 @@ import com.ydd.framework.core.controller.BaseApiController;
import com.ydd.framework.core.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
-import java.util.concurrent.TimeUnit;
/**
* Controller - 场馆
@@ -41,6 +33,8 @@ public class VenueController extends BaseApiController {
@Resource
private VenueService venueService;
@Resource
+ private BarcodeService barcodeService;
+ @Resource
private DoorLockUtil doorLockUtil;
/**
@@ -117,23 +111,24 @@ public class VenueController extends BaseApiController {
*/
@RequestMapping(value = "/venue/join", method = RequestMethod.GET)
public ResponseDTO join(@RequestParam("venueId") Integer venueId) {
+ Device byDevice = deviceService.findByDevice(venueId);
+ BarCodeResult join = new BarCodeResult();
+ if (byDevice == null) {
+ join.setFlg(999);
+ join.setMsg("通讯异常,门禁设备离线中");
+ return ResponseDTO.ok().addAttribute("join", join);
+ }
+ String doorSn = byDevice.getName();
+ boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
+ if (lockStat) {
+ throw new ServiceException("有人正在使用门禁,请稍后再试");
+ }
Integer memberId = getMemberIdByAccessToken();
- BarCodeResult join = venueService.join(memberId, venueId);
+ join = venueService.join(memberId, venueId);
if (join.getFlg() == 0) {
- Device byDevice = deviceService.findByDevice(venueId);
- if (byDevice == null) {
- join.setFlg(999);
- join.setMsg("通讯异常,门禁设备离线中");
- }else {
- String doorSn = byDevice.getName();
- boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
- if (lockStat) {
- throw new ServiceException("有人正在使用门禁,请稍后再试");
- }
- String barcode = newBarcode(doorSn, EnterEnum.ENTER, venueId, memberId);
- join.setBarcode(barcode);
- doorLockUtil.lockDoor(doorSn);
- }
+ String barcode = barcodeService.newBarcode(doorSn, EnterEnum.ENTER, venueId, memberId);
+ join.setBarcode(barcode);
+ doorLockUtil.lockDoor(doorSn);
}
return ResponseDTO.ok().addAttribute("join", join);
}
@@ -146,45 +141,26 @@ public class VenueController extends BaseApiController {
*/
@RequestMapping(value = "/venue/out", method = RequestMethod.GET)
public ResponseDTO out(@RequestParam("venueId") Integer venueId) {
-
+ Device byDevice = deviceService.findByDevice(venueId);
+ BarCodeResult out = new BarCodeResult();
+ if (byDevice == null) {
+ out.setFlg(999);
+ out.setMsg("通讯异常,门禁设备离线中");
+ return ResponseDTO.ok().addAttribute("out", out);
+ }
+ String doorSn = byDevice.getName();
+ boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
+ if (lockStat) {
+ throw new ServiceException("有人正在使用门禁,请稍后再试");
+ }
Integer memberId = getMemberIdByAccessToken();
- BarCodeResult out = venueService.out(memberId, venueId);
+ out = venueService.out(memberId, venueId);
if (out.getFlg() == 0) {
- Device byDevice = deviceService.findByDevice(venueId);
- if (byDevice == null) {
- out.setFlg(999);
- out.setMsg("通讯异常,门禁设备离线中");
- }else {
- String doorSn = byDevice.getName();
- boolean lockStat = doorLockUtil.checkDoorLock(doorSn);
- if (lockStat) {
- throw new ServiceException("有人正在使用门禁,请稍后再试");
- }
- String barcode = newBarcode(doorSn,EnterEnum.OUT,venueId,memberId);
- out.setBarcode(barcode);
- doorLockUtil.lockDoor(doorSn);
- }
+ String barcode = barcodeService.newBarcode(doorSn,EnterEnum.OUT,venueId,memberId);
+ out.setBarcode(barcode);
+ doorLockUtil.lockDoor(doorSn);
}
return ResponseDTO.ok().addAttribute("out", out);
}
- private String newBarcode (String deviceName,EnterEnum enterEnum,Integer venueId,Integer memberId){
- String barcode = "";
- Barcode res = barcodeMapper.findBarcode(venueId, memberId);
- if (res == null) {
- barcode = MakeCode.makeCode(venueId, memberId, deviceName, enterEnum.getValue() + "");
- Barcode b = new Barcode();
- logger.info("用户扫码【" + memberId + "$" + venueId + "】生成二维码为" + barcode);
- b.setBarcode(barcode);
- b.setStatus(BarCodeStatusEnum.INIT.getValue());
- b.setMemberId(memberId);
- b.setVenueId(venueId);
- b.setEnter(enterEnum.getValue());
- barcodeMapper.insert(b);
- }else {
- barcode = res.getBarcode();
- }
- return barcode;
- }
-
}
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 a85c506..6fd5bff 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
@@ -2,6 +2,7 @@ package com.sv.netty.netty.service.impl;
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;
@@ -131,19 +132,16 @@ public class ServerMessageHandlerAdapter implements MessageService {
Channel channel = getCurrentChannel(doorSn,venueBarCode.getVenueId());
Member member = memberService.findByMember(venueBarCode.getMemberId());
if (member != null) {
- MemberMoneyLog memberMoneyLog = memberMoneyLogService.selectLastLog(member.getId(), venueBarCode.getVenueId());
MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
memberEnterVenueLog.setOrderSn(barcode);
memberEnterVenueLog.setType(EnterEnum.OUT.getValue());
+ memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
- if (memberMoneyLog != null) {
- memberEnterVenueLog.setPayType(memberMoneyLog.getPayType());
- }
memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn);
- logger.info("用户" + member.getNickname() + "出场");
+ logger.info("用户" + member.getId() + "&" + member.getNickname() + "出场");
writeOffCode(barcode);
ServerMessageUtils.INSTANCE.sendMsg(channel,new VenueMessage(MessageType.OUT_DOOR,"OK"));
}
@@ -177,6 +175,7 @@ public class ServerMessageHandlerAdapter implements MessageService {
memberEnterVenueLog.setMemberId(member.getId());
memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
memberEnterVenueLog.setVenueId(venueBarCode.getVenueId());
+ memberEnterVenueLog.setPayType(EnterVenuePayTypeEnum.WEI_XIN.getValue());
memberEnterVenueLogService.save(memberEnterVenueLog);
doorLockUtil.lockDoor(doorSn);
writeOffCode(barcode);
@@ -246,6 +245,10 @@ public class ServerMessageHandlerAdapter implements MessageService {
logger.error("有人正在操作,请稍后再试!!!");
throw new ServiceException("有人正在操作,请稍后再试!!!");
}
+ int i = barcodeEnterLogMapper.countTimesByBarcode(barcode);
+ if (i >= 6) {
+ throw new ServiceException("线下进场太过频繁,请重新下单!该二维码已经失效!");
+ }
BarcodeEnterLog lastByBarcode = barcodeEnterLogMapper.findLastByBarcode(barcode);
Integer venueId = barcodeOffline.getVenueId();
Channel channel = getCurrentChannel(doorSn, venueId);
diff --git a/api/src/test/java/com/sv/wx/VenueJoinTest.java b/api/src/test/java/com/sv/wx/VenueJoinTest.java
index 7114917..2e020f2 100644
--- a/api/src/test/java/com/sv/wx/VenueJoinTest.java
+++ b/api/src/test/java/com/sv/wx/VenueJoinTest.java
@@ -2,32 +2,18 @@ package com.sv.wx;
import com.WeiXinApplication;
import com.enums.EnterEnum;
-import com.enums.VenueTypeEnum;
import com.sv.dto.BarCodeResult;
-import com.sv.entity.*;
-import com.sv.mapper.WxConfigMapper;
-import com.sv.netty.config.MessageType;
-import com.sv.netty.config.VenueMessage;
+import com.sv.netty.netty.service.MessageService;
import com.sv.netty.utils.JsonUtils;
-import com.sv.netty.utils.ServerMessageUtils;
-import com.sv.service.api.MemberEnterVenueLogService;
-import com.sv.service.api.MemberService;
-import com.sv.service.api.VenueLessonService;
import com.sv.service.api.VenueService;
-import com.sv.service.api.util.DateUtilCard;
-import com.sv.service.message.SendMsg;
-import com.sv.service.message.WeiXinSendUtils;
-import com.ydd.oms.entity.sys.WxConfig;
+import com.sv.service.common.BarcodeService;
+import com.sv.service.common.DoorLockUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
import javax.annotation.Resource;
-import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes={WeiXinApplication.class})
@@ -36,33 +22,44 @@ public class VenueJoinTest {
@Resource
VenueService venueService;
@Resource
- MemberService memberService;
+ MessageService messageService;
@Resource
- MemberEnterVenueLogService memberEnterVenueLogService;
+ BarcodeService barcodeService;
+ @Resource
+ DoorLockUtil doorLockUtil;
@Test
public void testJoin(){
BarCodeResult join = venueService.join(535, 32);
System.out.println(JsonUtils.encode(join));
- Member member = memberService.findById(535);
- if (member != null) {
- MemberEnterVenueLog memberEnterVenueLog = new MemberEnterVenueLog();
- memberEnterVenueLog.setOrderSn("barcode");
- memberEnterVenueLog.setType(EnterEnum.ENTER.getValue());
- memberEnterVenueLog.setMemberId(member.getId());
- memberEnterVenueLog.setPlatformId(member.getPlatformId() == null ? 1 : member.getPlatformId());
- memberEnterVenueLog.setVenueId(32);
- memberEnterVenueLogService.save(memberEnterVenueLog);
+ if (join.getFlg() == 0) {
+ String barcode = barcodeService.newBarcode("doorSn", EnterEnum.ENTER, 32, 535);
+ System.err.println("入场的二维码为:" + barcode);
+ join.setBarcode(barcode);
+ doorLockUtil.lockDoor("doorSn");
}
}
-
-
+ @Test
+ public void enterVenue() {
+ messageService.enterVenue("oC+Smw+mDDsDSXP/RhHQXvm8I4mobxXZXN621ia2gKE=");
+ }
@Test
public void testOut(){
BarCodeResult out = venueService.out(535, 32);
System.out.println(JsonUtils.encode(out));
+ if (out.getFlg() == 0) {
+ String barcode = barcodeService.newBarcode("doorSn", EnterEnum.OUT, 32, 535);
+ System.err.println("出场的二维码为:" + barcode);
+ out.setBarcode(barcode);
+ doorLockUtil.lockDoor("doorSn");
+ }
+ }
+
+ @Test
+ public void outVenue() {
+ messageService.outVenue("oC+Smw+mDDsDSXP/RhHQXvE3OTXb2IAZ8Zo8MwN8dnI=");
}
}
diff --git a/entity/src/main/java/com/enums/EnterVenuePayTypeEnum.java b/entity/src/main/java/com/enums/EnterVenuePayTypeEnum.java
index 76a0c72..0feb0d0 100644
--- a/entity/src/main/java/com/enums/EnterVenuePayTypeEnum.java
+++ b/entity/src/main/java/com/enums/EnterVenuePayTypeEnum.java
@@ -1,11 +1,11 @@
package com.enums;
/**
- * Enum - 入场支付类型
+ * Enum - 篮球入场支付类型
*
*/
public enum EnterVenuePayTypeEnum {
- WEI_XIN(1, "微信"),
+ WEI_XIN(1, "余额"),
MEMBER_CARD(2, "会员卡");
public Integer value;
public String name;
diff --git a/entity/src/main/java/com/enums/PayTypeEnum.java b/entity/src/main/java/com/enums/PayTypeEnum.java
index e76adf1..e7764cd 100644
--- a/entity/src/main/java/com/enums/PayTypeEnum.java
+++ b/entity/src/main/java/com/enums/PayTypeEnum.java
@@ -1,7 +1,7 @@
package com.enums;
/**
- * Enum - 删除标志位
+ * Enum - 用户账号账单支付方式 目前入场记录和改支付方式不一致!!
*
*/
public enum PayTypeEnum {
diff --git a/entity/src/main/java/com/enums/StayEnum.java b/entity/src/main/java/com/enums/StayEnum.java
new file mode 100644
index 0000000..28e6de4
--- /dev/null
+++ b/entity/src/main/java/com/enums/StayEnum.java
@@ -0,0 +1,42 @@
+package com.enums;
+
+/**
+ * Enum - 入场标志
+ *
+ */
+public enum StayEnum {
+ OUT(0, "场外"),
+ IN(1, "场内");
+ public Integer value;
+ public String name;
+
+ StayEnum(Integer value, String name) {
+ this.value = value;
+ this.name = name;
+ }
+
+ public Integer getValue() {
+ return value;
+ }
+
+ public void setValue(Integer value) {
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public static StayEnum getByValue(Integer value) {
+ for (StayEnum type : StayEnum.values()) {
+ if (type.value.equals(value)) {
+ return type;
+ }
+ }
+ return null;
+ }
+}
diff --git a/entity/src/main/java/com/sv/entity/MemberEnterStatus.java b/entity/src/main/java/com/sv/entity/MemberEnterStatus.java
new file mode 100644
index 0000000..3fb5727
--- /dev/null
+++ b/entity/src/main/java/com/sv/entity/MemberEnterStatus.java
@@ -0,0 +1,78 @@
+package com.sv.entity;
+
+import java.util.Date;
+
+public class MemberEnterStatus {
+ private Integer id;
+
+ private Integer memberId;
+
+ private Integer venueId;
+
+ private Integer status;
+
+ private Date createdTime;
+
+ private Date modifiedTime;
+
+ public MemberEnterStatus(Integer id, Integer memberId, Integer venueId, Integer status, Date createdTime, Date modifiedTime) {
+ this.id = id;
+ this.memberId = memberId;
+ this.venueId = venueId;
+ this.status = status;
+ this.createdTime = createdTime;
+ this.modifiedTime = modifiedTime;
+ }
+
+ public MemberEnterStatus() {
+ super();
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getMemberId() {
+ return memberId;
+ }
+
+ public void setMemberId(Integer memberId) {
+ this.memberId = memberId;
+ }
+
+ public Integer getVenueId() {
+ return venueId;
+ }
+
+ public void setVenueId(Integer venueId) {
+ this.venueId = venueId;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public Date getCreatedTime() {
+ return createdTime;
+ }
+
+ public void setCreatedTime(Date createdTime) {
+ this.createdTime = createdTime;
+ }
+
+ public Date getModifiedTime() {
+ return modifiedTime;
+ }
+
+ public void setModifiedTime(Date modifiedTime) {
+ this.modifiedTime = modifiedTime;
+ }
+}
\ No newline at end of file
diff --git a/netty-model/src/main/java/com/sv/netty/utils/MakeCode.java b/netty-model/src/main/java/com/sv/netty/utils/MakeCode.java
index 7dc390b..c3c0f24 100644
--- a/netty-model/src/main/java/com/sv/netty/utils/MakeCode.java
+++ b/netty-model/src/main/java/com/sv/netty/utils/MakeCode.java
@@ -5,12 +5,20 @@ import com.sv.netty.config.VenueBarCode;
public class MakeCode {
+ public static int addSno = 0;
/**
* 生成二维码
* @return
*/
public static String makeCode (Integer venueId, Integer memberId, String deviceName, String direction) {
- String information = memberId + NettyConstant.SPIT_WORD + venueId + NettyConstant.SPIT_WORD + deviceName + NettyConstant.SPIT_WORD + direction;
+ if (addSno == 9999){
+ addSno = 0;
+ }
+ String information = memberId + NettyConstant.SPIT_WORD + venueId
+ + NettyConstant.SPIT_WORD + deviceName
+ + NettyConstant.SPIT_WORD + direction
+ + NettyConstant.SPIT_WORD + System.currentTimeMillis()
+ + NettyConstant.SPIT_WORD + addSno++;
return NettyConstant.BARCODE_BEGIN + AesUtil.encrypt(information) + NettyConstant.BARCODE_END;
}
@@ -32,7 +40,7 @@ public class MakeCode {
if (decrypt!=null && decrypt.contains(NettyConstant.SPIT_WORD)){
list = decrypt.split(NettyConstant.SPIT_WORD);
}
- if (list != null && list.length == 4) {
+ if (list != null && list.length == 6) {
venueBarCode = new VenueBarCode();
venueBarCode.setMemberId(Integer.parseInt(list[0]));
venueBarCode.setVenueId(Integer.parseInt(list[1]));
diff --git a/oms/src/main/java/com/ydd/oms/task/BarcodeTimeOrderTask.java b/oms/src/main/java/com/ydd/oms/task/BarcodeTimeOrderTask.java
index 9b45f3f..03d36ef 100644
--- a/oms/src/main/java/com/ydd/oms/task/BarcodeTimeOrderTask.java
+++ b/oms/src/main/java/com/ydd/oms/task/BarcodeTimeOrderTask.java
@@ -1,8 +1,11 @@
package com.ydd.oms.task;
import com.enums.BarCodeStatusEnum;
+import com.enums.StayEnum;
import com.sv.entity.BarcodeOrderTime;
+import com.sv.entity.MemberEnterStatus;
import com.sv.mapper.BarcodeOrderTimeMapper;
+import com.sv.mapper.MemberEnterStatusMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
@@ -26,6 +29,8 @@ public class BarcodeTimeOrderTask {
@Resource
BarcodeOrderTimeMapper barcodeOrderTimeMapper;
+ @Resource
+ MemberEnterStatusMapper memberEnterStatusMapper;
@Scheduled(cron = "0 0/5 * * * ?")
@Transactional
@@ -41,9 +46,19 @@ public class BarcodeTimeOrderTask {
}
}
+ @Scheduled(cron = "0 0 0 * * ?")
@Transactional
public void clearMember(){
- // TODO 清场,将所有没有出场记录的用户、都删除最近一次入场记录、希望这个内容能够做成一个新表,记录场馆以及用户的出入场状态
+ // 清场,将所有没有出场记录的用户、都设置为场外
+ List allNeedClear = memberEnterStatusMapper.findAllNeedClear();
+ if (allNeedClear != null && allNeedClear.size() > 0) {
+ logger.info("有" + allNeedClear.size() + "的人还在场内!!!");
+ for (MemberEnterStatus memberEnterStatus : allNeedClear) {
+ memberEnterStatus.setStatus(StayEnum.OUT.getValue());
+ logger.info("用户:" + memberEnterStatus.getMemberId() + ",在场馆" + memberEnterStatus.getVenueId() + "还没出来");
+ memberEnterStatusMapper.updateByPrimaryKey(memberEnterStatus);
+ }
+ }
}
}
diff --git a/oms/src/test/java/com/ydd/oms/task/BarcodeTimeTaskTest.java b/oms/src/test/java/com/ydd/oms/task/BarcodeTimeTaskTest.java
index b4acde1..97687c6 100644
--- a/oms/src/test/java/com/ydd/oms/task/BarcodeTimeTaskTest.java
+++ b/oms/src/test/java/com/ydd/oms/task/BarcodeTimeTaskTest.java
@@ -20,4 +20,9 @@ public class BarcodeTimeTaskTest {
barcodeTimeOrderTask.execute();
}
+ @Test
+ public void testClearTask(){
+ barcodeTimeOrderTask.clearMember();
+ }
+
}
diff --git a/other/sql/202312.sql b/other/sql/202312.sql
index 46636e6..f21f796 100644
--- a/other/sql/202312.sql
+++ b/other/sql/202312.sql
@@ -5,4 +5,19 @@ ALTER TABLE `smart_venue`.`sv_venue`
ADD COLUMN `time_pay_hour` int(11) NULL COMMENT '按次收费几小时内免费' AFTER `pay_style`;
ALTER TABLE `smart_venue`.`sv_barcode_order_time`
-ADD COLUMN `status` int(11) NULL COMMENT '0- 有效 1-失效' AFTER `order_end`;
\ No newline at end of file
+ADD COLUMN `status` int(11) NULL COMMENT '0- 有效 1-失效' AFTER `order_end`;
+
+
+-- ----------------------------
+-- Table structure for sv_member_enter_status
+-- ----------------------------
+DROP TABLE IF EXISTS `sv_member_enter_status`;
+CREATE TABLE `sv_member_enter_status` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `member_id` int(11) NOT NULL COMMENT '客户ID',
+ `venue_id` int(11) NOT NULL COMMENT '场馆ID',
+ `status` int(11) NOT NULL COMMENT '状态 0-场外 1-场内',
+ `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1231 DEFAULT CHARSET=utf8mb4 COMMENT='用户在场馆的状态';
\ No newline at end of file
diff --git a/service/pom.xml b/service/pom.xml
index 071578b..cf089c9 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -17,6 +17,11 @@
sv-entity
+
+ smartvenue
+ netty-model
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/service/src/main/java/com/sv/mapper/BarcodeEnterLogMapper.java b/service/src/main/java/com/sv/mapper/BarcodeEnterLogMapper.java
index 12e0246..c755c4e 100644
--- a/service/src/main/java/com/sv/mapper/BarcodeEnterLogMapper.java
+++ b/service/src/main/java/com/sv/mapper/BarcodeEnterLogMapper.java
@@ -20,4 +20,12 @@ public interface BarcodeEnterLogMapper {
@NoPlatform
BarcodeEnterLog findLastByBarcode(String barcode);
+ /**
+ * 统计线下订单二维码最多只能使用6次
+ * @param barcode
+ * @return
+ */
+ @NoPlatform
+ int countTimesByBarcode(String barcode);
+
}
diff --git a/service/src/main/java/com/sv/mapper/MemberEnterStatusMapper.java b/service/src/main/java/com/sv/mapper/MemberEnterStatusMapper.java
new file mode 100644
index 0000000..52ff37b
--- /dev/null
+++ b/service/src/main/java/com/sv/mapper/MemberEnterStatusMapper.java
@@ -0,0 +1,25 @@
+package com.sv.mapper;
+
+import com.sv.entity.MemberEnterStatus;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface MemberEnterStatusMapper {
+ int deleteByPrimaryKey(Integer id);
+
+ int insert(MemberEnterStatus record);
+
+ int insertSelective(MemberEnterStatus record);
+
+ MemberEnterStatus selectByPrimaryKey(Integer id);
+
+ int updateByPrimaryKeySelective(MemberEnterStatus record);
+
+ int updateByPrimaryKey(MemberEnterStatus record);
+
+ MemberEnterStatus selectByMemberVenue(@Param("memberId") Integer memberId, @Param("venueId") Integer venueId);
+
+ List findAllNeedClear();
+
+}
\ No newline at end of file
diff --git a/service/src/main/java/com/sv/service/api/MemberEnterVenueLogService.java b/service/src/main/java/com/sv/service/api/MemberEnterVenueLogService.java
index 56be6e5..45ab2ee 100644
--- a/service/src/main/java/com/sv/service/api/MemberEnterVenueLogService.java
+++ b/service/src/main/java/com/sv/service/api/MemberEnterVenueLogService.java
@@ -1,6 +1,10 @@
package com.sv.service.api;
+import com.enums.EnterEnum;
+import com.enums.StayEnum;
+import com.sv.entity.MemberEnterStatus;
import com.sv.entity.MemberEnterVenueLog;
+import com.sv.mapper.MemberEnterStatusMapper;
import com.sv.mapper.MemberEnterVenueLogMapper;
import com.ydd.framework.core.service.impl.BaseServiceImpl;
import org.apache.commons.collections.CollectionUtils;
@@ -28,6 +32,8 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
@Resource
private MemberEnterVenueLogMapper memberEnterVenueLogMapper;
+ @Resource
+ private MemberEnterStatusMapper memberEnterStatusMapper;
/**
* 获取用户最后的出入场记录
@@ -39,6 +45,16 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
return memberEnterVenueLogMapper.findLastByMember(memberId, venueId);
}
+ /**
+ * 获取用户最后的出入场记录
+ *
+ * @param memberId
+ * @return
+ */
+ public MemberEnterStatus memberStayStatus(Integer memberId, Integer venueId) {
+ return memberEnterStatusMapper.selectByMemberVenue(memberId, venueId);
+ }
+
/**
* 获取用户最后的进场记录
*
@@ -64,6 +80,25 @@ public class MemberEnterVenueLogService extends BaseServiceImpl {
@Transactional
public void save(MemberEnterVenueLog memberEnterVenueLog) {
memberEnterVenueLogMapper.insert(memberEnterVenueLog);
+ MemberEnterStatus memberEnterStatus =
+ memberEnterStatusMapper.selectByMemberVenue(memberEnterVenueLog.getMemberId(), memberEnterVenueLog.getVenueId());
+ StayEnum stayEnum = StayEnum.OUT;
+ if (EnterEnum.ENTER.getValue().equals(memberEnterVenueLog.getType())){
+ stayEnum = StayEnum.IN;
+ }
+ if (memberEnterStatus != null){
+ memberEnterStatus.setStatus(stayEnum.getValue());
+ memberEnterStatus.setModifiedTime(new Date());
+ memberEnterStatusMapper.updateByPrimaryKey(memberEnterStatus);
+ }else {
+ memberEnterStatus = new MemberEnterStatus();
+ memberEnterStatus.setMemberId(memberEnterVenueLog.getMemberId());
+ memberEnterStatus.setVenueId(memberEnterVenueLog.getVenueId());
+ memberEnterStatus.setStatus(stayEnum.getValue());
+ memberEnterStatus.setCreatedTime(new Date());
+ memberEnterStatus.setModifiedTime(new Date());
+ memberEnterStatusMapper.insert(memberEnterStatus);
+ }
}
/**
diff --git a/service/src/main/java/com/sv/service/api/VenueService.java b/service/src/main/java/com/sv/service/api/VenueService.java
index c223567..5b6b9e1 100644
--- a/service/src/main/java/com/sv/service/api/VenueService.java
+++ b/service/src/main/java/com/sv/service/api/VenueService.java
@@ -124,11 +124,11 @@ public class VenueService extends BaseServiceImpl {
if (getVenue.getStatus() != 0) {
throw new ServiceException("场馆维护中,请等待场馆恢复");
}
- getVenue.setEnterFlag(EnterEnum.OUT.getValue());
if (VenueTypeEnum.BASKETBALL.getValue().equals(getVenue.getType())){
- MemberEnterVenueLog memberLastLog = memberEnterVenueLogService.findMemberLastLog(memberId, id);
- if (memberLastLog != null) {
- getVenue.setEnterFlag(memberLastLog.getType());
+ MemberEnterStatus memberStayStatus = memberEnterVenueLogService.memberStayStatus(memberId, id);
+ getVenue.setEnterFlag(StayEnum.OUT.getValue());
+ if (memberStayStatus != null) {
+ getVenue.setEnterFlag(memberStayStatus.getStatus());
}
}
}
diff --git a/service/src/main/java/com/sv/service/common/BarcodeService.java b/service/src/main/java/com/sv/service/common/BarcodeService.java
new file mode 100644
index 0000000..c7b63a9
--- /dev/null
+++ b/service/src/main/java/com/sv/service/common/BarcodeService.java
@@ -0,0 +1,50 @@
+package com.sv.service.common;
+
+import com.enums.BarCodeStatusEnum;
+import com.enums.EnterEnum;
+import com.sv.entity.Barcode;
+import com.sv.mapper.BarcodeMapper;
+import com.sv.netty.utils.MakeCode;
+import com.ydd.framework.core.service.impl.BaseServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * Service - 短信
+ *
+ * @author lh
+ * @since 2018-08-01
+ */
+@Service
+@Transactional
+public class BarcodeService extends BaseServiceImpl {
+
+ private final Logger logger = LoggerFactory.getLogger(BarcodeService.class);
+
+ @Resource
+ BarcodeMapper barcodeMapper;
+
+ public String newBarcode (String deviceName, EnterEnum enterEnum, Integer venueId, Integer memberId){
+ String barcode = "";
+ Barcode res = barcodeMapper.findBarcode(venueId, memberId);
+ if (res == null) {
+ barcode = MakeCode.makeCode(venueId, memberId, deviceName, enterEnum.getValue() + "");
+ Barcode b = new Barcode();
+ logger.info("用户扫码【" + memberId + "$" + venueId + "】生成二维码为" + barcode);
+ b.setBarcode(barcode);
+ b.setStatus(BarCodeStatusEnum.INIT.getValue());
+ b.setMemberId(memberId);
+ b.setVenueId(venueId);
+ b.setEnter(enterEnum.getValue());
+ barcodeMapper.insert(b);
+ }else {
+ barcode = res.getBarcode();
+ }
+ return barcode;
+ }
+}
+
diff --git a/service/src/main/resources/mybatis/mapper/sv/BarcodeEnterLogMapper.xml b/service/src/main/resources/mybatis/mapper/sv/BarcodeEnterLogMapper.xml
index 41f4897..6b24a3d 100644
--- a/service/src/main/resources/mybatis/mapper/sv/BarcodeEnterLogMapper.xml
+++ b/service/src/main/resources/mybatis/mapper/sv/BarcodeEnterLogMapper.xml
@@ -149,4 +149,11 @@
WHERE barcode = #{barcode,jdbcType=VARCHAR} order by created_time desc LIMIT 1
+
+
diff --git a/service/src/main/resources/mybatis/mapper/sv/MemberEnterStatusMapper.xml b/service/src/main/resources/mybatis/mapper/sv/MemberEnterStatusMapper.xml
new file mode 100644
index 0000000..0f6878e
--- /dev/null
+++ b/service/src/main/resources/mybatis/mapper/sv/MemberEnterStatusMapper.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id, member_id, venue_id, status, created_time, modified_time
+
+
+
+ delete from sv_member_enter_status
+ where id = #{id,jdbcType=INTEGER}
+
+
+ insert into sv_member_enter_status (id, member_id, venue_id,
+ status, created_time, modified_time
+ )
+ values (#{id,jdbcType=INTEGER}, #{memberId,jdbcType=INTEGER}, #{venueId,jdbcType=INTEGER},
+ #{status,jdbcType=INTEGER}, #{createdTime,jdbcType=TIMESTAMP}, #{modifiedTime,jdbcType=TIMESTAMP}
+ )
+
+
+ insert into sv_member_enter_status
+
+
+ id,
+
+
+ member_id,
+
+
+ venue_id,
+
+
+ status,
+
+
+ created_time,
+
+
+ modified_time,
+
+
+
+
+ #{id,jdbcType=INTEGER},
+
+
+ #{memberId,jdbcType=INTEGER},
+
+
+ #{venueId,jdbcType=INTEGER},
+
+
+ #{status,jdbcType=INTEGER},
+
+
+ #{createdTime,jdbcType=TIMESTAMP},
+
+
+ #{modifiedTime,jdbcType=TIMESTAMP},
+
+
+
+
+ update sv_member_enter_status
+
+
+ member_id = #{memberId,jdbcType=INTEGER},
+
+
+ venue_id = #{venueId,jdbcType=INTEGER},
+
+
+ status = #{status,jdbcType=INTEGER},
+
+
+ created_time = #{createdTime,jdbcType=TIMESTAMP},
+
+
+ modified_time = #{modifiedTime,jdbcType=TIMESTAMP},
+
+
+ where id = #{id,jdbcType=INTEGER}
+
+
+ update sv_member_enter_status
+ set member_id = #{memberId,jdbcType=INTEGER},
+ venue_id = #{venueId,jdbcType=INTEGER},
+ status = #{status,jdbcType=INTEGER},
+ created_time = #{createdTime,jdbcType=TIMESTAMP},
+ modified_time = #{modifiedTime,jdbcType=TIMESTAMP}
+ where id = #{id,jdbcType=INTEGER}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/service/src/main/resources/tools/generatorConfig.xml b/service/src/main/resources/tools/generatorConfig.xml
index 580d78c..b2b5111 100644
--- a/service/src/main/resources/tools/generatorConfig.xml
+++ b/service/src/main/resources/tools/generatorConfig.xml
@@ -90,7 +90,7 @@
domainObjectName 给表对应的 model 起名字
注意:大小写敏感问题。
-->
-