package com.mzl.flower.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.dto.request.configParam.ConfigParamDTO; import com.mzl.flower.dto.request.configParam.QueryConfigParamDTO; import com.mzl.flower.dto.request.configParam.UpdateConfigParamDTO; import com.mzl.flower.dto.response.configParam.ConfigCustomerServiceVO; import com.mzl.flower.dto.response.configParam.ConfigParamVO; import com.mzl.flower.entity.configParam.ConfigParamDO; import com.mzl.flower.enums.ConfigParamEnum; import com.mzl.flower.mapper.configParam.ConfigParamMapper; import com.mzl.flower.mapper.configParam.ConfigParamMapperCustom; import com.mzl.flower.service.ConfigParamService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author @TaoJie * @since 2024-12-02 */ @Service @RequiredArgsConstructor public class ConfigParamServiceImpl extends ServiceImpl implements ConfigParamService { private final ConfigParamMapperCustom configParamMapperCustom; private final ConfigParamMapper configParamMapper; private final RedissonClient redissonClient; private static final String CONFIG_PARAM= "com.mzl.flower.service.impl:config_param:%s"; @Override public List getList(QueryConfigParamDTO dto) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ConfigParamDO::getDeleted,false) .eq(Objects.nonNull(dto.getParamGroupId()),ConfigParamDO::getParamGroupId,dto.getParamGroupId()) .eq(StringUtils.isNotBlank(dto.getParamKey()),ConfigParamDO::getParamKey,dto.getParamKey()) .eq(StringUtils.isNotBlank(dto.getParamGroup()),ConfigParamDO::getParamGroup,dto.getParamGroup()) .eq(StringUtils.isNotBlank(dto.getParamGroupName()),ConfigParamDO::getParamGroupName,dto.getParamGroupName()) .eq(StringUtils.isNotBlank(dto.getParamName()),ConfigParamDO::getParamName,dto.getParamName()) ; return list(queryWrapper); } @Transactional @Override public boolean updateConfigParamBatch(UpdateConfigParamDTO dto) { if(CollectionUtils.isNotEmpty(dto.getParamList())){ // 遍历循环查找是否存在 List configParamUpdateList = dto.getParamList().stream().map(configParamDO -> { final ConfigParamDO configParamForUpdate = configParamMapperCustom.selectById(configParamDO.getId()); if (null == configParamForUpdate) { throw new ValidationException(String.format("ID:{}不存在!", configParamDO.getId())); } configParamForUpdate.setParamValue(configParamDO.getParamValue()); //更新订单自动取消(分钟); 订单自动收货(天) if ("order".equals(configParamForUpdate.getParamGroup())) { // 设置值到 Redis RBucket bucket = redissonClient.getBucket(CONFIG_PARAM + configParamForUpdate.getParamGroup() + configParamForUpdate.getParamKey()); bucket.set(configParamForUpdate.getParamValue()); } return configParamForUpdate; }).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(configParamUpdateList)){ return saveOrUpdateBatch(configParamUpdateList); } } return false; } @Override public Map getBaseInfo() { QueryConfigParamDTO dto=new QueryConfigParamDTO(); dto.setParamGroup(ConfigParamEnum.BASE.getName()); final List list = getList(dto); // 把数据转换成map ,只需要获取list中单个item的paramKey ,paramValue Map resultMap=new HashMap<>(); list.stream().forEach(item -> { resultMap.put(item.getParamKey(),item.getParamValue()); }); return resultMap; } @Override public String getBaseString(String paramGroup, String paramKey) { String bucketName = CONFIG_PARAM + paramGroup + paramKey; RBucket bucket = redissonClient.getBucket(bucketName); String value = bucket.get(); if (StringUtils.isNotBlank(value)) { return value; } else { String baseString = configParamMapper.getBaseString(paramGroup, paramKey); if (StringUtils.isNotBlank(baseString)) { return baseString; } else { if ("order_cancel_time".equals(paramKey) && "order".equals(paramGroup)) { // 默认15分钟 return "15"; } if ("order_auto_receive".equals(paramKey) && "order".equals(paramGroup)) { // 默认5前的订单自动收货 return "5"; } } } return null; } @Override public void saveConfigParam(ConfigParamDTO dto) { ConfigParamDO configParamDO = new ConfigParamDO(); BeanUtils.copyProperties(dto, configParamDO); configParamDO.create(SecurityUtils.getUserId()); configParamMapper.insert(configParamDO); } @Override public void updateConfigParam(ConfigParamDTO dto) { ConfigParamDO configParamDO = configParamMapper.selectById(dto.getId()); BeanUtils.copyProperties(dto, configParamDO); configParamDO.update(SecurityUtils.getUserId()); configParamMapper.updateById(configParamDO); } @Override public void deleteConfigParam(Long id) { configParamMapper.deleteById(id); } @Override public Page queryPage(QueryConfigParamDTO dto, Page page) { List list = configParamMapper.queryPage(dto, page); page.setRecords(list); return page; } }