bug修改
This commit is contained in:
+2
-2
@@ -8,10 +8,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.jeecg.payment.entity.StClientMemberLevelDeductRule;
|
import org.jeecg.payment.entity.StClientMemberLevelDeductRule;
|
||||||
import org.jeecg.payment.entity.StClientMemberLevelDemotionTime;
|
|
||||||
import org.jeecg.payment.vo.StClientMemberLevelDeductRuleVo;
|
import org.jeecg.payment.vo.StClientMemberLevelDeductRuleVo;
|
||||||
import org.jeecg.payment.vo.StClientMemberLevelDemotionTimeVO;
|
import org.jeecg.payment.vo.StClientMemberLevelDemotionTimeVO;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,5 +25,5 @@ public interface StClientMemberLevelDeductRuleMapper extends BaseMapper<StClient
|
|||||||
*/
|
*/
|
||||||
List<StClientMemberLevelDeductRuleVo> selectStClientMemberLevelDeductRulePage(Page<StClientMemberLevelDeductRuleVo> page, @Param("vo") StClientMemberLevelDemotionTimeVO stClientMemberLevelDeductRule);
|
List<StClientMemberLevelDeductRuleVo> selectStClientMemberLevelDeductRulePage(Page<StClientMemberLevelDeductRuleVo> page, @Param("vo") StClientMemberLevelDemotionTimeVO stClientMemberLevelDeductRule);
|
||||||
|
|
||||||
DateTime getMaxTimeByUserId(@Param("userId") String userId);
|
Date getMaxTimeByUserId(@Param("userId") String userId);
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-19
@@ -311,12 +311,11 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl<S
|
|||||||
}
|
}
|
||||||
//去重
|
//去重
|
||||||
voListAll = filterDuplicateTimestamp(voListAll);
|
voListAll = filterDuplicateTimestamp(voListAll);
|
||||||
//过滤时间小于1分钟的记录
|
|
||||||
voListAll = filterRecentThanOneMinute(voListAll,System.currentTimeMillis());
|
|
||||||
|
|
||||||
Map<String, List<StRfidVo>> userListMaps = voListAll.stream().collect(Collectors.groupingBy(StRfidVo::getUserId));
|
Map<String, List<StRfidVo>> userListMaps = voListAll.stream().collect(Collectors.groupingBy(StRfidVo::getUserId));
|
||||||
for (Map.Entry<String, List<StRfidVo>> userListMap : userListMaps.entrySet()) {
|
for (Map.Entry<String, List<StRfidVo>> userListMap : userListMaps.entrySet()) {
|
||||||
String userId = userListMap.getKey();
|
String userId = userListMap.getKey();
|
||||||
|
List<StRfidVo> value = userListMap.getValue();
|
||||||
// 尝试获取锁,超时时间1分钟
|
// 尝试获取锁,超时时间1分钟
|
||||||
String lockValue = redisLockUtil.tryLock(userId);
|
String lockValue = redisLockUtil.tryLock(userId);
|
||||||
if (lockValue == null) {
|
if (lockValue == null) {
|
||||||
@@ -324,24 +323,26 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl<S
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
//根据用户获取之后一次扣费时间
|
//根据用户获取之后一次扣费时间
|
||||||
DateTime maxTime = baseMapper.getMaxTimeByUserId(userId);
|
Date maxTime = baseMapper.getMaxTimeByUserId(userId);
|
||||||
|
if(CollectionUtils.isEmpty(value)){
|
||||||
if(CollectionUtils.isEmpty(voListAll)){
|
|
||||||
return Result.error("扣费信息不能为空");
|
return Result.error("扣费信息不能为空");
|
||||||
}
|
}
|
||||||
//扣费规则(扣费类型(1:固定扣费,2:固定+补贴扣费,3:按量扣费,4:自定义金额))
|
//扣费规则(扣费类型(1:固定扣费,2:固定+补贴扣费,3:按量扣费,4:自定义金额))
|
||||||
StClientMemberLevelDeductRuleVo levelDeductRuleVo = this.getDeductRuleByCanteenId(restId);
|
StClientMemberLevelDeductRuleVo levelDeductRuleVo = this.getDeductRuleByCanteenId(restId);
|
||||||
if(voListAll.size() > 1){//离线扣费
|
value = filterRecentThanOneMinute(value,maxTime.getTime());
|
||||||
|
if(value.size() > 1){//离线扣费
|
||||||
//加异步处理
|
//加异步处理
|
||||||
List<StRfidVo> finalVoListAll = voListAll;
|
List<StRfidVo> finalVoListAll = value;
|
||||||
|
//过滤时间小于1分钟的记录
|
||||||
CompletableFuture.runAsync(() -> {
|
CompletableFuture.runAsync(() -> {
|
||||||
unifiedDeductionInterface(finalVoListAll,restId,deviceCode,levelDeductRuleVo,false,maxTime);
|
unifiedDeductionInterface(finalVoListAll,restId,deviceCode,levelDeductRuleVo,false);
|
||||||
});
|
});
|
||||||
} else {//在线扣费
|
} else {//在线扣费
|
||||||
return unifiedDeductionInterface(voListAll,restId,deviceCode,levelDeductRuleVo,true,maxTime);
|
return unifiedDeductionInterface(value,restId,deviceCode,levelDeductRuleVo,true);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
return Result.error("扣费失败");
|
||||||
} finally {
|
} finally {
|
||||||
//释放锁
|
//释放锁
|
||||||
redisLockUtil.releaseLock(userId, lockValue);
|
redisLockUtil.releaseLock(userId, lockValue);
|
||||||
@@ -360,7 +361,7 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl<S
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private Result<StClientMemberSpendVO> unifiedDeductionInterface(List<StRfidVo> voListAll, String restId, String deviceCode,
|
private Result<StClientMemberSpendVO> unifiedDeductionInterface(List<StRfidVo> voListAll, String restId, String deviceCode,
|
||||||
StClientMemberLevelDeductRuleVo levelDeductRuleVo, Boolean online,DateTime maxTime) {
|
StClientMemberLevelDeductRuleVo levelDeductRuleVo, Boolean online) {
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
//声明在线扣费余额信息
|
//声明在线扣费余额信息
|
||||||
StClientMemberSpendVO stClientMemberSpendVO = new StClientMemberSpendVO();
|
StClientMemberSpendVO stClientMemberSpendVO = new StClientMemberSpendVO();
|
||||||
@@ -369,15 +370,6 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl<S
|
|||||||
|
|
||||||
// 存储错误信息
|
// 存储错误信息
|
||||||
String errorMessages = null;
|
String errorMessages = null;
|
||||||
//用户最后一次扣费时间
|
|
||||||
if(maxTime != null){
|
|
||||||
//转毫秒级时间戳
|
|
||||||
long timestampMs = maxTime.getTime();
|
|
||||||
voListAll = voListAll.stream().filter(vo -> Long.parseLong(vo.getDateTime()) - timestampMs > 6000)
|
|
||||||
.sorted(Comparator.comparing(a -> Long.parseLong(a.getDateTime()), Comparator.nullsLast(Comparator.naturalOrder())))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将扣费信息按照餐次分组
|
// 将扣费信息按照餐次分组
|
||||||
Map<String, List<StRfidVo>> stringListMap = groupByMeal(voListAll, restId);
|
Map<String, List<StRfidVo>> stringListMap = groupByMeal(voListAll, restId);
|
||||||
StMiniMineBalanceVo stMiniMineBalanceVoOnline = new StMiniMineBalanceVo();
|
StMiniMineBalanceVo stMiniMineBalanceVoOnline = new StMiniMineBalanceVo();
|
||||||
|
|||||||
Reference in New Issue
Block a user