|
|
@@ -23,7 +23,9 @@ import org.springblade.sing.active.service.IActiveRecordService;
|
|
|
import org.springblade.sing.goods.entity.HelpGoods;
|
|
|
import org.springblade.sing.goods.service.IHelpGoodsService;
|
|
|
import org.springblade.sing.heat.entity.HeatRecord;
|
|
|
+import org.springblade.sing.heat.entity.UserHeat;
|
|
|
import org.springblade.sing.heat.service.IHeatRecordService;
|
|
|
+import org.springblade.sing.heat.service.IUserHeatService;
|
|
|
import org.springblade.sing.point.entity.PointRecord;
|
|
|
import org.springblade.sing.point.service.IPointRecordService;
|
|
|
import org.springblade.sing.user.entity.LoginUser;
|
|
|
@@ -59,6 +61,8 @@ public class AppActiveProductServiceImpl implements AppActiveProductService {
|
|
|
private IHelpGoodsService helpGoodsService;
|
|
|
@Autowired
|
|
|
private PlatformSettingUtil platformSettingUtil;
|
|
|
+ @Autowired
|
|
|
+ private IUserHeatService userHeatService;
|
|
|
|
|
|
/**
|
|
|
* 活动助力
|
|
|
@@ -117,6 +121,47 @@ public class AppActiveProductServiceImpl implements AppActiveProductService {
|
|
|
Assert.isTrue(activeHelpRecordService.save(activeHelpRecord), "投票失败");
|
|
|
}
|
|
|
|
|
|
+// /**
|
|
|
+// * 更新活动作品的票数和热力值
|
|
|
+// * @param activeHelpRecord
|
|
|
+// * @param activeProductRecord
|
|
|
+// * @param activeSetting
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void updateProductVoteAndHeat(ActiveHelpRecord activeHelpRecord, ActiveProductRecord activeProductRecord, ActiveSettingDto activeSetting) {
|
|
|
+// //修改活动热力值和票数
|
|
|
+// activeProductRecord.setVoteCount(activeProductRecord.getVoteCount() + 1);
|
|
|
+//
|
|
|
+// //判断是否赠送热力值
|
|
|
+// if (ObjectUtils.isNotEmpty(activeSetting.getVoteAndHeatRate()) && !activeSetting.getVoteAndHeatRate().equals(BigDecimal.ZERO)) {
|
|
|
+// //查询参赛用户
|
|
|
+// LoginUser productUser = loginUserService.getOne(Wrappers.<LoginUser>lambdaQuery().eq(LoginUser::getPhone, activeProductRecord.getPhone()));
|
|
|
+// Assert.notNull(productUser, "没有找到该参赛选手");
|
|
|
+//
|
|
|
+// //热力值=活动票数*热力值比例
|
|
|
+// BigDecimal heatValue = activeSetting.getVoteAndHeatRate()
|
|
|
+// .multiply(BigDecimal.valueOf(activeHelpRecord.getVoteCount()));
|
|
|
+//
|
|
|
+// //原热力值+投票热力值
|
|
|
+// productUser.setHeatValue(BigDecimal.valueOf(heatValue.doubleValue()).add(productUser.getHeatValue())); //必须克隆对象,防止事务状态下,使用同一个对象地址
|
|
|
+//
|
|
|
+// //添加热力值赠送记录=>赠送给参赛用户
|
|
|
+// HeatRecord heatRecord = new HeatRecord();
|
|
|
+// heatRecord.setActiveProductId(activeHelpRecord.getProductId());
|
|
|
+// heatRecord.setHeatValue(BigDecimal.valueOf(heatValue.doubleValue())); //必须克隆对象,防止事务状态下,使用同一个对象地址
|
|
|
+// heatRecord.setHeatType(HeatTypeEnum.HEAT_VALUE_SEND);
|
|
|
+// heatRecord.setUserId(productUser.getId());
|
|
|
+// Assert.isTrue(heatRecordService.save(heatRecord), "投票失败");
|
|
|
+// //修改活动热力值
|
|
|
+// activeProductRecord.setHeatValue(heatValue.add(activeProductRecord.getHeatValue()));
|
|
|
+// //放入ZSET缓存排名(缓存名:活动id,作品id,热力值)
|
|
|
+// Assert.isTrue(ActiveProductUtil.addProductRank(activeProductRecord), "投票失败");
|
|
|
+//
|
|
|
+// //修改参赛用户选手信息
|
|
|
+// Assert.isTrue(loginUserService.updateById(productUser), "投票失败");
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
* 更新活动作品的票数和热力值
|
|
|
* @param activeHelpRecord
|
|
|
@@ -131,30 +176,34 @@ public class AppActiveProductServiceImpl implements AppActiveProductService {
|
|
|
//判断是否赠送热力值
|
|
|
if (ObjectUtils.isNotEmpty(activeSetting.getVoteAndHeatRate()) && !activeSetting.getVoteAndHeatRate().equals(BigDecimal.ZERO)) {
|
|
|
//查询参赛用户
|
|
|
- LoginUser productUser = loginUserService.getOne(Wrappers.<LoginUser>lambdaQuery().eq(LoginUser::getPhone, activeProductRecord.getPhone()));
|
|
|
- Assert.notNull(productUser, "没有找到该参赛选手");
|
|
|
+ UserHeat userHeat = userHeatService.getOne(Wrappers.<UserHeat>lambdaQuery().eq(UserHeat::getPhone, activeProductRecord.getPhone()));
|
|
|
+ if(ObjectUtils.isEmpty(userHeat)){
|
|
|
+ userHeat = new UserHeat();
|
|
|
+ userHeat.setPhone(activeProductRecord.getPhone());
|
|
|
+ userHeat.setHeatValue(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
|
|
|
//热力值=活动票数*热力值比例
|
|
|
BigDecimal heatValue = activeSetting.getVoteAndHeatRate()
|
|
|
.multiply(BigDecimal.valueOf(activeHelpRecord.getVoteCount()));
|
|
|
|
|
|
//原热力值+投票热力值
|
|
|
- productUser.setHeatValue(BigDecimal.valueOf(heatValue.doubleValue()).add(productUser.getHeatValue())); //必须克隆对象,防止事务状态下,使用同一个对象地址
|
|
|
+ userHeat.setHeatValue(BigDecimal.valueOf(heatValue.doubleValue()).add(userHeat.getHeatValue())); //必须克隆对象,防止事务状态下,使用同一个对象地址
|
|
|
|
|
|
//添加热力值赠送记录=>赠送给参赛用户
|
|
|
HeatRecord heatRecord = new HeatRecord();
|
|
|
heatRecord.setActiveProductId(activeHelpRecord.getProductId());
|
|
|
heatRecord.setHeatValue(BigDecimal.valueOf(heatValue.doubleValue())); //必须克隆对象,防止事务状态下,使用同一个对象地址
|
|
|
heatRecord.setHeatType(HeatTypeEnum.HEAT_VALUE_SEND);
|
|
|
- heatRecord.setUserId(productUser.getId());
|
|
|
+ heatRecord.setPhone(userHeat.getPhone());
|
|
|
Assert.isTrue(heatRecordService.save(heatRecord), "投票失败");
|
|
|
//修改活动热力值
|
|
|
activeProductRecord.setHeatValue(heatValue.add(activeProductRecord.getHeatValue()));
|
|
|
//放入ZSET缓存排名(缓存名:活动id,作品id,热力值)
|
|
|
Assert.isTrue(ActiveProductUtil.addProductRank(activeProductRecord), "投票失败");
|
|
|
|
|
|
- //修改参赛用户选手信息
|
|
|
- Assert.isTrue(loginUserService.updateById(productUser), "投票失败");
|
|
|
+ //修改用户热力值信息
|
|
|
+ Assert.isTrue(userHeatService.saveOrUpdate(userHeat), "投票失败");
|
|
|
}
|
|
|
}
|
|
|
|