api-设备新增设备类型字段,是入场还是出场。完善入场逻辑

This commit is contained in:
limqhz
2020-07-22 18:58:39 +08:00
parent 048ccc2d05
commit 6550f5d06b
8 changed files with 253 additions and 92 deletions

View File

@@ -1,5 +1,6 @@
package com.sv.mapper;
import com.common.DeviceDTO;
import com.enums.DeviceType;
import com.sv.entity.Device;
import org.apache.ibatis.annotations.Param;
@@ -76,4 +77,12 @@ public interface DeviceMapper {
Integer checkDevice(@Param("deviceName") String deviceName,@Param("venueId") Integer venueId);
/**
* 根据记录找设备
* @param deviceName
* @param venueId
* @param deviceType
* @return
*/
Device findByDevice(String deviceName, Integer venueId, DeviceType deviceType);
}

View File

@@ -1,9 +1,6 @@
package com.sv.service.api;
import com.enums.EnterVenuePayTypeEnum;
import com.enums.MoneyLogEnum;
import com.enums.PayTypeEnum;
import com.enums.VipTypeEnum;
import com.enums.*;
import com.github.pagehelper.PageHelper;
import com.sv.dto.EnterResult;
import com.sv.dto.api.MemberCardDTO;
@@ -307,19 +304,118 @@ public class VenueService extends BaseServiceImpl {
}
/**
* 用户入场
* 人脸失败用户入场(篮球场)
*
* @param faceId
* @param deviceId
* @return 0成功 -1失败
*/
@Transactional(rollbackFor = Exception.class)
public synchronized EnterResult enterVenue(Integer faceId, Integer deviceId) {
// @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;
// }
// }
// }
/**
* 人脸失败用户入场(篮球场)
*
* @return 0成功 -1失败
*/
@Transactional
public synchronized EnterResult qrCodeEnterVenue(Integer memberId, String deviceName,Integer venueId,Venue venue) {
EnterResult result = new EnterResult();
synchronized (("enter" + faceId.toString()).intern()) {
synchronized (("enter" + memberId).intern()) {
Date now = new Date();
Device device = deviceService.findById(deviceId);
Venue venue = venueMapper.findById(device.getVenueId());
Device device = deviceService.findByDevice(deviceName,venueId, DeviceType.ENTER);
// 查询当前时间内,场馆对应的价格
String time = DateUtilCard.nowTime().toString();
VenuePrice venuePrice = venuePriceService.findPrice(device.getVenueId(), time);
@@ -333,7 +429,7 @@ public class VenueService extends BaseServiceImpl {
result.setStatus(-2);
return result;
}
Member member = memberService.findByFaceId(faceId);
Member member = memberService.findByMember(memberId);
memberService.verify(member);
if (venue == null || member == null) {
result.setStatus(-1);

View File

@@ -2,6 +2,7 @@ package com.sv.service.oms;
import com.common.DeviceDTO;
import com.enums.DeviceStatusEnum;
import com.enums.DeviceType;
import com.github.pagehelper.PageHelper;
import com.sv.entity.Device;
import com.sv.exception.oms.OmsException;
@@ -185,5 +186,14 @@ public class DeviceService extends BaseServiceImpl {
}
}
/**
* find by DeviceName
*/
public Device findByDevice(String deviceName, Integer venueId, DeviceType deviceType){
return deviceMapper.findByDevice(deviceName,venueId,deviceType);
}
}

View File

@@ -8,6 +8,7 @@
<result column="stream" property="stream"/>
<result column="venue_id" property="venueId"/>
<result column="venue_type" property="venueType"/>
<result column="device_type" property="deviceType"/>
<result column="status" property="status"/>
<result column="created_id" property="createdId"/>
<result column="modified_id" property="modifiedId"/>
@@ -33,6 +34,7 @@
venue_id,
status,
venue_type,
device_type,
created_id,
modified_id,
created_time,
@@ -45,6 +47,9 @@
#{id, jdbcType=INTEGER},
#{name, jdbcType=VARCHAR},
#{stream, jdbcType=VARCHAR},
#{venue_id, jdbcType=INTEGER},
#{venue_type, jdbcType=INTEGER},
#{device_type, jdbcType=VARCHAR},
#{createdId, jdbcType=INTEGER},
#{modifiedId, jdbcType=INTEGER},
#{createdTime, jdbcType=TIMESTAMP},
@@ -83,6 +88,9 @@
<if test="venueType != null">
venue_type,
</if>
<if test="deviceType != null">
device_type,
</if>
<if test="status != null">
status,
</if>
@@ -118,6 +126,9 @@
<if test="venueType != null">
#{venueType},
</if>
<if test="venueType != null">
#{deviceType},
</if>
<if test="status != null">
#{status},
</if>
@@ -179,6 +190,12 @@
<if test="venueId != null">
venue_id = #{venueId},
</if>
<if test="venueType != null">
venue_type = #{venueType},
</if>
<if test="deviceType != null">
device_type = #{deviceType},
</if>
<if test="createdId != null">
created_id = #{createdId},
</if>
@@ -235,11 +252,26 @@
<update id="online">
UPDATE sv_device set status = 2,modified_time = now()
WHERE name = #{deviceName} and venue_id=#{venueId}
<if test="venueType != null">
and venue_type = #{venueType},
</if>
</update>
<select id="checkDevice" resultType="java.lang.Integer">
SELECT count(1) FROM sv_device
WHERE 1=1 AND name = #{deviceName} and venue_id=#{venueId} and deleted = 0
<if test="venueType != null">
and venue_type = #{venueType},
</if>
</select>
<select id="findByDevice" resultType="com.sv.entity.Device">
SELECT
<include refid="Field"></include> FROM sv_device
WHERE 1=1 AND name = #{deviceName} and venue_id=#{venueId} and deleted = 0
<if test="venueType != null">
and venue_type = #{venueType},
</if>
</select>
</mapper>