Ver Fonte

Merge branch 'ep_balance'

zoujiajian há 3 anos atrás
pai
commit
c6ef50202e
24 ficheiros alterados com 386 adições e 119 exclusões
  1. 2 0
      netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
  2. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/equipment/EquipmentUserDistributeTransportBenefitsMapper.java
  3. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/equipment/EquipmentUserPayRecordMapper.java
  4. 7 2
      netflix-dao/src/main/java/com/cyksj/model/dto/EquipmentConfigDto.java
  5. 0 23
      netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserChanceRecord.java
  6. 44 0
      netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserDistributeTransportBenefits.java
  7. 68 0
      netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserPayRecord.java
  8. 2 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonSku.java
  9. 7 1
      netflix-dao/src/main/java/com/cyksj/model/entity/UserBalanceSourceRecord.java
  10. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/EquipmentUserDistributeDetailView.java
  11. 4 7
      netflix-dao/src/main/java/com/cyksj/model/views/EquipmentUserDistributeViews.java
  12. 120 54
      netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeServiceImpl.java
  13. 19 7
      netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java
  14. 1 1
      netflix-service/src/main/java/com/cyksj/service/market/task/impl/TaskServiceImpl.java
  15. 2 1
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonCommentServiceImpl.java
  16. 2 1
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  17. 1 2
      netflix-service/src/main/java/com/cyksj/service/scheduler/impl/SchedulerServiceImpl.java
  18. 1 1
      netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java
  19. 23 3
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java
  20. 7 0
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  21. 12 4
      netflix-web/src/main/java/com/cyksj/web/controller/distribute/EquipmentDistributeController.java
  22. 9 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java
  23. 5 7
      netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/EquipmentController.java
  24. 23 1
      netflix-web/src/main/java/com/cyksj/web/controller/sys/SysConfigController.java

+ 2 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -134,4 +134,6 @@ public interface Constant {
 	 * 特殊格式平台邮箱
 	 */
 	String SPECIAL_GOODS_ACCOUNT_IMPORT_KEY = "special_goods_account_import_key";
+
+	String BALANCE_NOTIFY_MSG = "恭喜您 %s元余额已到账 购买时可抵现 快去使用吧!【银河录像局】";
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/equipment/EquipmentUserDistributeTransportBenefitsMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute.equipment;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.EquipmentUserDistributeTransportBenefits;
+
+/*
+ *项目名: netflix
+ *文件名: EquipmentUserDistributeTransportBenefitsMapper
+ *创建者: JavaZou
+ *创建时间:2023/8/9 10:05
+ */
+public interface EquipmentUserDistributeTransportBenefitsMapper extends BaseMapper<EquipmentUserDistributeTransportBenefits> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/equipment/EquipmentUserPayRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute.equipment;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.EquipmentUserPayRecord;
+
+/*
+ *项目名: netflix
+ *文件名: EquipmentUserPayRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/8/9 18:27
+ */
+public interface EquipmentUserPayRecordMapper extends BaseMapper<EquipmentUserPayRecord> {
+}

+ 7 - 2
netflix-dao/src/main/java/com/cyksj/model/dto/EquipmentConfigDto.java

@@ -4,7 +4,7 @@ import com.cyksj.model.entity.GoodsDonSku;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
+import java.math.BigDecimal;
 import java.util.Set;
 
 /*
@@ -24,5 +24,10 @@ public class EquipmentConfigDto {
 	/**
 	 * 车票时长权益配置
 	 */
-	private List<GoodsDonSku> skuList;
+	private Set<GoodsDonSku> skuList;
+
+	/**
+	 * 余额
+	 */
+	private BigDecimal balance;
 }

+ 0 - 23
netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserChanceRecord.java

@@ -1,14 +1,8 @@
 package com.cyksj.model.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.DbIgnore;
-import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.Date;
-
 /*
  *项目名: netflix
  *文件名: EquipmentUserChanceRecord
@@ -17,38 +11,21 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "equipment_user_chance_record er")
 public class EquipmentUserChanceRecord extends BaseEntity{
 	/**
 	 * 受益人id
 	 */
-	@DbField("er.share_id")
 	private Long shareId;
 
 	/**
 	 * 被邀请人id
 	 */
-	@DbField("er.user_id")
 	private Long userId;
 
-	@DbField("er.order_id")
 	private Long orderId;
 
-	@DbField("er.status")
 	private Status status;
 
