package com.vci.ubcs.code.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vci.ubcs.code.dto.DockingSystemDTO; import com.vci.ubcs.code.entity.DockingSystem; import com.vci.ubcs.code.entity.DockingSystemConfig; import com.vci.ubcs.code.mapper.DockingSystemConfigMapper; import com.vci.ubcs.code.mapper.DockingSystemMapper; import com.vci.ubcs.code.service.IDockingSystemService; import com.vci.ubcs.code.vo.pagemodel.DockingSystemVO; import com.vci.ubcs.code.wrapper.DockingSystemWrapper; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.revision.service.RevisionModelUtil; import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; import com.vci.ubcs.starter.util.MdmBtmTypeConstant; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.user.entity.User; import com.vci.ubcs.system.user.enums.UserEnum; import com.vci.ubcs.system.user.enums.UserStatus; import com.vci.ubcs.system.user.feign.IUserClient; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_EDITING; import static com.vci.ubcs.code.constant.MdmLifeCycleConstant.CODE_RULE_LC; /*** * 系统接口管理-集成系统服务 * @author xiejun * @date 2023-06-01 */ @Service public class DockingSystemServiceImpl extends ServiceImpl implements IDockingSystemService { /*** * 集成系统管理服务 */ @Autowired(required = false) private DockingSystemMapper dockingSystemMapper; /*** * 集成系统管理服务 */ @Autowired(required = false) private DockingSystemConfigMapper dockingSystemConfigMapper; /** * 对象的操作 */ @Autowired private RevisionModelUtil revisionModelUtil; /** * 用户服务 */ @Autowired private IUserClient userClient; @Override @Transactional(rollbackFor = Exception.class) public boolean addSave(DockingSystemDTO dockingSystemDTO) { VciBaseUtil.alertNotNull(dockingSystemDTO, "需要添加的数据对象"); //将DTO转换为DO DockingSystem dockingSystem = Objects.requireNonNull(BeanUtil.copy(dockingSystemDTO, DockingSystem.class)); DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingSystem, MdmBtmTypeConstant.SYS_INT_BASE,null); dockingSystem.setLctid(CODE_RULE_LC); dockingSystem.setLcStatus(FRAMEWORK_RELEASE_EDITING); boolean resInsert = dockingSystemMapper.insert(dockingSystem) > 0; if (!resInsert) { return false; } // 保存用户 User user = new User( UserEnum.WEB.getCategory(), dockingSystem.getId().toLowerCase(Locale.ROOT), Func.md5Hex(dockingSystem.getId()), dockingSystem.getName(), dockingSystem.getName(), UserStatus.Enable.getValue() ); resInsert = userClient.saveUser(user).isSuccess(); return resInsert; } /** * 修改 系统集成的系统信息 * @param dockingSystemDTO 系统集成的系统信息数据传输对象 * @return 执行结果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象 */ @Override @Transactional(rollbackFor = Exception.class) public DockingSystemVO editSave(DockingSystemDTO dockingSystemDTO) { VciBaseUtil.alertNotNull(dockingSystemDTO,"数据对象",dockingSystemDTO.getOid(),"系统集成的系统信息主键"); //将DTO转换为DO DockingSystem dockingSystem = dockingSystemMapper.selectById(dockingSystemDTO.getOid()); // 系统编号更改时账号也需要进行更改 if(!dockingSystemDTO.getId().equals(dockingSystem.getId())){ userClient.updateUserByAccount(dockingSystem.getId(),dockingSystemDTO.getId().toLowerCase(Locale.ROOT)); } revisionModelUtil.copyFromDTOIgnore(dockingSystemDTO,dockingSystem); DefaultAttrAssimtUtil.updateDefaultAttrAssimt(dockingSystem,null); dockingSystemMapper.updateById(dockingSystem); return DockingSystemWrapper.build().entityVO(dockingSystem); } /*** * 根据系统主键删除系统名称 * @param oids * @return * @throws VciBaseException */ @Override @Transactional(rollbackFor = Exception.class) public boolean deleteDataById(String oids) throws VciBaseException { String message=""; try { VciBaseUtil.alertNotNull(oids, "系统集成的系统信息的主键"); List dockingSystemList = dockingSystemMapper.selectBatchIds(VciBaseUtil.str2List(oids)); Map systemNameMap = dockingSystemList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName(),(o1, o2)->o2)); List dockingSystemConfigList = dockingSystemConfigMapper.selectList(Wrappers.query().lambda().in(DockingSystemConfig::getSourceSystemOid, VciBaseUtil.str2List(oids))); Set systemOidList=new HashSet<>(); Map errorMap = new HashMap<>(); if (!CollectionUtils.isEmpty(dockingSystemConfigList)) { dockingSystemConfigList.stream().forEach(dockingSystemConfig -> { if(!systemOidList.contains(dockingSystemConfig.getSourceSystemOid())&& systemNameMap.containsKey(dockingSystemConfig.getSourceSystemOid())){ String systemName=systemNameMap.get(dockingSystemConfig.getSourceSystemOid()); errorMap.put("error",errorMap.getOrDefault("error","") + ";"+systemName); } systemOidList.add(dockingSystemConfig.getSourceSystemOid()); }); } if(errorMap.size()>0){ throw new Throwable(errorMap.getOrDefault("error","")); } // 修改集成系统信息管理的用户为删除状态用户 String accounts = dockingSystemList.stream().map(DockingSystem::getId).collect(Collectors.joining(",")); userClient.updateStatusByAccount(accounts,"1"); return dockingSystemMapper.deleteBatchIds(VciBaseUtil.str2List(oids))>0; }catch (Throwable e){ e.printStackTrace(); throw new VciBaseException(e.getMessage()); } } }