微信后台-二维码扫描代码初始化-简化,待处理细节
This commit is contained in:
@@ -83,7 +83,8 @@ public class VenueController extends BaseApiController {
|
|||||||
*/
|
*/
|
||||||
@RequestMapping(value = "/venue/detail", method = RequestMethod.POST)
|
@RequestMapping(value = "/venue/detail", method = RequestMethod.POST)
|
||||||
public ResponseDTO detail(@RequestParam("venueId") Integer venueId) {
|
public ResponseDTO detail(@RequestParam("venueId") Integer venueId) {
|
||||||
return ResponseDTO.ok().addAttribute("venues", venueService.findByVenueId(venueId));
|
Integer loginMemberId = getLoginMemberId();
|
||||||
|
return ResponseDTO.ok().addAttribute("venues", venueService.findByVenueId(venueId,loginMemberId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -97,5 +98,16 @@ public class VenueController extends BaseApiController {
|
|||||||
return ResponseDTO.ok().addAttribute("flg", venueService.join(getMemberIdByAccessToken(), venueId));
|
return ResponseDTO.ok().addAttribute("flg", venueService.join(getMemberIdByAccessToken(), venueId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 我要进场
|
||||||
|
*
|
||||||
|
* @param venueId 场馆Id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@RequestMapping(value = "/venue/out", method = RequestMethod.GET)
|
||||||
|
public ResponseDTO out(@RequestParam("venueId") Integer venueId) {
|
||||||
|
return ResponseDTO.ok().addAttribute("flg", venueService.join(getMemberIdByAccessToken(), venueId));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ package com.sv.netty.controller;
|
|||||||
import com.sv.entity.Venue;
|
import com.sv.entity.Venue;
|
||||||
import com.sv.netty.config.NettyConstant;
|
import com.sv.netty.config.NettyConstant;
|
||||||
import com.sv.netty.netty.service.MessageService;
|
import com.sv.netty.netty.service.MessageService;
|
||||||
import com.sv.service.api.QRCodeService;
|
|
||||||
import com.ydd.framework.core.common.dto.ResponseDTO;
|
import com.ydd.framework.core.common.dto.ResponseDTO;
|
||||||
import com.ydd.framework.core.controller.BaseApiController;
|
import com.ydd.framework.core.controller.BaseApiController;
|
||||||
import com.ydd.framework.core.exception.ServiceException;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@@ -21,8 +19,6 @@ public class QREnterController extends BaseApiController {
|
|||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(QREnterController.class);
|
private final Logger logger = LoggerFactory.getLogger(QREnterController.class);
|
||||||
@Resource
|
@Resource
|
||||||
private QRCodeService qrCodeService;
|
|
||||||
@Resource
|
|
||||||
private MessageService messageService;
|
private MessageService messageService;
|
||||||
/**
|
/**
|
||||||
* 进场指令发布
|
* 进场指令发布
|
||||||
@@ -32,8 +28,7 @@ public class QREnterController extends BaseApiController {
|
|||||||
Integer memberId = getMemberIdByAccessToken();
|
Integer memberId = getMemberIdByAccessToken();
|
||||||
Integer venueId = getVenueId(deviceId);
|
Integer venueId = getVenueId(deviceId);
|
||||||
String deviceName = getDeviceName(deviceId);
|
String deviceName = getDeviceName(deviceId);
|
||||||
Venue venue = qrCodeService.initEnter(venueId, deviceName,memberId);
|
Venue venue = new Venue();// TODO
|
||||||
qrCodeService.unBindMember(venueId, deviceName);
|
|
||||||
if (venue!=null){
|
if (venue!=null){
|
||||||
if (true){
|
if (true){
|
||||||
// 出场
|
// 出场
|
||||||
@@ -46,26 +41,6 @@ public class QREnterController extends BaseApiController {
|
|||||||
return ResponseDTO.ok();
|
return ResponseDTO.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 扫码结果页初始化
|
|
||||||
* 需要进场的场馆信息
|
|
||||||
*/
|
|
||||||
@RequestMapping(value = "/qrCode/init", method = RequestMethod.GET)
|
|
||||||
public ResponseDTO initEnter(@RequestParam("deviceId")String deviceId) {
|
|
||||||
try {
|
|
||||||
Integer memberId = getMemberIdByAccessToken();
|
|
||||||
Integer venueId = getVenueId(deviceId);
|
|
||||||
String deviceName = getDeviceName(deviceId);
|
|
||||||
Venue venue = qrCodeService.initEnter(venueId, deviceName,memberId);
|
|
||||||
qrCodeService.bindMember(venueId, deviceName,memberId);
|
|
||||||
messageService.sendLoading(deviceName, venueId, memberId);
|
|
||||||
return ResponseDTO.ok().addAttribute("venueInit", venue);
|
|
||||||
}catch(ServiceException e){
|
|
||||||
return ResponseDTO.ok().addAttribute("InitError",e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据字符串获取场馆
|
* 根据字符串获取场馆
|
||||||
* @param deviceId
|
* @param deviceId
|
||||||
|
|||||||
@@ -35,9 +35,6 @@ public interface MessageService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Set<String> countConnection();
|
Set<String> countConnection();
|
||||||
|
|
||||||
boolean sendLoading(String deviceName, Integer venueId, Integer memberId);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出场
|
* 出场
|
||||||
* @param deviceName
|
* @param deviceName
|
||||||
|
|||||||
@@ -100,24 +100,6 @@ public class AppMessageHandlerAdapter implements MessageService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 通知客户端进入加载页面
|
|
||||||
* @param memberId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean sendLoading(String deviceName, Integer venueId,Integer memberId) {
|
|
||||||
Member thisMember = memberService.findByMember(memberId);
|
|
||||||
if (thisMember!=null){
|
|
||||||
String nickname = thisMember.getNickname();
|
|
||||||
VenueMessage venueMessage = new VenueMessage(MessageType.LOAD,"欢迎光临!" + nickname + ",请您60s内操作进场。");
|
|
||||||
Channel currentChannel = getCurrentChannel(deviceName, venueId);
|
|
||||||
ServerMessageUtils.INSTANCE.sendMsg(currentChannel,venueMessage);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试客户端连接
|
* 测试客户端连接
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
42
entity/src/main/java/com/enums/EnterEnum.java
Normal file
42
entity/src/main/java/com/enums/EnterEnum.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package com.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum - 入场标志
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum EnterEnum {
|
||||||
|
ENTER(0, "入场"),
|
||||||
|
OUT(1, "出场");
|
||||||
|
public Integer value;
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
EnterEnum(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 EnterEnum getByValue(Integer value) {
|
||||||
|
for (EnterEnum type : EnterEnum.values()) {
|
||||||
|
if (type.value.equals(value)) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
entity/src/main/java/com/sv/dto/BarCodeResult.java
Normal file
39
entity/src/main/java/com/sv/dto/BarCodeResult.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package com.sv.dto;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class BarCodeResult implements Serializable {
|
||||||
|
|
||||||
|
private String barcode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0 - 成功 1 - 失败
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
public String getBarcode() {
|
||||||
|
return barcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBarcode(String barcode) {
|
||||||
|
this.barcode = barcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMsg() {
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMsg(String msg) {
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
package com.sv.dto;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
|
|
||||||
public class EnterResult {
|
|
||||||
private Integer status;
|
|
||||||
private BigDecimal money;
|
|
||||||
|
|
||||||
public Integer getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(Integer status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getMoney() {
|
|
||||||
return money;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMoney(BigDecimal money) {
|
|
||||||
this.money = money;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -183,6 +183,11 @@ public class VenueDTO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private List<VenuePrice> venuePriceList;
|
private List<VenuePrice> venuePriceList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 展示出厂还是入场按钮
|
||||||
|
*/
|
||||||
|
private Integer enterFlag;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置
|
* 设置
|
||||||
*
|
*
|
||||||
@@ -637,4 +642,12 @@ public class VenueDTO implements Serializable {
|
|||||||
public void setCopyControl(Integer copyControl) {
|
public void setCopyControl(Integer copyControl) {
|
||||||
this.copyControl = copyControl;
|
this.copyControl = copyControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getEnterFlag() {
|
||||||
|
return enterFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnterFlag(Integer enterFlag) {
|
||||||
|
this.enterFlag = enterFlag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.sv.netty.config;
|
|||||||
|
|
||||||
public enum MessageType {
|
public enum MessageType {
|
||||||
LINK("连接"),
|
LINK("连接"),
|
||||||
LOAD("加载"),
|
|
||||||
OPEN_DOOR("开门"),
|
OPEN_DOOR("开门"),
|
||||||
FAILED("开门校验失败");
|
FAILED("开门校验失败");
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.sv.oms.controller;
|
|||||||
|
|
||||||
import com.sv.entity.Member;
|
import com.sv.entity.Member;
|
||||||
import com.sv.service.api.MemberService;
|
import com.sv.service.api.MemberService;
|
||||||
import com.sv.service.common.FaceService;
|
|
||||||
import com.ydd.framework.core.common.Pagination;
|
import com.ydd.framework.core.common.Pagination;
|
||||||
import com.ydd.framework.core.common.dto.ResponseDTO;
|
import com.ydd.framework.core.common.dto.ResponseDTO;
|
||||||
import com.ydd.framework.core.entity.enums.StatusEnum;
|
import com.ydd.framework.core.entity.enums.StatusEnum;
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import com.sv.exception.api.ExceptionCodeTemplate;
|
|||||||
import com.sv.mapper.MemberMapper;
|
import com.sv.mapper.MemberMapper;
|
||||||
import com.sv.service.common.ApiConstants;
|
import com.sv.service.common.ApiConstants;
|
||||||
import com.sv.service.common.CaptchaCacheServiceImpl;
|
import com.sv.service.common.CaptchaCacheServiceImpl;
|
||||||
import com.sv.service.common.FaceService;
|
|
||||||
import com.sv.service.common.OSSClientUtil;
|
import com.sv.service.common.OSSClientUtil;
|
||||||
import com.ydd.framework.core.common.Pagination;
|
import com.ydd.framework.core.common.Pagination;
|
||||||
import com.ydd.framework.core.common.utils.ValidationUtils;
|
import com.ydd.framework.core.common.utils.ValidationUtils;
|
||||||
@@ -59,8 +58,8 @@ public class MemberService extends BaseServiceImpl {
|
|||||||
@Resource
|
@Resource
|
||||||
private OSSClientUtil ossClientUtil;
|
private OSSClientUtil ossClientUtil;
|
||||||
|
|
||||||
@Resource
|
// @Resource
|
||||||
private FaceService faceService;
|
// private FaceService faceService;
|
||||||
@Resource
|
@Resource
|
||||||
private CaptchaCacheServiceImpl captchaCacheService;
|
private CaptchaCacheServiceImpl captchaCacheService;
|
||||||
@Resource
|
@Resource
|
||||||
@@ -503,17 +502,17 @@ public class MemberService extends BaseServiceImpl {
|
|||||||
String imgUrl = ossClientUtil.uploadImg(new BufferedInputStream(inputStream), file.getOriginalFilename());
|
String imgUrl = ossClientUtil.uploadImg(new BufferedInputStream(inputStream), file.getOriginalFilename());
|
||||||
logger.info(memberId + "上传oss文件成功." + imgUrl);
|
logger.info(memberId + "上传oss文件成功." + imgUrl);
|
||||||
Integer subjectId = null;
|
Integer subjectId = null;
|
||||||
if (faceService.login()){
|
// if (faceService.login()){
|
||||||
ByteArrayInputStream byteArrayInputStream = getByteArrayInputStream(file);
|
// ByteArrayInputStream byteArrayInputStream = getByteArrayInputStream(file);
|
||||||
Integer faceId = faceService.uploadFace(byteArrayInputStream);
|
// Integer faceId = faceService.uploadFace(byteArrayInputStream);
|
||||||
logger.info(memberId + "& faceId ===" + faceId);
|
// logger.info(memberId + "& faceId ===" + faceId);
|
||||||
subjectId = faceService.addSubject(faceId, member);
|
// subjectId = faceService.addSubject(faceId, member);
|
||||||
logger.info(memberId + "& subjectId ===" + subjectId);
|
// logger.info(memberId + "& subjectId ===" + subjectId);
|
||||||
}
|
// }
|
||||||
if (memberFaceInfo != null) {
|
// if (memberFaceInfo != null) {
|
||||||
//删除原有的subject
|
// //删除原有的subject
|
||||||
faceService.deleteSubject(memberFaceInfo.getFaceId());
|
// faceService.deleteSubject(memberFaceInfo.getFaceId());
|
||||||
}
|
// }
|
||||||
setMemberFaceInfo(subjectId, imgUrl, memberId, platformId);
|
setMemberFaceInfo(subjectId, imgUrl, memberId, platformId);
|
||||||
}
|
}
|
||||||
} catch (FaceServiceException e) {
|
} catch (FaceServiceException e) {
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
package com.sv.service.api;
|
|
||||||
|
|
||||||
import com.enums.VenueTypeEnum;
|
|
||||||
import com.sv.entity.Device;
|
|
||||||
import com.sv.entity.Venue;
|
|
||||||
import com.sv.mapper.DeviceMapper;
|
|
||||||
import com.sv.mapper.VenueMapper;
|
|
||||||
import com.ydd.framework.core.exception.ServiceException;
|
|
||||||
import org.apache.commons.lang.time.DateUtils;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 小程序扫二维码处理
|
|
||||||
*/
|
|
||||||
@Service("qrCodeService")
|
|
||||||
@Transactional(readOnly = true)
|
|
||||||
public class QRCodeService {
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(ProtocolService.class);
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private VenueMapper venueMapper;
|
|
||||||
@Resource
|
|
||||||
private DeviceMapper deviceMapper;
|
|
||||||
|
|
||||||
public Venue initEnter(Integer venueId,String deviceName,Integer memberId) throws ServiceException{
|
|
||||||
Integer integer = deviceMapper.checkDevice(deviceName, venueId);
|
|
||||||
if (integer != 1){
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.DEVICE_ERROR);
|
|
||||||
}
|
|
||||||
Device device = deviceMapper.findByDevice(deviceName, venueId);
|
|
||||||
if (device == null){
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.DEVICE_ERROR);
|
|
||||||
}else {
|
|
||||||
Date bindTime = device.getBindTime();
|
|
||||||
Integer bindMember = device.getBindMember();
|
|
||||||
if (bindTime != null && bindMember != null){
|
|
||||||
Date now = new Date();
|
|
||||||
Date endTime = DateUtils.addSeconds(bindTime, 60);
|
|
||||||
if (bindMember == memberId && now.after(endTime)){
|
|
||||||
// 设备绑定人员是自己 但是绑定时间已经超过了一分钟
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.OPERATE_TIMEOUT_ERROR);
|
|
||||||
}else if (bindMember != memberId && now.before(endTime)){
|
|
||||||
// 设备绑定的人不是自己,并且呢人家的操作时间还没有结束呢(还没有解绑)
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.BIND_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Venue venue = venueMapper.findById(venueId);
|
|
||||||
if (venue==null){
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.VENUE_ERROR);
|
|
||||||
}
|
|
||||||
if (!VenueTypeEnum.FITNESS.value.equals(venue.getType())){
|
|
||||||
throw new ServiceException(com.sv.exception.api.ExceptionCodeTemplate.VENUE_TYPE_ERROR);
|
|
||||||
}
|
|
||||||
return venue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void bindMember(Integer venueId,String deviceName,Integer memberId){
|
|
||||||
deviceMapper.bindMember(memberId, venueId, deviceName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
public void unBindMember(Integer venueId,String deviceName){
|
|
||||||
deviceMapper.unBindMember(venueId, deviceName);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,7 @@ package com.sv.service.api;
|
|||||||
|
|
||||||
import com.enums.*;
|
import com.enums.*;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.sv.dto.EnterResult;
|
import com.sv.dto.*;
|
||||||
import com.sv.dto.api.MemberCardDTO;
|
import com.sv.dto.api.MemberCardDTO;
|
||||||
import com.sv.dto.api.MemberCardVenuesDTO;
|
import com.sv.dto.api.MemberCardVenuesDTO;
|
||||||
import com.sv.dto.api.VenueDTO;
|
import com.sv.dto.api.VenueDTO;
|
||||||
@@ -11,7 +11,6 @@ import com.sv.exception.api.ExceptionCodeTemplate;
|
|||||||
import com.sv.mapper.VenueMapper;
|
import com.sv.mapper.VenueMapper;
|
||||||
import com.sv.service.api.util.DateUtilCard;
|
import com.sv.service.api.util.DateUtilCard;
|
||||||
import com.sv.service.api.util.GeoHashUtils;
|
import com.sv.service.api.util.GeoHashUtils;
|
||||||
import com.sv.service.common.FaceService;
|
|
||||||
import com.sv.service.oms.DeviceService;
|
import com.sv.service.oms.DeviceService;
|
||||||
import com.ydd.framework.core.common.Pagination;
|
import com.ydd.framework.core.common.Pagination;
|
||||||
import com.ydd.framework.core.common.utils.ValidationUtils;
|
import com.ydd.framework.core.common.utils.ValidationUtils;
|
||||||
@@ -65,10 +64,6 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
@Resource
|
@Resource
|
||||||
private VenuePriceService venuePriceService;
|
private VenuePriceService venuePriceService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private FaceService faceService;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新场馆
|
* 更新场馆
|
||||||
*
|
*
|
||||||
@@ -123,8 +118,13 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
* @param id 编号
|
* @param id 编号
|
||||||
* @return 场馆
|
* @return 场馆
|
||||||
*/
|
*/
|
||||||
public VenueDTO findByVenueId(Integer id) {
|
public VenueDTO findByVenueId(Integer id,Integer memberId) {
|
||||||
return venueMapper.findByVenueId(id);
|
VenueDTO getVenue = venueMapper.findByVenueId(id);
|
||||||
|
if (VenueTypeEnum.BASKETBALL.getValue().equals(getVenue.getType())){
|
||||||
|
MemberEnterVenueLog memberLastLog = memberEnterVenueLogService.findMemberLastLog(memberId, id);
|
||||||
|
getVenue.setEnterFlag(memberLastLog.getType());
|
||||||
|
}
|
||||||
|
return getVenue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -243,15 +243,114 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3.判断用户有没有人脸识别的图像,根据用户ID查找,一个用户只能有一条
|
// 3.判断用户有没有人脸识别的图像,根据用户ID查找,一个用户只能有一条
|
||||||
MemberFaceInfo memberFaceInfo = memberFaceInfoService.findByMemberId(memberId);
|
// MemberFaceInfo memberFaceInfo = memberFaceInfoService.findByMemberId(memberId);
|
||||||
if (memberFaceInfo == null) {
|
// if (memberFaceInfo == null) {
|
||||||
flag = 1;
|
// flag = 1;
|
||||||
return flag;
|
// return flag;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 我要出场
|
||||||
|
* @param memberId
|
||||||
|
* @param venueId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public BarCodeResult out(Integer memberId, Integer venueId) {
|
||||||
|
BarCodeResult result = new BarCodeResult();
|
||||||
|
result.setCode("0");
|
||||||
|
// 判断用户是否登录
|
||||||
|
if (memberId == null) {
|
||||||
|
throw new ServiceException(com.ydd.framework.core.exception.ExceptionCodeTemplate.NEED_LOGIN);
|
||||||
|
}
|
||||||
|
//参数校验
|
||||||
|
ValidationUtils.assertNotNull(venueId);
|
||||||
|
Venue venue = venueMapper.findById(venueId);
|
||||||
|
synchronized (("enter" + memberId).intern()) {
|
||||||
|
// 查询当前时间内,场馆对应的价格(健身房没有价格)
|
||||||
|
Member member = memberService.findByMember(memberId);
|
||||||
|
memberService.verify(member);
|
||||||
|
// 记录用户进场记录
|
||||||
|
MemberEnterVenueLog log = new MemberEnterVenueLog();
|
||||||
|
log.setMemberId(member.getId());
|
||||||
|
log.setVeneuType(venue.getType());
|
||||||
|
log.setVenueId(venue.getId());
|
||||||
|
log.setPlatformId(member.getPlatformId());
|
||||||
|
log.setType(0);
|
||||||
|
//进场之前 查看是否有会员卡
|
||||||
|
List<MemberCard> cards = memberCardService.findByMemberId(venue.getId(), member.getId());
|
||||||
|
if (cards.size() > 0) {
|
||||||
|
MemberCard useCard = null;
|
||||||
|
//有会员卡 查看是否有免费卡
|
||||||
|
List<MemberCard> freeCard = cards.stream().filter(free -> VipTypeEnum.FREECARD.value.equals(free.getCardType())).collect(Collectors.toList());
|
||||||
|
//有会员卡 查看是否有单次卡
|
||||||
|
List<MemberCard> onceCard = cards.stream().filter(free ->
|
||||||
|
VipTypeEnum.ONCECARD.value.equals(free.getCardType()) || VipTypeEnum.PUB_ONCECARD.value.equals(free.getCardType())).collect(Collectors.toList());
|
||||||
|
boolean canUseFree = false;
|
||||||
|
if (freeCard !=null && freeCard.size() > 0){
|
||||||
|
for (MemberCard f : freeCard){
|
||||||
|
if (memberEnterVenueLogService.isFreeCardUseful(f.getId())){
|
||||||
|
canUseFree = true;
|
||||||
|
// 如果有一张可以用的免费卡就用免费卡
|
||||||
|
useCard = f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!canUseFree) {
|
||||||
|
if (onceCard != null && onceCard.size() > 0)
|
||||||
|
// 不能用免费卡,优先单次卡,取第一张可用的单次卡
|
||||||
|
useCard = onceCard.get(0);
|
||||||
|
} else {
|
||||||
|
// 单次卡和免费卡都不能用,随意用一张季卡或者年卡
|
||||||
|
useCard = cards.get(0);
|
||||||
|
}
|
||||||
|
if (useCard != null) {
|
||||||
|
//使用会员卡入场
|
||||||
|
logger.info("用户" + member.getNickname() + "使用" + useCard.getCardType() + "入场");
|
||||||
|
log.setMemberCardId(useCard.getId());
|
||||||
|
log.setPayType(EnterVenuePayTypeEnum.MEMBER_CARD.value);
|
||||||
|
String orderSn = orderService.createEnterVenueOrder(venue, member.getId(), PayTypeEnum.MEMBER_CARD, BigDecimal.ZERO);
|
||||||
|
// 会员卡入场,增加记录
|
||||||
|
createMemberMoneyLog(MoneyLogEnum.JOIN.value, venue.getPrice(), member.getId(), member.getPlatformId(), PayTypeEnum.MEMBER_CARD.value, useCard.getCardType(),
|
||||||
|
venue.getId(), venue.getType());
|
||||||
|
log.setOrderSn(orderSn);
|
||||||
|
memberEnterVenueLogService.save(log);
|
||||||
|
// 如果是单次卡,清除单次卡
|
||||||
|
if (VipTypeEnum.ONCECARD.value.equals(useCard.getCardType())
|
||||||
|
|| VipTypeEnum.PUB_ONCECARD.value.equals(useCard.getCardType())){
|
||||||
|
memberCardService.delete(useCard.getId());
|
||||||
|
}
|
||||||
|
result.setBarcode("test123456");
|
||||||
|
}else {
|
||||||
|
//查无可用会员卡
|
||||||
|
logger.info("用户" + member.getNickname() + "您好!请先购买会员卡再进场");
|
||||||
|
result.setCode("1");
|
||||||
|
result.setMsg("未查询到会员卡,请先购买");
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
//判断余额是否够 TODO 应该从入场订单里面去取
|
||||||
|
String time = DateUtilCard.nowTime().toString();
|
||||||
|
VenuePrice venuePrice = venuePriceService.findPrice(venueId, time);
|
||||||
|
if (memberService.isMoneyEnough(member.getId(), venuePrice.getPrice())) {
|
||||||
|
logger.info("用户" + member.getNickname() + "使用余额进场");
|
||||||
|
String orderSn = orderService.createEnterVenueOrder(venue, member.getId(), PayTypeEnum.BALANCE, venuePrice.getPrice());
|
||||||
|
log.setOrderSn(orderSn);
|
||||||
|
log.setPayType(EnterVenuePayTypeEnum.WEI_XIN.value);
|
||||||
|
memberEnterVenueLogService.save(log);
|
||||||
|
result.setBarcode("test123456");
|
||||||
|
} else {
|
||||||
|
//余额不足
|
||||||
|
logger.error("用户" + member.getNickname() + "余额不足进场失败");
|
||||||
|
result.setCode("1");
|
||||||
|
result.setMsg("余额不足,请先充值");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* api
|
* api
|
||||||
* 查询我的会员卡
|
* 查询我的会员卡
|
||||||
@@ -299,108 +398,6 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
return StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude);
|
return StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 人脸失败用户入场(篮球场)
|
|
||||||
*
|
|
||||||
* @param faceId
|
|
||||||
* @param deviceId
|
|
||||||
* @return 0成功 -1失败
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public synchronized EnterResult enterVenue(Integer faceId, Integer deviceId) {
|
|
||||||
EnterResult result = new EnterResult();
|
|
||||||
synchronized (("enter" + faceId.toString()).intern()) {
|
|
||||||
Date now = new Date();
|
|
||||||
Device device = deviceService.findById(deviceId);
|
|
||||||
Venue venue = venueMapper.findById(device.getVenueId());
|
|
||||||
// 查询当前时间内,场馆对应的价格
|
|
||||||
String time = DateUtilCard.nowTime().toString();
|
|
||||||
VenuePrice venuePrice = venuePriceService.findPrice(device.getVenueId(), time);
|
|
||||||
if (venuePrice == null) {
|
|
||||||
logger.info("场馆暂未开放");
|
|
||||||
result.setStatus(-2);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (venue.getStatus().intValue() == 1) {
|
|
||||||
logger.info(venue.getName() + "被禁用,入场失败");
|
|
||||||
result.setStatus(-2);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
Member member = memberService.findByFaceId(faceId);
|
|
||||||
memberService.verify(member);
|
|
||||||
if (venue == null || member == null) {
|
|
||||||
result.setStatus(-1);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
//判断8小时之内 是否连续进场
|
|
||||||
MemberEnterVenueLog enterVenueLog = memberEnterVenueLogService.findMemberLastLog(member.getId(), device.getVenueId());
|
|
||||||
MemberEnterVenueLog log = new MemberEnterVenueLog();
|
|
||||||
log.setMemberId(member.getId());
|
|
||||||
log.setVeneuType(device.getVenueType());
|
|
||||||
log.setVenueId(device.getVenueId());
|
|
||||||
log.setPlatformId(member.getPlatformId());
|
|
||||||
if (enterVenueLog != null) {
|
|
||||||
if ((now.getTime() - enterVenueLog.getCreatedTime().getTime()) <= (8 * 60 * 60 * 1000)) {
|
|
||||||
//小于8小时直接进场
|
|
||||||
log.setOrderSn("");
|
|
||||||
logger.info("用户:" + member.getNickname() + "小于8小时直接进场");
|
|
||||||
memberEnterVenueLogService.save(log);
|
|
||||||
result.setStatus(0);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//进场之前 查看是否有会员卡
|
|
||||||
List<MemberCard> cards = memberCardService.findByMemberId(device.getVenueId(), member.getId());
|
|
||||||
if (cards.size() > 0) {
|
|
||||||
//有会员卡 查看是否是免费卡 【// 发现这里的逻辑不是优先使用免费卡】
|
|
||||||
MemberCard useCard = null;
|
|
||||||
for (MemberCard card : cards) {
|
|
||||||
if (!VipTypeEnum.FREECARD.value.equals(card.getCardType())) {
|
|
||||||
useCard = card;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
//查看该免费卡是否可用 (一天用一次)
|
|
||||||
if (memberEnterVenueLogService.isFreeCardUseful(card.getId())) {
|
|
||||||
useCard = card;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (useCard != null) {
|
|
||||||
//使用会员卡入场
|
|
||||||
logger.info("用户" + member.getNickname() + "使用" + useCard.getCardType() + "入场");
|
|
||||||
log.setMemberCardId(useCard.getId());
|
|
||||||
log.setPayType(EnterVenuePayTypeEnum.MEMBER_CARD.value);
|
|
||||||
String orderSn = orderService.createEnterVenueOrder(venue, member.getId(), PayTypeEnum.MEMBER_CARD, venuePrice.getPrice());
|
|
||||||
// 会员卡入场,增加记录
|
|
||||||
createMemberMoneyLog(MoneyLogEnum.JOIN.value, venue.getPrice(), member.getId(), member.getPlatformId(), PayTypeEnum.MEMBER_CARD.value, useCard.getCardType(),
|
|
||||||
venue.getId(), venue.getType());
|
|
||||||
log.setOrderSn(orderSn);
|
|
||||||
memberEnterVenueLogService.save(log);
|
|
||||||
result.setStatus(1);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//没有会员卡 扣余额
|
|
||||||
//判断余额是否够
|
|
||||||
if (memberService.isMoneyEnough(member.getId(), venuePrice.getPrice())) {
|
|
||||||
logger.info("用户" + member.getNickname() + "使用余额进场");
|
|
||||||
result.setMoney(venuePrice.getPrice());
|
|
||||||
String orderSn = orderService.createEnterVenueOrder(venue, member.getId(), PayTypeEnum.BALANCE, venuePrice.getPrice());
|
|
||||||
log.setOrderSn(orderSn);
|
|
||||||
log.setPayType(EnterVenuePayTypeEnum.WEI_XIN.value);
|
|
||||||
memberEnterVenueLogService.save(log);
|
|
||||||
result.setStatus(2);
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
//余额不足
|
|
||||||
logger.info("用户" + member.getNickname() + "余额不足进场失败");
|
|
||||||
result.setStatus(-2);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码入场-判断是否成功入场
|
* 二维码入场-判断是否成功入场
|
||||||
*
|
*
|
||||||
@@ -408,77 +405,7 @@ public class VenueService extends BaseServiceImpl {
|
|||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
public synchronized boolean qrCodeEnterVenue(Integer memberId, String deviceName,Integer venueId,Venue venue) {
|
public synchronized boolean qrCodeEnterVenue(Integer memberId, String deviceName,Integer venueId,Venue venue) {
|
||||||
synchronized (("enter" + memberId).intern()) {
|
return false;
|
||||||
Device device = deviceService.findByDevice(deviceName,venueId);
|
|
||||||
// 查询当前时间内,场馆对应的价格(健身房没有价格)
|
|
||||||
if (venue.getStatus().intValue() == 1) {
|
|
||||||
logger.info(venue.getName() + "被禁用,入场失败");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Member member = memberService.findByMember(memberId);
|
|
||||||
memberService.verify(member);
|
|
||||||
// 记录用户进场记录
|
|
||||||
MemberEnterVenueLog log = new MemberEnterVenueLog();
|
|
||||||
log.setMemberId(member.getId());
|
|
||||||
log.setVeneuType(device.getVenueType());
|
|
||||||
log.setVenueId(device.getVenueId());
|
|
||||||
log.setPlatformId(member.getPlatformId());
|
|
||||||
log.setType(0);
|
|
||||||
//进场之前 查看是否有会员卡
|
|
||||||
List<MemberCard> cards = memberCardService.findByMemberId(device.getVenueId(), member.getId());
|
|
||||||
if (cards.size() > 0) {
|
|
||||||
MemberCard useCard = null;
|
|
||||||
//有会员卡 查看是否有免费卡
|
|
||||||
List<MemberCard> freeCard = cards.stream().filter(free -> VipTypeEnum.FREECARD.value.equals(free.getCardType())).collect(Collectors.toList());
|
|
||||||
//有会员卡 查看是否有单次卡
|
|
||||||
List<MemberCard> onceCard = cards.stream().filter(free ->
|
|
||||||
VipTypeEnum.ONCECARD.value.equals(free.getCardType()) || VipTypeEnum.PUB_ONCECARD.value.equals(free.getCardType())).collect(Collectors.toList());
|
|
||||||
boolean canUseFree = false;
|
|
||||||
if (freeCard !=null && freeCard.size() > 0){
|
|
||||||
for (MemberCard f : freeCard){
|
|
||||||
if (memberEnterVenueLogService.isFreeCardUseful(f.getId())){
|
|
||||||
canUseFree = true;
|
|
||||||
// 如果有一张可以用的免费卡就用免费卡
|
|
||||||
useCard = f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!canUseFree) {
|
|
||||||
if (onceCard != null && onceCard.size() > 0)
|
|
||||||
// 不能用免费卡,优先单次卡,取第一张可用的单次卡
|
|
||||||
useCard = onceCard.get(0);
|
|
||||||
} else {
|
|
||||||
// 单次卡和免费卡都不能用,随意用一张季卡或者年卡
|
|
||||||
useCard = cards.get(0);
|
|
||||||
}
|
|
||||||
if (useCard != null) {
|
|
||||||
//使用会员卡入场
|
|
||||||
logger.info("用户" + member.getNickname() + "使用" + useCard.getCardType() + "入场");
|
|
||||||
log.setMemberCardId(useCard.getId());
|
|
||||||
log.setPayType(EnterVenuePayTypeEnum.MEMBER_CARD.value);
|
|
||||||
String orderSn = orderService.createEnterVenueOrder(venue, member.getId(), PayTypeEnum.MEMBER_CARD, BigDecimal.ZERO);
|
|
||||||
// 会员卡入场,增加记录
|
|
||||||
createMemberMoneyLog(MoneyLogEnum.JOIN.value, venue.getPrice(), member.getId(), member.getPlatformId(), PayTypeEnum.MEMBER_CARD.value, useCard.getCardType(),
|
|
||||||
venue.getId(), venue.getType());
|
|
||||||
log.setOrderSn(orderSn);
|
|
||||||
memberEnterVenueLogService.save(log);
|
|
||||||
// 如果是单次卡,清除单次卡
|
|
||||||
if (VipTypeEnum.ONCECARD.value.equals(useCard.getCardType())
|
|
||||||
|| VipTypeEnum.PUB_ONCECARD.value.equals(useCard.getCardType())){
|
|
||||||
memberCardService.delete(useCard.getId());
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}else {
|
|
||||||
//查无可用会员卡
|
|
||||||
logger.info("用户" + member.getNickname() + "您好!请先购买会员卡再进场");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//没有可用会员卡 健身房也不支持扣余额
|
|
||||||
logger.info("用户" + member.getNickname() + "您好!请先购买会员卡再进场");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@Deprecated
|
||||||
public class FaceService {
|
public class FaceService {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(FaceService.class);
|
private final Logger logger = LoggerFactory.getLogger(FaceService.class);
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ public class WeiXinSendUtils implements InitializingBean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void getToken() {
|
private void getToken() {
|
||||||
//TODO
|
//TODO 放开
|
||||||
AccessTokenResponse accessToken = WeChatHelper.getAccessToken("wx51d82eba3f5f4858", "d28320bcb885cc208b6fde2253d8663e");
|
// AccessTokenResponse accessToken = WeChatHelper.getAccessToken("wx51d82eba3f5f4858", "d28320bcb885cc208b6fde2253d8663e");
|
||||||
token = accessToken.getAccessToken();
|
// token = accessToken.getAccessToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Scheduled(fixedDelay=60*60*1000)
|
@Scheduled(fixedDelay=60*60*1000)
|
||||||
|
|||||||
Reference in New Issue
Block a user