Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSynonymServiceImpl.java
@@ -16,13 +16,36 @@
 */
package com.vci.ubcs.code.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
import com.vci.ubcs.code.entity.CodeClassifyTemplate;
import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
import com.vci.ubcs.code.entity.CodeSynonym;
import com.vci.ubcs.code.mapper.CodeSynonymMapper;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.service.ICodeSynonymService;
import com.vci.ubcs.code.vo.CodeSynonymVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.wrapper.CodeClassifyTemplateAttrWrapper;
import com.vci.ubcs.starter.enumpack.CodeTableNameEnum;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.util.UBCSCondition;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * 近义词维护 服务实现类
@@ -31,15 +54,126 @@
 * @since 2023-04-04
 */
@Service
public class CodeSynonymServiceImpl implements ICodeSynonymService {
@AllArgsConstructor
public class CodeSynonymServiceImpl extends ServiceImpl<CodeSynonymMapper, CodeSynonym> implements ICodeSynonymService {
   @Resource
   CodeSynonymMapper codeSynonymMapper;
   private final CodeSynonymMapper codeSynonymMapper;
   private final ICodeClassifyTemplateAttrService codeClassifyTemplateAttrService;
   /**
    * 近义词维护 新增
    * @param codeSynonym
    * @return
    */
   @Override
   public IPage<CodeSynonymVO> selectPlCodeSynonymPage(IPage<CodeSynonymVO> page, CodeSynonymVO plCodeSynonym) {
      return page.setRecords(codeSynonymMapper.selectPlCodeSynonymPage(page, plCodeSynonym));
   public boolean addSave(CodeSynonym codeSynonym) {
      if(codeSynonym.getSynonymValue().isEmpty() || codeSynonym.getSourceValue().isEmpty()){
         throw new ServiceException("源值和近义词不能为空");
      }
      DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeSynonym, MdmBtmTypeConstant.CODE_SYNONYM);
      // 添加时默认为编辑中
      codeSynonym.setLcStatus(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED);
      return SqlHelper.retBool(codeSynonymMapper.insert(codeSynonym));
   }
   /**
    * 近义词维护 修改
    * @param codeSynonym
    * @return
    */
   @Override
   public boolean editSave(CodeSynonym codeSynonym) {
      DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeSynonym);
      return SqlHelper.retBool(codeSynonymMapper.updateById(codeSynonym));
   }
   /**
    * 近义词状态停用启用
    * @param map
    * @return
    */
   @Override
   public boolean updateStatus(Map<String, String> map) {
      if(Func.isEmpty(map.getOrDefault("oid",""))){
         throw new ServiceException("必传参数oid不能为空!");
      }
      if(Func.isEmpty(map.getOrDefault("lcStatus",""))){
         throw new ServiceException("生命周期状态不能为空!");
      }
      LambdaUpdateWrapper<CodeSynonym> updateWrapper = Wrappers.<CodeSynonym>update()
         .lambda().eq(CodeSynonym::getOid, map.get("oid"))
         .set(CodeSynonym::getLcStatus, map.get("lcStatus"));
      return SqlHelper.retBool(this.codeSynonymMapper.update(null,updateWrapper));
   }
   /**
    * 删除
    * @param oids
    * @return
    */
   @Override
   public R deleteDataByIds(String oids) {
      if(Func.isBlank(oids)){
         return R.fail("未获取的参数oid");
      }
      List<Long> oidList = Func.toLongList(oids);
      LambdaQueryWrapper<CodeClassifyTemplateAttr> wrapper = Wrappers.<CodeClassifyTemplateAttr>query().lambda();
      oidList.stream().forEach(item->{
         wrapper.or().like(CodeClassifyTemplateAttr::getSysonymRuleOids, item);
      });
      List<CodeClassifyTemplateAttr> voList = codeClassifyTemplateAttrService.selectByWrapper(wrapper);
      if(!voList.isEmpty()){
         return R.fail("删除的规则中存在被引用的近义词查询规则!");
      }
      return R.status(SqlHelper.retBool(codeSynonymMapper.deleteBatchIds(oidList)));
   }
   /**
    * 查看近义词查询规则使用范围
    * @param oid
    * @return
    */
   @Override
   public List<CodeClassifyTemplateAttrVO> listUseRangeInClsTempAttr(String oid) {
      MPJLambdaWrapper<CodeClassifyTemplateAttr> mpjLambdaWrapper = new MPJLambdaWrapper<>(CodeClassifyTemplateAttr.class, CodeTableNameEnum.PL_CODE_CLSTEMPATTR.getText())
         .selectAll(CodeClassifyTemplateAttr.class)
         .selectAs(CodeClassifyTemplate::getName,CodeClassifyTemplateAttr::getClassifyTemplateOidName)
         .leftJoin(CodeClassifyTemplate.class,CodeTableNameEnum.PL_CODE_CLSTEMPLATE.getText(),CodeClassifyTemplate::getOid,CodeClassifyTemplateAttr::getClassifyTemplateOid)
         .like(CodeClassifyTemplateAttr::getSysonymRuleOids, oid);
      List<CodeClassifyTemplateAttr> voList = codeClassifyTemplateAttrService.selectByWrapper(mpjLambdaWrapper);
      return CodeClassifyTemplateAttrWrapper.build().listVO(voList);
   }
   @Override
   public String selectNameByWrapper(LambdaQueryWrapper<CodeSynonym> wrappers) {
      List<CodeSynonym> codeSynonymsList = codeSynonymMapper.selectList(wrappers);
      if(codeSynonymsList.isEmpty()){
         return "";
      }
      StringBuilder res = new StringBuilder();
      codeSynonymsList.stream().forEach(item->{
         res.append(item.getName()).append("(").append(item.getId()).append(")").append(",");
      });
      return res.toString().replaceAll(",$", "");
   }
   /**
    * 获取近义词查询规则
    * @return
    */
   @Override
   public Map<String, List<CodeSynonym>> getCodeSynonymByOids(Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMap) {
      if(sysonymAttrMap.isEmpty()){
         return new HashMap<>();
      }
      Map<String, List<CodeSynonym>> resMap = new HashMap<>();
      for (String key : sysonymAttrMap.keySet()) {
         List<String> oids = Func.toStrList(sysonymAttrMap.get(key).getSysonymRuleOids());
         List<CodeSynonym> codeSynonyms = codeSynonymMapper.selectBatchIds(oids);
         resMap.put(key,codeSynonyms);
      }
      return resMap;
   }
}