-	@DbIgnore
-	@TableField(exist = false)
-	private String nickname;
-
-	@DbIgnore
-	@TableField(exist = false)
-	private Date payTime;
-
-	@DbIgnore
-	@TableField(exist = false)
-	private String headImg;
-
 
 	@Getter
 	public enum Status {

+ 44 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserDistributeTransportBenefits.java

@@ -0,0 +1,44 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: EquipmentUserDistributeTransportBenefits
+ *创建者: JavaZou
+ *创建时间:2023/8/9 10:03
+ */
+@Getter
+@Setter
+public class EquipmentUserDistributeTransportBenefits extends BaseEntity{
+	/**
+	 * 实物分销人id
+	 */
+	private Long shareId;
+
+	private Long orderId;
+
+	private BigDecimal balance;
+
+	private Status status;
+
+	private Date sendTime;
+
+	@Getter
+	public enum Status {
+		hasPayment("已付款"),
+		transport("已发货"),
+		refund("已退款"),
+		complete("已完成"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
+}

+ 68 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentUserPayRecord.java

@@ -0,0 +1,68 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: EquipmentUserPayRecord
+ *创建者: JavaZou
+ *创建时间:2023/8/9 18:25
+ */
+@Getter
+@Setter
+@SearchBean(tables = "equipment_user_pay_record er")
+public class EquipmentUserPayRecord extends BaseEntity{
+	/**
+	 * 受益人id
+	 */
+	@DbField("er.share_id")
+	private Long shareId;
+
+	/**
+	 * 被邀请人id
+	 */
+	@DbField("er.user_id")
+	private Long userId;
+
+	@DbField("er.order_id")
+	private Long orderId;
+
+	@DbField("er.status")
+	private Status status;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private String nickname;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private Date payTime;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private String headImg;
+
+	@DbField("er.type")
+	private Integer type;
+
+
+	@Getter
+	public enum Status {
+		hasPayment("已购买"),
+		waiting("待到账"),
+		refund("已退款"),
+		;
+		String msg;
+
+		Status(String msg) {
+			this.msg = msg;
+		}
+	}
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDonSku.java

@@ -6,6 +6,7 @@ import com.cyksj.model.views.GoodsDiscountPlusPurchaseRelationFrontView;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -19,6 +20,7 @@ import java.util.List;
 @Getter
 @Setter
 @SearchBean(tables = "goods_don_sku")
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class GoodsDonSku extends BaseEntity {
 
     private Long goodsId;

+ 7 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/UserBalanceSourceRecord.java

@@ -22,8 +22,14 @@ public class UserBalanceSourceRecord extends BaseEntity{
 
 	@Getter
 	public enum Source {
+		payment("下单"),
+		balance("余额支付"),
 		refund("订单退款"),
-		clear_valid("车票未到期清除")
+		close("订单关闭"),
+		clear_valid("车票未到期清除"),
+		ds_transport("分销实物发货"),
+		follow_task("关注引导"),
+		rd_comment("实物评论"),
 		;
 		String desc;
 

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/EquipmentUserDistributeDetailView.java

@@ -18,7 +18,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "equipment_user_chance_record ecr left join order_don od on od.id = ecr.order_id")
+@SearchBean(tables = "equipment_user_pay_record ecr left join order_don od on od.id = ecr.order_id")
 public class EquipmentUserDistributeDetailView {
 	@DbField("ecr.id")
 	private Long recordId;

+ 4 - 7
netflix-dao/src/main/java/com/cyksj/model/views/EquipmentUserDistributeViews.java

@@ -6,7 +6,6 @@ import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.Date;
 import java.util.List;
 
 /*
@@ -17,12 +16,13 @@ import java.util.List;
  */
 @Getter
 @Setter
-@SearchBean(tables = "equipment_user_chance ec")
+@SearchBean(tables = "equipment_user_distribute_invite_record ec left join user u on u.id = ec.share_id",
+		groupBy = "ec.share_id,u.nickname")
 public class EquipmentUserDistributeViews {
-	@DbField("ec.user_id")
+	@DbField("ec.share_id")
 	private Long shareId;
 
-	@DbIgnore
+	@DbField("u.nickname")
 	private String nickname;
 
 	/**
@@ -33,7 +33,4 @@ public class EquipmentUserDistributeViews {
 
 	@DbIgnore
 	private List<EquipmentBenefitsView> benefitsViews;
-
-	@DbField("ec.created_time")
-	private Date createdTime;
 }

+ 120 - 54
netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.cyksj.service.distribute.equipment.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
@@ -9,10 +10,7 @@ import com.cyksj.common.constant.Constant;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.OrderDonMapper;
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceMapper;
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceRecordMapper;
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserDistributeInviteRecordMapper;
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserReceiveBenefitsRecordMapper;
+import com.cyksj.mapper.manage.distribute.equipment.*;
 import com.cyksj.model.dto.EquipmentConfigDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.RealGoodsOrderDonView;
@@ -66,6 +64,10 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 
 	private final BeanSearcher beanSearcher;
 
+	private final EquipmentUserDistributeTransportBenefitsMapper transportBenefitsMapper;
+
+	private final EquipmentUserPayRecordMapper equipmentUserPayRecordMapper;
+
 	@Override
 	public void saveDistributionInvitation(Long sharedId, Boolean isNewUser, Long userId) {
 		if (sharedId.equals(userId)) {
@@ -108,30 +110,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 		EquipmentUserDistributeInviteRecord record = getDistributeRecord(userId);
 		if (record != null) {
 			Long sharId = record.getShareId();
-			if (saveInviteRecord(sharId, userId, orderId, EquipmentUserChanceRecord.Status.hasPayment)) {
-				SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
-						.eq(SysConfig::getSysKey, Constant.EQUIPMENT_DISTRIBUTE_KEY).last("limit 1"));
-				String sysValue = config.getSysValue();
-				//未配置车票权益 不增加次数
-				if (StrUtil.isEmpty(sysValue)) {
-					return;
-				}
-				EquipmentUserChance chance = equipmentUserChanceMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChance.class)
-						.eq(EquipmentUserChance::getUserId, sharId)
-						.last("limit 1"));
-				if (chance == null) {
-					try {
-						chance = new EquipmentUserChance();
-						chance.setUserId(sharId);
-						chance.setNum(1);
-						equipmentUserChanceMapper.insert(chance);
-					} catch (DuplicateKeyException e) {
-						equipmentUserChanceMapper.addUserChance(sharId);
-					}
-				} else {
-					equipmentUserChanceMapper.addUserChance(sharId);
-				}
-			}
+			saveInviteRecord(sharId, userId, orderId, 1);
 		}
 	}
 
@@ -140,13 +119,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 		EquipmentUserDistributeInviteRecord record = getDistributeRecord(userId);
 		if (record != null) {
 			Long sharId = record.getShareId();
-			if (saveInviteRecord(sharId, userId, orderId, EquipmentUserChanceRecord.Status.refund)) {
-				Integer update = equipmentUserChanceMapper.subUserChance(sharId);
-				if (update == 0) {
-					//扣除权益
-					deductUserBenefits(sharId, orderId);
-				}
-			}
+			saveInviteRecord(sharId, userId, orderId, 2);
 		}
 	}
 
@@ -161,22 +134,54 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 		return record;
 	}
 
-	public Boolean saveInviteRecord(Long sharId, Long userId, Long orderId, EquipmentUserChanceRecord.Status status) {
-		EquipmentUserChanceRecord record = equipmentUserChanceRecordMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChanceRecord.class)
-				.eq(EquipmentUserChanceRecord::getUserId, userId)
-				.eq(EquipmentUserChanceRecord::getStatus, status)
-				.eq(EquipmentUserChanceRecord::getOrderId, orderId)
-				.last("limit 1"));
-		if (record != null) {
-			return false;
+	public void saveInviteRecord(Long sharId, Long userId, Long orderId, Integer type) {
+		EquipmentConfigDto equipmentConfigDto = checkEquipmentConfigDto();
+		Integer benefitsType = 1;
+		if (equipmentConfigDto != null && type == 1) {
+			//配置车票权益
+			if (CollUtil.isNotEmpty(equipmentConfigDto.getSkuList())) {
+				addTicketBenefitsChance(sharId, userId, orderId, EquipmentUserChanceRecord.Status.hasPayment);
+			}
+
+			//已配置余额  实物发货 发送余额
+			if (equipmentConfigDto.getBalance() != null && equipmentConfigDto.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+				addBalanceBenefits(sharId, orderId, equipmentConfigDto.getBalance(), EquipmentUserDistributeTransportBenefits.Status.hasPayment);
+				benefitsType = 2;
+			}
+			EquipmentUserPayRecord record = new EquipmentUserPayRecord();
+			record.setShareId(sharId);
+			record.setUserId(userId);
+			record.setStatus(EquipmentUserPayRecord.Status.hasPayment);
+			record.setOrderId(orderId);
+			//1、车票权益,2、余额
+			record.setType(benefitsType);
+			equipmentUserPayRecordMapper.insert(record);
+		}
+		if (type == 2) {
+			//是否有余额权益
+			EquipmentUserDistributeTransportBenefits transportBenefits = transportBenefitsMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserDistributeTransportBenefits.class)
+					.eq(EquipmentUserDistributeTransportBenefits::getOrderId, orderId).last("limit 1"));
+			if (transportBenefits != null && transportBenefits.getStatus() != EquipmentUserDistributeTransportBenefits.Status.complete) {
+				transportBenefits.setStatus(EquipmentUserDistributeTransportBenefits.Status.refund);
+				transportBenefitsMapper.updateById(transportBenefits);
+			}
+			//是否有车票权益
+			int update = equipmentUserChanceRecordMapper.update(null, Wrappers.lambdaUpdate(EquipmentUserChanceRecord.class)
+					.set(EquipmentUserChanceRecord::getStatus, EquipmentUserChanceRecord.Status.refund)
+					.eq(EquipmentUserChanceRecord::getOrderId, orderId)
+					.eq(EquipmentUserChanceRecord::getStatus, EquipmentUserChanceRecord.Status.hasPayment));
+			if (update > 0) {
+				update = equipmentUserChanceMapper.subUserChance(sharId);
+				if (update == 0) {
+					//扣除权益
+					deductUserBenefits(sharId, orderId);
+				}
+			}
+			equipmentUserPayRecordMapper.update(null, Wrappers.lambdaUpdate(EquipmentUserPayRecord.class)
+					.set(EquipmentUserPayRecord::getStatus, EquipmentUserPayRecord.Status.refund)
+					.eq(EquipmentUserPayRecord::getOrderId, orderId)
+					.ne(EquipmentUserPayRecord::getStatus, EquipmentUserChanceRecord.Status.refund));
 		}
-		record = new EquipmentUserChanceRecord();
-		record.setShareId(sharId);
-		record.setUserId(userId);
-		record.setStatus(status);
-		record.setOrderId(orderId);
-		equipmentUserChanceRecordMapper.insert(record);
-		return true;
 	}
 
 	public void deductUserBenefits(Long userId, Long orderId) {
@@ -233,12 +238,73 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
 			EquipmentConfigDto equipmentConfigDto = null;
 			try {
 				equipmentConfigDto = Jsons.parseObject(config.getSysValue(), EquipmentConfigDto.class);
-				equipmentConfigDto.getCouponIds().forEach(couponId->{
-					couponCommonService.sendCouponToUser(userId, couponId, null, null, null, CouponUser.Channel.equipment);
-				});
-				redisService.set(RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getNameFormat(userId), userId, RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getTimeout());
+				if (equipmentConfigDto != null && CollUtil.isNotEmpty(equipmentConfigDto.getCouponIds())) {
+					equipmentConfigDto.getCouponIds().forEach(couponId -> {
+						couponCommonService.sendCouponToUser(userId, couponId, null, null, null, CouponUser.Channel.equipment);
+					});
+					redisService.set(RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getNameFormat(userId), userId, RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getTimeout());
+				}
 			} catch (Exception e) {
 			}
 		});
 	}
+
+	public EquipmentConfigDto checkEquipmentConfigDto() {
+		//是否有配置车票权益
+		SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+				.eq(SysConfig::getSysKey, Constant.EQUIPMENT_DISTRIBUTE_KEY).last("limit 1"));
+		if (config == null) {
+			return null;
+		}
+		String sysValue = config.getSysValue();
+		//未配置权益
+		if (StrUtil.isEmpty(sysValue)) {
+			return null;
+		}
+		EquipmentConfigDto equipmentConfigDto = null;
+		try {
+			equipmentConfigDto = Jsons.parseObject(sysValue, EquipmentConfigDto.class);
+		} catch (Exception e) {
+			return null;
+		}
+		return equipmentConfigDto;
+	}
+
+	public void addBalanceBenefits(Long sharId, Long orderId, BigDecimal balance, EquipmentUserDistributeTransportBenefits.Status status) {
+		log.info("分销人:{}记录分享有礼实物订单:{}余额权益,待发货后发送", sharId, orderId);
+		EquipmentUserDistributeTransportBenefits transportBenefits = new EquipmentUserDistributeTransportBenefits();
+		transportBenefits.setShareId(sharId);
+		transportBenefits.setOrderId(orderId);
+		transportBenefits.setStatus(status);
+		transportBenefits.setBalance(balance);
+		transportBenefitsMapper.insert(transportBenefits);
+	}
+
+	public void addTicketBenefitsChance(Long sharId, Long userId, Long orderId, EquipmentUserChanceRecord.Status status) {
+		try {
+			EquipmentUserChanceRecord record = new EquipmentUserChanceRecord();
+			record.setShareId(sharId);
+			record.setUserId(userId);
+			record.setStatus(status);
+			record.setOrderId(orderId);
+			equipmentUserChanceRecordMapper.insert(record);
+
+			EquipmentUserChance chance = equipmentUserChanceMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChance.class)
+					.eq(EquipmentUserChance::getUserId, sharId)
+					.last("limit 1"));
+			if (chance == null) {
+				try {
+					chance = new EquipmentUserChance();
+					chance.setUserId(sharId);
+					chance.setNum(1);
+					equipmentUserChanceMapper.insert(chance);
+				} catch (DuplicateKeyException e) {
+					equipmentUserChanceMapper.addUserChance(sharId);
+				}
+			} else {
+				equipmentUserChanceMapper.addUserChance(sharId);
+			}
+		} catch (DuplicateKeyException e) {
+		}
+	}
 }

+ 19 - 7
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -28,6 +28,7 @@ import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserDistributeTransportBenefitsMapper;
 import com.cyksj.mapper.manage.sys.WorkOrderMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
 import com.cyksj.model.entity.*;
@@ -47,7 +48,6 @@ import com.cyksj.service.order.UserRealOrderBenefitsService;
 import com.cyksj.service.paypal.PayPalService;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.stripe.StripeService;
-import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
@@ -80,8 +80,6 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final GoodsDonStockService goodsDonStockService;
 
-    private final TemplateCommonService templateCommonService;
-
     private final GoodsDonSkuMapper goodsDonSkuMapper;
 
     private final UserRealOrderBenefitsService userRealOrderBenefitsService;
@@ -136,6 +134,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final OrderDiscountPlusPurchaseSkuRelationMapper orderDiscountPlusPurchaseSkuRelationMapper;
 
+    private final EquipmentUserDistributeTransportBenefitsMapper transportBenefitsMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -216,6 +216,20 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             waitingSendPoints.setIsDelivery(true);
             distributeWaitingSendPointsMapper.updateById(waitingSendPoints);
         }
+        //分销有礼 分销实物是否有发货后用户权益
+        EquipmentUserDistributeTransportBenefits transportBenefits = transportBenefitsMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserDistributeTransportBenefits.class)
+                .eq(EquipmentUserDistributeTransportBenefits::getOrderId, orderDon.getId())
+                .eq(EquipmentUserDistributeTransportBenefits::getStatus, EquipmentUserDistributeTransportBenefits.Status.hasPayment).last("limit 1"));
+        if (transportBenefits != null) {
+            if (transportBenefits.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                //7天后余额到账
+                transportBenefitsMapper.update(null, Wrappers.lambdaUpdate(EquipmentUserDistributeTransportBenefits.class)
+                        .set(EquipmentUserDistributeTransportBenefits::getStatus, EquipmentUserDistributeTransportBenefits.Status.transport)
+                        .set(EquipmentUserDistributeTransportBenefits::getSendTime, DateUtil.offsetDay(DateTime.now(), 7))
+                        .eq(EquipmentUserDistributeTransportBenefits::getOrderId, orderDon.getId())
+                        .eq(EquipmentUserDistributeTransportBenefits::getStatus, EquipmentUserDistributeTransportBenefits.Status.hasPayment));
+            }
+        }
         return orderDonWaybill;
     }
 
@@ -573,7 +587,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             //若存在余额支付,退还余额
             if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance());
+                userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.balance);
             }
             try {
                 marketFrontService.subSpecificChanceNum(orderDon.getUserId(), orderDon.getId(), orderDon.getGoodsId(), orderDon.getUpdateTime());
@@ -587,9 +601,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             if (OrderDon.Type.BALANCE.getType().equals(refundType)) {
                 if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
-                    userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance());
-                    //退款余额时,记录
-                    userBenefitsService.recordBalanceBySource(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.clear_valid);
+                    userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getRefundBalance(), UserBalanceSourceRecord.Source.refund);
                 }
             } else {
                 //余额退款不需要扣除积分

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/market/task/impl/TaskServiceImpl.java

@@ -154,7 +154,7 @@ public class TaskServiceImpl implements TaskService {
 						if (taskView != null) {
 							if ("关注引导".equals(taskView.getTypeName()) && taskView.getBalance().compareTo(BigDecimal.ZERO) > 0) {
 								//发送余额
-								userBenefitsService.addUserBalance(dbPlatVerify.getUserId(), taskView.getBalance());
+								userBenefitsService.addUserBalance(dbPlatVerify.getUserId(), taskView.getBalance(), UserBalanceSourceRecord.Source.follow_task);
 								record.setBalance(taskView.getBalance());
 							}
 						}

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

@@ -7,6 +7,7 @@ import com.cyksj.mapper.OrderCommentMapper;
 import com.cyksj.mapper.OrderCommentRewardConfigMapper;
 import com.cyksj.model.entity.OrderComment;
 import com.cyksj.model.entity.OrderCommentRewardConfig;
+import com.cyksj.model.entity.UserBalanceSourceRecord;
 import com.cyksj.service.order.OrderDonCommentService;
 import com.cyksj.service.user.UserBenefitsService;
 import lombok.RequiredArgsConstructor;
@@ -63,7 +64,7 @@ public class OrderDonCommentServiceImpl implements OrderDonCommentService {
 						.eq(OrderCommentRewardConfig::getGoodsId, goodsId).last("limit 1"));
 				if (orderCommentRewardConfig != null) {
 					BigDecimal balance = orderCommentRewardConfig.getBalance();
-					userBenefitsService.addUserBalance(orderComment.getUserId(), balance);
+					userBenefitsService.addUserBalance(orderComment.getUserId(), balance, UserBalanceSourceRecord.Source.rd_comment);
 					log.info("审核订单:{}评价成功,发放余额:{}", orderComment.getOrderId(), balance.divide(BigDecimal.valueOf(100)));
 					orderCommentMapper.update(null, Wrappers.lambdaUpdate(OrderComment.class)
 							.set(OrderComment::getBalance, balance)

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

@@ -664,7 +664,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 				//返还余额
 				if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance());
+					userBenefitsService.addUserBalance(orderDon.getUserId(), orderDon.getBalance(), UserBalanceSourceRecord.Source.close);
 				}
 			}
 		}
@@ -2003,6 +2003,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			Integer success = userMapper.deductBalance(user.getId(), subBalance, userBalance);
 			if (success != 1) throw BusinessRuntimeException.getInstance("您的余额不足!");
 			orderDon.setBalance(balance);
+			userBenefitsService.recordBalanceBySource(user.getId(), BigDecimal.valueOf(-balance.longValue()), UserBalanceSourceRecord.Source.payment);
 		}
 	}
 

+ 1 - 2
netflix-service/src/main/java/com/cyksj/service/scheduler/impl/SchedulerServiceImpl.java

@@ -198,9 +198,8 @@ public class SchedulerServiceImpl implements SchedulerService {
 							log.info("user_id:{},relationId:{}返回余额为0", userId, change_relationId);
 							return;
 						}
-						userBenefitsService.addUserBalance(userId, re_balance);
+						userBenefitsService.addUserBalance(userId, re_balance, UserBalanceSourceRecord.Source.clear_valid);
 						log.info("车票未到期清除,退款至用户user_id:{}余额:{}成功", userId, re_balance);
-						userBenefitsService.recordBalanceBySource(userId, re_balance, UserBalanceSourceRecord.Source.clear_valid);
 						//修改订单状态 为退款
 						orderDon.setStatus(OrderDon.Status.refund);
 						orderDon.setRefundBalance(re_balance);

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/user/UserBenefitsService.java

@@ -26,7 +26,7 @@ public interface UserBenefitsService {
 	/**
 	 * 增加用户余额
 	 */
-	void addUserBalance(Long userId,BigDecimal addBalance);
+	void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source);
 
 	/**
 	 * 扣除用户余额

+ 23 - 3
netflix-service/src/main/java/com/cyksj/service/user/impl/UserBenefitsServiceImpl.java

@@ -1,11 +1,14 @@
 package com.cyksj.service.user.impl;
 
+import com.cyksj.common.EnvCommonService;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper;
 import com.cyksj.mapper.UserBalanceSourceRecordMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.UserBalanceSourceRecord;
+import com.cyksj.service.sms.SmsService;
 import com.cyksj.service.user.UserBenefitsService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.dao.DuplicateKeyException;
@@ -28,6 +31,10 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 
 	private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
 
+	private final EnvCommonService envCommonService;
+
+	private final SmsService smsService;
+
 	@Override
 	public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
 		if (deductPoints.compareTo(BigDecimal.ZERO) <= 0) {
@@ -61,7 +68,7 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 	}
 
 	@Override
-	public void addUserBalance(Long userId, BigDecimal addBalance) {
+	public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source) {
 		if (addBalance.compareTo(BigDecimal.ZERO) <= 0) {
 			return;
 		}
@@ -70,7 +77,20 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 			if (user == null) break;
 			BigDecimal balance = user.getBalance();
 			Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
-			if (success == 1) break;
+			if (success == 1) {
+				recordBalanceBySource(userId, addBalance, source);
+				if (envCommonService.isPrdEnv()) {
+					if (source != UserBalanceSourceRecord.Source.close && source != UserBalanceSourceRecord.Source.balance) {
+						try {
+							//短信到账提醒
+							String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
+							smsService.sendSmsToRelationUser(userId, msg);
+						} catch (Exception e) {
+						}
+					}
+				}
+				break;
+			}
 		}
 	}
 
@@ -105,7 +125,7 @@ public class UserBenefitsServiceImpl implements UserBenefitsService {
 		UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
 		userBalanceSourceRecord.setUserId(userId);
 		userBalanceSourceRecord.setBalance(balance);
-		userBalanceSourceRecord.setSource(UserBalanceSourceRecord.Source.clear_valid);
+		userBalanceSourceRecord.setSource(source);
 		userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
 	}
 }

+ 7 - 0
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -372,6 +372,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		String dsCode = loginReq.getDsCode();
 		Long sharedId = loginReq.getSharedId();
 		Long dsPopularizeId = null;
+		Integer dsType = loginReq.getDsType();
+		Boolean isNewUser = false;
 		if (StrUtil.isNotBlank(dsCode)) {
 			dsCode = dsCode.trim();
 			User sharedUser = this.getOne(Wrappers.lambdaQuery(User.class)
@@ -391,6 +393,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		}
 		if (user == null) {
 			user = new User();
+			isNewUser = true;
 			StringBuilder name = new StringBuilder();
 			name.append(Constant.DEFAULT_NAME);
 			if (loginReq.getPopularizeId() != null) {
@@ -448,6 +451,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		if (StrUtil.isEmpty(user.getShowId())) {
 			user.setShowId(getUserShowId(user.getId()));
 		}
+		//新旧用户都可实物分销
+		if (sharedId != null && dsType != null && dsType == 2) {
+			equipDistributeService.saveDistributionInvitation(sharedId, isNewUser, user.getId());
+		}
 		return user;
 	}
 

+ 12 - 4
netflix-web/src/main/java/com/cyksj/web/controller/distribute/EquipmentDistributeController.java

@@ -1,5 +1,6 @@
 package com.cyksj.web.controller.distribute;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -97,10 +98,10 @@ public class EquipmentDistributeController {
 	 * 邀请好友明细
 	 */
 	@GetMapping("/get/invite/record")
-	public Result<SearchResult<EquipmentUserChanceRecord>> getInviteRecord() {
+	public Result<SearchResult<EquipmentUserPayRecord>> getInviteRecord() {
 		Long userId = StpUserUtil.getLoginIdAsLong();
-		SearchResult<EquipmentUserChanceRecord> search = beanSearcher.search(EquipmentUserChanceRecord.class, MapUtils.flatBuilder(request.getParameterMap())
-				.field(EquipmentUserChanceRecord::getShareId, userId)
+		SearchResult<EquipmentUserPayRecord> search = beanSearcher.search(EquipmentUserPayRecord.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(EquipmentUserPayRecord::getShareId, userId)
 				.build());
 		search.getDataList().forEach(data -> {
 			Optional.ofNullable(userMapper.selectById(data.getUserId())).ifPresent(user -> {
@@ -124,7 +125,11 @@ public class EquipmentDistributeController {
 		if (config != null) {
 			String sysValue = config.getSysValue();
 			if (StrUtil.isNotBlank(sysValue)) {
-				goodsIds = Jsons.parseObject(sysValue, EquipmentConfigDto.class).getSkuList().stream().map(GoodsDonSku::getGoodsId).collect(Collectors.toList());
+				EquipmentConfigDto equipmentConfigDto = Jsons.parseObject(sysValue, EquipmentConfigDto.class);
+				if (CollUtil.isEmpty(equipmentConfigDto.getSkuList())) {
+					return GatewayResponse.SUCCESS.newBuilder().toResult();
+				}
+				goodsIds = equipmentConfigDto.getSkuList().stream().map(GoodsDonSku::getGoodsId).collect(Collectors.toList());
 			}
 		}
 		MapBuilder builder = MapUtils.builder()
@@ -154,6 +159,9 @@ public class EquipmentDistributeController {
 			throw BusinessRuntimeException.getInstance("");
 		}
 		EquipmentConfigDto equipmentConfigDto = Jsons.parseObject(sysValue, EquipmentConfigDto.class);
+		if (CollUtil.isEmpty(equipmentConfigDto.getSkuList())) {
+			throw BusinessRuntimeException.getInstance("暂无该车票权益");
+		}
 		Optional<GoodsDonSku> first = equipmentConfigDto.getSkuList().stream().filter(goodsDonSku -> {
 			if (goodsDonSku.getId().equals(skuId)) {
 				return true;

+ 9 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java

@@ -17,7 +17,7 @@ import com.cyksj.model.manage.views.UserView;
 import com.cyksj.model.request.UserFuncPropertyReq;
 import com.cyksj.model.views.*;
 import com.cyksj.service.relation.GroupRelationClearService;
-import com.cyksj.service.relation.GroupRelationFrontService;
+import com.cyksj.service.user.UserBindRelationService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;
@@ -56,7 +56,7 @@ public class CmsUserController{
 
     private final GroupsRelationMapper groupsRelationMapper;
 
-    private final GroupRelationFrontService groupRelationFrontService;
+    private final UserBindRelationService userBindRelationService;
 
     private final CorpUserFollowRelationMapper cmsUserFollowRelationMapper;
 
@@ -108,7 +108,13 @@ public class CmsUserController{
         Optional.ofNullable(user).ifPresent(u -> {
             u.setIsBlack(!u.getIsBlack());
             if (u.getIsBlack()) {
-                List<RenewalView> groupsRelations = groupRelationFrontService.getMyTicket(u.getId(), null);
+                List<Long> userIds = userBindRelationService.getRelationUserIdList(id, user);
+                List<RenewalView> groupsRelations = beanSearcher.searchAll(RenewalView.class, MapUtils.builder()
+                        .field(RenewalView::getUserId, 0).op(Operator.GreaterThan)
+                        .field(RenewalView::getUserId, userIds).op(Operator.InList)
+                        .field(RenewalView::getStatus, List.of("validity", "overdue", "outside")).op(Operator.InList)
+                        .orderBy(RenewalView::getExpiryTime).asc()
+                        .build());
                 groupsRelations.forEach(ticket -> {
                     GroupsRelation relation = groupsRelationMapper.selectById(ticket.getRelationId());
                     groupRelationClearService.clearTicket(relation, UserTicketClearedRecord.Source.black);

+ 5 - 7
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/EquipmentController.java

@@ -6,8 +6,8 @@ import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceRecordMapper;
-import com.cyksj.model.entity.EquipmentUserChanceRecord;
+import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserPayRecordMapper;
+import com.cyksj.model.entity.EquipmentUserPayRecord;
 import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.views.EquipmentBenefitsView;
@@ -43,7 +43,7 @@ public class EquipmentController {
 
 	private final CouponMapper couponMapper;
 
-	private final EquipmentUserChanceRecordMapper equipmentUserChanceRecordMapper;
+	private final EquipmentUserPayRecordMapper payRecordMapper;
 
 	private final GoodsDonSkuMapper goodsDonSkuMapper;
 
@@ -54,10 +54,8 @@ public class EquipmentController {
 	public Result<SearchResult<EquipmentUserDistributeViews>> getEquipmentDistribute() {
 		SearchResult<EquipmentUserDistributeViews> search = beanSearcher.search(EquipmentUserDistributeViews.class, MapUtils.flatBuilder(request.getParameterMap()).build());
 		search.getDataList().forEach(data -> {
-			User user = userMapper.selectById(data.getShareId());
-			Optional.ofNullable(user).ifPresent(u -> data.setNickname(u.getNickname()));
-			data.setRecordNum(equipmentUserChanceRecordMapper.selectCount(Wrappers.lambdaQuery(EquipmentUserChanceRecord.class)
-					.eq(EquipmentUserChanceRecord::getShareId, data.getShareId())));
+			data.setRecordNum(payRecordMapper.selectCount(Wrappers.lambdaQuery(EquipmentUserPayRecord.class)
+					.eq(EquipmentUserPayRecord::getShareId, data.getShareId())));
 			data.setBenefitsViews(beanSearcher.searchAll(EquipmentBenefitsView.class, MapUtils.builder().field(EquipmentBenefitsView::getSharId, data.getShareId()).build()));
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);

+ 23 - 1
netflix-web/src/main/java/com/cyksj/web/controller/sys/SysConfigController.java

@@ -1,14 +1,19 @@
 package com.cyksj.web.controller.sys;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.annotation.Log;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.manage.help.HelpQuestionClassificationMapper;
 import com.cyksj.mapper.manage.help.HelpQuestionMapper;
+import com.cyksj.model.dto.EquipmentConfigDto;
 import com.cyksj.model.entity.HelpQuestion;
 import com.cyksj.model.entity.HelpQuestionClassification;
 import com.cyksj.model.entity.SysConfig;
@@ -18,6 +23,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
+import java.util.HashSet;
+
 /**
  * @author chan
  * @date 2022/10/20 10:08 AM
@@ -55,7 +63,21 @@ public class SysConfigController {
 
 	@PutMapping("/update")
 	@Log(module = "系统设置/编辑配置", businessType = BusinessType.PUT, isSaveRequestData = true)
-	public Result<SysConfig> update(@RequestBody SysConfig sysConfig) {
+	public Result<SysConfig> update(@RequestBody SysConfig sysConfig) throws Exception {
+		if (Constant.EQUIPMENT_DISTRIBUTE_KEY.equals(sysConfig.getSysKey())) {
+			String sysValue = sysConfig.getSysValue();
+			if (StrUtil.isNotBlank(sysValue)) {
+				EquipmentConfigDto equipmentConfigDto = Jsons.parseObject(sysValue, EquipmentConfigDto.class);
+				if (CollUtil.isNotEmpty(equipmentConfigDto.getSkuList())) {
+					equipmentConfigDto.setBalance(BigDecimal.ZERO);
+				}
+				if (equipmentConfigDto.getBalance() != null && equipmentConfigDto.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+					equipmentConfigDto.setSkuList(new HashSet<>());
+				}
+				sysConfig.setSysValue(Jsons.toJson(equipmentConfigDto));
+			}
+		}
+
 		sysConfigService.updateById(sysConfig);
 
 		return GatewayResponse.SUCCESS.newBuilder().toResult(sysConfig);