package com.vci.web.service; import com.vci.starter.web.pagemodel.BaseQueryObject; import com.vci.starter.web.pagemodel.DataGrid; import com.vci.starter.web.pagemodel.PageHelper; import com.vci.starter.web.util.ApplicationContextProvider; import com.vci.starter.web.util.VciBaseUtil; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; import com.vci.web.other.OsMapToObjFunction; import com.vci.web.util.WebUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 对象建模部分的基础接口 * @author weidy */ public interface OsBaseServiceI { /** * 清除缓存 */ void clearCache(); /** * 使用sql查询平台建模里的内容.注意这个不包含内容 * @param conditionMap 查询条件 * @param pageHelper 分页 * @param tableName 表名 * @param mapToObjFunction 对象转换的函数 * @return 业务类型内容 */ default DataGrid queryObjectServiceInfoBySql(Map conditionMap, PageHelper pageHelper, String tableName, Class doClass,OsMapToObjFunction mapToObjFunction){ List conditionSqlList = new ArrayList(); if(!CollectionUtils.isEmpty(conditionMap)){ for(String key : conditionMap.keySet()){ String value = conditionMap.get(key); if("id".equalsIgnoreCase(key) && !"".equalsIgnoreCase(value)){ conditionSqlList.add(" name like '" + conditionMap.get(key).replace("*","%") + "' "); } if("name".equalsIgnoreCase(key) && !"".equalsIgnoreCase(value)){ conditionSqlList.add(" label like '" + conditionMap.get(key).replace("*","%") + "' "); } } } String pageSql = ""; if(pageHelper!=null && pageHelper.getLimit()>-1){ pageSql = ") A where rownum < " + (pageHelper.getLimit()*pageHelper.getPage() + 1) + " ) where RN >= " + (pageHelper.getLimit()*(pageHelper.getPage()-1) + 1); } String whereSql = ""; if(!CollectionUtils.isEmpty(conditionSqlList)){ for(int i = 0 ; i < conditionSqlList.size() ; i++){ whereSql += conditionSqlList.get(i); if(i != conditionSqlList.size()-1){ whereSql += " and "; } } } String baseSql = "select oid,to_char(ts,'yyyy-mm-dd hh24:mi:ss') as ts,creator,to_char(createTime,'yyyy-mm-dd hh24:mi:ss') as createTime,modifier,to_char(modifyTime,'yyyy-mm-dd hh24:mi:ss') as modifyTime,name,label," + ("plenum".equalsIgnoreCase(tableName)?" '' as " :"") + "description from " + tableName + (StringUtils.isNotBlank(whereSql)?(" where " + whereSql):""); baseSql += " order by lower(name) asc "; String sql = (StringUtils.isNotBlank(pageSql)?" select oid,ts,creator,createTime,modifier,modifyTime,name,label,description from (select A.* , rownum RN from (":"") + baseSql+ pageSql ; WebBoServiceI boService = ApplicationContextProvider.getApplicationContext().getBean(WebBoServiceI.class); List dataMap = boService.queryBySql(sql, null); DataGrid dataGrid = new DataGrid<>(); if(!CollectionUtils.isEmpty(dataMap)){ List dataList = new ArrayList<>(); dataMap.stream().forEach(cbo -> { T obj = null; try { obj = doClass.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } Map fieldMap = new HashMap<>(); fieldMap.put("oid","oid"); fieldMap.put("name","id"); fieldMap.put("label","name"); fieldMap.put("description","description"); fieldMap.put("creator","creator"); fieldMap.put("modifier","lastModifier"); fieldMap.put("createtime","createTime"); fieldMap.put("modifyTime","lastModifyTime"); fieldMap.put("ts","ts"); WebUtil.copyValueToObjectFromCbos(cbo,obj,fieldMap); if(mapToObjFunction!=null) { mapToObjFunction.convert(cbo, obj); } dataList.add(obj); }); dataGrid.setData(dataList); List maps = boService.queryBySqlForMap("select count(oid) as total from plbtmtype " + (StringUtils.isNotBlank(whereSql)?(" where " + whereSql):""), null); dataGrid.setTotal(VciBaseUtil.getInt(maps.get(0).get("total").toString())); } return dataGrid; } /** * 查询对象建模里的列表 * @param baseQueryObject 基础查询对象,包含分页,排序,查询条件 * @param tClass 目标的类 * @param voMap 显示对象的映射 * @param voClass 显示对象的类 * @return 列表的内容 */ default DataGrid gridObject(BaseQueryObject baseQueryObject,Class tClass,Map voMap,Class voClass){ if(baseQueryObject == null){ baseQueryObject = new BaseQueryObject(); } PageHelper pageHelper = baseQueryObject.getPageHelper(); if (pageHelper == null) { pageHelper = new PageHelper(-1); } //有需要转换的属性 pageHelper.addDefaultAsc("name"); VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(baseQueryObject.getConditionMap(), tClass,pageHelper); queryWrapperForDO.setConditionMap(queryWrapperForDO.switchConditionMap()); queryWrapperForDO.wrapperSql(); WebBoServiceI boService = ApplicationContextProvider.getBean(WebBoServiceI.class); List doList = boService.selectByQueryWrapper(queryWrapperForDO,tClass); DataGrid dataGrid=new DataGrid(); if (!CollectionUtils.isEmpty(doList)) { List voList = new ArrayList<>(); doList.stream().forEach(obj->{ String id = VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", obj)); if(voMap.containsKey(id)){ voList.add(voMap.get(id)); } }); dataGrid.setData(voList); dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(boService.countByQueryWrapper(queryWrapperForDO,tClass)))); } return dataGrid; } }