zoujiajian %!s(int64=3) %!d(string=hai) anos
pai
achega
60a9b0cf6d

+ 6 - 2
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/equipment/EquipmentUserChanceMapper.java

@@ -2,6 +2,7 @@ package com.cyksj.mapper.manage.distribute.equipment;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.EquipmentUserChance;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
 /*
@@ -11,9 +12,12 @@ import org.apache.ibatis.annotations.Update;
  *创建时间:2023/2/23 13:34
  */
 public interface EquipmentUserChanceMapper extends BaseMapper<EquipmentUserChance> {
-	@Update("update equipment_user_chance set num = num + 1 where user_id = #{userId} where num >= 0")
+	@Update("update equipment_user_chance set num = num + 1 where user_id = #{userId} and num >= 0")
 	void addUserChance(Long userId);
 
-	@Update("update equipment_user_chance set num = num - 1 where user_id = #{userId} where num >= 1")
+	@Update("update equipment_user_chance set num = num - 1 where user_id = #{userId} and num >= 1")
 	Integer subUserChance(Long userId);
+
+	@Update("update equipment_user_chance set num = num - 1 where user_id = #{userId} and num = #{num} and num >= 1")
+	Integer subUserChanceNoRepeat(@Param("userId") Long userId, @Param("num") Integer num);
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserReceiveBenefitsRecord.java

@@ -34,6 +34,11 @@ public class EquipmentUserReceiveBenefitsRecord extends BaseEntity{
 	 */
 	private Long relationId;
 
+	/**
+	 * 退款后订单id
+	 */
+	private Long orderId;
+
 	/**
 	 * 默认1成功,退款后0
 	 */

+ 36 - 5
netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeFrontServiceImpl.java

@@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
-import com.cyksj.model.entity.GoodsDonSku;
-import com.cyksj.model.entity.GroupsRelation;
-import com.cyksj.model.entity.OrderDon;
+import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceMapper;
+import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserReceiveBenefitsRecordMapper;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeFrontService;
 import com.cyksj.service.exchange.ExchangeCodeService;
@@ -39,8 +39,24 @@ public class EquipmentDistributeFrontServiceImpl implements EquipmentDistributeF
 
 	private final GoodsDonSkuMapper goodsDonSkuMapper;
 
+	private final EquipmentUserChanceMapper equipmentUserChanceMapper;
+
+	private final EquipmentUserReceiveBenefitsRecordMapper equipmentUserReceiveBenefitsRecordMapper;
+
 	@Override
 	public GroupsRelationView useBenefits(Long userId, Long skuId) {
+		//减少获取权益机会
+		EquipmentUserChance chance = equipmentUserChanceMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChance.class)
+				.eq(EquipmentUserChance::getUserId, userId).last("limit 1"));
+		if (chance == null || chance.getNum() <= 0) {
+			throw BusinessRuntimeException.getInstance("可领取次数为0");
+		}
+		Integer num = chance.getNum();
+		Integer update = equipmentUserChanceMapper.subUserChanceNoRepeat(userId, num);
+		if (update != 1) {
+			throw BusinessRuntimeException.getInstance("操作频繁,请刷新页面后重试");
+		}
+		Long relationId = null;
 		GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder()
 				.field(GroupsRelationView::getSkuId, skuId)
 				.orderBy(GroupsRelationView::getExpiryTime).asc()
@@ -49,8 +65,9 @@ public class EquipmentDistributeFrontServiceImpl implements EquipmentDistributeF
 		GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(skuId);
 		if (groupsRelationView == null) {
 			//领取权益时,没有车票的用户自动上车,获得对应车票
-			exchangeCodeService.getGroupTripsTicket(goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT);
-		}else {
+			GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT);
+			relationId = relation.getId();
+		} else {
 			Date expiryTime = groupsRelationView.getExpiryTime();
 			if (expiryTime == null) {
 				throw BusinessRuntimeException.getInstance("该车位暂未发车,请发车后再领取权益");
@@ -61,7 +78,21 @@ public class EquipmentDistributeFrontServiceImpl implements EquipmentDistributeF
 					.eq(GroupsRelation::getUserId, userId)
 					.set(GroupsRelation::getExpiryTime, updateExpiryTime));
 			groupsRelationView.setUpdateExpiryTime(updateExpiryTime);
+			relationId = groupsRelationView.getId();
 		}
+		//记录领取记录
+		saveReceiveBenefitsRecord(userId, skuId, goodsDonSku.getMonths(), relationId, null, 1);
 		return groupsRelationView;
 	}
