package com.vci.web.dao.impl; import com.vci.client.omd.provider.BtmProvider; import com.vci.starter.web.constant.QueryOptionConstant; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.PageHelper; import com.vci.starter.web.util.VciBaseUtil; import com.vci.web.constant.BtmIdConstant; import com.vci.web.dao.OsCodeEnumDaoI; import com.vci.web.model.OsCodeEnumDO; import com.vci.web.pageModel.BatchCBO; 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 java.util.*; import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST; /** * Description:编码中的枚举映射数据操作层实现类 * * @author Lihang * @date 2021/10/15 11:50 */ @Repository public class OsCodeEnumDaoImpl implements OsCodeEnumDaoI { /** * 业务类型的服务 */ @Autowired private WebBoServiceI boService; /** * 使用主键删除 * @param oid 数据主键 * @return 执行结果 */ @Override public int deleteByPrimaryKey(String oid) { VciBaseUtil.alertNotNull(oid,"主键"); OsCodeEnumDO osCodeEnumDO = selectByPrimaryKey(oid); this.boService.delete(osCodeEnumDO); return 1; } /** * 添加数据 * @param record 编码规则数据对象 * @return 执行结果 */ @Override public int insert(OsCodeEnumDO record) { VciBaseUtil.alertNotNull(record,"要添加的数据"); boService.addSave(record); return 1; } /** * 根据主键查询 * @param oid 数据主键 * @return 数据对象 */ @Override public OsCodeEnumDO selectByPrimaryKey(String oid) { VciBaseUtil.alertNotNull(oid,"主键"); OsCodeEnumDO record = boService.selectByOid(oid, OsCodeEnumDO.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), OsCodeEnumDO.class); } /** * 根据主键批量查询对象 * @param oids 对象主键,使用逗号分隔,但是不能超过1000 * @return 业务对象 */ @Override public List selectByPrimaryKeyCollection(Collection oids) { VciBaseUtil.alertNotNull(oids,"主键集合"); return boService.selectByOidCollection(oids, OsCodeEnumDO.class); } /** * 查询所有分类 * @return 查询结果 */ @Override public List selectAll() { return boService.queryObject(OsCodeEnumDO.class,null); } /** * 更新对象 * @param record 编码规则数据对象 * @return 执行结果 */ @Override public int updateByPrimaryKey(OsCodeEnumDO record) { VciBaseUtil.alertNotNull(record,"要修改的对象",record.getOid(),"主键"); boService.editSave(record); return 1; } /** * 根据查询条件查询数据 * @param condition 查询条件, * @param pageHelper 包括分页,排序 * @return 数据对象列表 */ @Override public List selectByWrapper(Map condition, PageHelper pageHelper) { return boService.queryObject(OsCodeEnumDO.class,condition,pageHelper); } /** * 根据查询条件来查询总数 * @param condition 查询条件 * @return 总数 */ @Override public Long countByWrapper(Map condition) { return VciBaseUtil.getLong(String.valueOf(boService.queryCount(OsCodeEnumDO.class,condition))); } /** * 根据主键获取名称 * @param oid 主键 * @return 中文名称 */ @Override public String selectNameByOid(String oid) { return selectByPrimaryKey(oid).getName(); } /** * 批量删除对象 * @param oids 对象的主键集合 * @return 受影响的行数 */ @Override public long batchDeleteByOids(Collection oids) { List dos = boService.selectByOidCollection(oids, OsCodeEnumDO.class); BatchCBO batchCBO = boService.batchDelete(dos); return batchCBO.getDeleteCbos().size(); } /** * 获取枚举的映射的值 * @param ruleElementOid 编码规则元素的主键 * @param enumValue 枚举的值 * @return 查询枚举的映射的值 */ @Override public String selectMapValueByRuleOidAndValue(String ruleElementOid, String enumValue) { VciBaseUtil.alertNotNull(ruleElementOid,"规则元素主键",enumValue,"枚举的值"); Map conditionMap = new HashMap(); conditionMap.put("pkCodeRuleElement",ruleElementOid); conditionMap.put("enumitemvalue",enumValue); List codeEnumDOS = this.boService.queryObject(OsCodeEnumDO.class, conditionMap); if (CollectionUtils.isEmpty(codeEnumDOS)){ throw new VciBaseException("编码规则明细下没有找到编号为{1}的枚举值",new String[]{enumValue}); } return codeEnumDOS.get(0).getCodeMapValue(); } /** * 批量插入枚举的映射 * * @param enumDOs 映射内容 * @return 成功条数 */ @Override public int batchInsert(List enumDOs) { VciBaseUtil.alertNotNull(enumDOs,"要添加的数据"); BatchCBO batchCBO = this.boService.batchAddSave(enumDOs); return batchCBO.getCreateCbos().size(); } /** * 使用规则查询 * * @param ruleOid 规则的主键的内容 * @return 枚举映射信息 */ @Override public List selectByRuleOid(String ruleOid) { VciBaseUtil.alertNotNull(ruleOid,"规则的主键"); //先查询明细,明细应该不会有1000条 Map conditionMap = new HashMap(); conditionMap.put("ruleOid",ruleOid); String sql = " select a.oid as oid from " + BtmProvider.getInstance().getBTTableName(BtmIdConstant.OS_CODE_ENUM_BTM_TYPE) + " a left join " + BtmProvider.getInstance().getBTTableName(BtmIdConstant.OS_CODE_RULE_ELEMENT_BTM_TYPE) + " b on a.pkCodeRuleElement = b.oid where b.pkCodeRule = :ruleOid"; List enumCbos = boService.queryBySql(sql, conditionMap); if(CollectionUtils.isEmpty(enumCbos)){ return new ArrayList(); } List oidList = new ArrayList(); for(com.vci.client.bof.ClientBusinessObject cbo : enumCbos){ oidList.add(cbo.getOid()); } return boService.selectByOidCollection(oidList,OsCodeEnumDO.class); } /** * 根据元素的主键获取枚举映射的信息 * * @param oidList 元素主键的列表 * @return 枚举映射的信息 */ @Override public List selectByElementOidCollection(Collection oidList) { VciBaseUtil.alertNotNull(oidList,"明细的主键集合"); //不找过1000个的 Map conditionMap = new HashMap(); conditionMap.put("pkCodeRuleElement", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(oidList.toArray(new String[0])) + ")"); return boService.queryObject(OsCodeEnumDO.class,conditionMap); } }