|
@@ -0,0 +1,162 @@
|
|
|
|
|
+package cn.tr.module.sys.numStrategy.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.tr.core.exception.ServiceException;
|
|
|
|
|
+import cn.tr.core.exception.TRExcCode;
|
|
|
|
|
+import cn.tr.plugin.numbering.strategy.core.NumberingStrategyClientFactory;
|
|
|
|
|
+import cn.tr.plugin.numbering.strategy.core.NumberingStrategyClient;
|
|
|
|
|
+import cn.tr.plugin.numbering.strategy.core.properties.NumberingStrategyProperties;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.repository.SysNumberingStrategyRepository;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.po.SysNumberingStrategyPO;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.dto.SysNumberingStrategyDTO;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.dto.SysNumberingStrategyQueryDTO;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.service.ISysNumberingStrategyService;
|
|
|
|
|
+import cn.tr.module.sys.numStrategy.mapper.SysNumberingStrategyMapper;
|
|
|
|
|
+
|
|
|
|
|
+import javax.annotation.PostConstruct;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 编号策略Service接口实现类
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ **/
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class SysNumberingStrategyServiceImpl implements ISysNumberingStrategyService {
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private SysNumberingStrategyRepository baseRepository;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private NumberingStrategyClientFactory strategyClientFactory;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @PostConstruct
|
|
|
|
|
+ public void initLocalCache() {
|
|
|
|
|
+ List<SysNumberingStrategyPO> strategies = baseRepository.selectList(new LambdaQueryWrapper<>());
|
|
|
|
|
+ log.info("[initLocalCache][缓存编码策略,数量为:{}]", strategies.size());
|
|
|
|
|
+
|
|
|
|
|
+ List<NumberingStrategyProperties> properties = SysNumberingStrategyMapper.INSTANCE.convertProperties(strategies);
|
|
|
|
|
+ if(CollectionUtil.isNotEmpty(properties)){
|
|
|
|
|
+ properties.forEach(strategyClientFactory::createOrUpdateSmsClient);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String lookNextNumber(String strategyId) {
|
|
|
|
|
+ NumberingStrategyClient client = strategyClientFactory.getSerialStrategyClient(strategyId);
|
|
|
|
|
+ if(client==null){
|
|
|
|
|
+ SysNumberingStrategyDTO strategy = this.selectSysNumberingStrategyById(strategyId);
|
|
|
|
|
+ if(strategy==null){
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ client=strategyClientFactory.createOrUpdateSmsClient(SysNumberingStrategyMapper.INSTANCE.convertProperty(strategy));
|
|
|
|
|
+ }
|
|
|
|
|
+ return client.getNextFormatNum();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据条件查询编号策略
|
|
|
|
|
+ * @param query 查询参数
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<SysNumberingStrategyDTO> selectSysNumberingStrategyList(SysNumberingStrategyQueryDTO query){
|
|
|
|
|
+ return SysNumberingStrategyMapper.INSTANCE.convertDtoList(
|
|
|
|
|
+ baseRepository.selectList(new LambdaQueryWrapper<SysNumberingStrategyPO>()
|
|
|
|
|
+ .like(Objects.nonNull(query.getCode()),SysNumberingStrategyPO::getCode,
|
|
|
|
|
+ query.getCode())
|
|
|
|
|
+ .like(Objects.nonNull(query.getName()),SysNumberingStrategyPO::getName,
|
|
|
|
|
+ query.getName())
|
|
|
|
|
+ )
|
|
|
|
|
+ );
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据id查询编号策略
|
|
|
|
|
+ * @param id 主键id
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SysNumberingStrategyDTO selectSysNumberingStrategyById(String id){
|
|
|
|
|
+ SysNumberingStrategyDTO result = SysNumberingStrategyMapper.INSTANCE.convertDto(baseRepository.selectById(id));
|
|
|
|
|
+ NumberingStrategyClient client = getClient(result);
|
|
|
|
|
+ result.setNextNum(client.getNextNum());
|
|
|
|
|
+ result.setNextFormatNum(client.getNextFormatNum());
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SysNumberingStrategyDTO selectSysNumberingStrategyByCode(String code) {
|
|
|
|
|
+ return SysNumberingStrategyMapper.INSTANCE.convertDto(baseRepository.selectOne(new LambdaQueryWrapper<SysNumberingStrategyPO>()
|
|
|
|
|
+ .eq(SysNumberingStrategyPO::getCode,code)));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ ;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 编辑编号策略
|
|
|
|
|
+ * @param source 编辑实体类
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean updateSysNumberingStrategyById(SysNumberingStrategyDTO source){
|
|
|
|
|
+ SysNumberingStrategyPO strategyPO = SysNumberingStrategyMapper.INSTANCE.convertPO(source);
|
|
|
|
|
+ validateRoleSource(strategyPO);
|
|
|
|
|
+ return baseRepository.updateById(strategyPO)!=0;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 新增编号策略
|
|
|
|
|
+ * @param source 新增实体类
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public boolean insertSysNumberingStrategy(SysNumberingStrategyDTO source){
|
|
|
|
|
+ SysNumberingStrategyPO strategyPO = SysNumberingStrategyMapper.INSTANCE.convertPO(source);
|
|
|
|
|
+ validateRoleSource(strategyPO);
|
|
|
|
|
+ return baseRepository.insert(strategyPO)!=0;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 删除编号策略详情
|
|
|
|
|
+ * @param ids 删除主键集合
|
|
|
|
|
+ * @author lf
|
|
|
|
|
+ * @date 2023/04/24 17:22
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public int removeSysNumberingStrategyByIds(Collection<String> ids){
|
|
|
|
|
+ return baseRepository.deleteBatchIds(ids);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ private void validateRoleSource(SysNumberingStrategyPO source){
|
|
|
|
|
+ SysNumberingStrategyPO role = baseRepository.selectOne(new LambdaQueryWrapper<SysNumberingStrategyPO>()
|
|
|
|
|
+ .eq(SysNumberingStrategyPO::getCode, source.getCode())
|
|
|
|
|
+ .last("limit 1"));
|
|
|
|
|
+ if(role!=null&& !StrUtil.equals(role.getId(),source.getId())){
|
|
|
|
|
+ throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("策略编码{%s}不能重复",source.getCode()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private NumberingStrategyClient getClient(SysNumberingStrategyDTO source){
|
|
|
|
|
+ NumberingStrategyClient result = strategyClientFactory.getSerialStrategyClient(source.getId());
|
|
|
|
|
+ if(result==null){
|
|
|
|
|
+ result=strategyClientFactory.createOrUpdateSmsClient(SysNumberingStrategyMapper.INSTANCE.convertProperty(source));
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|