package org.springblade.code.dao.impl; import com.vci.frameworkcore.constant.FrameWorkDefaultValueConstant; import com.vci.mdm.constant.MdmBtmTypeConstant; import com.vci.mdm.dao.CodeClassifyTemplateDaoI; import com.vci.mdm.lifecycle.CodeClassifyTemplateLC; import com.vci.mdm.model.CodeClassifyTemplateDO; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.PageHelper; import com.vci.starter.web.util.VciBaseUtil; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; import com.vci.web.pageModel.BatchCBO; import com.vci.web.service.OsLifeCycleServiceI; import com.vci.web.service.WebBoServiceI; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.util.CollectionUtils; import plm.bs.bom.clientobject.ClientBusinessObject; import java.util.*; import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST; /** * 分类模板对象数据操作层实现类 * * @author weidy * @date 2022-01-24 */ @Repository public class CodeClassifyTemplateDaoImpl implements CodeClassifyTemplateDaoI{ /** * 业务类型操作的服务 */ @Autowired private WebBoServiceI boService; /** * 生命周期的服务 */ @Autowired private OsLifeCycleServiceI lifeCycleService; /** * 使用主键删除 * @param oid 数据主键 * @return 执行结果 */ @Override public BatchCBO deleteByPrimaryKey(String oid){ VciBaseUtil.alertNotNull(oid,"主键"); CodeClassifyTemplateDO codeClassifyTemplateDO = selectByPrimaryKey(oid); return boService.delete(codeClassifyTemplateDO,false); } /** * 添加数据 * @param record 分类模板对象数据对象 * @return 执行结果 */ @Override public BatchCBO insert(CodeClassifyTemplateDO record){ VciBaseUtil.alertNotNull(record,"要添加的数据"); return boService.addSave(record); } /** * 批量添加数据 * @param records 分类模板对象数据对象集合 * @return 执行结果数 */ @Override public BatchCBO batchInsert(List records){ VciBaseUtil.alertNotNull(records,"要添加的数据"); BatchCBO batchCBO = boService.batchAddSave(records); return batchCBO; } /** * 根据主键查询 * @param oid 数据主键 * @return 数据对象 */ @Override public CodeClassifyTemplateDO selectByPrimaryKey(String oid){ VciBaseUtil.alertNotNull(oid,"主键"); CodeClassifyTemplateDO record = boService.selectByOid(oid, CodeClassifyTemplateDO.class); if(record == null || StringUtils.isBlank(record.getOid())){ throw new VciBaseException(DATA_OID_NOT_EXIST); } return record; } /** * 根据主键批量获取对象 * @param oids 主键,包含单引号,但是不能超过1000 * @return 数据对象列表 */ @Override public List selectByPrimaryKeys(String oids){ VciBaseUtil.alertNotNull(oids,"主键集合"); return boService.selectByOidCollection(VciBaseUtil.str2List(oids), CodeClassifyTemplateDO.class); } /** * 根据主键批量查询对象 * @param oids 对象主键,使用逗号分隔,但是不能超过1000 * @return 业务对象 */ @Override public List selectByPrimaryKeyCollection(Collection oids){ VciBaseUtil.alertNotNull(oids,"主键集合"); return boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class); } /** * 查询所有分类 * @return 查询结果 */ @Override public List selectAll(){ return boService.queryObject(CodeClassifyTemplateDO.class,null); } /** * 更新对象 * @param record 分类模板对象数据对象 * @return 执行结果 */ @Override public BatchCBO updateByPrimaryKey(CodeClassifyTemplateDO record){ VciBaseUtil.alertNotNull(record,"要修改的对象",record.getOid(),"主键"); return boService.editSave(record); } /** * 批量更新 * @param records 分类模板对象数据对象集合 * @return 执行结果行数 */ @Override public BatchCBO batchUpdate(List records){ VciBaseUtil.alertNotNull(records,"要修改的对象"); BatchCBO batchCBO = boService.batchEditSave(records); return batchCBO; } /** * 根据查询条件查询数据 * @param conditionMap 查询条件, * @param pageHelper 包括分页,排序 * @return 数据对象列表 */ @Override public List selectByCondition(Map< String,String> conditionMap, PageHelper pageHelper){ return boService.queryObject(CodeClassifyTemplateDO.class,conditionMap,pageHelper); } /** * 根据查询条件来查询总数 * @param conditionMap 查询条件 * @return 总数 */ @Override public Long countByCondition(Map< String,String> conditionMap){ return VciBaseUtil.getLong(String.valueOf(boService.queryCount(CodeClassifyTemplateDO.class,conditionMap))); } /** * 根据查询封装器来查询数据 * @param queryWrapper 查询封装器 * @return 数据对象列表 */ @Override public List selectByWrapper(VciQueryWrapperForDO queryWrapper){ return boService.selectByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class); } /** * 根据查询封装器来查询总数 * @param queryWrapper 查询封装器 * @return 总数 */ @Override public Long countByWrapper(VciQueryWrapperForDO queryWrapper){ return VciBaseUtil.getLong(String.valueOf(boService.countByQueryWrapper(queryWrapper,CodeClassifyTemplateDO.class))); } /** * 根据主键获取名称 * @param oid 主键 * @return 中文名称 */ @Override public String selectNameByOid(String oid){ return selectByPrimaryKey(oid).getName(); } /** * 获取所有层级下级的主键 * @param oid 数据主键 * @return 查询结果 */ @Override public List selectAllLevelChildOid(String oid){ String sql = "select oid from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid= OID"; Map< String,String> conditionMap = new HashMap< String,String>(); conditionMap.put("oid",oid); List dataList = boService.queryBySqlForMap(sql,conditionMap); List oidList = new ArrayList(); if(!CollectionUtils.isEmpty(dataList)){ for(Map data:dataList){ oidList.add(VciBaseUtil.getStringValueFromObject(data.get("oid"))); } } return oidList; } /** * 获取所有下级数据 * @param oid 数据主键 * @return 查询结果 */ @Override public List selectAllLevelChild(String oid){ return boService.selectByOidCollection(selectAllLevelChildOid(oid),CodeClassifyTemplateDO.class); } /** * 查询某个节点的所有层级下级的个数 * @param oid 主键 * @return 总数 */ @Override public long countAllLevelChildOid(String oid){ String sql = "select count(OID) countsize from platformbtm_codeclstemplate START WITH codeClassifyOid = :oid CONNECT BY PRIOR codeClassifyOid = OID"; Map< String,String> conditionMap = new HashMap< String,String>(); conditionMap.put("oid",oid); List dataList = boService.queryBySqlForMap(sql,conditionMap); return !CollectionUtils.isEmpty(dataList)?VciBaseUtil.getInt(VciBaseUtil.getStringValueFromObject(dataList.get(0).get("countsize"))):0; } /** * 批量修改生命周期的状态 * @param oids 主键集合,不能大于1000 * @param lcStatus 生命周期的值 * @return 执行的结果 */ @Override public long batchUpdateLcStatus(Collection oids, String lcStatus){ List cbos = boService.selectCBOByOidCollection(oids, "codeclstemplate"); if(CollectionUtils.isEmpty(cbos)){ return 0; } lifeCycleService.transCboStatus(cbos,lcStatus); return cbos.size(); } /** * 根据主键更新状态 * @param oid 主键 * @param lcStatus 生命周期状态 * @return 受影响的行数 */ @Override public int updateLcStatus( String oid, String lcStatus){ ClientBusinessObject cbo = boService.selectCBOByOid(oid, "codeclstemplate"); if(cbo == null || StringUtils.isBlank(cbo.getOid())){ return 0; } lifeCycleService.transStatus(cbo.getBusinessObject(),lcStatus); return 1; } /** * 批量删除对象 * @param oids 对象的主键集合 * @return 受影响的行数 */ @Override public BatchCBO batchDeleteByOids(Collection oids){ List dos = boService.selectByOidCollection(oids, CodeClassifyTemplateDO.class); BatchCBO batchCBO = boService.batchDelete(dos); return batchCBO; } /** * 查询分类的子分类包含的模板的内容 * * @param codeClassifyOid 分类的主键 * @return key是模板的主键,value是模板所属的分类主键 */ @Override public Map selectChildHasReleaseTemplate(String codeClassifyOid) { Map tempClsMap = new HashMap<>(); if(StringUtils.isNotBlank(codeClassifyOid)) { String sql = "select t.oid as oid,cls.oid as clsoid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE) + " t left join (select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where lcstatus = :lcstatus " + " start with oid = :classifyoid \n" + "connect by prior oid=parentcodeclassifyoid) cls on t.codeclassifyoid = cls.oid where t.lcstatus =:templatelcstatus and cls.oid is not null\n"; Map conditionMap = new HashMap<>(); conditionMap.put("lcstatus", FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED); conditionMap.put("classifyoid", codeClassifyOid.trim()); conditionMap.put("templatelcstatus", CodeClassifyTemplateLC.RELEASED.getValue()); List cbos = boService.queryBySql(sql, conditionMap); if(!CollectionUtils.isEmpty(cbos)){ cbos.stream().forEach(cbo->{ tempClsMap.put(cbo.getOid(),cbo.getAttributeValue("clsoid")); }); }else{ } } return tempClsMap; } }