/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package com.vci.ubcs.code.service.impl; 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.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 java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * 近义词维护 服务实现类 * * @author yuxc * @since 2023-04-04 */ @Service @AllArgsConstructor public class CodeSynonymServiceImpl extends ServiceImpl implements ICodeSynonymService { private final CodeSynonymMapper codeSynonymMapper; private final ICodeClassifyTemplateAttrService codeClassifyTemplateAttrService; /** * 近义词维护 新增 * @param codeSynonym * @return */ @Override 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 map) { if(Func.isEmpty(map.getOrDefault("oid",""))){ throw new ServiceException("必传参数oid不能为空!"); } if(Func.isEmpty(map.getOrDefault("lcStatus",""))){ throw new ServiceException("生命周期状态不能为空!"); } LambdaUpdateWrapper updateWrapper = Wrappers.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 oidList = Func.toLongList(oids); LambdaQueryWrapper wrapper = Wrappers.query().lambda(); oidList.stream().forEach(item->{ wrapper.or().like(CodeClassifyTemplateAttr::getSysonymRuleOids, item); }); List voList = codeClassifyTemplateAttrService.selectByWrapper(wrapper); if(!voList.isEmpty()){ return R.fail("删除的规则中存在被引用的近义词查询规则!"); } return R.status(SqlHelper.retBool(codeSynonymMapper.deleteBatchIds(oidList))); } /** * 查看近义词查询规则使用范围 * @param oid * @return */ @Override public List listUseRangeInClsTempAttr(String oid) { MPJLambdaWrapper 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 voList = codeClassifyTemplateAttrService.selectByWrapper(mpjLambdaWrapper); return CodeClassifyTemplateAttrWrapper.build().listVO(voList); } @Override public String selectNameByWrapper(LambdaQueryWrapper wrappers) { List 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> getCodeSynonymByOids(Map sysonymAttrMap) { if(sysonymAttrMap.isEmpty()){ return new HashMap<>(); } Map> resMap = new HashMap<>(); for (String key : sysonymAttrMap.keySet()) { List oids = Func.toStrList(sysonymAttrMap.get(key).getSysonymRuleOids()); List codeSynonyms = codeSynonymMapper.selectBatchIds(oids); resMap.put(key,codeSynonyms); } return resMap; } }