diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/mapper/StClientMemberLevelDeductRuleMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/mapper/StClientMemberLevelDeductRuleMapper.java index fe0c813..7da1b8b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/mapper/StClientMemberLevelDeductRuleMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/mapper/StClientMemberLevelDeductRuleMapper.java @@ -8,10 +8,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.payment.entity.StClientMemberLevelDeductRule; -import org.jeecg.payment.entity.StClientMemberLevelDemotionTime; import org.jeecg.payment.vo.StClientMemberLevelDeductRuleVo; import org.jeecg.payment.vo.StClientMemberLevelDemotionTimeVO; +import java.util.Date; import java.util.List; /** @@ -25,5 +25,5 @@ public interface StClientMemberLevelDeductRuleMapper extends BaseMapper selectStClientMemberLevelDeductRulePage(Page page, @Param("vo") StClientMemberLevelDemotionTimeVO stClientMemberLevelDeductRule); - DateTime getMaxTimeByUserId(@Param("userId") String userId); + Date getMaxTimeByUserId(@Param("userId") String userId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/service/impl/StClientMemberLevelDeductRuleServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/service/impl/StClientMemberLevelDeductRuleServiceImpl.java index c404b78..647151d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/service/impl/StClientMemberLevelDeductRuleServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/payment/service/impl/StClientMemberLevelDeductRuleServiceImpl.java @@ -311,12 +311,11 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl> userListMaps = voListAll.stream().collect(Collectors.groupingBy(StRfidVo::getUserId)); for (Map.Entry> userListMap : userListMaps.entrySet()) { String userId = userListMap.getKey(); + List value = userListMap.getValue(); // 尝试获取锁,超时时间1分钟 String lockValue = redisLockUtil.tryLock(userId); if (lockValue == null) { @@ -324,24 +323,26 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl 1){//离线扣费 + value = filterRecentThanOneMinute(value,maxTime.getTime()); + if(value.size() > 1){//离线扣费 //加异步处理 - List finalVoListAll = voListAll; + List finalVoListAll = value; + //过滤时间小于1分钟的记录 CompletableFuture.runAsync(() -> { - unifiedDeductionInterface(finalVoListAll,restId,deviceCode,levelDeductRuleVo,false,maxTime); + unifiedDeductionInterface(finalVoListAll,restId,deviceCode,levelDeductRuleVo,false); }); } else {//在线扣费 - return unifiedDeductionInterface(voListAll,restId,deviceCode,levelDeductRuleVo,true,maxTime); + return unifiedDeductionInterface(value,restId,deviceCode,levelDeductRuleVo,true); } } catch (Exception e) { e.printStackTrace(); + return Result.error("扣费失败"); } finally { //释放锁 redisLockUtil.releaseLock(userId, lockValue); @@ -360,7 +361,7 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl unifiedDeductionInterface(List voListAll, String restId, String deviceCode, - StClientMemberLevelDeductRuleVo levelDeductRuleVo, Boolean online,DateTime maxTime) { + StClientMemberLevelDeductRuleVo levelDeductRuleVo, Boolean online) { long start = System.currentTimeMillis(); //声明在线扣费余额信息 StClientMemberSpendVO stClientMemberSpendVO = new StClientMemberSpendVO(); @@ -369,15 +370,6 @@ public class StClientMemberLevelDeductRuleServiceImpl extends JeecgServiceImpl Long.parseLong(vo.getDateTime()) - timestampMs > 6000) - .sorted(Comparator.comparing(a -> Long.parseLong(a.getDateTime()), Comparator.nullsLast(Comparator.naturalOrder()))) - .collect(Collectors.toList()); - } - // 将扣费信息按照餐次分组 Map> stringListMap = groupByMeal(voListAll, restId); StMiniMineBalanceVo stMiniMineBalanceVoOnline = new StMiniMineBalanceVo();