|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | 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.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; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private Optional<CustomConfig> getCustomConfigByKey(String key) { | 
|---|
|  |  |  | return this.lambdaQuery() | 
|---|
|  |  |  | .eq(CustomConfig::getConfigType, key) | 
|---|
|  |  |  | .eq(CustomConfig::getConfigKey, key) | 
|---|
|  |  |  | .eq(CustomConfig::getDelFlag, 0).oneOpt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * @return List<CustomConfigVO> | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<CustomConfigVO> getPointsConfig() { | 
|---|
|  |  |  | public PointsConfigDTO getPointsConfig() { | 
|---|
|  |  |  | PointsConfigDTO dto = new PointsConfigDTO(); | 
|---|
|  |  |  | List<CustomConfig> list = this.lambdaQuery() | 
|---|
|  |  |  | .in(CustomConfig::getConfigType, ConfigEnum.MEMBER_POINTS_MONEY.getKey(), | 
|---|
|  |  |  | .in(CustomConfig::getConfigKey, ConfigEnum.MEMBER_POINTS_MONEY.getKey(), | 
|---|
|  |  |  | ConfigEnum.MEMBER_POINTS_POINTS.getKey()) | 
|---|
|  |  |  | .eq(CustomConfig::getDelFlag, 0).list(); | 
|---|
|  |  |  | return BeanUtils.copyList(list, CustomConfigVO.class); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|