mitao
2024-11-01 a53a1f481278f981bab8030853b353a823a9cd81
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java
@@ -1,10 +1,27 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.domain.CustomConfig;
import com.google.common.collect.Lists;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.system.api.constants.ConfigEnum;
import com.ruoyi.system.api.domain.CustomConfig;
import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
import com.ruoyi.system.domain.dto.PointsConfigDTO;
import com.ruoyi.system.domain.vo.CustomConfigVO;
import com.ruoyi.system.domain.vo.WishSettingVO;
import com.ruoyi.system.mapper.CustomConfigMapper;
import com.ruoyi.system.service.ICustomConfigService;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -17,4 +34,304 @@
@Service
public class CustomConfigServiceImpl extends ServiceImpl<CustomConfigMapper, CustomConfig> implements ICustomConfigService {
    /**
     * 保存积分设置
     *
     * @param dto 积分配置数据传输对象
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void savePointsSettings(PointsConfigDTO dto) {
        Optional<CustomConfig> customConfigOptional = getCustomConfigByKey(
                ConfigEnum.MEMBER_POINTS_MONEY.getKey());
        CustomConfig moneyConfig = customConfigOptional.orElseGet(() -> {
            CustomConfig config = new CustomConfig();
            config.setConfigKey(ConfigEnum.MEMBER_POINTS_MONEY.getKey());
            config.setConfigType(ConfigEnum.MEMBER_POINTS_MONEY.getKeyType());
            config.setConfigName(ConfigEnum.MEMBER_POINTS_MONEY.getKeyName());
            return config;
        });
        moneyConfig.setConfigValue(dto.getConsumeAmount().toString());
        Optional<CustomConfig> customConfigByKey = getCustomConfigByKey(
                ConfigEnum.MEMBER_POINTS_POINTS.getKey());
        CustomConfig pointsConfig = customConfigByKey.orElseGet(() -> {
            CustomConfig config = new CustomConfig();
            config.setConfigKey(ConfigEnum.MEMBER_POINTS_POINTS.getKey());
            config.setConfigType(ConfigEnum.MEMBER_POINTS_POINTS.getKeyType());
            config.setConfigName(ConfigEnum.MEMBER_POINTS_POINTS.getKeyName());
            return config;
        });
        pointsConfig.setConfigValue(dto.getPoints().toString());
        this.saveOrUpdateBatch(Lists.newArrayList(moneyConfig, pointsConfig));
    }
    private Optional<CustomConfig> getCustomConfigByKey(String key) {
        return this.lambdaQuery()
                .eq(CustomConfig::getConfigKey, key)
                .eq(CustomConfig::getDelFlag, 0).oneOpt();
    }
    /**
     * 获取积分设置
     *
     * @return List<CustomConfigVO>
     */
    @Override
    public PointsConfigDTO getPointsConfig() {
        PointsConfigDTO dto = new PointsConfigDTO();
        List<CustomConfig> list = this.lambdaQuery()
                .in(CustomConfig::getConfigKey, ConfigEnum.MEMBER_POINTS_MONEY.getKey(),
                        ConfigEnum.MEMBER_POINTS_POINTS.getKey())
                .eq(CustomConfig::getDelFlag, 0).list();
        for (CustomConfig customConfig : list) {
            if (ConfigEnum.MEMBER_POINTS_MONEY.getKey().equals(customConfig.getConfigKey())) {
                dto.setConsumeAmount(
                        BigDecimal.valueOf(Double.parseDouble(customConfig.getConfigValue())));
            }
            if (ConfigEnum.MEMBER_POINTS_POINTS.getKey().equals(customConfig.getConfigKey())) {
                dto.setPoints(Integer.parseInt(customConfig.getConfigValue()));
            }
        }
        return dto;
    }
    /**
     * 获取订单说明设置
     *
     * @return CustomConfigVO
     */
    @Override
    public CustomConfigVO getOrderDesc() {
        CustomConfigVO vo;
        CustomConfig customConfig = getCustomConfigByKey(
                ConfigEnum.MALL_ORDER_DESCRIPTION.getKey()).orElse(new CustomConfig());
        vo = BeanUtils.copyBean(customConfig, CustomConfigVO.class);
        return vo;
    }
    /**
     * 订单说明设置
     *
     * @param description 订单说明
     */
    @Override
    public void saveOrderDescription(String description) {
        CustomConfig orderDescription = getCustomConfigByKey(
                ConfigEnum.MALL_ORDER_DESCRIPTION.getKey()).orElseGet(() -> {
            CustomConfig customConfig = new CustomConfig();
            customConfig.setConfigKey(ConfigEnum.MALL_ORDER_DESCRIPTION.getKey());
            customConfig.setConfigName(ConfigEnum.MALL_ORDER_DESCRIPTION.getKeyName());
            customConfig.setConfigType(ConfigEnum.MALL_ORDER_DESCRIPTION.getKeyType());
            return customConfig;
        });
        orderDescription.setConfigValue(description);
        this.saveOrUpdate(orderDescription);
    }
    /**
     * 售后设置
     *
     * @param dto 售后设置对象
     */
    @Override
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    public void saveAfterSaleSetting(MgtAfterSaleSettingDTO dto) {
        handleConfigSetting(dto.getReceiverName(), ConfigEnum.RETURN_ADDRESS_USER_NAME);
        handleConfigSetting(dto.getReceiverPhone(), ConfigEnum.RETURN_ADDRESS_USER_PHONE);
        handleConfigSetting(dto.getReceiverAddress(), ConfigEnum.RETURN_ADDRESS_USER_ADDRESS);
        handleConfigSetting(dto.getReturnCycle().toString(), ConfigEnum.RETURN_CYCLE);
    }
    private void handleConfigSetting(String value, ConfigEnum configEnum) {
        Optional<CustomConfig> configSettingOptional = getCustomConfigByKey(configEnum.getKey());
        CustomConfig configSetting = configSettingOptional.orElseGet(() -> {
            CustomConfig config = new CustomConfig();
            config.setConfigKey(configEnum.getKey());
            config.setConfigType(configEnum.getKeyType());
            config.setConfigName(configEnum.getKeyName());
            return config;
        });
        configSetting.setConfigValue(value);
        this.saveOrUpdate(configSetting);
    }
    /**
     * 获取售后设置
     *
     * @return List<CustomConfigVO>
     */
    @Override
    public MgtAfterSaleSettingDTO getAfterSaleSetting() {
        MgtAfterSaleSettingDTO dto = new MgtAfterSaleSettingDTO();
        List<CustomConfig> list = this.lambdaQuery()
                .in(CustomConfig::getConfigKey, ConfigEnum.RETURN_ADDRESS_USER_NAME,
                        ConfigEnum.RETURN_ADDRESS_USER_PHONE,
                        ConfigEnum.RETURN_ADDRESS_USER_ADDRESS, ConfigEnum.RETURN_CYCLE)
                .eq(CustomConfig::getDelFlag, 0).list();
        for (CustomConfig customConfig : list) {
            if (ConfigEnum.RETURN_ADDRESS_USER_NAME.getKey().equals(customConfig.getConfigKey())) {
                dto.setReceiverName(customConfig.getConfigValue());
            }
            if (ConfigEnum.RETURN_ADDRESS_USER_PHONE.getKey().equals(customConfig.getConfigKey())) {
                dto.setReceiverPhone(customConfig.getConfigValue());
            }
            if (ConfigEnum.RETURN_ADDRESS_USER_ADDRESS.getKey()
                    .equals(customConfig.getConfigKey())) {
                dto.setReceiverAddress(customConfig.getConfigValue());
            }
            if (ConfigEnum.RETURN_CYCLE.getKey().equals(customConfig.getConfigKey())) {
                dto.setReturnCycle(Integer.parseInt(customConfig.getConfigValue()));
            }
        }
        return dto;
    }
    /**
     * 保存客服电话
     *
     * @param phone 客服电话
     */
    @Override
    public void updateServicePhone(String phone) {
        Optional<CustomConfig> customConfigByKey = getCustomConfigByKey(
                ConfigEnum.PLATFORM_SERVICE_PHONE.getKey());
        if (customConfigByKey.isPresent()) {
            CustomConfig customConfig = customConfigByKey.get();
            String[] split = customConfig.getConfigValue().split(",");
            if (split.length > 1) {
                throw new ServiceException("客户电话最多配置两个");
            }
            boolean flag = Arrays.asList(split).contains(phone);
            if (flag) {
                throw new ServiceException("客户电话已存在");
            }
            if (StringUtils.isBlank(customConfig.getConfigValue())) {
                customConfig.setConfigValue(phone);
            } else {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(customConfig.getConfigValue());
                stringBuilder.append(",");
                stringBuilder.append(phone);
                customConfig.setConfigValue(stringBuilder.toString());
            }
            customConfig.setUpdateTime(LocalDateTime.now());
            this.updateById(customConfig);
        } else {
            CustomConfig config = new CustomConfig();
            config.setConfigKey(ConfigEnum.PLATFORM_SERVICE_PHONE.getKey());
            config.setConfigType(ConfigEnum.PLATFORM_SERVICE_PHONE.getKeyType());
            config.setConfigName(ConfigEnum.PLATFORM_SERVICE_PHONE.getKeyName());
            config.setConfigValue(phone);
            config.setCreateTime(LocalDateTime.now());
            this.save(config);
        }
    }
    /**
     * 获取客服电话
     *
     * @return 客服电话
     */
    @Override
    public String getServicePhone() {
        Optional<CustomConfig> customConfigByKey = getCustomConfigByKey(
                ConfigEnum.PLATFORM_SERVICE_PHONE.getKey());
        return customConfigByKey.map(CustomConfig::getConfigValue).orElse(null);
    }
    /**
     * 删除客户电话
     *
     * @param phone 客服电话
     */
    @Override
    public void deleteServicePhone(String phone) {
        Optional<CustomConfig> customConfigByKey = getCustomConfigByKey(
                ConfigEnum.PLATFORM_SERVICE_PHONE.getKey());
        if (customConfigByKey.isPresent()) {
            CustomConfig customConfig = customConfigByKey.get();
            String configValue = customConfig.getConfigValue();
            if (StringUtils.isNotBlank(configValue)) {
                String[] split = configValue.split(",");
                // 判断当前phone是否存在
                boolean flag = Arrays.asList(split).contains(phone);
                if (flag) {
                    // 删除 split 中与phone相同的元素
                    configValue = Arrays.stream(split).filter(s -> !s.equals(phone))
                            .collect(Collectors.joining(","));
                    customConfig.setConfigValue(configValue);
                    this.updateById(customConfig);
                }
            }
        }
    }
    /**
     * 获取心愿求购设置
     *
     * @return
     */
    @Override
    public WishSettingVO getWishSetting() {
        WishSettingVO vo = new WishSettingVO();
        CustomConfig customConfig = getCustomConfigByKey(
                ConfigEnum.WISH_DESCRIPTION.getKey()).orElse(new CustomConfig());
        List<CustomConfig> list = this.lambdaQuery()
                .in(CustomConfig::getConfigKey, ConfigEnum.WISH_DESCRIPTION.getKey(),
                        ConfigEnum.WISH_SHARE_TITLE.getKey(),
                        ConfigEnum.WISH_SHARE_IMG_URL.getKey())
                .eq(CustomConfig::getDelFlag, 0).list();
        for (CustomConfig config : list) {
            if (ConfigEnum.WISH_DESCRIPTION.getKey().equals(config.getConfigKey())) {
                vo.setDescription(customConfig.getConfigValue());
            } else if (ConfigEnum.WISH_SHARE_TITLE.getKey().equals(config.getConfigKey())) {
                vo.setShareTitle(config.getConfigValue());
            } else if (ConfigEnum.WISH_SHARE_IMG_URL.getKey().equals(config.getConfigKey())) {
                vo.setShareImgUrl(config.getConfigValue());
            }
        }
        return vo;
    }
    /**
     * 保存心愿求购说明
     *
     * @param vo 保存心愿求购说明
     */
    @Override
    public void saveWishDescription(WishSettingVO vo) {
        String description = vo.getDescription();
        String shareTitle = vo.getShareTitle();
        String shareImgUrl = vo.getShareImgUrl();
        CustomConfig wishDescription = getCustomConfigByKey(
                ConfigEnum.WISH_DESCRIPTION.getKey()).orElseGet(() -> {
            CustomConfig customConfig = new CustomConfig();
            customConfig.setConfigKey(ConfigEnum.WISH_DESCRIPTION.getKey());
            customConfig.setConfigName(ConfigEnum.WISH_DESCRIPTION.getKeyName());
            customConfig.setConfigType(ConfigEnum.WISH_DESCRIPTION.getKeyType());
            return customConfig;
        });
        wishDescription.setConfigValue(description);
        CustomConfig wishShareTitle = getCustomConfigByKey(
                ConfigEnum.WISH_SHARE_TITLE.getKey()).orElseGet(() -> {
            CustomConfig customConfig = new CustomConfig();
            customConfig.setConfigKey(ConfigEnum.WISH_SHARE_TITLE.getKey());
            customConfig.setConfigName(ConfigEnum.WISH_SHARE_TITLE.getKeyName());
            customConfig.setConfigType(ConfigEnum.WISH_SHARE_TITLE.getKeyType());
            return customConfig;
        });
        wishShareTitle.setConfigValue(shareTitle);
        CustomConfig wishShareImgUrl = getCustomConfigByKey(
                ConfigEnum.WISH_SHARE_IMG_URL.getKey()).orElseGet(() -> {
            CustomConfig customConfig = new CustomConfig();
            customConfig.setConfigKey(ConfigEnum.WISH_SHARE_IMG_URL.getKey());
            customConfig.setConfigName(ConfigEnum.WISH_SHARE_IMG_URL.getKeyName());
            customConfig.setConfigType(ConfigEnum.WISH_SHARE_IMG_URL.getKeyType());
            return customConfig;
        });
        wishShareImgUrl.setConfigValue(shareImgUrl);
        saveOrUpdateBatch(
                Lists.newArrayList(wishDescription, wishShareTitle, wishShareImgUrl));
    }
}