+
+	public void saveReceiveBenefitsRecord(Long userId, Long skuId, Integer num, Long relationId, Long orderId, Integer statusCode) {
+		EquipmentUserReceiveBenefitsRecord record = new EquipmentUserReceiveBenefitsRecord();
+		record.setUserId(userId);
+		record.setSkuId(skuId);
+		record.setNum(num);
+		record.setOrderId(orderId);
+		record.setRelationId(relationId);
+		record.setStatusCode(statusCode);
+		equipmentUserReceiveBenefitsRecordMapper.insert(record);
+	}
 }

+ 4 - 3
netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeServiceImpl.java

@@ -109,7 +109,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 				Integer update = equipmentUserChanceMapper.subUserChance(sharId);
 				if (update == 1) {
 					//扣除权益
-					deductUserBenefits(sharId);
+					deductUserBenefits(sharId, orderId);
 				}
 			}
 		}
@@ -143,7 +143,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 		return true;
 	}
 
-	public void deductUserBenefits(Long userId) {
+	public void deductUserBenefits(Long userId, Long orderId) {
 		EquipmentUserReceiveBenefitsRecord receiveBenefitsRecord = equipmentUserReceiveBenefitsRecordMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserReceiveBenefitsRecord.class)
 				.eq(EquipmentUserReceiveBenefitsRecord::getStatusCode, 1)
 				.eq(EquipmentUserReceiveBenefitsRecord::getUserId, userId)
@@ -169,7 +169,8 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 			relation.setExpiryTime(finalDate);
 			groupsRelationMapper.updateById(relation);
 		}
-		relation.setStartTime(relation.getStartTime() == null ? new Date() : null);
+		receiveBenefitsRecord.setOrderId(orderId);
+		equipmentUserReceiveBenefitsRecordMapper.updateById(receiveBenefitsRecord);
 	}
 
 	public void sendInvitedUserEquipmentCoupon(Long userId) {

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/exchange/ExchangeCodeService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.dto.Result;
 import com.cyksj.model.entity.ExchangeCode;
 import com.cyksj.model.entity.GoodsDonSku;
+import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.excel.ExcelExchangeCodeData;
 import com.cyksj.model.request.ExchangeCodeReq;
@@ -36,5 +37,5 @@ public interface ExchangeCodeService extends IService<ExchangeCode> {
 	/**
 	 * 获取车票
 	 */
-	void getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye);
+	GroupsRelation getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye);
 }

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -207,7 +207,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	 * 获取车位
 	 */
 	@Override
-	public void getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye) {
+	public GroupsRelation getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye) {
 		if (sku == null) {
 			throw BusinessRuntimeException.getInstance("规格不存在,请联系客服");
 		}
@@ -306,6 +306,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				log.error("向客服发送用户{}兑换码兑换车票成功,发送消息失败:{}", user.getId(), e);
 			}
 		});
+		return relation;
 	}
 
 	private void setRelation(Long relationId, Long userId) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -768,7 +768,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			try {
 				marketFrontService.addSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getSkuId());
 				if (goodsDon.getType() == 2) {
-					equipmentDistributeService.subDistributeBenefitsChance(orderDon.getUserId(), orderDon.getId());
+					equipmentDistributeService.addDistributeBenefitsChance(orderDon.getUserId(), orderDon.getId());
 				}
 			} catch (Exception e) {
 				log.error("zfb增加抽奖机会错误,orderId:{},error:{}", orderDon.getId(), e);

+ 10 - 3
netflix-web/src/main/java/com/cyksj/web/controller/distribute/EquipmentDistributeController.java

@@ -98,15 +98,22 @@ public class EquipmentDistributeController {
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
 				.eq(SysConfig::getSysKey, Constant.EQUIPMENT_DISTRIBUTE_KEY).last("limit 1"));
-		List<Long> goodsIdList = Jsons.parseList(config.getSysValue(), Long.class);
+		List<Long> goodsIdList = null;
+		if (config != null) {
+			String sysValue = config.getSysValue();
+			if (StrUtil.isNotBlank(sysValue)) {
+				goodsIdList = Jsons.parseList(sysValue, Long.class);
+			}
+		}
 		MapBuilder builder = MapUtils.builder()
 				.field(GroupsRelationView::getUserId, userId)
 				.field(GroupsRelationView::getGoodsType, 1)
 				.field(GroupsRelationView::getGoodsSecondType, 2)
-				.field(GroupsRelationView::getGoodsId, goodsIdList).op(Operator.InList)
 				.field(GroupsRelationView::getStatus, "validity")
 				.field(GroupsRelationView::getExpiryTime).op(Operator.NotNull);
-
+		if (goodsIdList != null) {
+			builder.field(GroupsRelationView::getGoodsId, goodsIdList).op(Operator.InList);
+		}
 		List<GroupsRelationView> list = beanSearcher.searchAll(GroupsRelationView.class, builder.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
 	}