p-honggang.li
2 天以前 7c2c6a5e5b3d9f96aef3c67573aa62bbd9a3aa7f
src/main/java/com/webmanage/service/impl/PointsFlowServiceImpl.java
@@ -17,6 +17,7 @@
import com.webmanage.mapper.UserPointsMapper;
import com.webmanage.mapper.PointsTransactionMapper;
import com.webmanage.entity.PointsTransaction;
import com.webmanage.service.OrderInfoService;
import com.webmanage.service.PointsFlowService;
import com.webmanage.service.PointsRuleService;
import lombok.extern.slf4j.Slf4j;
@@ -45,6 +46,7 @@
    @Resource
    private PointsTransactionMapper pointsTransactionMapper;
    @Override
    public PageResult<PointsFlow> getPersonalPointsFlowPage(PointsFlowQueryDTO queryDTO) {
@@ -180,11 +182,11 @@
        }
        // 每日上限校验(分别校验)
        if (applyUser && userRule.getIsLimit() != null && userRule.getIsLimit() == 0) {
        if (applyUser && userRule.getIsLimit() != null && userRule.getIsLimit() == 1) {
            checkDailyLimitByRule(userId, unitId, userRule, userPointsChange);
        }
        if (applyProvider && providerRule.getIsLimit() != null && providerRule.getIsLimit() == 0) {
            checkDailyLimitByRule(providerId, providerId, providerRule, providerPointsChange);
        if (applyProvider && providerRule.getIsLimit() != null && providerRule.getIsLimit() == 1) {
            checkDailyLimitByRule(providerId, null, providerRule, providerPointsChange);
        }
        // 余额校验(仅在扣减时)
@@ -219,7 +221,7 @@
        if (applyProvider && providerPointsChange != 0) {
            PointsFlow providerFlow = new PointsFlow();
            providerFlow.setUserId(providerId);
            providerFlow.setUnitId(providerId);
            providerFlow.setUnitId(null);
            providerFlow.setDataType(ruleType);
            providerFlow.setDataCategory(addPointsFlowDTO.getCategory());
            providerFlow.setPoints(providerPointsChange);
@@ -231,8 +233,8 @@
            if (!providerSaved) {
                throw new BusinessException("保存提供者积分流水失败");
            }
            updateProviderUnitPoints(providerId, providerPointsChange);
            updateUserPointsByRule(providerId, null, userPointsChange);
            // updateProviderUnitPoints(providerId, providerPointsChange);
        }
        return true;
@@ -355,11 +357,14 @@
        QueryWrapper<PointsFlow> wrapper = new QueryWrapper<>();
        wrapper.eq("deleted", 0)
               .eq("user_id", userId)
               .eq("unit_id", unitId)
//               .eq("data_category", pointsRule.getRuleName())
                .eq("rule_id",pointsRule.getId())
                // .eq("data_type", 0)
               .ge("flow_time", startOfDay)
               .le("flow_time", endOfDay);
        if(StringUtils.hasText(unitId)){
            wrapper.eq("unit_id", unitId);
        }
        List<PointsFlow> todayFlows = list(wrapper);
        
@@ -372,14 +377,14 @@
        Integer dailyLimit = pointsRule.getDailyLimit();
        if (dailyLimit != null && dailyLimit > 0) {
            // 如果今日累计积分超过每日上限,则抛出异常
            if (Math.abs(todayTotal) >= dailyLimit) {
            if (Math.abs(todayTotal) > dailyLimit) {
                throw new BusinessException("今日该规则积分已达上限: " + dailyLimit);
            }
            
            // 如果加上当前积分会超过每日上限,则抛出异常
            if (Math.abs(todayTotal + currentPoints) > dailyLimit) {
                throw new BusinessException("本次积分操作将超过每日上限: " + dailyLimit + ",当前已累计: " + Math.abs(todayTotal));
            }
//            if (Math.abs(todayTotal + currentPoints) > dailyLimit) {
//                throw new BusinessException("本次积分操作将超过每日上限: " + dailyLimit + ",当前已累计: " + Math.abs(todayTotal));
//            }
        }
    }
@@ -490,7 +495,9 @@
            
            userPoints = new UserPoints();
            userPoints.setUserId(userId);
            userPoints.setUnitId(unitId);
            if(StringUtils.hasText(unitId)){
                userPoints.setUnitId(unitId);
            }
            userPoints.setBalance(pointsValue);
            userPoints.setTotalEarned(pointsValue > 0 ? pointsValue : 0);
            userPoints.setTotalConsumed(pointsValue < 0 ? Math.abs(pointsValue) : 0);
@@ -520,7 +527,7 @@
        }
        // 更新单位积分账户
        QueryWrapper<UserPoints> unitWrapper = new QueryWrapper<>();
         /* QueryWrapper<UserPoints> unitWrapper = new QueryWrapper<>();
        unitWrapper.eq("deleted", 0)
                  .eq("unit_id", unitId);
        
@@ -560,7 +567,7 @@
            
            unitPoints.setUpdateTime(LocalDateTime.now());
            userPointsMapper.updateById(unitPoints);
        }
        } */
    }
    /**
@@ -571,6 +578,7 @@
    public boolean deductUserPoints(DeductUserPointsDTO deductDTO) {
        try {
            String userId = deductDTO.getUserId();
            String providerId = deductDTO.getProviderId();
            String unitId = deductDTO.getUnitId();
            Integer points = deductDTO.getPoints();
            String orderId = deductDTO.getOrderId();
@@ -632,7 +640,15 @@
            if (inserted <= 0 || trans.getId() == null) {
                throw new BusinessException("保存积分交易记录失败");
            }
            // 为提供者新增积分
            AddPointsFlowDTO addPointsFlowDTO = new AddPointsFlowDTO();
            addPointsFlowDTO.setCategory("资源交易");
            addPointsFlowDTO.setCount(1);
            addPointsFlowDTO.setProviderId(providerId);
            addPointsFlowDTO.setRuleType(0);
            addPointsFlowDTO.setRuleNameCode("digital_product_transaction");
            addPointsFlowDTO.setDescription("产品交易");
            addPointsFlowByRule(addPointsFlowDTO);
            return true;
        } catch (Exception e) {
            log.error("扣减用户积分失败", e);