gongzuming
2024-09-19 a768dc3daa04d35fedfbe75c0a59b9b2545b85c4
src/main/java/com/mzl/flower/service/BaseService.java
@@ -1,8 +1,10 @@
package com.mzl.flower.service;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mzl.flower.base.cache.MarkupCacheClient;
import com.mzl.flower.base.cache.StringCacheClient;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.constant.Constants;
@@ -10,6 +12,7 @@
import com.mzl.flower.dto.response.payment.OrderSalesItemChargeDTO;
import com.mzl.flower.entity.customer.Customer;
import com.mzl.flower.entity.flower.*;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.entity.partner.Partner;
import com.mzl.flower.entity.payment.FeeService;
import com.mzl.flower.entity.payment.OrderItemSales;
@@ -17,23 +20,29 @@
import com.mzl.flower.entity.supplier.Supplier;
import com.mzl.flower.mapper.customer.CustomerMapper;
import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
import com.mzl.flower.mapper.member.MemberMapper;
import com.mzl.flower.mapper.partner.PartnerMapper;
import com.mzl.flower.mapper.supplier.SupplierMapper;
import com.mzl.flower.mapper.system.UserMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import static java.time.format.DateTimeFormatter.BASIC_ISO_DATE;
@Service
public class BaseService {
    @Autowired
@@ -56,6 +65,23 @@
    @Autowired
    private FlowerCategoryMapper flowerCategoryMapper;
    @Autowired
    private MemberMapper memberMapper;
    protected Member getMember(Long levelId){
        return memberMapper.selectById(levelId);
    }
    @Autowired
    private StringCacheClient stringCacheClient;
    @Autowired
    private TokenStore tokenStore;
    public static final String TOKEN_KEY = "TOKEN-KEY";
    public static final String SEPARATOR = ":";
    protected double getServiceFeeRate(List<FeeService> fees, Integer saleCount){
        int sc = saleCount == null ? 0 : saleCount;
@@ -113,10 +139,10 @@
        }
        if (platformSalesMap != null) {
            BigDecimal feePlatform = s.getFeePlatform();
            BigDecimal feePlatformPack = s.getFeePlatformPack();
            BigDecimal feePlatformCheck = s.getFeePlatformCheck();
            BigDecimal feePlatformTransport = s.getFeePlatformTransport();
            BigDecimal feePlatform = getAmount(s.getFeePlatform());
            BigDecimal feePlatformPack = getAmount(s.getFeePlatformPack());
            BigDecimal feePlatformCheck = getAmount(s.getFeePlatformCheck());
            BigDecimal feePlatformTransport = getAmount(s.getFeePlatformTransport());
            BigDecimal b = platformSalesMap.get(orderItemId);
            if (b == null) {
@@ -125,6 +151,10 @@
            b = b.add(feePlatform).add(feePlatformPack).add(feePlatformCheck).add(feePlatformTransport);
            platformSalesMap.put(orderItemId, b);
        }
    }
    protected BigDecimal getAmount(BigDecimal amount){
        return amount == null ? new BigDecimal(0) : amount;
    }
    protected void prepareSalesAmount(OrderSalesItem s
@@ -221,7 +251,7 @@
                    break;
                }
            }
            fp = fp.add(b);
            fp = fp.add(getAmount(b));
            dto.setFirstFee(b);
        }
@@ -280,7 +310,7 @@
                        break;
                }
            }
            fp = fp.add(b);
            fp = fp.add(getAmount(b));
            dto.setSecondFee(b);
            FlowerMarkupSpCg fmpsc = null;
@@ -335,7 +365,7 @@
                        break;
                }
            }
            fp = fp.add(b);
            fp = fp.add(getAmount(b));
            dto.setPartnerFee(b);
        }
@@ -373,7 +403,7 @@
                    break;
                }
            }
            fp = fp.add(b);
            fp = fp.add(getAmount(b));
        }
        //二次加价
@@ -431,7 +461,7 @@
                    break;
            }
        }
        fp = fp.add(b);
        fp = fp.add(getAmount(b));
        return fp;
    }
@@ -452,6 +482,45 @@
    protected Customer getCurrentCustomer(){
        Customer p = getCurrentCustomerWithoutCheck();
        if(p == null){
            throw new ValidationException("客户不存在");
        }
        return p;
    }
    /**
     * 计算会员单价
     *
     * @param price
     * @param member
     * @return
     */
    protected BigDecimal calculateMemberPrice(BigDecimal price, Member member){
        if(price == null || member == null){
            return price;
        }
        BigDecimal r = price;
        String discountType = member.getDiscountType();
        if(Constants.DISCOUNT_TYPE.ratio.name().equals(discountType)){
            BigDecimal discountRatio = getAmount(member.getDiscountRatio());
            r = price.multiply(discountRatio).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
        } else if (Constants.DISCOUNT_TYPE.amount.name().equals(discountType)){
            BigDecimal discountAmount = getAmount(member.getDiscountAmount());
            r = price.subtract(discountAmount);
        }
        if(r.doubleValue() < 0){
            r = new BigDecimal(0);
        }
        return r;
    }
    protected Customer getCustomerByUserId(String userId){
        Customer p = customerMapper.selectOne(new QueryWrapper<Customer>()
                .eq("user_id", userId));
        if(p == null){
            throw new ValidationException("客户不存在");
        }
@@ -637,4 +706,22 @@
        return null;
    }
    public void removeToken(String userId) {
        String tokenCache = stringCacheClient.get(TOKEN_KEY + SEPARATOR + userId);
        if (StringUtils.isNotBlank(tokenCache)) {
            //强制删除token,下线
            if (StringUtils.isNotBlank(tokenCache) && StringUtils.isNotBlank(userId)) {
                stringCacheClient.delete(TOKEN_KEY + SEPARATOR + userId);
                String tokenValue = tokenCache.replace(OAuth2AccessToken.BEARER_TYPE, StrUtil.EMPTY).trim();
                OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
                if (accessToken != null && StringUtils.isNotBlank(accessToken.getValue())) {
                    tokenStore.removeAccessToken(accessToken);
                    OAuth2RefreshToken refreshToken = accessToken.getRefreshToken();
                    tokenStore.removeRefreshToken(refreshToken);
                }
            }
        }
    }
}