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 起名字 注意:大小写敏感问题。 --> -