Zhenfei.Li
4 years ago
commit
10358f0089
84 changed files with 6475 additions and 0 deletions
@ -0,0 +1,126 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<project basedir="." default="jar" name="plugin"> |
||||||
|
<!-- JDK路径,根据自己机器上实际位置修改--> |
||||||
|
<property name="jdk.home" value="/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home"/> |
||||||
|
<property name="libs" value="${basedir}/lib"/> |
||||||
|
<!-- <property name="dependenceLibs" value="${basedir}/dependence"/>--> |
||||||
|
<!-- <property name="FRLibs" value="E:\jar-FR\10.0-idea"/>--> |
||||||
|
|
||||||
|
<property name="destLoc" value="."/> |
||||||
|
<property name="classes" value="classes"/> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<property name="current-version" value="${plugin.version}"/> |
||||||
|
<property name="current-id" value="${plugin.id}"/> |
||||||
|
<property name="plugin-version" value="${current-version}"/> |
||||||
|
<property name="plugin-name" value="hwExcelExport"/> |
||||||
|
<property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/> |
||||||
|
<target name="prepare"> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
</target> |
||||||
|
<path id="compile.classpath"> |
||||||
|
<!-- <fileset dir="${FRLibs}">--> |
||||||
|
<!-- <include name="**/*.jar"/>--> |
||||||
|
<!-- </fileset>--> |
||||||
|
<fileset dir="${libs}"> |
||||||
|
<include name="**/*.jar"/> |
||||||
|
</fileset> |
||||||
|
<!-- <fileset dir="${dependenceLibs}">--> |
||||||
|
<!-- <include name="**/*.jar"/>--> |
||||||
|
<!-- </fileset>--> |
||||||
|
</path> |
||||||
|
<patternset id="resources4Jar"> |
||||||
|
<exclude name="**/.settings/**"/> |
||||||
|
<exclude name=".classpath"/> |
||||||
|
<exclude name=".project"/> |
||||||
|
|
||||||
|
<exclude name="**/*.java"/> |
||||||
|
<exclude name="**/*.db"/> |
||||||
|
<exclude name="**/*.g"/> |
||||||
|
<exclude name="**/package.html"/> |
||||||
|
</patternset> |
||||||
|
<target name="copy_resources"> |
||||||
|
<echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/> |
||||||
|
<delete dir="tmp"/> |
||||||
|
<copy todir="tmp"> |
||||||
|
<fileset dir="${resources_from}\src\main\java"> |
||||||
|
<patternset refid="resources4Jar"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<copy todir="tmp"> |
||||||
|
<fileset dir="${resources_from}\src\main\resources"> |
||||||
|
<patternset refid="resources4Jar"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<copy todir="${classes}"> |
||||||
|
<fileset dir="tmp"/> |
||||||
|
</copy> |
||||||
|
<delete dir="tmp"/> |
||||||
|
</target> |
||||||
|
<target name="compile_javas"> |
||||||
|
<echo message="编译${compile_files}下的Java文件"/> |
||||||
|
<javac destdir="${classes}" debug="false" optimize="on" source="${source_jdk_version}" |
||||||
|
target="${target_jdk_version}" |
||||||
|
fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}" |
||||||
|
executable="${compile_jdk_version}/bin/javac" includeantruntime="on"> |
||||||
|
<src path="${basedir}/src"/> |
||||||
|
<exclude name="**/.svn/**"/> |
||||||
|
<compilerarg line="-encoding UTF8 "/> |
||||||
|
<classpath refid="compile.classpath"/> |
||||||
|
</javac> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="jar_classes"> |
||||||
|
<echo message="打Jar包:${jar_name}"/> |
||||||
|
<delete file="${basedir}/${jar_name}"/> |
||||||
|
<jar jarfile="${basedir}/${jar_name}"> |
||||||
|
<fileset dir="${classes}"> |
||||||
|
</fileset> |
||||||
|
</jar> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="super_jar" depends="prepare"> |
||||||
|
<antcall target="copy_resources"> |
||||||
|
<param name="resources_from" value="${basedir}"/> |
||||||
|
</antcall> |
||||||
|
<antcall target="compile_javas"> |
||||||
|
<param name="source_jdk_version" value="1.7"/> |
||||||
|
<param name="target_jdk_version" value="1.7"/> |
||||||
|
<param name="compile_jdk_version" value="${jdk.home}"/> |
||||||
|
<param name="compile_files" value="${basedir}/src"/> |
||||||
|
</antcall> |
||||||
|
<echo message="compile plugin success!"/> |
||||||
|
|
||||||
|
<antcall target="jar_classes"> |
||||||
|
<param name="jar_name" value="${plugin-jar}"/> |
||||||
|
</antcall> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="jar" depends="super_jar"> |
||||||
|
<antcall target="zip"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="zip"> |
||||||
|
<property name="plugin-folder" value="fr-plugin-${plugin-name}-${plugin-version}"/> |
||||||
|
<echo message="----------zip files----------"/> |
||||||
|
<mkdir dir="${plugin-folder}"/> |
||||||
|
<copy todir="${plugin-folder}"> |
||||||
|
<fileset dir="."> |
||||||
|
<include name="*.jar"/> |
||||||
|
<include name="plugin.xml"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<!-- <copy todir="${plugin-folder}">--> |
||||||
|
<!-- <fileset dir="${libs}">--> |
||||||
|
<!-- <include name="**/*.jar"/>--> |
||||||
|
<!-- </fileset>--> |
||||||
|
<!-- </copy>--> |
||||||
|
<zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> |
||||||
|
<include name="${plugin-folder}/*.jar"/> |
||||||
|
<include name="${plugin-folder}/plugin.xml"/> |
||||||
|
</zip> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<delete dir="${plugin-folder}"/> |
||||||
|
<delete file="${plugin-jar}" /> |
||||||
|
</target> |
||||||
|
</project> |
@ -0,0 +1,26 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.hw.import.excel</id> |
||||||
|
<name><![CDATA[直接导入数据库表]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.8.3</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2018-07-31</jartime> |
||||||
|
<vendor>author</vendor> |
||||||
|
<description><![CDATA[直接导入数据库表]]></description> |
||||||
|
<change-notes><![CDATA[区分链接权限,管理员可见全部,普通用户仅可见本人创建]]></change-notes> |
||||||
|
<extra-decision> |
||||||
|
<SystemOptionProvider class="com.fr.plugin.decision.HWOptionProvider"/> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.decision.request.HWHandlerProvider"/> |
||||||
|
<URLAliasProvider class="com.fr.plugin.decision.request.HWURLAliasProvider"/> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.decision.ExcelMngHandleBridge"/> |
||||||
|
<URLAliasProvider class="com.fr.plugin.decision.ExcelMngAliasBridge"/> |
||||||
|
</extra-decision> |
||||||
|
|
||||||
|
<extra-core> |
||||||
|
<DBAccessProvider class="com.fr.plugin.decision.ExcelMngConfigAccessBridge"/> |
||||||
|
<DBAccessProvider class="com.fr.plugin.decision.ReuseConfigAccessBridge"/> |
||||||
|
<DialectCreator class="com.fr.plugin.decision.dialect.DialectCreator"/> |
||||||
|
</extra-core> |
||||||
|
|
||||||
|
<function-recorder class="com.fr.plugin.decision.HWOptionProvider"/> |
||||||
|
</plugin> |
@ -0,0 +1,28 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<parent> |
||||||
|
<artifactId>starter</artifactId> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<version>10.0</version> |
||||||
|
</parent> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
|
||||||
|
<artifactId>plugin-exceldatamanagement</artifactId> |
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin --> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>2.0.2</version> |
||||||
|
<configuration> |
||||||
|
<compilerArgument>-Xlint:unchecked</compilerArgument> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
<outputDirectory>${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.exceldatamanagement-1.0/classes</outputDirectory> |
||||||
|
</build> |
||||||
|
</project> |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
|
||||||
|
public class ExcelMngAliasBridge extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/addlink","/excelmng/addlink",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/delete","/excelmng/delete",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/querylink","/excelmng/querylink",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/rename","/excelmng/rename",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/querydata","/excelmng/querydata",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/querycolattr","/excelmng/querycolattr",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/getSchema","/excelmng/getSchema",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/iftableexist","/excelmng/iftableexist",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/getAllUserList","/excelmng/getAllUserList",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/getAuthUserList","/excelmng/getAuthUserList",false), |
||||||
|
URLAliasFactory.createPluginAlias("/excelmng/updateLinkAuth","/excelmng/updateLinkAuth",false) |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.db.fun.impl.AbstractDBAccessProvider; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngDao; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
|
||||||
|
public class ExcelMngConfigAccessBridge extends AbstractDBAccessProvider { |
||||||
|
|
||||||
|
private static DBAccessor dbAccessor = null; |
||||||
|
|
||||||
|
public static DBAccessor getDbAccessor() { |
||||||
|
return dbAccessor; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public DAOProvider[] registerDAO() { |
||||||
|
return new DAOProvider[]{ |
||||||
|
new DAOProvider(){ |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class getEntityClass() { |
||||||
|
return ExcelMngEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return ExcelMngDao.class; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
ExcelMngConfigAccessBridge.dbAccessor = dbAccessor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.decision.fun.HttpHandler; |
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
import com.fr.plugin.decision.http.*; |
||||||
|
|
||||||
|
public class ExcelMngHandleBridge extends AbstractHttpHandlerProvider { |
||||||
|
@Override |
||||||
|
public HttpHandler[] registerHandlers() { |
||||||
|
return new HttpHandler[]{ |
||||||
|
new AddLinkHttpHandler(), |
||||||
|
new DeleteLinkHttpHandle(), |
||||||
|
new QueryLinkHttpHandle(), |
||||||
|
new RenameHttpHandle(), |
||||||
|
new QueryTableDataHttpHandle(), |
||||||
|
new QueryTableColAttrHttpHandle(), |
||||||
|
new GetSchemaHttpHandler(), |
||||||
|
new IfTableExistHttpHandler(), |
||||||
|
new GetAllUserListHandler(), |
||||||
|
new GetAuthUserByLinkNameHandler(), |
||||||
|
new UpdateLinkAuthHandler() |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.web.struct.Component; |
||||||
|
import com.fr.web.struct.category.ScriptPath; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/9 |
||||||
|
*/ |
||||||
|
public class HWComponent extends Component { |
||||||
|
public static HWComponent KEY = new HWComponent(); |
||||||
|
@Override |
||||||
|
public ScriptPath script() { |
||||||
|
return ScriptPath.build("/com/fr/plugin/hw/decision/js/hw.option.js"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractSystemOptionProvider; |
||||||
|
import com.fr.decision.web.MainComponent; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.web.struct.Atom; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/9 |
||||||
|
*/ |
||||||
|
@FunctionRecorder |
||||||
|
public class HWOptionProvider extends AbstractSystemOptionProvider { |
||||||
|
@Override |
||||||
|
public String id() { |
||||||
|
return "fanruan-hw-excecl"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return "Excel导入"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int sortIndex() { |
||||||
|
return 3; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Atom attach() { |
||||||
|
return MainComponent.KEY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Atom client() { |
||||||
|
return HWComponent.KEY; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,305 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.cache.Attachment; |
||||||
|
import com.fr.cache.AttachmentSource; |
||||||
|
import com.fr.general.CommonDateUtils; |
||||||
|
import com.fr.general.DateUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.*; |
||||||
|
import com.fr.third.org.apache.poi.hssf.util.Region; |
||||||
|
import com.fr.third.org.apache.poi.poifs.filesystem.POIFSFileSystem; |
||||||
|
import com.fr.third.v2.org.apache.poi.ss.usermodel.Cell; |
||||||
|
import com.fr.third.v2.org.apache.poi.ss.usermodel.DateUtil; |
||||||
|
import com.fr.third.v2.org.apache.poi.ss.util.CellRangeAddress; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFCell; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFRow; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFSheet; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class HWUtils { |
||||||
|
/** |
||||||
|
* 根据附件id获取对应附件excel对象 |
||||||
|
* |
||||||
|
* @param attachId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static XSSFWorkbook getExcelWork(String attachId) { |
||||||
|
XSSFWorkbook sheets = null; |
||||||
|
try { |
||||||
|
Attachment attachment = AttachmentSource.getAttachment(attachId); |
||||||
|
if (attachment != null) { |
||||||
|
InputStream inputStream = attachment.getInputStream(); |
||||||
|
sheets = new XSSFWorkbook(inputStream); |
||||||
|
sheets.getNumberOfSheets(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return sheets; |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray getSheetFiled(XSSFSheet sheet) { |
||||||
|
JSONArray result = JSONArray.create(); |
||||||
|
int rowCounts = sheet.getPhysicalNumberOfRows(); |
||||||
|
int titleRow = -1; |
||||||
|
for (int row = 0; row < rowCounts; row++) { |
||||||
|
XSSFRow xssfRow = sheet.getRow(row); |
||||||
|
if (xssfRow == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
titleRow = row; |
||||||
|
//循环取每个单元格(cell)的数据
|
||||||
|
Iterator<Cell> cellIterator = xssfRow.cellIterator(); |
||||||
|
while (cellIterator.hasNext()) { |
||||||
|
XSSFCell cell = (XSSFCell) cellIterator.next(); |
||||||
|
String value = getString(cell); |
||||||
|
if (StringUtils.isNotBlank(value)) { |
||||||
|
JSONObject o = JSONObject.create().put("titleRow", titleRow).put("value", cell.getColumnIndex()).put("text", value); |
||||||
|
result.add(o); |
||||||
|
} |
||||||
|
} |
||||||
|
if (titleRow >= 0) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, List> getSheetContent(XSSFSheet sheet, int titleRow, JSONObject tableCol) { |
||||||
|
Map<String, List> result = new HashMap<String, List>(); |
||||||
|
Iterator<Map.Entry<String, Object>> iterator = tableCol.iterator(); |
||||||
|
List<CellRangeAddress> combineCell = getCombineCell(sheet); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
Map.Entry<String, Object> entry = iterator.next(); |
||||||
|
result.put(entry.getKey(), new ArrayList()); |
||||||
|
} |
||||||
|
int lastRowNum = sheet.getLastRowNum(); |
||||||
|
for (int row = titleRow + 1; row <= lastRowNum; row++) { |
||||||
|
XSSFRow xssfRow = sheet.getRow(row); |
||||||
|
if (xssfRow == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
for (Map.Entry<String, List> entry : result.entrySet()) { |
||||||
|
String key = entry.getKey(); |
||||||
|
int col = tableCol.getInt(key); |
||||||
|
List value = entry.getValue(); |
||||||
|
XSSFCell cell = xssfRow.getCell(col); |
||||||
|
|
||||||
|
if (cell != null) { |
||||||
|
String cellValue = getCellValue(sheet, combineCell, row, col, cell); |
||||||
|
value.add(StringUtils.isBlank(cellValue) ? StringUtils.EMPTY : cellValue); |
||||||
|
} else { |
||||||
|
value.add(StringUtils.EMPTY); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getCellValue(XSSFSheet sheet, List<CellRangeAddress> combineCell, int row, int col, XSSFCell cell) { |
||||||
|
int firstC = 0; |
||||||
|
int lastC = 0; |
||||||
|
int firstR = 0; |
||||||
|
int lastR = 0; |
||||||
|
for (CellRangeAddress ca : combineCell) { |
||||||
|
// 获得合并单元格的起始行, 结束行, 起始列, 结束列
|
||||||
|
firstC = ca.getFirstColumn(); |
||||||
|
lastC = ca.getLastColumn(); |
||||||
|
firstR = ca.getFirstRow(); |
||||||
|
lastR = ca.getLastRow(); |
||||||
|
if (cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) { |
||||||
|
if (cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) { |
||||||
|
XSSFRow xRow = sheet.getRow(firstR); |
||||||
|
XSSFCell xCell = xRow.getCell(firstC); |
||||||
|
return getString(xCell); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return getString(cell); |
||||||
|
} |
||||||
|
|
||||||
|
public static List<CellRangeAddress> getCombineCell(XSSFSheet sheet) { |
||||||
|
// 获得一个 sheet 中合并单元格的数量
|
||||||
|
List<CellRangeAddress> list = new ArrayList<CellRangeAddress>(); |
||||||
|
int sheetmergerCount = sheet.getNumMergedRegions(); |
||||||
|
// 遍历合并单元格
|
||||||
|
for (int i = 0; i < sheetmergerCount; i++) { |
||||||
|
// 获得合并单元格加入list中
|
||||||
|
CellRangeAddress ca = sheet.getMergedRegion(i); |
||||||
|
list.add(ca); |
||||||
|
} |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 把单元格的内容转为字符串 |
||||||
|
* |
||||||
|
* @param xssfCell 单元格 |
||||||
|
* @return 字符串 |
||||||
|
*/ |
||||||
|
public static String getString(XSSFCell xssfCell) { |
||||||
|
if (xssfCell == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
int type = xssfCell.getCellType(); |
||||||
|
if (type == XSSFCell.CELL_TYPE_NUMERIC) { |
||||||
|
if (DateUtil.isCellDateFormatted(xssfCell)) { |
||||||
|
// 如果是date类型则 ,获取该cell的date值
|
||||||
|
return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(xssfCell.getNumericCellValue())); |
||||||
|
} else { // 纯数字
|
||||||
|
return String.valueOf(xssfCell.getNumericCellValue()); |
||||||
|
} |
||||||
|
} else if (type == XSSFCell.CELL_TYPE_BOOLEAN) { |
||||||
|
return String.valueOf(xssfCell.getBooleanCellValue()); |
||||||
|
} else { |
||||||
|
return xssfCell.getStringCellValue(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/********************************excel2003*************************************************/ |
||||||
|
|
||||||
|
public static HSSFWorkbook getExcel2003Work(String attachId) { |
||||||
|
HSSFWorkbook sheets = null; |
||||||
|
try { |
||||||
|
Attachment attachment = AttachmentSource.getAttachment(attachId); |
||||||
|
if (attachment != null) { |
||||||
|
InputStream inputStream = attachment.getInputStream(); |
||||||
|
POIFSFileSystem poifsFileSystem = null; |
||||||
|
|
||||||
|
try { |
||||||
|
poifsFileSystem = new POIFSFileSystem(inputStream); |
||||||
|
} catch (IOException var13) { |
||||||
|
throw new IOException(Inter.getLocText("Fine-Engine_NS_Exception_ReadExcelError")); |
||||||
|
} |
||||||
|
sheets = new HSSFWorkbook(poifsFileSystem); |
||||||
|
sheets.getNumberOfSheets(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return sheets; |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray get2003SheetFiled(HSSFSheet sheet) { |
||||||
|
JSONArray result = JSONArray.create(); |
||||||
|
int rowCounts = sheet.getPhysicalNumberOfRows(); |
||||||
|
int titleRow = -1; |
||||||
|
for (int row = 0; row < rowCounts; row++) { |
||||||
|
HSSFRow hssfRow = sheet.getRow(row); |
||||||
|
if (hssfRow == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
//循环取每个单元格(cell)的数据
|
||||||
|
for (int cellIndex = 0; cellIndex < hssfRow.getPhysicalNumberOfCells(); cellIndex++) { |
||||||
|
HSSFCell hssfCell = hssfRow.getCell(cellIndex); |
||||||
|
String value = get2003String(hssfCell); |
||||||
|
if (StringUtils.isNotBlank(value)) { |
||||||
|
titleRow = row; |
||||||
|
JSONObject o = JSONObject.create().put("titleRow", titleRow).put("value", cellIndex).put("text", value); |
||||||
|
result.add(o); |
||||||
|
} |
||||||
|
} |
||||||
|
if (titleRow >= 0) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 把单元格的内容转为字符串 |
||||||
|
* |
||||||
|
* @param hssfCell 单元格 |
||||||
|
* @return 字符串 |
||||||
|
*/ |
||||||
|
public static String get2003String(HSSFCell hssfCell) { |
||||||
|
if (hssfCell == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
int type = hssfCell.getCellType(); |
||||||
|
if (type == HSSFCell.CELL_TYPE_NUMERIC) { |
||||||
|
if (HSSFDateUtil.isCellDateFormatted(hssfCell)) { |
||||||
|
// 如果是date类型则 ,获取该cell的date值
|
||||||
|
return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(hssfCell.getNumericCellValue())); |
||||||
|
} else { // 纯数字
|
||||||
|
return String.valueOf(hssfCell.getNumericCellValue()); |
||||||
|
} |
||||||
|
} else if (type == XSSFCell.CELL_TYPE_BOOLEAN) { |
||||||
|
return String.valueOf(hssfCell.getBooleanCellValue()); |
||||||
|
} else { |
||||||
|
return hssfCell.getStringCellValue(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取2003的值 |
||||||
|
* |
||||||
|
* @param sheet |
||||||
|
* @param row |
||||||
|
* @param col |
||||||
|
* @param cell |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String get2003CellValue(HSSFSheet sheet, int row, int col, HSSFCell cell) { |
||||||
|
int sheetMergeCount = sheet.getNumMergedRegions(); |
||||||
|
for (int i = 0; i < sheetMergeCount; i++) { |
||||||
|
Region mergedRegionAt = sheet.getMergedRegionAt(i); |
||||||
|
mergedRegionAt.getRowFrom(); |
||||||
|
// CellRangeAddress ca = sheet.getMergedRegion(i);
|
||||||
|
int firstColumn = mergedRegionAt.getColumnFrom(); |
||||||
|
int lastColumn = mergedRegionAt.getColumnTo(); |
||||||
|
int firstRow = mergedRegionAt.getRowFrom(); |
||||||
|
int lastRow = mergedRegionAt.getRowTo(); |
||||||
|
if (row >= firstRow && row <= lastRow) { |
||||||
|
if (col >= firstColumn && col <= lastColumn) { |
||||||
|
HSSFRow fRow = sheet.getRow(firstRow); |
||||||
|
HSSFCell fCell = fRow.getCell(firstColumn); |
||||||
|
return get2003String(fCell); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return get2003String(cell); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, List> get2003SheetContent(HSSFSheet sheet, int titleRow, JSONObject tableCol) { |
||||||
|
Map<String, List> result = new HashMap<String, List>(); |
||||||
|
Iterator<Map.Entry<String, Object>> iterator = tableCol.iterator(); |
||||||
|
// List<CellRangeAddress> combineCell = getCombineCell(sheet);
|
||||||
|
while (iterator.hasNext()) { |
||||||
|
Map.Entry<String, Object> entry = iterator.next(); |
||||||
|
result.put(entry.getKey(), new ArrayList()); |
||||||
|
} |
||||||
|
int lastRowNum = sheet.getLastRowNum(); |
||||||
|
for (int row = titleRow + 1; row <= lastRowNum; row++) { |
||||||
|
HSSFRow hssfRow = sheet.getRow(row); |
||||||
|
if (hssfRow == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
for (Map.Entry<String, List> entry : result.entrySet()) { |
||||||
|
String key = entry.getKey(); |
||||||
|
int col = tableCol.getInt(key); |
||||||
|
List value = entry.getValue(); |
||||||
|
HSSFCell cell = hssfRow.getCell(col); |
||||||
|
|
||||||
|
if (cell != null) { |
||||||
|
String cellValue = get2003CellValue(sheet, row, col, cell); |
||||||
|
value.add(StringUtils.isBlank(cellValue) ? StringUtils.EMPTY : cellValue); |
||||||
|
} else { |
||||||
|
value.add(StringUtils.EMPTY); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.plugin.decision; |
||||||
|
|
||||||
|
import com.fr.db.fun.impl.AbstractDBAccessProvider; |
||||||
|
import com.fr.plugin.decision.dao.ReuseDao; |
||||||
|
import com.fr.plugin.decision.dao.ReuseEntity; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
|
||||||
|
public class ReuseConfigAccessBridge extends AbstractDBAccessProvider { |
||||||
|
|
||||||
|
private static DBAccessor dbAccessor = null; |
||||||
|
|
||||||
|
public static DBAccessor getDbAccessor() { |
||||||
|
return dbAccessor; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public DAOProvider[] registerDAO() { |
||||||
|
return new DAOProvider[]{ |
||||||
|
new DAOProvider(){ |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class getEntityClass() { |
||||||
|
return ReuseEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return ReuseDao.class; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
ReuseConfigAccessBridge.dbAccessor = dbAccessor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.plugin.decision.core; |
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
public enum ActionEunm { |
||||||
|
|
||||||
|
ADDTO_ACTION("addTo"), |
||||||
|
COVER_ACTION("cover"), |
||||||
|
CREATE_ACTION("add"); |
||||||
|
|
||||||
|
private String value; |
||||||
|
|
||||||
|
private ActionEunm(String value){ |
||||||
|
this.value = value; |
||||||
|
} |
||||||
|
|
||||||
|
public String getValue(){ |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
public static ActionEunm fromTypeName(String value){ |
||||||
|
for (ActionEunm typeEnum: ActionEunm.values()) { |
||||||
|
if(StringUtils.equals(value, typeEnum.getValue())){ |
||||||
|
return typeEnum; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.plugin.decision.core; |
||||||
|
|
||||||
|
import com.fr.plugin.decision.core.action.AddAction; |
||||||
|
import com.fr.plugin.decision.core.action.CoverAction; |
||||||
|
import com.fr.plugin.decision.core.action.CreateAction; |
||||||
|
import com.fr.plugin.decision.core.action.ExcelDmlAction; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class ActionFactory { |
||||||
|
|
||||||
|
private static Map actionMap = new HashMap(); |
||||||
|
private static ActionFactory actionFactory = new ActionFactory(); |
||||||
|
|
||||||
|
private ActionFactory(){ |
||||||
|
} |
||||||
|
|
||||||
|
public static ActionFactory getInstance(){ |
||||||
|
return actionFactory; |
||||||
|
} |
||||||
|
|
||||||
|
public ExcelDmlAction create(String type){ |
||||||
|
return (ExcelDmlAction) actionMap.get(ActionEunm.fromTypeName(type)); |
||||||
|
} |
||||||
|
|
||||||
|
{ |
||||||
|
actionMap.put(ActionEunm.ADDTO_ACTION, new AddAction()); |
||||||
|
actionMap.put(ActionEunm.COVER_ACTION, new CoverAction()); |
||||||
|
actionMap.put(ActionEunm.CREATE_ACTION,new CreateAction()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,238 @@ |
|||||||
|
package com.fr.plugin.decision.core; |
||||||
|
|
||||||
|
import com.fr.cache.Attachment; |
||||||
|
import com.fr.cache.list.IntList; |
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.base.DialectKeyConstants; |
||||||
|
import com.fr.data.core.db.dialect.base.key.init.table.DialectInitTableParameter; |
||||||
|
import com.fr.data.core.db.dml.CreateTable; |
||||||
|
import com.fr.data.core.db.dml.Delete; |
||||||
|
import com.fr.data.core.db.dml.Table; |
||||||
|
import com.fr.data.core.db.tableObject.Column; |
||||||
|
import com.fr.data.core.db.tableObject.ColumnSize; |
||||||
|
import com.fr.data.dao.*; |
||||||
|
import com.fr.file.DatasourceManager; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.web.AttachmentHelper; |
||||||
|
import com.fr.workspace.WorkContext; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.PreparedStatement; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
public class DML { |
||||||
|
|
||||||
|
public static void initTable(Dialect dialect, Connection conn, Table table, String connectionName, List<String> tableColName, List<String> tableColLength, List<Integer> tableColType) throws Exception { |
||||||
|
FieldColumnMapper[] fieldColumnMappers = new FieldColumnMapper[tableColName.size()]; |
||||||
|
for (int k=0; k<tableColName.size(); k++){ |
||||||
|
String[] colLen = tableColLength.get(k).split(","); |
||||||
|
ColumnSize columnSize; |
||||||
|
if (colLen.length == 1) { |
||||||
|
columnSize = new ColumnSize(Integer.parseInt(colLen[0])); |
||||||
|
} else { |
||||||
|
columnSize = new ColumnSize(Integer.parseInt(colLen[0]), Integer.parseInt(colLen[1])); |
||||||
|
} |
||||||
|
CommonFieldColumnMapper fieldColumnMapper = new CommonFieldColumnMapper( |
||||||
|
tableColName.get(k), |
||||||
|
tableColType.get(k), |
||||||
|
columnSize); |
||||||
|
fieldColumnMappers[k] = fieldColumnMapper; |
||||||
|
} |
||||||
|
Class clazz = conn.getClass(); |
||||||
|
ObjectTableMapper objectTableMapper = new ObjectTableMapper(clazz, table, fieldColumnMappers); |
||||||
|
// 不校验 table 是否存在
|
||||||
|
objectTableMapper.applyNoCheckTableObjectCase(); |
||||||
|
com.fr.data.impl.Connection implconn = DatasourceManager.getInstance().getConnection(connectionName); |
||||||
|
ObjectMappingTable objectMappingTable = ObjectMappingTable.createObjectMappingTable(objectTableMapper, new HashMap()); |
||||||
|
conn.setAutoCommit(false); |
||||||
|
dialect.execute(DialectKeyConstants.INIT_TABLE_KEY, new DialectInitTableParameter( |
||||||
|
new JDBCDataAccessObjectOperator(implconn, new ObjectTableMapper[]{}), |
||||||
|
conn, |
||||||
|
new ObjectMappingTable[]{objectMappingTable})); |
||||||
|
} |
||||||
|
|
||||||
|
public static void createTable(Dialect dialect, Connection conn, Table table, List<String> tableColName, List<String> tableColLength, List<Integer> tableColType, List<Boolean> tablePrimaryKey) throws SQLException { |
||||||
|
CreateTable createTable = new CreateTable(table, dialect); |
||||||
|
for (int i=0; i<tableColName.size(); i++) { |
||||||
|
Column column = new Column(); |
||||||
|
column.setName(tableColName.get(i)); |
||||||
|
column.setValueType(tableColType.get(i)); |
||||||
|
String[] colLen = tableColLength.get(i).split(","); |
||||||
|
if (colLen.length > 1) { |
||||||
|
column.setColumnSize(new ColumnSize(Integer.parseInt(colLen[0]), Integer.parseInt(colLen[1]))); |
||||||
|
} else { |
||||||
|
column.setColumnSize(new ColumnSize(Integer.parseInt(tableColLength.get(i)))); |
||||||
|
} |
||||||
|
if (tablePrimaryKey.get(i)) { |
||||||
|
column.setPrimaryKey(true); |
||||||
|
column.setAllowNull(false); |
||||||
|
} |
||||||
|
createTable.addColumn(column); |
||||||
|
} |
||||||
|
PreparedStatement createPs = createTable.createPreparedStatementByValidatedParameters(conn); |
||||||
|
createPs.execute(); |
||||||
|
} |
||||||
|
|
||||||
|
public static int deleteTable(Dialect dialect, Connection conn, Table table) throws SQLException { |
||||||
|
Delete delete = new Delete(table, dialect); |
||||||
|
PreparedStatement deletePs = delete.createPreparedStatementByValidatedParameters(conn); |
||||||
|
return deletePs.executeUpdate(); |
||||||
|
} |
||||||
|
|
||||||
|
public static void dropTable(Dialect dialect, Connection conn, Table table) throws SQLException { |
||||||
|
Drop drop = new Drop(table, dialect); |
||||||
|
PreparedStatement dropPs = drop.createPreparedStatementByValidatedParameters(conn); |
||||||
|
dropPs.execute(); |
||||||
|
} |
||||||
|
|
||||||
|
public static PreparedStatement createInsertedPreparedStatement(Dialect dialect, Connection conn, Table table, List<String> tableColName) throws SQLException { |
||||||
|
IntList intList = new IntList(); |
||||||
|
ArrayList list = new ArrayList(); |
||||||
|
ArrayList list1 = new ArrayList(); |
||||||
|
int i = 0; |
||||||
|
|
||||||
|
for(int colSize = tableColName.size(); i < colSize; ++i) { |
||||||
|
list.add(dialect.column2SQL(tableColName.get(i))); |
||||||
|
list1.add("?"); |
||||||
|
intList.add(i); |
||||||
|
} |
||||||
|
|
||||||
|
if (list1.isEmpty()) { |
||||||
|
return null; |
||||||
|
} else { |
||||||
|
String sql = "INSERT INTO " + table.toStatementSQLString(dialect) + " (" + StableUtils.join(list, ",") + ") VALUES (" + StableUtils.join(list1, ",") + ")"; |
||||||
|
FineLoggerFactory.getLogger().sql("SQL: " + sql); |
||||||
|
return conn.prepareStatement(sql); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static int execInsertedPreparedStatement(Dialect dialect, Connection conn, Table table,PreparedStatement ps, int rowCount, List<String> tableColName, List<Integer> tableColType, Map<String, List> tableValue) throws SQLException, IOException { |
||||||
|
int count = 0; |
||||||
|
boolean supportsBatchUpdates = conn.getMetaData().supportsBatchUpdates(); |
||||||
|
if (JdbcUtils.isHive(conn)) { |
||||||
|
return execHiveInsert(dialect, conn, table, ps, rowCount, tableColName, tableColType, tableValue); |
||||||
|
} |
||||||
|
|
||||||
|
if (!supportsBatchUpdates) { |
||||||
|
return execInsertedPreparedStatementByItem(dialect, conn, table, ps, rowCount, tableColName, tableColType, tableValue); |
||||||
|
} |
||||||
|
|
||||||
|
for (int rownum=0; rownum<rowCount; rownum++) { |
||||||
|
for (int index=0; index<tableColName.size(); index++) { |
||||||
|
int type = tableColType.get(index); |
||||||
|
Object value = tableValue.get(tableColName.get(index)).get(rownum); |
||||||
|
// excel 中读数 1 会识别为 1.0 , 列格式为[文本]时需要调整下
|
||||||
|
if(type == 12 && JdbcUtils.isNumeric(value.toString())) { |
||||||
|
value = value.toString().split("\\.")[0]; |
||||||
|
} |
||||||
|
|
||||||
|
DBUtils.applyColumnTypeValue( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
table, |
||||||
|
null, |
||||||
|
null, |
||||||
|
ps, |
||||||
|
index + 1, |
||||||
|
type, |
||||||
|
value |
||||||
|
); |
||||||
|
} |
||||||
|
count ++ ; |
||||||
|
ps.addBatch(); |
||||||
|
if(rownum!=0 && rownum%10000==0){ |
||||||
|
ps.executeBatch(); |
||||||
|
ps.clearBatch(); |
||||||
|
} |
||||||
|
} |
||||||
|
ps.executeBatch(); |
||||||
|
ps.clearBatch(); |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
public static int execInsertedPreparedStatementByItem(Dialect dialect, Connection conn, Table table,PreparedStatement ps, int rowCount, List<String> tableColName, List<Integer> tableColType, Map<String, List> tableValue) throws SQLException { |
||||||
|
int count = 0; |
||||||
|
|
||||||
|
for (int rownum=0; rownum<rowCount; rownum++) { |
||||||
|
for (int index=0; index<tableColName.size(); index++) { |
||||||
|
int type = tableColType.get(index); |
||||||
|
Object value = tableValue.get(tableColName.get(index)).get(rownum); |
||||||
|
// excel 中读数 1 会识别为 1.0 , 列格式为[文本]时需要调整下
|
||||||
|
if(type == 12 && JdbcUtils.isNumeric(value.toString())) { |
||||||
|
value = value.toString().split("\\.")[0]; |
||||||
|
} |
||||||
|
|
||||||
|
DBUtils.applyColumnTypeValue( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
table, |
||||||
|
null, |
||||||
|
null, |
||||||
|
ps, |
||||||
|
index + 1, |
||||||
|
type, |
||||||
|
value |
||||||
|
); |
||||||
|
} |
||||||
|
count ++ ; |
||||||
|
ps.execute(); |
||||||
|
} |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
public static int execHiveInsert(Dialect dialect, Connection conn, Table table,PreparedStatement ps, int rowCount, List<String> tableColName, List<Integer> tableColType, Map<String, List> tableValue){ |
||||||
|
try { |
||||||
|
String txt = hiveInsertCreateTxt(tableValue); |
||||||
|
DBUtils.close(ps); |
||||||
|
String sql = "LOAD DATA LOCAL INPATH '" + txt +"' OVERWRITE into table " + dialect.table2SQL(table); |
||||||
|
FineLoggerFactory.getLogger().info("execHiveInsert insert sql:" + sql); |
||||||
|
PreparedStatement hiveInsertPs = conn.prepareStatement(sql); |
||||||
|
hiveInsertPs.execute(); |
||||||
|
FineLoggerFactory.getLogger().info("execHiveInsert:执行正常"); |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return rowCount; |
||||||
|
} |
||||||
|
|
||||||
|
public static String hiveInsertCreateTxt(Map<String, List> tableValue) throws IOException { |
||||||
|
StringBuffer txtStr = new StringBuffer(); |
||||||
|
String path = new StringBuilder().append(WorkContext.getCurrent().getPath()).append("/txt/hw_excel_hive").append((int)(Math.random() * 10000)).append(".txt").toString() ; |
||||||
|
FineLoggerFactory.getLogger().info("hiveInsert_path: " + path); |
||||||
|
|
||||||
|
File writename = new File(path); |
||||||
|
if(!writename.exists()){ |
||||||
|
writename.createNewFile(); |
||||||
|
} |
||||||
|
|
||||||
|
BufferedWriter out = new BufferedWriter(new FileWriter(writename)); |
||||||
|
|
||||||
|
Set set = tableValue.entrySet(); |
||||||
|
Iterator iterator = set.iterator(); |
||||||
|
while (iterator.hasNext()){ |
||||||
|
Map.Entry entry = (Map.Entry)iterator.next(); |
||||||
|
List<String> colItems = (ArrayList<String>) entry.getValue(); |
||||||
|
for (String item : colItems) { |
||||||
|
txtStr.append(item).append("\001"); |
||||||
|
} |
||||||
|
txtStr.deleteCharAt(txtStr.length()-4); |
||||||
|
txtStr.append("\n"); |
||||||
|
} |
||||||
|
txtStr.deleteCharAt(txtStr.length()-2); |
||||||
|
out.write(txtStr.toString()); |
||||||
|
out.flush(); |
||||||
|
out.close(); |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("hiveInsert_path: " + path + " 文件创建成功"); |
||||||
|
return path; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.decision.core; |
||||||
|
|
||||||
|
import com.fr.base.TemplateUtils; |
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dml.AbstractDML; |
||||||
|
import com.fr.data.core.db.dml.Table; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.PreparedStatement; |
||||||
|
import java.sql.SQLException; |
||||||
|
|
||||||
|
public class Drop extends AbstractDML { |
||||||
|
protected Drop(Table table, Dialect dialect) { |
||||||
|
super(table, dialect); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected PreparedStatement createPreparedStatementByValidatedParameters(Connection connection) throws SQLException { |
||||||
|
String dropSQL = TemplateUtils.render("DROP TABLE ${table} ", new String[]{"table"}, new String[]{this.getTable().toStatementSQLString(this.dialect)}); |
||||||
|
FineLoggerFactory.getLogger().debug(dropSQL.toString()); |
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(dropSQL); |
||||||
|
|
||||||
|
return preparedStatement; |
||||||
|
} |
||||||
|
|
||||||
|
// todo: executeUpdate 执行 drop 后的返回值
|
||||||
|
public int execute(Connection connection) throws SQLException { |
||||||
|
PreparedStatement preparedStatement = this.createPreparedStatement(connection); |
||||||
|
|
||||||
|
int result; |
||||||
|
try { |
||||||
|
if (preparedStatement == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
result = preparedStatement.executeUpdate(); |
||||||
|
} finally { |
||||||
|
DBUtils.closeStatement(preparedStatement); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,91 @@ |
|||||||
|
package com.fr.plugin.decision.core; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dml.Table; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class ExcelDmlBean { |
||||||
|
|
||||||
|
private String connectionName; |
||||||
|
private Table table; |
||||||
|
private int rowCount; |
||||||
|
private Map<String, List> tableValue; |
||||||
|
private List<String> tableColName = new ArrayList<>(); |
||||||
|
private List<String> tableColLength = new ArrayList<>(); |
||||||
|
private List<Integer> tableColType = new ArrayList<>(); |
||||||
|
private List<Boolean> tablePrimaryKey = new ArrayList<>(); |
||||||
|
|
||||||
|
public ExcelDmlBean(String connectionName, String schema, String tableName, JSONArray tableColItems, Map<String, List> tableValue){ |
||||||
|
this.connectionName = connectionName; |
||||||
|
this.tableValue = tableValue; |
||||||
|
for (Object o : tableColItems) { |
||||||
|
String colName = ((JSONObject) o).getString("colName"); |
||||||
|
String colLength = ((JSONObject) o).getString("colLength"); |
||||||
|
int colType = ((JSONObject) o).getInt("colType"); |
||||||
|
boolean primaryKey = ((JSONObject) o).getBoolean("primaryKey"); |
||||||
|
tableColName.add(colName); |
||||||
|
tableColType.add(colType); |
||||||
|
tableColLength.add(colLength); |
||||||
|
tablePrimaryKey.add(primaryKey); |
||||||
|
} |
||||||
|
|
||||||
|
table = new Table(schema, tableName); |
||||||
|
rowCount = tableValue.get(tableColName.get(0)).size(); |
||||||
|
} |
||||||
|
|
||||||
|
public List<Boolean> getTablePrimaryKey() { |
||||||
|
return tablePrimaryKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTablePrimaryKey(List<Boolean> tablePrimaryKey) { |
||||||
|
this.tablePrimaryKey = tablePrimaryKey; |
||||||
|
} |
||||||
|
|
||||||
|
public Table getTable() { |
||||||
|
return table; |
||||||
|
} |
||||||
|
|
||||||
|
public int getRowCount() { |
||||||
|
return rowCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<String> getTableColLength() { |
||||||
|
return tableColLength; |
||||||
|
} |
||||||
|
|
||||||
|
public String getConnectionName() { |
||||||
|
return connectionName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setConnectionName(String connectionName) { |
||||||
|
this.connectionName = connectionName; |
||||||
|
} |
||||||
|
|
||||||
|
public Map<String, List> getTableValue() { |
||||||
|
return tableValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTableValue(Map<String, List> tableValue) { |
||||||
|
this.tableValue = tableValue; |
||||||
|
} |
||||||
|
|
||||||
|
public List<String> getTableColName() { |
||||||
|
return tableColName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTableColName(List<String> tableColName) { |
||||||
|
this.tableColName = tableColName; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Integer> getTableColType() { |
||||||
|
return tableColType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTableColType(List<Integer> tableColType) { |
||||||
|
this.tableColType = tableColType; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
package com.fr.plugin.decision.core.action; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.core.DML; |
||||||
|
|
||||||
|
import java.sql.PreparedStatement; |
||||||
|
|
||||||
|
public class AddAction extends ExcelDmlAction { |
||||||
|
|
||||||
|
public AddAction() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject execute() { |
||||||
|
PreparedStatement preparedStatement = null; |
||||||
|
JSONObject result = JSONObject.create(); |
||||||
|
int count = -1; |
||||||
|
try { |
||||||
|
conn.setAutoCommit(false); |
||||||
|
preparedStatement = DML.createInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
excelDmlBean.getTableColName() |
||||||
|
); |
||||||
|
|
||||||
|
count = DML.execInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
preparedStatement, |
||||||
|
excelDmlBean.getRowCount(), |
||||||
|
excelDmlBean.getTableColName(), |
||||||
|
excelDmlBean.getTableColType(), |
||||||
|
excelDmlBean.getTableValue() |
||||||
|
); |
||||||
|
|
||||||
|
conn.commit(); |
||||||
|
conn.setAutoCommit(true); |
||||||
|
result.put("status", "success").put("text", "成功追加数据条数为 "+ count +"条").put("addLink",false); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:AddAction failed !", e.getMessage()); |
||||||
|
DBUtils.rollback(conn); |
||||||
|
e.printStackTrace(); |
||||||
|
result.put("status", "fail").put("errorText", "追加操作数据插入异常" + e.getLocalizedMessage()); |
||||||
|
} finally { |
||||||
|
DBUtils.close(conn); |
||||||
|
DBUtils.close(preparedStatement); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.fr.plugin.decision.core.action; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.core.DML; |
||||||
|
|
||||||
|
import java.sql.PreparedStatement; |
||||||
|
|
||||||
|
public class CoverAction extends ExcelDmlAction { |
||||||
|
|
||||||
|
public CoverAction() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject execute() { |
||||||
|
PreparedStatement preparedStatement = null; |
||||||
|
JSONObject result = JSONObject.create(); |
||||||
|
int insertCount = 0; |
||||||
|
int deleteCount = 0; |
||||||
|
try { |
||||||
|
conn.setAutoCommit(false); |
||||||
|
deleteCount = DML.deleteTable( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable() |
||||||
|
); |
||||||
|
|
||||||
|
preparedStatement = DML.createInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
excelDmlBean.getTableColName() |
||||||
|
); |
||||||
|
|
||||||
|
insertCount = DML.execInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
preparedStatement, |
||||||
|
excelDmlBean.getRowCount(), |
||||||
|
excelDmlBean.getTableColName(), |
||||||
|
excelDmlBean.getTableColType(), |
||||||
|
excelDmlBean.getTableValue() |
||||||
|
); |
||||||
|
conn.commit(); |
||||||
|
conn.setAutoCommit(true); |
||||||
|
result.put("status", "success").put("text", "成功删除数据" + deleteCount + "条,插入数据 " + insertCount +"条").put("addLink",false); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:CoverAction failed !", e.getMessage()); |
||||||
|
DBUtils.rollback(conn); |
||||||
|
e.printStackTrace(); |
||||||
|
result.put("status", "fail").put("errorText", "覆盖操作数据插入异常" + e.getLocalizedMessage()); |
||||||
|
} finally { |
||||||
|
DBUtils.close(conn); |
||||||
|
DBUtils.close(preparedStatement); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package com.fr.plugin.decision.core.action; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.core.DML; |
||||||
|
|
||||||
|
import java.sql.PreparedStatement; |
||||||
|
import java.sql.SQLException; |
||||||
|
|
||||||
|
public class CreateAction extends ExcelDmlAction { |
||||||
|
public CreateAction() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject execute() { |
||||||
|
PreparedStatement preparedStatement = null; |
||||||
|
JSONObject result = JSONObject.create(); |
||||||
|
int count = 0; |
||||||
|
try { |
||||||
|
conn.setAutoCommit(false); |
||||||
|
DML.createTable( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
excelDmlBean.getTableColName(), |
||||||
|
excelDmlBean.getTableColLength(), |
||||||
|
excelDmlBean.getTableColType(), |
||||||
|
excelDmlBean.getTablePrimaryKey() |
||||||
|
); |
||||||
|
preparedStatement = DML.createInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
excelDmlBean.getTableColName() |
||||||
|
); |
||||||
|
count = DML.execInsertedPreparedStatement( |
||||||
|
dialect, |
||||||
|
conn, |
||||||
|
excelDmlBean.getTable(), |
||||||
|
preparedStatement, |
||||||
|
excelDmlBean.getRowCount(), |
||||||
|
excelDmlBean.getTableColName(), |
||||||
|
excelDmlBean.getTableColType(), |
||||||
|
excelDmlBean.getTableValue() |
||||||
|
); |
||||||
|
conn.commit(); |
||||||
|
conn.setAutoCommit(true); |
||||||
|
result.put("status", "success").put("text", "表创建正常,成功插入数据" + count + "条").put("addLink",true); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:CreateAction failed !", e.getMessage()); |
||||||
|
DBUtils.rollback(conn); |
||||||
|
try { |
||||||
|
DML.dropTable(dialect, conn, excelDmlBean.getTable()); |
||||||
|
} catch (SQLException e1) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:dropTable failed !", e.getMessage()); |
||||||
|
} |
||||||
|
e.printStackTrace(); |
||||||
|
result.put("status", "failed").put("errorText", "新增操作异常" + e.getLocalizedMessage()); |
||||||
|
} finally { |
||||||
|
DBUtils.close(conn); |
||||||
|
DBUtils.close(preparedStatement); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fr.plugin.decision.core.action; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.DialectFactory; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.core.ExcelDmlBean; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
|
||||||
|
import java.sql.Connection; |
||||||
|
|
||||||
|
public abstract class ExcelDmlAction { |
||||||
|
|
||||||
|
public Connection conn; |
||||||
|
public Dialect dialect; |
||||||
|
public ExcelDmlBean excelDmlBean; |
||||||
|
|
||||||
|
public ExcelDmlAction(){ |
||||||
|
} |
||||||
|
|
||||||
|
public void setExcelDmlBean(ExcelDmlBean excelDmlBean) { |
||||||
|
this.excelDmlBean = excelDmlBean; |
||||||
|
this.conn = JdbcUtils.getConnection(excelDmlBean.getConnectionName()); |
||||||
|
this.dialect = DialectFactory.generateDialect(conn); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract JSONObject execute(); |
||||||
|
} |
@ -0,0 +1,142 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.condition.impl.QueryConditionImpl; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
public class ExcelLinkService { |
||||||
|
|
||||||
|
private static ExcelLinkService instance ; |
||||||
|
|
||||||
|
private ExcelLinkService(){ |
||||||
|
} |
||||||
|
|
||||||
|
public static synchronized ExcelLinkService getInstance() { |
||||||
|
if (instance == null) { |
||||||
|
instance = new ExcelLinkService(); |
||||||
|
} |
||||||
|
return instance; |
||||||
|
} |
||||||
|
|
||||||
|
public void addLink(final String name, final String datasouces, final String schema, final String tablename, final String createUser){ |
||||||
|
try { |
||||||
|
ExcelMngConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
ExcelMngEntity entity=new ExcelMngEntity(); |
||||||
|
|
||||||
|
entity.setId(UUID.randomUUID().toString()); |
||||||
|
entity.setName(name); |
||||||
|
entity.setDatasouces(datasouces); |
||||||
|
entity.setSchema(schema); |
||||||
|
entity.setTablename(tablename); |
||||||
|
entity.setCreateUser(createUser); |
||||||
|
|
||||||
|
daoContext.getDAO(ExcelMngDao.class).add(entity); |
||||||
|
return entity; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接添加失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void deleteLinkById(final String id){ |
||||||
|
try { |
||||||
|
ExcelMngConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(ExcelMngDao.class).remove(id); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接删除失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void deleteLinkByName(final String name){ |
||||||
|
try { |
||||||
|
ExcelMngConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(ExcelMngDao.class).remove(new QueryConditionImpl().addRestriction(RestrictionFactory.eq("name", name))); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接删除失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ExcelMngEntity getLinkById(final String id){ |
||||||
|
ExcelMngEntity entity = null; |
||||||
|
try { |
||||||
|
entity = ExcelMngConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ExcelMngDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id",id))); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接查询失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return entity; |
||||||
|
} |
||||||
|
|
||||||
|
public ExcelMngEntity getLinkByName(final String name){ |
||||||
|
ExcelMngEntity entity = null; |
||||||
|
try { |
||||||
|
entity = ExcelMngConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ExcelMngDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("name",name))); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接查询失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return entity; |
||||||
|
} |
||||||
|
|
||||||
|
public List<ExcelMngEntity> getAllLink(final String key, final String createUser){ |
||||||
|
List<ExcelMngEntity> entities = new ArrayList<>(); |
||||||
|
final QueryCondition queryCondition = StringUtils.isBlank(key)? QueryFactory.create().addSort("name"):QueryFactory.create().addSort("name").addRestriction(RestrictionFactory.like("name", key)); |
||||||
|
|
||||||
|
try { |
||||||
|
if (!UserService.getInstance().isAdmin(createUser)){ |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("createUser", createUser)); |
||||||
|
} |
||||||
|
|
||||||
|
entities = ExcelMngConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<List<ExcelMngEntity> >() { |
||||||
|
@Override |
||||||
|
public List<ExcelMngEntity> run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ExcelMngDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e){ |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:查询全部链接异常"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return entities; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class ExcelMngDao extends BaseDAO<ExcelMngEntity> { |
||||||
|
public ExcelMngDao(DAOSession daoSession){ |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Class<ExcelMngEntity> getEntityClass() { |
||||||
|
return ExcelMngEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table(name = "FINE_PLUGIN_HW_EXCEL") |
||||||
|
public class ExcelMngEntity extends BaseEntity { |
||||||
|
|
||||||
|
@Column(name="name", unique = true) |
||||||
|
private String name; |
||||||
|
|
||||||
|
@Column(name="dataSources") |
||||||
|
private String datasouces; |
||||||
|
|
||||||
|
@Column(name="schemaName") |
||||||
|
private String schema; |
||||||
|
|
||||||
|
@Column(name="tableName") |
||||||
|
private String tablename; |
||||||
|
|
||||||
|
@Column(name="createUser") |
||||||
|
private String createUser; |
||||||
|
|
||||||
|
public ExcelMngEntity(){ |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name){ |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName(){ |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDatasouces(String datasouces){ |
||||||
|
this.datasouces = datasouces; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDatasouces(){ |
||||||
|
return datasouces; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSchema(String schema){ |
||||||
|
this.schema = schema; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSchema(){ |
||||||
|
return schema; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTablename(String tablename){ |
||||||
|
this.tablename = tablename; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTablename(){ |
||||||
|
return tablename; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateUser(String createUser){ |
||||||
|
this.createUser = createUser; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCreateUser(){ |
||||||
|
return createUser; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class ReuseDao extends BaseDAO<ReuseEntity> { |
||||||
|
public ReuseDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Class<ReuseEntity> getEntityClass() { |
||||||
|
return ReuseEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table(name = "FINE_PLUGIN_HW_EXCEL_REUSE") |
||||||
|
public class ReuseEntity extends BaseEntity { |
||||||
|
@Column(name="userName") |
||||||
|
private String userName; |
||||||
|
|
||||||
|
@Column(name="linkName") |
||||||
|
private String linkName; |
||||||
|
|
||||||
|
public ReuseEntity(){ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public String getUserName() { |
||||||
|
return userName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserName(String userName) { |
||||||
|
this.userName = userName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLinkName() { |
||||||
|
return linkName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLinkName(String linkName) { |
||||||
|
this.linkName = linkName; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,104 @@ |
|||||||
|
package com.fr.plugin.decision.dao; |
||||||
|
|
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.ReuseConfigAccessBridge; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.condition.impl.QueryConditionImpl; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
|
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
public class ReuseService { |
||||||
|
private static ReuseService instance ; |
||||||
|
|
||||||
|
private ReuseService(){ |
||||||
|
} |
||||||
|
|
||||||
|
public static synchronized ReuseService getInstance() { |
||||||
|
if (instance == null) { |
||||||
|
instance = new ReuseService(); |
||||||
|
} |
||||||
|
return instance; |
||||||
|
} |
||||||
|
|
||||||
|
public void addUserOnLinkName(final String userNames, final String linkName){ |
||||||
|
try { |
||||||
|
ReuseConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ReuseEntity>() { |
||||||
|
@Override |
||||||
|
public ReuseEntity run(DAOContext daoContext) throws Exception { |
||||||
|
//for (String user:userNames){
|
||||||
|
ReuseEntity entity = new ReuseEntity(); |
||||||
|
entity.setId(UUID.randomUUID().toString()); |
||||||
|
entity.setLinkName(linkName); |
||||||
|
entity.setUserName(userNames); |
||||||
|
daoContext.getDAO(ReuseDao.class).add(entity); |
||||||
|
//}
|
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:复用添加用户失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void deleteUserOnLinkName(final String userNames, final String linkName){ |
||||||
|
try { |
||||||
|
ReuseConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ReuseEntity>() { |
||||||
|
@Override |
||||||
|
public ReuseEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(ReuseDao.class).remove(new QueryConditionImpl().addRestriction(RestrictionFactory.eq("linkName", linkName)).addRestriction(RestrictionFactory.eq("userName",userNames))); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接删除失败"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public List<ReuseEntity> getUserByLinkName(final String linkName){ |
||||||
|
List<ReuseEntity> entities = new ArrayList<>(); |
||||||
|
final QueryCondition queryCondition = QueryFactory.create().addSort("userName").addRestriction(RestrictionFactory.eq("linkName", linkName)); |
||||||
|
|
||||||
|
try { |
||||||
|
entities = ReuseConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<List<ReuseEntity> >() { |
||||||
|
@Override |
||||||
|
public List<ReuseEntity> run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ReuseDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e){ |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:getUserByLinkName异常"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return entities; |
||||||
|
} |
||||||
|
|
||||||
|
public List<ReuseEntity> getLinkByUserName(final String userName){ |
||||||
|
List<ReuseEntity> entities = new ArrayList<>(); |
||||||
|
final QueryCondition queryCondition = QueryFactory.create().addSort("linkName").addRestriction(RestrictionFactory.eq("userName", userName)); |
||||||
|
|
||||||
|
try { |
||||||
|
entities = ReuseConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<List<ReuseEntity> >() { |
||||||
|
@Override |
||||||
|
public List<ReuseEntity> run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ReuseDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e){ |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:getLinkByUserName异常"); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return entities; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.decision.dialect; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.dialect.gauss.GaussDialectConsummate; |
||||||
|
import com.fr.plugin.decision.dialect.hive.HiveDialectConsummate; |
||||||
|
import com.fr.plugin.decision.dialect.postgre.PostgreDialectConsummate; |
||||||
|
import com.fr.plugin.decision.dialect.sybase.SybaseDialectConsummate; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.UrlDriver; |
||||||
|
import com.fr.stable.fun.impl.AbstractDialectCreator; |
||||||
|
|
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.SQLException; |
||||||
|
|
||||||
|
public class DialectCreator extends AbstractDialectCreator { |
||||||
|
@Override |
||||||
|
public Class<?> generate(UrlDriver urlDriver) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<?> generate(Connection connection) { |
||||||
|
try { |
||||||
|
String DatabaseProductName = connection.getMetaData().getDatabaseProductName().trim().toUpperCase(); |
||||||
|
FineLoggerFactory.getLogger().debug("DialectCreator:" + DatabaseProductName); |
||||||
|
if (StringUtils.contains(DatabaseProductName,"POSTGRE")){ |
||||||
|
return PostgreDialectConsummate.class; |
||||||
|
} else if (StringUtils.contains(DatabaseProductName,"SYBASE")){ |
||||||
|
return SybaseDialectConsummate.class; |
||||||
|
} else if (StringUtils.contains(DatabaseProductName,"ZENITH")){ // gauss
|
||||||
|
return GaussDialectConsummate.class; |
||||||
|
} else if (StringUtils.contains(DatabaseProductName,"HIVE")){ |
||||||
|
return HiveDialectConsummate.class; |
||||||
|
} |
||||||
|
|
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.gauss; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.typetosql.AbstractDialectColumnType2SQLExecutor; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.typetosql.DialectColumnType2SQLParameter; |
||||||
|
import com.fr.data.core.db.dialect.util.DialectUtils; |
||||||
|
|
||||||
|
public class GaussDialectColumnType2SQLExecutor extends AbstractDialectColumnType2SQLExecutor { |
||||||
|
public GaussDialectColumnType2SQLExecutor(){ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String execute(DialectColumnType2SQLParameter dialectColumnType2SQLParameter, Dialect dialect) { |
||||||
|
int columnType = dialectColumnType2SQLParameter.getColumnType(); |
||||||
|
String columnSize = dialectColumnType2SQLParameter.getParameter(); |
||||||
|
switch(columnType) { |
||||||
|
case -7: |
||||||
|
return "bit"; |
||||||
|
case -5: |
||||||
|
return "numeric(" + columnSize + ")"; |
||||||
|
case -4: |
||||||
|
return "image"; |
||||||
|
case -3: |
||||||
|
return "varbinary(" + columnSize + ")"; |
||||||
|
case -2: |
||||||
|
return "binary(" + columnSize + ")"; |
||||||
|
case -1: |
||||||
|
return "text"; |
||||||
|
case 1: |
||||||
|
return "char(" + columnSize + ")"; |
||||||
|
case 2: |
||||||
|
return "numeric(" + columnSize + ")"; |
||||||
|
case 3: |
||||||
|
return "decimal(" + columnSize + ")"; |
||||||
|
case 4: |
||||||
|
return "int"; |
||||||
|
case 8: |
||||||
|
return "float"; |
||||||
|
case 12: |
||||||
|
return "varchar(" + columnSize + ")"; |
||||||
|
case 16: |
||||||
|
return "boolean"; |
||||||
|
case 91: |
||||||
|
return "datetime"; |
||||||
|
case 92: |
||||||
|
return "datetime"; |
||||||
|
case 93: |
||||||
|
return "datetime"; |
||||||
|
case 2004: |
||||||
|
return "image"; |
||||||
|
case 2005: |
||||||
|
return "text"; |
||||||
|
default: |
||||||
|
return DialectUtils.getTypeName(dialectColumnType2SQLParameter.getColumnType()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.gauss; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.GaussDBDialect; |
||||||
|
import com.fr.data.core.db.dialect.base.DialectKeyConstants; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.tosql.DialectColumn2SQLWithDoubleQuoteExecutor; |
||||||
|
import com.fr.data.core.db.dialect.base.key.topn.KylinDialectCreateTOPNSQLExecutor; |
||||||
|
|
||||||
|
public class GaussDialectConsummate extends GaussDBDialect { |
||||||
|
public GaussDialectConsummate(){ |
||||||
|
super(); |
||||||
|
this.putExecutor(DialectKeyConstants.COLUMN_2_SQL_KEY, new DialectColumn2SQLWithDoubleQuoteExecutor()); |
||||||
|
this.putExecutor(DialectKeyConstants.COLUMN_TYPE_2_SQL_KEY, new GaussDialectColumnType2SQLExecutor()); |
||||||
|
this.putExecutor(DialectKeyConstants.CREATE_TOP_N_SQL_KEY, new KylinDialectCreateTOPNSQLExecutor()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.hive; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.typetosql.AbstractDialectColumnType2SQLExecutor; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.typetosql.DialectColumnType2SQLParameter; |
||||||
|
import com.fr.data.core.db.dialect.util.DialectUtils; |
||||||
|
|
||||||
|
public class HiveDialectColumnType2SQLExecutor extends AbstractDialectColumnType2SQLExecutor { |
||||||
|
public HiveDialectColumnType2SQLExecutor(){ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String execute(DialectColumnType2SQLParameter dialectColumnType2SQLParameter, Dialect dialect) { |
||||||
|
int columnType = dialectColumnType2SQLParameter.getColumnType(); |
||||||
|
String columnSize = dialectColumnType2SQLParameter.getParameter(); |
||||||
|
switch(columnType) { |
||||||
|
case -7: |
||||||
|
return "boolean"; |
||||||
|
case 1: |
||||||
|
return "char(" + columnSize + ")"; |
||||||
|
case 2: |
||||||
|
return "bigint"; |
||||||
|
case 3: |
||||||
|
return "decimal(" + columnSize + ")"; |
||||||
|
case 4: |
||||||
|
return "int"; |
||||||
|
case 7: |
||||||
|
return "float"; |
||||||
|
case 8: |
||||||
|
return "float"; |
||||||
|
case 12: |
||||||
|
return "varchar(" + columnSize + ")"; |
||||||
|
case 16: |
||||||
|
return "boolean"; |
||||||
|
case 91: |
||||||
|
return "date"; |
||||||
|
case 92: |
||||||
|
return "date"; |
||||||
|
case 93: |
||||||
|
return "date"; |
||||||
|
case 2004: |
||||||
|
return "image"; |
||||||
|
case 2005: |
||||||
|
return "text"; |
||||||
|
default: |
||||||
|
return DialectUtils.getTypeName(columnType); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.hive; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.HiveDialect; |
||||||
|
import com.fr.data.core.db.dialect.base.DialectKeyConstants; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.tosql.DialectColumn2SQLWithBackQuoteExecutor; |
||||||
|
import com.fr.data.core.db.dialect.base.key.init.column.DialectInitColumnUnSupportNullExecutor; |
||||||
|
import com.fr.data.core.db.dialect.base.key.topn.KylinDialectCreateTOPNSQLExecutor; |
||||||
|
|
||||||
|
public class HiveDialectConsummate extends HiveDialect { |
||||||
|
public HiveDialectConsummate(){ |
||||||
|
super(); |
||||||
|
this.putExecutor(DialectKeyConstants.COLUMN_2_SQL_KEY, new DialectColumn2SQLWithBackQuoteExecutor()); |
||||||
|
this.putExecutor(DialectKeyConstants.COLUMN_TYPE_2_SQL_KEY, new HiveDialectColumnType2SQLExecutor()); |
||||||
|
this.putExecutor(DialectKeyConstants.CREATE_TOP_N_SQL_KEY, new KylinDialectCreateTOPNSQLExecutor()); |
||||||
|
this.putExecutor(DialectKeyConstants.INIT_COLUMN_KEY, new DialectInitColumnUnSupportNullExecutor()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.postgre; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.PostgreSQLDialect; |
||||||
|
import com.fr.data.core.db.dialect.base.DialectKeyConstants; |
||||||
|
import com.fr.data.core.db.dialect.base.key.topn.KylinDialectCreateTOPNSQLExecutor; |
||||||
|
|
||||||
|
public class PostgreDialectConsummate extends PostgreSQLDialect { |
||||||
|
|
||||||
|
public PostgreDialectConsummate(){ |
||||||
|
super(); |
||||||
|
this.putExecutor(DialectKeyConstants.CREATE_TOP_N_SQL_KEY, new KylinDialectCreateTOPNSQLExecutor()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fr.plugin.decision.dialect.sybase; |
||||||
|
|
||||||
|
import com.fr.data.core.db.dialect.SybaseDialect; |
||||||
|
import com.fr.data.core.db.dialect.base.DialectKeyConstants; |
||||||
|
import com.fr.data.core.db.dialect.base.key.column.tosql.DialectColumn2SQLWithDoubleQuoteExecutor; |
||||||
|
|
||||||
|
public class SybaseDialectConsummate extends SybaseDialect { |
||||||
|
public SybaseDialectConsummate(){ |
||||||
|
super(); |
||||||
|
this.putExecutor(DialectKeyConstants.COLUMN_2_SQL_KEY, new DialectColumn2SQLWithDoubleQuoteExecutor()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.dao.ExcelLinkService; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngDao; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
public class AddLinkHttpHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/addlink"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
|
||||||
|
final String name = WebUtils.getHTTPRequestParameter(req,"name"); |
||||||
|
final String datasouces = WebUtils.getHTTPRequestParameter(req,"datasouces"); |
||||||
|
final String schema = WebUtils.getHTTPRequestParameter(req,"schema"); |
||||||
|
final String tablename = WebUtils.getHTTPRequestParameter(req,"tablename"); |
||||||
|
final String createUser = UserService.getInstance().getCurrentUserIdFromCookie(req); |
||||||
|
|
||||||
|
try { |
||||||
|
ExcelLinkService.getInstance().addLink(name, datasouces, schema, tablename, createUser); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status","success")); |
||||||
|
return; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status","fail")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.DialectFactory; |
||||||
|
import com.fr.data.core.db.dml.Table; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.core.DML; |
||||||
|
import com.fr.plugin.decision.dao.ExcelLinkService; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.Statement; |
||||||
|
|
||||||
|
public class
|
||||||
|
DeleteLinkHttpHandle extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/delete"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
final String id = WebUtils.getHTTPRequestParameter(req,"id"); |
||||||
|
|
||||||
|
ExcelMngEntity entity = ExcelLinkService.getInstance().getLinkById(id); |
||||||
|
if (entity == null){ |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail")); |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:链接根据Id查询结果为空"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
String connection = entity.getDatasouces(); |
||||||
|
String tableName = entity.getTablename(); |
||||||
|
String schema = entity.getSchema(); |
||||||
|
Connection conn = null; |
||||||
|
|
||||||
|
try { |
||||||
|
conn = JdbcUtils.getConnection(connection); |
||||||
|
Dialect dialect = DialectFactory.generateDialect(conn); |
||||||
|
Table table = new Table(schema, tableName); |
||||||
|
DML.deleteTable(dialect, conn, table); |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("表删除成功"); |
||||||
|
ExcelLinkService.getInstance().deleteLinkById(id); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","success")); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
FineLoggerFactory.getLogger().info("表删除失败"); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status","fail")); |
||||||
|
} finally { |
||||||
|
DBUtils.close(conn); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.bean.user.UserSearchBean; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.utils.HttpUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class GetAllUserListHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/getAllUserList"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
try { |
||||||
|
String adminId = UserService.getInstance().getAdminUserNameList().get(0); |
||||||
|
UserSearchBean userSearchBean = HttpUtils.readObject(req, UserSearchBean.class); |
||||||
|
Map<String, Object> userList = UserService.getInstance().getAllUsers(adminId, userSearchBean,false); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "success").put("data", userList)); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "fail")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.dao.ReuseEntity; |
||||||
|
import com.fr.plugin.decision.dao.ReuseService; |
||||||
|
import com.fr.plugin.decision.utils.HttpUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GetAuthUserByLinkNameHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/getAuthUserList"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String linkName = HttpUtils.readJson(req).getString("linkName"); |
||||||
|
if (StringUtils.isBlank(linkName)){ |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "fail")); |
||||||
|
return; |
||||||
|
} |
||||||
|
JSONArray result = new JSONArray(); |
||||||
|
try { |
||||||
|
List<ReuseEntity> entities = ReuseService.getInstance().getUserByLinkName(linkName); |
||||||
|
for (ReuseEntity entity : entities) { |
||||||
|
result.add(entity.getUserName()); |
||||||
|
} |
||||||
|
|
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "success").put("data", result)); |
||||||
|
} catch (Exception e) { |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "fail")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.DialectFactory; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.Statement; |
||||||
|
|
||||||
|
public class GetSchemaHttpHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/getSchema"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String connectionName = WebUtils.getHTTPRequestParameter(req, "connectionName"); |
||||||
|
Connection conn = null; |
||||||
|
JSONArray result = new JSONArray(); |
||||||
|
|
||||||
|
// schema 添加一条为空的缺省选项
|
||||||
|
result.add(new JSONObject().put("value", "缺省").put("text","缺省")); |
||||||
|
|
||||||
|
try{ |
||||||
|
conn = JdbcUtils.getConnection(connectionName); |
||||||
|
Dialect dialect = DialectFactory.generateDialect(conn); |
||||||
|
String[] schemaArray = dialect.getSchemas(conn); |
||||||
|
|
||||||
|
for (int i=0; i<schemaArray.length; i++){ |
||||||
|
result.add(JSONObject.create().put("value", schemaArray[i]).put("text", schemaArray[i])); |
||||||
|
} |
||||||
|
|
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "success").put("data", result)); |
||||||
|
} catch (Exception e){ |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status", "fail")); |
||||||
|
} finally { |
||||||
|
DBUtils.close(conn); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.net.URLDecoder; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.Statement; |
||||||
|
|
||||||
|
public class IfTableExistHttpHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/iftableexist"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
String connection = WebUtils.getHTTPRequestParameter(req, "connection"); |
||||||
|
String tableName = URLDecoder.decode(WebUtils.getHTTPRequestParameter(req, "tableName")); |
||||||
|
|
||||||
|
Connection conn = JdbcUtils.getConnection(connection); |
||||||
|
Statement smt = null; |
||||||
|
|
||||||
|
try { |
||||||
|
if (conn == null){ |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:" + connection + "数据连接创建失败"); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail").put("errorText",connection + "数据连接创建失败,请检查改数据连接是否正常!")); |
||||||
|
return; |
||||||
|
} |
||||||
|
smt = conn.createStatement(); |
||||||
|
smt.executeQuery("select count(1) from " + tableName); |
||||||
|
|
||||||
|
// 能正常执行说明表已存在,返回fail
|
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:" + tableName + "已存在"); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail").put("errorText","表" + tableName + "已存在,请重新输入表名!")); |
||||||
|
} catch (Exception e) { |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","success")); |
||||||
|
} finally { |
||||||
|
JdbcUtils.closeConn(conn,null, smt); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.dao.*; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class QueryLinkHttpHandle extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/querylink"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
boolean containReuse = WebUtils.getHTTPRequestBoolParameter(req,"containReuse"); |
||||||
|
final String key = WebUtils.getHTTPRequestParameter(req,"key"); |
||||||
|
final String createUser = UserService.getInstance().getCurrentUserIdFromCookie(req); |
||||||
|
JSONArray result = JSONArray.create(); |
||||||
|
|
||||||
|
try { |
||||||
|
List<ExcelMngEntity> entities = ExcelLinkService.getInstance().getAllLink(key, createUser); |
||||||
|
List<ReuseEntity> reuseEntities = ReuseService.getInstance().getLinkByUserName(createUser); |
||||||
|
|
||||||
|
for (ExcelMngEntity entity : entities) { |
||||||
|
result.add(new JSONObject().put("id",entity.getId()).put("name",entity.getName()).put("create","true")); |
||||||
|
} |
||||||
|
if (containReuse) { |
||||||
|
for (ReuseEntity entity: reuseEntities) { |
||||||
|
result.add(new JSONObject().put("id",entity.getId()).put("name",entity.getLinkName()).put("create","false")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("data",result)); |
||||||
|
return; |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.DialectFactory; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.dao.ExcelLinkService; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngDao; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.PreparedStatement; |
||||||
|
import java.sql.ResultSetMetaData; |
||||||
|
|
||||||
|
public class QueryTableColAttrHttpHandle extends QueryTableDataHttpHandle { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/querycolattr"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) throws Exception { |
||||||
|
setQueryCount(1); |
||||||
|
super.deal(req, res, para, result); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,125 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.data.core.db.ColumnInformation; |
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.core.db.dialect.Dialect; |
||||||
|
import com.fr.data.core.db.dialect.DialectFactory; |
||||||
|
import com.fr.data.core.db.dml.Table; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngDao; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.plugin.decision.request.handler.HWAbstractHandler; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.DatabaseMetaData; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.Statement; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class QueryTableDataHttpHandle extends HWAbstractHandler { |
||||||
|
|
||||||
|
private int queryCount = 5000; |
||||||
|
private JSONObject para ; |
||||||
|
private JSONObject result ; |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/querydata"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
public int getQueryCount() { |
||||||
|
return queryCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setQueryCount(int queryCount) { |
||||||
|
this.queryCount = queryCount; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) throws Exception { |
||||||
|
final String name = para.getString("name"); |
||||||
|
ExcelMngEntity entity = null; |
||||||
|
try { |
||||||
|
entity = ExcelMngConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ExcelMngDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("name",name))); |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail")); |
||||||
|
} |
||||||
|
|
||||||
|
String connection = entity.getDatasouces(); |
||||||
|
String tableName = entity.getTablename(); |
||||||
|
String schema = entity.getSchema(); |
||||||
|
Connection conn = null; |
||||||
|
Statement smt = null; |
||||||
|
List<String> primaryKeyCol = new ArrayList<>(); |
||||||
|
|
||||||
|
try { |
||||||
|
conn = JdbcUtils.getConnection(connection); |
||||||
|
smt = conn.createStatement(); |
||||||
|
Dialect dialect = DialectFactory.generateDialect(conn); |
||||||
|
Table table = new Table(schema, tableName); |
||||||
|
ResultSet resultSet = smt.executeQuery(dialect.getTopNRowSql(queryCount, table)); |
||||||
|
ColumnInformation[] columnInformations = dialect.getColumnInformation(conn, resultSet, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY); |
||||||
|
|
||||||
|
/* |
||||||
|
* catalog - 表所在的类别名称;""表示获取没有类别的列,null表示获取所有类别的列。 |
||||||
|
* schema - 表所在的模式名称(oracle中对应于Tablespace);""表示获取没有模式的列,null标识获取所有模式的列; 可包含单字符通配符("_"),或多字符通配符("%"); |
||||||
|
* table - 表名称;可包含单字符通配符("_"),或多字符通配符("%"); |
||||||
|
*/ |
||||||
|
DatabaseMetaData databaseMetaData = conn.getMetaData(); |
||||||
|
ResultSet primaryKeysResult = databaseMetaData.getPrimaryKeys(null, schema, tableName); |
||||||
|
while(primaryKeysResult.next()){ |
||||||
|
primaryKeyCol.add(primaryKeysResult.getString(4)); |
||||||
|
} |
||||||
|
JSONArray tableData = JdbcUtils.formatRsToTableData(resultSet); |
||||||
|
JSONArray colAttr = JdbcUtils.formatRs2ColAttr(columnInformations); |
||||||
|
JdbcUtils.addPrimaryKeyColAttr(colAttr, primaryKeyCol); |
||||||
|
|
||||||
|
result.put(SUCCESS,"success").put("data", |
||||||
|
new JSONObject() |
||||||
|
.put("tableData", tableData) |
||||||
|
.put("colAttr", colAttr) |
||||||
|
.put("tableAttr", new JSONObject() |
||||||
|
.put("connection", connection) |
||||||
|
.put("schema", schema) |
||||||
|
.put("tableName", tableName) |
||||||
|
.put("aliasName", name) |
||||||
|
) |
||||||
|
); |
||||||
|
} catch (Exception e){ |
||||||
|
e.printStackTrace(); |
||||||
|
} finally { |
||||||
|
DBUtils.close(smt); |
||||||
|
DBUtils.close(conn); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.ExcelMngConfigAccessBridge; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngDao; |
||||||
|
import com.fr.plugin.decision.dao.ExcelMngEntity; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class RenameHttpHandle extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/rename"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
final String name = WebUtils.getHTTPRequestParameter(req, "name"); |
||||||
|
final String id = WebUtils.getHTTPRequestParameter(req,"id"); |
||||||
|
try { |
||||||
|
|
||||||
|
final ExcelMngEntity entity = ExcelMngConfigAccessBridge.getDbAccessor().runQueryAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(ExcelMngDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id",id))); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
entity.setName(name); |
||||||
|
|
||||||
|
ExcelMngConfigAccessBridge.getDbAccessor().runDMLAction(new DBAction<ExcelMngEntity>() { |
||||||
|
@Override |
||||||
|
public ExcelMngEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(ExcelMngDao.class).update(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","success")); |
||||||
|
return; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.decision.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.dao.ReuseService; |
||||||
|
import com.fr.plugin.decision.utils.HttpUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class UpdateLinkAuthHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/excelmng/updateLinkAuth"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
JSONObject para = HttpUtils.readJson(req); |
||||||
|
boolean isAdd = para.getBoolean("auth"); |
||||||
|
if (isAdd) { |
||||||
|
ReuseService.getInstance().addUserOnLinkName(para.getString("userName"), para.getString("linkName")); |
||||||
|
} else { |
||||||
|
ReuseService.getInstance().deleteUserOnLinkName(para.getString("userName"), para.getString("linkName")); |
||||||
|
} |
||||||
|
|
||||||
|
WebUtils.printAsJSON(res, new JSONObject().put("status","success")); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.plugin.decision.request; |
||||||
|
|
||||||
|
import com.fr.decision.fun.HttpHandler; |
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
import com.fr.plugin.decision.request.handler.ExcelFiledHandler; |
||||||
|
import com.fr.plugin.decision.request.handler.ExcelSheetCountHandler; |
||||||
|
import com.fr.plugin.decision.request.handler.HWFileUploadHander; |
||||||
|
import com.fr.plugin.decision.request.handler.TableDataImport; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class HWHandlerProvider extends AbstractHttpHandlerProvider { |
||||||
|
@Override |
||||||
|
public HttpHandler[] registerHandlers() { |
||||||
|
return new HttpHandler[]{ |
||||||
|
new HWFileUploadHander(), |
||||||
|
new ExcelSheetCountHandler(), |
||||||
|
new ExcelFiledHandler(), |
||||||
|
new TableDataImport() |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.plugin.decision.request; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
import com.fr.plugin.decision.request.handler.ExcelFiledHandler; |
||||||
|
import com.fr.plugin.decision.request.handler.ExcelSheetCountHandler; |
||||||
|
import com.fr.plugin.decision.request.handler.HWFileUploadHander; |
||||||
|
import com.fr.plugin.decision.request.handler.TableDataImport; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class HWURLAliasProvider extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
URLAliasFactory.createPluginAlias(HWFileUploadHander.PATH, HWFileUploadHander.PATH,true), |
||||||
|
URLAliasFactory.createPluginAlias(ExcelSheetCountHandler.PATH,ExcelSheetCountHandler.PATH,false), |
||||||
|
URLAliasFactory.createPluginAlias(ExcelFiledHandler.PATH,ExcelFiledHandler.PATH,false), |
||||||
|
URLAliasFactory.createPluginAlias(TableDataImport.PATH,TableDataImport.PATH,false), |
||||||
|
|
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.plugin.decision.request.handler; |
||||||
|
|
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.HWUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFSheet; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFSheet; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class ExcelFiledHandler extends HWAbstractHandler { |
||||||
|
public static final String PATH = "/hw/excel/filed"; |
||||||
|
private final int MAX_ROW = 1000000; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return PATH; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) { |
||||||
|
String attachId = para.getString("attachId"); |
||||||
|
String fileName = para.getString("fileName", StringUtils.EMPTY); |
||||||
|
|
||||||
|
if (fileName.endsWith(".xlsx")) { |
||||||
|
XSSFWorkbook sheets = HWUtils.getExcelWork(attachId); |
||||||
|
if (sheets != null) { |
||||||
|
int sheetNo = para.getInt("sheetNo"); |
||||||
|
XSSFSheet xssfSheet = sheets.getSheetAt(sheetNo); |
||||||
|
int count = xssfSheet.getLastRowNum();//总行数
|
||||||
|
if (count >= MAX_ROW) {//大于最大行数就提示
|
||||||
|
result.put("msg", "数据大于" + MAX_ROW + "行"); |
||||||
|
return; |
||||||
|
} |
||||||
|
JSONArray data = HWUtils.getSheetFiled(xssfSheet); |
||||||
|
result.put(SUCCESS, true).put("data", data); |
||||||
|
} |
||||||
|
} else if (fileName.endsWith(".xls")) { |
||||||
|
HSSFWorkbook excel2003Work = HWUtils.getExcel2003Work(attachId); |
||||||
|
if (excel2003Work != null) { |
||||||
|
int sheetNo = para.getInt("sheetNo"); |
||||||
|
HSSFSheet sheet = excel2003Work.getSheetAt(sheetNo); |
||||||
|
int count = sheet.getLastRowNum();//总行数
|
||||||
|
if (count >= MAX_ROW) {//大于最大行数就提示
|
||||||
|
result.put("msg", "数据大于" + MAX_ROW + "行"); |
||||||
|
return; |
||||||
|
} |
||||||
|
JSONArray data = HWUtils.get2003SheetFiled(sheet); |
||||||
|
result.put(SUCCESS, true).put("data", data); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
package com.fr.plugin.decision.request.handler; |
||||||
|
|
||||||
|
import com.fr.cache.Attachment; |
||||||
|
import com.fr.cache.AttachmentSource; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.decision.HWUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class ExcelSheetCountHandler extends HWAbstractHandler { |
||||||
|
public static final String PATH = "/hw/excel/sheet"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return PATH; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) { |
||||||
|
try { |
||||||
|
String attachId = para.getString("attachId"); |
||||||
|
String fileName = para.getString("fileName", StringUtils.EMPTY); |
||||||
|
int count = 1; |
||||||
|
JSONArray data = JSONArray.create(); |
||||||
|
if (fileName.endsWith(".xlsx")) { |
||||||
|
XSSFWorkbook sheets = HWUtils.getExcelWork(attachId); |
||||||
|
|
||||||
|
if (sheets != null) { |
||||||
|
count = sheets.getNumberOfSheets(); |
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
JSONObject object = JSONObject.create(); |
||||||
|
object.put("value", i).put("text", sheets.getSheetName(i)); |
||||||
|
data.add(object); |
||||||
|
} |
||||||
|
result.put(SUCCESS, true).put("data", data); |
||||||
|
} |
||||||
|
} else if (fileName.endsWith(".xls")) { |
||||||
|
HSSFWorkbook excel2003Work = HWUtils.getExcel2003Work(attachId); |
||||||
|
if (excel2003Work != null) { |
||||||
|
count = excel2003Work.getNumberOfSheets(); |
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
JSONObject object = JSONObject.create(); |
||||||
|
object.put("value", i).put("text", excel2003Work.getSheetName(i)); |
||||||
|
data.add(object); |
||||||
|
} |
||||||
|
result.put(SUCCESS, true).put("data", data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
package com.fr.plugin.decision.request.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public abstract class HWAbstractHandler extends BaseHttpHandler { |
||||||
|
public static String SUCCESS="success"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
JSONObject para=getParaJSON(req); |
||||||
|
JSONObject result=JSONObject.create().put(SUCCESS,false); |
||||||
|
deal(req,res,para,result); |
||||||
|
WebUtils.printAsJSON(res,result); |
||||||
|
} |
||||||
|
protected abstract void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) throws Exception; |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取json参数方法 |
||||||
|
* |
||||||
|
* @param req 请求 |
||||||
|
* @return |
||||||
|
* @throws IOException |
||||||
|
* @throws UnsupportedEncodingException |
||||||
|
*/ |
||||||
|
public JSONObject getParaJSON(HttpServletRequest req) throws IOException, UnsupportedEncodingException { |
||||||
|
JSONObject result = JSONObject.create(); |
||||||
|
try { |
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream(), StandardCharsets.UTF_8)); |
||||||
|
String line = null; |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
while ((line = br.readLine()) != null) { |
||||||
|
sb.append(line); |
||||||
|
} |
||||||
|
return new JSONObject(sb.toString()); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.plugin.decision.request.handler; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.attach.AttachmentService; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/12 |
||||||
|
*/ |
||||||
|
public class HWFileUploadHander extends BaseHttpHandler { |
||||||
|
public static final String PATH = "/hw/file/upload"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return PATH; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
int width = WebUtils.getHTTPRequestIntParameter(req, "width"); |
||||||
|
int height = WebUtils.getHTTPRequestIntParameter(req, "height"); |
||||||
|
String fileName = WebUtils.getHTTPRequestParameter(req, "filename"); |
||||||
|
AttachmentService.getInstance().uploadAttach(req, res, width, height, fileName); |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,91 @@ |
|||||||
|
package com.fr.plugin.decision.request.handler; |
||||||
|
|
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.HWUtils; |
||||||
|
import com.fr.plugin.decision.core.*; |
||||||
|
import com.fr.plugin.decision.core.action.ExcelDmlAction; |
||||||
|
import com.fr.plugin.decision.dao.ExcelLinkService; |
||||||
|
import com.fr.plugin.decision.utils.JdbcUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFSheet; |
||||||
|
import com.fr.third.org.apache.poi.hssf.usermodel.HSSFWorkbook; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFSheet; |
||||||
|
import com.fr.third.v2.org.apache.poi.xssf.usermodel.XSSFWorkbook; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* created by ezreal 2020/1/13 |
||||||
|
*/ |
||||||
|
public class TableDataImport extends HWAbstractHandler { |
||||||
|
public static final String PATH="/hw/table/import"; |
||||||
|
@Override |
||||||
|
protected void deal(HttpServletRequest req, HttpServletResponse res, JSONObject para, JSONObject result) throws Exception { |
||||||
|
JSONArray items=para.getJSONArray("items"); |
||||||
|
JSONObject sheetInfo=para.getJSONObject("sheetInfo"); |
||||||
|
String attachId=sheetInfo.getString("attachId"); |
||||||
|
String fileName=sheetInfo.getString("fileName"); |
||||||
|
int sheetNo=sheetInfo.getInt("sheetNo"); |
||||||
|
Map<String, List> values=new HashMap<String, List>(); |
||||||
|
if(fileName.endsWith(".xlsx")){ |
||||||
|
XSSFWorkbook excelWork = HWUtils.getExcelWork(attachId); |
||||||
|
if(excelWork!=null){ |
||||||
|
XSSFSheet sheet = excelWork.getSheetAt(sheetNo); |
||||||
|
JSONObject tableCol=JSONObject.create(); |
||||||
|
for(int i=0;i<items.length();i++){ |
||||||
|
JSONObject o=items.getJSONObject(i); |
||||||
|
tableCol.put(o.getString("colName"),o.getInt("excelCol")); |
||||||
|
} |
||||||
|
values=HWUtils.getSheetContent(sheet, sheetInfo.getInt("titleRow"), tableCol); |
||||||
|
} |
||||||
|
}else if(fileName.endsWith(".xls")){ |
||||||
|
HSSFWorkbook excel2003Work = HWUtils.getExcel2003Work(attachId); |
||||||
|
if(excel2003Work!=null){ |
||||||
|
HSSFSheet sheetAt = excel2003Work.getSheetAt(sheetNo); |
||||||
|
JSONObject tableCol=JSONObject.create(); |
||||||
|
for(int i=0;i<items.length();i++){ |
||||||
|
JSONObject o=items.getJSONObject(i); |
||||||
|
tableCol.put(o.getString("colName"),o.getInt("excelCol")); |
||||||
|
} |
||||||
|
values=HWUtils.get2003SheetContent(sheetAt,sheetInfo.getInt("titleRow"),tableCol); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
final String createUser = UserService.getInstance().getCurrentUserIdFromCookie(req); |
||||||
|
String connection = para.getString("connection"); |
||||||
|
String name = para.getString("aliasName"); |
||||||
|
String schema = para.getString("schema"); |
||||||
|
String tableName = para.getString("tableName"); |
||||||
|
|
||||||
|
Connection conn = JdbcUtils.getConnection(connection); |
||||||
|
if (conn == null){ |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:数据链接 " + connection + " 获取异常" ); |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail").put("errorText","获取数据连接异常")); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
ExcelDmlAction excelDmlAction = ActionFactory.getInstance().create( para.getString("infoId")); |
||||||
|
excelDmlAction.setExcelDmlBean( new ExcelDmlBean(connection, schema, tableName, items, values) ); |
||||||
|
JSONObject dmlResult = excelDmlAction.execute(); |
||||||
|
if (StringUtils.equals("success", dmlResult.getString("status")) && dmlResult.getBoolean("addLink")) { |
||||||
|
ExcelLinkService.getInstance().addLink(name, connection, schema, tableName, createUser); |
||||||
|
FineLoggerFactory.getLogger().info("HW_excel导入:FineDB 新增数据成功" + name); |
||||||
|
} |
||||||
|
WebUtils.printAsJSON(res, dmlResult); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return PATH; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.fr.plugin.decision.utils; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.third.fasterxml.jackson.databind.ObjectMapper; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
public class HttpUtils { |
||||||
|
public static <T> T readObject(HttpServletRequest req, Class<T> cls) throws Exception { |
||||||
|
ObjectMapper map = new ObjectMapper(); |
||||||
|
return map.readValue(req.getInputStream(), cls); |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONObject readJson(HttpServletRequest request) throws IOException { |
||||||
|
BufferedReader bufferReader = new BufferedReader(request.getReader()); |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
String line = null; |
||||||
|
while ((line = bufferReader.readLine()) != null) { |
||||||
|
sb.append(line); |
||||||
|
} |
||||||
|
return new JSONObject(sb.toString()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,566 @@ |
|||||||
|
package com.fr.plugin.decision.utils; |
||||||
|
|
||||||
|
import com.fr.data.core.db.ColumnInformation; |
||||||
|
import com.fr.data.core.db.DBUtils; |
||||||
|
import com.fr.data.impl.NameDatabaseConnection; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.decision.dialect.hive.HiveDialectConsummate; |
||||||
|
import com.fr.report.core.A.S; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.sql.*; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.regex.Matcher; |
||||||
|
import java.util.regex.Pattern; |
||||||
|
|
||||||
|
public class JdbcUtils { |
||||||
|
|
||||||
|
public static Connection getConnection(String connection) { |
||||||
|
NameDatabaseConnection db = new NameDatabaseConnection(connection); |
||||||
|
try { |
||||||
|
Connection conn = db.createConnection(); |
||||||
|
return conn; |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error("HW_excel导入:" + connection + "数据连接创建失败"); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getCreateSql(int type, String tableName, JSONArray items){ |
||||||
|
String createSql = ""; |
||||||
|
switch (type){ |
||||||
|
case 1: |
||||||
|
createSql = getOracleCreateSql(items,tableName); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
createSql = getSqlServerCreateSql(items,tableName); |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
createSql = getMysqlCreateSql(items,tableName); |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
createSql = getPostGreCreateSql(items, tableName); |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
createSql = getSybaseCreateSql(items,tableName); |
||||||
|
break; |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().debug("HW_excel导入:建表语句为 " + createSql); |
||||||
|
return createSql; |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
mysql boolean 0/1 |
||||||
|
oracle char(1) 0/1 不允许为空 |
||||||
|
sqlServer bit 0/1 |
||||||
|
PostGre boolean 0/1/true/false |
||||||
|
sybase bit 0/1 不允许为空 |
||||||
|
*/ |
||||||
|
|
||||||
|
private static String getMysqlCreateSql(JSONArray items, String tableName){ |
||||||
|
String sql = " ( "; |
||||||
|
for (Object ja : items){ |
||||||
|
JSONObject item = new JSONObject(ja.toString()); |
||||||
|
String colname = "`" + item.getString("colName") + "`"; |
||||||
|
int colType = item.getInt("colType"); |
||||||
|
String colLen = item.getString("colLength"); |
||||||
|
String colTypeStr ; |
||||||
|
switch (colType){ |
||||||
|
case 1: |
||||||
|
colTypeStr = colname + " int,"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
colTypeStr = colname + " boolean,"; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
colTypeStr = colname + " datetime,"; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
colTypeStr = colname + " decimal(" + colLen.split(",")[0]+","+ colLen.split(",")[1] + "),"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colTypeStr = colname + " varchar(" +colLen + "),"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
sql += colTypeStr; |
||||||
|
} |
||||||
|
return "create table "+ tableName + sql.substring(0,sql.length()-1) +" )" ; |
||||||
|
} |
||||||
|
|
||||||
|
private static String getSqlServerCreateSql(JSONArray items, String tableName){ |
||||||
|
String sql = " ( "; |
||||||
|
for (Object ja : items){ |
||||||
|
JSONObject item = new JSONObject(ja.toString()); |
||||||
|
String colname = "[" + item.getString("colName") + "]" ; |
||||||
|
int colType = item.getInt("colType"); |
||||||
|
String colLen = item.getString("colLength"); |
||||||
|
String colTypeStr ; |
||||||
|
switch (colType){ |
||||||
|
case 1: |
||||||
|
colTypeStr = colname + " int,"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
colTypeStr = colname + " bit,"; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
colTypeStr = colname + " datetime,"; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
colTypeStr = colname + " decimal(" + colLen.split(",")[0] + "," + colLen.split(",")[1] + "),"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colTypeStr = colname + " varchar(" +colLen + "),"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
sql += colTypeStr; |
||||||
|
} |
||||||
|
return "create table "+ tableName + sql.substring(0,sql.length()-1) + " )" ; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static String getOracleCreateSql(JSONArray items, String tableName){ |
||||||
|
String sql = " ( "; |
||||||
|
for (Object ja : items){ |
||||||
|
JSONObject item = new JSONObject(ja.toString()); |
||||||
|
String colname = "\"" + item.getString("colName") + "\""; |
||||||
|
int colType = item.getInt("colType"); |
||||||
|
String colLen = item.getString("colLength"); |
||||||
|
String colTypeStr ; |
||||||
|
switch (colType){ |
||||||
|
case 1: |
||||||
|
int len = Integer.parseInt(colLen) > 38 ? 38:Integer.parseInt(colLen); |
||||||
|
colTypeStr = colname + " number(" + len + "),"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
colTypeStr = colname + " char(1),"; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
colTypeStr = colname + " date,"; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
colTypeStr = colname + " decimal(" + colLen.split(",")[0] + "," + colLen.split(",")[1] + "),"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colTypeStr = colname + " varchar2(" +colLen + "),"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
sql += colTypeStr; |
||||||
|
} |
||||||
|
return "create table "+ tableName + sql.substring(0,sql.length()-1) + " )" ; |
||||||
|
} |
||||||
|
|
||||||
|
private static String getPostGreCreateSql(JSONArray items, String tableName){ |
||||||
|
String sql = " ( "; |
||||||
|
for (Object ja : items){ |
||||||
|
JSONObject item = new JSONObject(ja.toString()); |
||||||
|
String colname = "\"" + item.getString("colName") + "\""; |
||||||
|
int colType = item.getInt("colType"); |
||||||
|
String colLen = item.getString("colLength"); |
||||||
|
String colTypeStr ; |
||||||
|
switch (colType){ |
||||||
|
case 1: |
||||||
|
colTypeStr = colname + " integer,"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
colTypeStr = colname + " boolean,"; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
colTypeStr = colname + " date,"; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
colTypeStr = colname + " decimal(" + colLen.split(",")[0] + ","+ colLen.split(",")[1] + "),"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colTypeStr = colname + " varchar(" + colLen + "),"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
sql += colTypeStr; |
||||||
|
} |
||||||
|
return "create table "+ tableName + sql.substring(0,sql.length()-1) + " )" ; |
||||||
|
} |
||||||
|
|
||||||
|
private static String getSybaseCreateSql(JSONArray items, String tableName){ |
||||||
|
String sql = " ( "; |
||||||
|
for (Object ja : items){ |
||||||
|
JSONObject item = new JSONObject(ja.toString()); |
||||||
|
String colname = "[" + item.getString("colName") + "]" ; |
||||||
|
int colType = item.getInt("colType"); |
||||||
|
String colLen = item.getString("colLength"); |
||||||
|
String colTypeStr ; |
||||||
|
switch (colType){ |
||||||
|
case 1: |
||||||
|
colTypeStr = colname + " int,"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
colTypeStr = colname + " bit,"; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
colTypeStr = colname + " date,"; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
colTypeStr = colname + " decimal(" + colLen.split(",")[0] + "," + colLen.split(",")[1] + "),"; |
||||||
|
break; |
||||||
|
default: |
||||||
|
colTypeStr = colname + " varchar(" + colLen + "),"; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
sql += colTypeStr; |
||||||
|
} |
||||||
|
return "create table "+ tableName + sql.substring(0,sql.length()-1) + " )" ; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getInsertSql(String tableName, JSONArray items, int type){ |
||||||
|
String colStr = " ("; |
||||||
|
|
||||||
|
StringBuffer stringBuffer = new StringBuffer(" values ("); |
||||||
|
for (int i = 0, len = items.size(); i < len; i++) { |
||||||
|
String colName = dealColName(items.getJSONObject(i).getString("colName"), type); |
||||||
|
if (i == len - 1) { |
||||||
|
colStr += colName + ")"; |
||||||
|
stringBuffer.append("?)"); |
||||||
|
} else { |
||||||
|
colStr += colName + ","; |
||||||
|
stringBuffer.append("?,"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().debug("HW_excel导入:插入语句为 " + "insert into " + tableName + colStr + stringBuffer.toString()); |
||||||
|
return "insert into " + tableName + colStr + stringBuffer.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
private static String dealColName(String colName, int type){ |
||||||
|
switch (type){ |
||||||
|
case 1: |
||||||
|
case 4: |
||||||
|
return "\"" + colName + "\""; |
||||||
|
case 2: |
||||||
|
case 5: |
||||||
|
return "[" + colName + "]"; |
||||||
|
case 3: |
||||||
|
return "`" + colName + "`"; |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getDeleteSql(String tableName, int type){ |
||||||
|
return "delete from " + tableName; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getDropSql(String tableName){ |
||||||
|
return "drop table " + tableName; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getQuerySql(String tableName, int type, String schema){ |
||||||
|
switch (type){ |
||||||
|
case 1: |
||||||
|
return "select * from " + tableName + " rownum < 5000"; |
||||||
|
case 2: |
||||||
|
case 5: |
||||||
|
return "select top(5000) * from " + tableName; |
||||||
|
case 3: |
||||||
|
case 4: |
||||||
|
return "select * from " + tableName + " limit 0,5000"; |
||||||
|
default: |
||||||
|
FineLoggerFactory.getLogger().debug("HW_excel导入:getQuerySql返回为空"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static String getQueryColSql(String tableName, int type, String schema){ |
||||||
|
return "select * from " + tableName + " where 1=2"; |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
oracle:1 |
||||||
|
sqlserver:2 |
||||||
|
mysql:3 |
||||||
|
postgresql:4 |
||||||
|
sybase:5 |
||||||
|
*/ |
||||||
|
public static int getConnectionType(Connection conn) throws SQLException { |
||||||
|
String DatabaseProductName = conn.getMetaData().getDatabaseProductName().trim().toUpperCase(); |
||||||
|
FineLoggerFactory.getLogger().debug("HW_excel导入:数据库 ProductName 为: " + DatabaseProductName); |
||||||
|
|
||||||
|
if (StringUtils.contains(DatabaseProductName,"ORACLE")){ |
||||||
|
return 1; |
||||||
|
} |
||||||
|
if (StringUtils.contains(DatabaseProductName,"SQL SERVER")) { |
||||||
|
return 2; |
||||||
|
} |
||||||
|
if (StringUtils.contains(DatabaseProductName,"MYSQL")){ |
||||||
|
return 3; |
||||||
|
} |
||||||
|
if (StringUtils.contains(DatabaseProductName,"POSTGRE")){ |
||||||
|
return 4; |
||||||
|
} |
||||||
|
if (StringUtils.contains(DatabaseProductName,"SYBASE")){ |
||||||
|
return 5; |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
private static void dealPrepareStatement(PreparedStatement pstm, String value, int index, int type, int databaseType) throws SQLException { |
||||||
|
try { |
||||||
|
switch (type) { |
||||||
|
case 1: |
||||||
|
pstm.setInt(index, Double.valueOf(value).intValue()); |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
switch (value.toUpperCase()) { |
||||||
|
case "TRUE": |
||||||
|
case "1": |
||||||
|
if (databaseType == 4){ |
||||||
|
pstm.setBoolean(index, true); |
||||||
|
} else { |
||||||
|
pstm.setInt(index, 1); |
||||||
|
} break; |
||||||
|
case "FALSE": |
||||||
|
case "0": |
||||||
|
if (databaseType == 4){ |
||||||
|
pstm.setBoolean(index, false); |
||||||
|
} else { |
||||||
|
pstm.setInt(index, 0); |
||||||
|
} break; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
java.sql.Date date = java.sql.Date.valueOf(value); |
||||||
|
pstm.setDate(index, date); |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
pstm.setFloat(index, Float.parseFloat(value)); |
||||||
|
break; |
||||||
|
default: |
||||||
|
if (isNumeric(value)){ |
||||||
|
pstm.setString(index, value.split("\\.")[0]); |
||||||
|
} else { |
||||||
|
pstm.setString(index, value); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e){ |
||||||
|
pstm.setString(index, value); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 匹配是否为数字 |
||||||
|
* @param str 可能为中文,也可能是-19162431.1254,不使用BigDecimal的话,变成-1.91624311254E7 |
||||||
|
*/ |
||||||
|
public static boolean isNumeric(String str) { |
||||||
|
// 该正则表达式可以匹配所有的数字 包括负数
|
||||||
|
Pattern pattern = Pattern.compile("-?[0-9]+(\\.0)"); |
||||||
|
String bigStr; |
||||||
|
try { |
||||||
|
bigStr = new BigDecimal(str).toString(); |
||||||
|
} catch (Exception e) { |
||||||
|
return false;//异常 说明包含非数字。
|
||||||
|
} |
||||||
|
|
||||||
|
Matcher isNum = pattern.matcher(bigStr); // matcher是全匹配
|
||||||
|
if (!isNum.matches()) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 把从数据库中查询出来的 ResultSetMetaData 转为 JSONArray |
||||||
|
*/ |
||||||
|
public static JSONArray formatRsToTableData(ResultSet rs) throws Exception{ |
||||||
|
ResultSetMetaData md = rs.getMetaData(); |
||||||
|
|
||||||
|
JSONArray jsonArray = new JSONArray(); |
||||||
|
while(rs.next()) { |
||||||
|
JSONArray rowArray = new JSONArray(); |
||||||
|
for(int i=1; i<=md.getColumnCount(); i++) { |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
jsonObject.put("text", rs.getString(i)); |
||||||
|
rowArray.add(jsonObject); |
||||||
|
} |
||||||
|
jsonArray.add(rowArray); |
||||||
|
} |
||||||
|
return jsonArray; |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray formatRs2ColAttr(ColumnInformation[] columnInformations){ |
||||||
|
JSONArray colsAttr = JSONArray.create(); |
||||||
|
for(int i = 0; i < columnInformations.length; i++) { |
||||||
|
JSONObject colAttr = JSONObject.create(); |
||||||
|
colAttr.put("colType", columnInformations[i].getColumnType()); |
||||||
|
colAttr.put("colName", columnInformations[i].getColumnName()); |
||||||
|
colAttr.put("colLength", columnInformations[i].getColumnSize()); |
||||||
|
colAttr.put("id",i+1); |
||||||
|
colAttr.put("excelCol",""); |
||||||
|
colsAttr.add(colAttr); |
||||||
|
} |
||||||
|
return colsAttr; |
||||||
|
} |
||||||
|
|
||||||
|
public static void addPrimaryKeyColAttr(JSONArray colsAttr, List<String> primaryKeyCol) { |
||||||
|
for (Object col:colsAttr) { |
||||||
|
String colName = ((JSONObject) col).getString("colName"); |
||||||
|
if (primaryKeyCol.contains(colName)) { |
||||||
|
((JSONObject) col).put("primaryKey", true); |
||||||
|
} else { |
||||||
|
((JSONObject) col).put("primaryKey", false); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray formatRsToJsonArray(ResultSet rs) throws Exception{ |
||||||
|
ResultSetMetaData md = rs.getMetaData(); |
||||||
|
|
||||||
|
JSONArray jsonArray = new JSONArray(); |
||||||
|
while(rs.next()) { |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
for(int i=1; i<=md.getColumnCount(); i++) { |
||||||
|
jsonObject.put(md.getColumnName(i), rs.getString(i)); |
||||||
|
} |
||||||
|
jsonArray.add(jsonObject); |
||||||
|
} |
||||||
|
return jsonArray; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static int changeStr2Type(String typeStr , int connType, int scale){ |
||||||
|
int type; |
||||||
|
switch (typeStr.toUpperCase()){ |
||||||
|
case "INT": |
||||||
|
case "INT4": |
||||||
|
case "INTEGER": |
||||||
|
type = 1; break; |
||||||
|
case "BIT": |
||||||
|
case "CHAR": |
||||||
|
case "BOOL": |
||||||
|
case "TINYINT": |
||||||
|
case "BOOLEAN": |
||||||
|
type = 3; break; |
||||||
|
case "DATE": |
||||||
|
case "DATETIME": |
||||||
|
type = 4; break; |
||||||
|
case "DECIMAL": |
||||||
|
case "NUMERIC": |
||||||
|
type = 5; break; |
||||||
|
case "NUMBER": // oracle 整形和小数都是 number 类型,需要判断 scale
|
||||||
|
if (scale == 0) { |
||||||
|
type = 1; break; |
||||||
|
} else { |
||||||
|
type = 5; break; |
||||||
|
} |
||||||
|
|
||||||
|
default: |
||||||
|
type = 2; |
||||||
|
} |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public static int pstsExecBatch(PreparedStatement psts, JSONArray items, Map<String, List> values, int type) throws SQLException { |
||||||
|
int count = 0; |
||||||
|
for (int j =0; j< values.get(items.getJSONObject(0).get("colName")).size(); j++) { |
||||||
|
for (int k=0; k<items.size();k++){ |
||||||
|
dealPrepareStatement( |
||||||
|
psts, |
||||||
|
values.get(items.getJSONObject(k).getString("colName")).get(j).toString(), |
||||||
|
k+1, |
||||||
|
items.getJSONObject(k).getInt("colType"), |
||||||
|
type |
||||||
|
); |
||||||
|
} |
||||||
|
count ++ ; |
||||||
|
|
||||||
|
// sybase 执行 executeBatch 效率异常低,改用 execute
|
||||||
|
if(type == 5){ |
||||||
|
psts.execute(); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
psts.addBatch(); |
||||||
|
if( j!=0 && j%10000==0 ){ |
||||||
|
psts.executeBatch(); |
||||||
|
psts.clearBatch(); |
||||||
|
System.out.println("HW_excel导入:pstsExecBatch 批量执行完成"); |
||||||
|
FineLoggerFactory.getLogger().info("HW_excel导入:pstsExecBatch 批量执行完成"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
System.out.println("HW_excel导入:pstsExecBatch 执行完成"); |
||||||
|
FineLoggerFactory.getLogger().info("HW_excel导入:pstsExecBatch 执行完成"); |
||||||
|
if(type == 5){ |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
psts.executeBatch(); |
||||||
|
psts.clearBatch(); |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// 建表操作
|
||||||
|
public static int execCreatTable(String connection, String tableName, JSONArray items, HttpServletResponse res){ |
||||||
|
String createSql; |
||||||
|
Statement smt = null; |
||||||
|
Connection conn = getConnection(connection); |
||||||
|
int line = -1; |
||||||
|
|
||||||
|
try { |
||||||
|
smt = conn.createStatement(); |
||||||
|
int type = JdbcUtils.getConnectionType(conn); |
||||||
|
createSql = JdbcUtils.getCreateSql(type, tableName, items); |
||||||
|
System.out.println("HW_excel导入:建表语句为 " + createSql); |
||||||
|
FineLoggerFactory.getLogger().debug("HW_excel导入:建表语句为 " + createSql); |
||||||
|
line = smt.executeUpdate(createSql); |
||||||
|
|
||||||
|
} catch (Exception e){ |
||||||
|
e.printStackTrace(); |
||||||
|
System.out.println("HW_excel导入:建表执行异常!"); |
||||||
|
FineLoggerFactory.getLogger().info("HW_excel导入:建表执行异常!"); |
||||||
|
try { |
||||||
|
WebUtils.printAsJSON(res,new JSONObject().put("status","fail").put("errorText","表创建失败:" + e.getLocalizedMessage())); |
||||||
|
} catch (Exception e1) { |
||||||
|
e1.printStackTrace(); |
||||||
|
} |
||||||
|
} finally { |
||||||
|
closeConn(conn, null, smt); |
||||||
|
} |
||||||
|
|
||||||
|
return line; |
||||||
|
} |
||||||
|
|
||||||
|
public static void closeConn(Connection conn, PreparedStatement psts, Statement smt){ |
||||||
|
if(conn != null){ |
||||||
|
DBUtils.closeConnection(conn); |
||||||
|
} |
||||||
|
if(psts != null){ |
||||||
|
DBUtils.close(psts); |
||||||
|
} |
||||||
|
if(smt != null){ |
||||||
|
DBUtils.close(smt); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean isHive(Connection conn){ |
||||||
|
try { |
||||||
|
String DatabaseProductName = conn.getMetaData().getDatabaseProductName().trim().toUpperCase(); |
||||||
|
FineLoggerFactory.getLogger().debug("isHive:" + DatabaseProductName); |
||||||
|
if (StringUtils.contains(DatabaseProductName,"HIVE")){ |
||||||
|
return true; |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,211 @@ |
|||||||
|
;!(function () { |
||||||
|
var EDITOR_WIDTH = 440, EDITOR_HEIGHT = 22, LABEL_WIDTH = 140; |
||||||
|
|
||||||
|
var info = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
add: true, |
||||||
|
}, |
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.hw.table.col.attr.model", { |
||||||
|
add: this.options.add |
||||||
|
}); |
||||||
|
}, |
||||||
|
/*beforeInit: function (callback) { |
||||||
|
this.store.initData(callback) |
||||||
|
},*/ |
||||||
|
watch: { |
||||||
|
count: function (v) { |
||||||
|
this.table.setCount(v); |
||||||
|
}, |
||||||
|
perItems: function () { |
||||||
|
this.table.populate(this._formatItems(this.model.perItems)); |
||||||
|
this.table.setPage(this.model.page); |
||||||
|
}, |
||||||
|
page:function () { |
||||||
|
this.table.setPage(this.model.page); |
||||||
|
//this.popularExcelBox(this.model.excelItems);
|
||||||
|
}, |
||||||
|
excelItems:function () { |
||||||
|
this.popularExcelBox(this.model.excelItems); |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted: function () { |
||||||
|
this.table.setCount(this.model.count); |
||||||
|
this.table.populate(this._formatItems(this.model.perItems)); |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [{ |
||||||
|
height: 24, |
||||||
|
|
||||||
|
el: { |
||||||
|
type: "bi.button", |
||||||
|
textAlign: "center", |
||||||
|
disabled: !o.add, |
||||||
|
text: "增加", |
||||||
|
height: 24, |
||||||
|
width: 100, |
||||||
|
handler: function () { |
||||||
|
self.store.addItems(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "dec.page.table", |
||||||
|
header: [{text: "字段名"}, {text: "字段类型"}, {text: "长度"}, {text: "excel列"}, {text: "主键"}, {text: ""}], |
||||||
|
columnSize: ["0.2", "0.2", "0.2", "0.2", "0.1", "0.1"], |
||||||
|
perPage: 5, |
||||||
|
ref: function (_ref) { |
||||||
|
self.table = _ref; |
||||||
|
}, |
||||||
|
items: self.model.perItems, |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function (v) { |
||||||
|
self.store.setPage(v); |
||||||
|
} |
||||||
|
}] |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
top: 0, bottom: 0, left: 0, right: 0 |
||||||
|
}] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
_formatItems: function (items) { |
||||||
|
console.log("_formatItems"); |
||||||
|
var allResult=[]; |
||||||
|
var self = this, o = this.options; |
||||||
|
self.colName = []; |
||||||
|
self.excelBox= []; |
||||||
|
self.primaryKeyBox = []; |
||||||
|
for (var index = 0; index < items.length; index++) { |
||||||
|
var item = items[index]; |
||||||
|
self.colName.push(item.colName); |
||||||
|
var result = []; |
||||||
|
var type = "dec.hw.table.col.attr.td"; |
||||||
|
var colName = { |
||||||
|
type: "bi.text_editor", |
||||||
|
disabled: !o.add, |
||||||
|
widgetType: "bi.text_editor", |
||||||
|
value: item.colName, |
||||||
|
id: item.id, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.updateItemColName(this.options.id,this.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
result.push(colName); |
||||||
|
var colType = { |
||||||
|
type: "bi.text_value_combo", |
||||||
|
disabled: !o.add, |
||||||
|
widgetType: "bi.text_value_combo", |
||||||
|
value: item.colType+"", |
||||||
|
items: BI.Constants.getConstant("dec.hw.col.type"), |
||||||
|
id: item.id, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.updateItemColType(this.options.id,this.getValue()[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
result.push(colType); |
||||||
|
var colLength = { |
||||||
|
type: "bi.text_editor", |
||||||
|
widgetType: "bi.text_editor", |
||||||
|
disabled: !o.add, |
||||||
|
value: item.colLength, |
||||||
|
/*validationChecker: function (v) { |
||||||
|
return BI.isPositiveInteger(v) && v > 0; |
||||||
|
}, |
||||||
|
errorText: "必须是数字",*/ |
||||||
|
id: item.id, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.updateItemColLength(this.options.id,this.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
result.push(colLength); |
||||||
|
var excelCol = { |
||||||
|
type: "bi.text_value_combo", |
||||||
|
widgetType: "bi.text_editor", |
||||||
|
value: item.excelCol, |
||||||
|
items:self.model.excelItems, |
||||||
|
id: item.id, |
||||||
|
ref: function (_ref) { |
||||||
|
self.excelBox.push(_ref); |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.updateItemExcelCol(this.options.id,this.getValue()[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
result.push(excelCol); |
||||||
|
var primaryKey = { |
||||||
|
type: "bi.checkbox", |
||||||
|
widgetType: "bi.checkbox", |
||||||
|
selected: item.primaryKey, |
||||||
|
disabled: !o.add, |
||||||
|
id: item.id, |
||||||
|
ref: function(_ref){ |
||||||
|
self.primaryKeyBox.push(_ref); |
||||||
|
}, |
||||||
|
handler: function () { |
||||||
|
var id = this.options.id; |
||||||
|
self.store.updateItemPrimaryKey(id, this.isSelected()); |
||||||
|
/*this.isSelected() && BI.each(self.primaryKeyBox, function (index, item) { |
||||||
|
if (id != item.options.id) { |
||||||
|
item.setSelected(false); |
||||||
|
} |
||||||
|
});*/ |
||||||
|
} |
||||||
|
}; |
||||||
|
result.push(primaryKey); |
||||||
|
var deleteButton = { |
||||||
|
type: "bi.button", |
||||||
|
widgetType: "bi.button", |
||||||
|
disabled: !o.add, |
||||||
|
value: "删除", |
||||||
|
handler: function () { |
||||||
|
self.store.removeItems(this.options.id); |
||||||
|
}, |
||||||
|
id: item.id |
||||||
|
}; |
||||||
|
result.push(deleteButton); |
||||||
|
allResult.push(result); |
||||||
|
} |
||||||
|
return allResult; |
||||||
|
}, |
||||||
|
|
||||||
|
popularExcelBox:function (vals) { |
||||||
|
console.log("popularExcelBox"); |
||||||
|
var self = this; |
||||||
|
BI.each(self.excelBox, function (index, item) { |
||||||
|
item.populate(vals); |
||||||
|
item.setValue(self.model.perItems[index].excelCol); |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.hw.table.col.attr", info); |
||||||
|
})(); |
@ -0,0 +1,104 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
_init: function () { |
||||||
|
this.add = this.options.add; |
||||||
|
}, |
||||||
|
|
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
perCount: 5, |
||||||
|
page: 1 |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
context: ["items", "connection", "schema", "aliasName", "tableName", "excelItems", "infoId"], |
||||||
|
|
||||||
|
computed: { |
||||||
|
perItems: function () { |
||||||
|
var self = this; |
||||||
|
var start = (self.model.page - 1) * self.model.perCount; |
||||||
|
var end = self.model.page * self.model.perCount; |
||||||
|
var self = this; |
||||||
|
return BI.filter(self.model.items, function (index, item) { |
||||||
|
return index + 1 > start && index + 1 <= end; |
||||||
|
}) |
||||||
|
}, |
||||||
|
count: function () { |
||||||
|
return this.model.items.length; |
||||||
|
} |
||||||
|
}, |
||||||
|
watch:{ |
||||||
|
count: function () { |
||||||
|
var allPageCount = Math.ceil(this.model.count/ this.model.perCount); |
||||||
|
if(allPageCount<=0){ |
||||||
|
allPageCount=1; |
||||||
|
} |
||||||
|
if (allPageCount < this.model.page) { |
||||||
|
this.setPage(allPageCount); |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
actions: { |
||||||
|
initData: function (callback) { |
||||||
|
callback(); |
||||||
|
}, |
||||||
|
setPage: function (v) { |
||||||
|
this.model.page = v; |
||||||
|
}, |
||||||
|
addItems: function () { |
||||||
|
this.model.items = BI.concat(this.model.items, { |
||||||
|
id: BI.UUID(), |
||||||
|
colName: "", |
||||||
|
colType: "12", |
||||||
|
colLength: 255, |
||||||
|
excelCol: "", |
||||||
|
primaryKey: false |
||||||
|
}) |
||||||
|
}, |
||||||
|
removeItems: function (id) { |
||||||
|
BI.remove(this.model.items, function (index, item) { |
||||||
|
return item.id == id |
||||||
|
}); |
||||||
|
}, |
||||||
|
updateItemColName:function (id, colName) { |
||||||
|
BI.each(this.model.items,function (index, item) { |
||||||
|
if(item.id==id){ |
||||||
|
item.colName=colName; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
updateItemColType:function (id, colType) { |
||||||
|
BI.each(this.model.items,function (index, item) { |
||||||
|
if(item.id==id){ |
||||||
|
item.colType=colType; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
updateItemColLength:function (id, colLength) { |
||||||
|
BI.each(this.model.items,function (index, item) { |
||||||
|
if(item.id==id){ |
||||||
|
item.colLength=colLength; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
updateItemExcelCol:function (id, excelCol) { |
||||||
|
BI.each(this.model.items,function (index, item) { |
||||||
|
if(item.id==id){ |
||||||
|
item.excelCol=excelCol; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
updateItemPrimaryKey:function (id, primaryKey) { |
||||||
|
BI.each(this.model.items,function (index, item) { |
||||||
|
if(item.id==id){ |
||||||
|
item.primaryKey=primaryKey; |
||||||
|
} /*else { |
||||||
|
item.primaryKey=false; |
||||||
|
}*/ |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.hw.table.col.attr.model", Model); |
||||||
|
})(); |
@ -0,0 +1,127 @@ |
|||||||
|
/** |
||||||
|
* 用于测试上传,上传文件等,从上传中到成功或者失败的状态 |
||||||
|
* qcc |
||||||
|
* 2018/3/28 |
||||||
|
*/ |
||||||
|
|
||||||
|
!(function () { |
||||||
|
var Masker = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "dec-status-change-masker", |
||||||
|
$testId: "dec-status-change-masker", |
||||||
|
waitingText: BI.i18nText("Dec-Reg_Upload_Waiting"), |
||||||
|
successText: BI.i18nText("Dec-Reg_Upload_Success"), |
||||||
|
failText: BI.i18nText("Dec-Reg_Upload_Fail") |
||||||
|
}, |
||||||
|
|
||||||
|
|
||||||
|
watch: {}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type: "bi.center_adapt", |
||||||
|
cls: "bi-z-index-mask", |
||||||
|
items: [{ |
||||||
|
type: "bi.center_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.absolute", |
||||||
|
width: 300, |
||||||
|
height: 150, |
||||||
|
cls: "bi-card", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
textAlign: "right", |
||||||
|
cls: "dec-font-weight-bold", |
||||||
|
text: "选择sheet:", |
||||||
|
width: 60 |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.text_value_combo", |
||||||
|
lgap: 4, |
||||||
|
cls: "bi-border", |
||||||
|
textAlign: "left", |
||||||
|
// value: o.info.subjectType,
|
||||||
|
items: o.items, |
||||||
|
// items: self.model.typeItems,
|
||||||
|
width: 200, |
||||||
|
height: 22, |
||||||
|
ref: function (_ref) { |
||||||
|
self.sheet = _ref; |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
lgap: 10 |
||||||
|
}] |
||||||
|
} |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.right_vertical_adapt", |
||||||
|
lgap: 10, |
||||||
|
items: [{ |
||||||
|
type: "bi.button", |
||||||
|
ref: function (_ref) { |
||||||
|
|
||||||
|
}, |
||||||
|
text: "确定", |
||||||
|
height: 24, |
||||||
|
handler: function () { |
||||||
|
var value = self.sheet.getValue(); |
||||||
|
if (BI.isEmptyArray(value)) { |
||||||
|
BI.Msg.toast("先选择sheet"); |
||||||
|
return; |
||||||
|
} |
||||||
|
self.options.onClickConfirm(value[0], function (result) { |
||||||
|
if (result) { |
||||||
|
BI.Msg.toast("成功"); |
||||||
|
self.close() |
||||||
|
} else { |
||||||
|
BI.Msg.toast("失败"); |
||||||
|
} |
||||||
|
|
||||||
|
}) |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}, { |
||||||
|
type: "bi.button", |
||||||
|
ref: function (_ref) { |
||||||
|
|
||||||
|
}, |
||||||
|
text: "取消", |
||||||
|
height: 24, |
||||||
|
level: "ignore", |
||||||
|
handler: function () { |
||||||
|
self.close(); |
||||||
|
} |
||||||
|
|
||||||
|
}] |
||||||
|
}, height: 44 |
||||||
|
}] |
||||||
|
}, |
||||||
|
top: 40, left: 10, bottom: 0, right: 10 |
||||||
|
}] |
||||||
|
}] |
||||||
|
}] |
||||||
|
|
||||||
|
}; |
||||||
|
}, |
||||||
|
close: function () { |
||||||
|
this.fireEvent("EVENT_CLOSE"); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
BI.shortcut("dec.hw.sheet.select", Masker); |
||||||
|
})(); |
@ -0,0 +1,193 @@ |
|||||||
|
;!(function () { |
||||||
|
var EDITOR_WIDTH = 480, EDITOR_HEIGHT = 22, LABEL_WIDTH = 100; |
||||||
|
var info = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
typeItems: [], |
||||||
|
levelItems: [], |
||||||
|
departId: "", |
||||||
|
departName: "", |
||||||
|
departType: "", |
||||||
|
institution: "", |
||||||
|
departLevel: "", |
||||||
|
startDate: {}, |
||||||
|
endDate: {}, |
||||||
|
add: true, |
||||||
|
info: {} |
||||||
|
}, |
||||||
|
_store: function () { |
||||||
|
console.log("table.attr.js"); |
||||||
|
return BI.Models.getModel("dec.hw.table.attr.model"); |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
schemaItems:function () { |
||||||
|
this.schema.setValue(); |
||||||
|
}, |
||||||
|
isSchemaLoaded: function (v) { |
||||||
|
this.schema.setEnable(v); |
||||||
|
} |
||||||
|
}, |
||||||
|
beforeInit: function (callback) { |
||||||
|
this.store.initData(callback); |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options, borderEditorWidth = EDITOR_WIDTH - 2; |
||||||
|
console.log("table.attr.js"); |
||||||
|
return { |
||||||
|
type: "bi.vertical", |
||||||
|
width: 640, |
||||||
|
vgap: 15, |
||||||
|
items: [{ |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
textAlign: "right", |
||||||
|
cls: "dec-font-weight-bold", |
||||||
|
text: "数据源:", |
||||||
|
title: "数据源", |
||||||
|
width: LABEL_WIDTH |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.text_value_combo", |
||||||
|
lgap: 4, |
||||||
|
disabled: !o.add, |
||||||
|
cls: "bi-border", |
||||||
|
textAlign: "left", |
||||||
|
value: o.info.connection, |
||||||
|
items: self.model.connectionItems, |
||||||
|
// items: self.model.typeItems,
|
||||||
|
width: borderEditorWidth, |
||||||
|
height: EDITOR_HEIGHT, |
||||||
|
ref: function (_ref) { |
||||||
|
self.connection = _ref; |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.setConnection(this.getValue()[0]); |
||||||
|
self.store.getSchemaItems(this.getValue()[0]); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
lgap: 10 |
||||||
|
}] |
||||||
|
}, { |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
textAlign: "right", |
||||||
|
cls: "dec-font-weight-bold", |
||||||
|
text: "别名(*):", |
||||||
|
title: "别名", |
||||||
|
width: LABEL_WIDTH |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.text_editor", |
||||||
|
lgap: 4, |
||||||
|
cls: "bi-border", |
||||||
|
textAlign: "left", |
||||||
|
value: o.info.aliasName, |
||||||
|
width: borderEditorWidth, |
||||||
|
disabled: !o.add, |
||||||
|
height: EDITOR_HEIGHT, |
||||||
|
ref: function (_ref) { |
||||||
|
self.alias = _ref; |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.setAliasName(this.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, lgap: 10 |
||||||
|
}] |
||||||
|
}, { |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.label", |
||||||
|
textAlign: "right", |
||||||
|
cls: "dec-font-weight-bold", |
||||||
|
text: "表名(*):", |
||||||
|
title: "表名", |
||||||
|
width: LABEL_WIDTH |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.text_editor", |
||||||
|
lgap: 4, |
||||||
|
cls: "bi-border", |
||||||
|
textAlign: "left", |
||||||
|
width: borderEditorWidth, |
||||||
|
disabled: !o.add, |
||||||
|
value: o.info.tableName, |
||||||
|
height: EDITOR_HEIGHT, |
||||||
|
ref: function (_ref) { |
||||||
|
self.tableName = _ref; |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function () { |
||||||
|
self.store.setTableName(this.getValue()); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, lgap: 10 |
||||||
|
}] |
||||||
|
}] |
||||||
|
} |
||||||
|
}, |
||||||
|
getValue: function () { |
||||||
|
var self = this; |
||||||
|
return { |
||||||
|
id: self.subjectId.getValue(), |
||||||
|
subjectName: self.subjectName.getValue(), |
||||||
|
subjectType: self.subjectType.getValue()[0], |
||||||
|
accountSubject: self.accountSubject.getValue()[0], |
||||||
|
beginDate: Dec.AMB.getDynamicDateValue(self.beginDate.getValue()), |
||||||
|
endDate: Dec.AMB.getDynamicDateValue(self.endDate.getValue()), |
||||||
|
mark: self.mark.getValue() |
||||||
|
} |
||||||
|
}, |
||||||
|
setValue: function (v) { |
||||||
|
var self = this; |
||||||
|
self.subjectId.setValue(v.id); |
||||||
|
self.subjectName.setValue(v.subjectName); |
||||||
|
self.subjectType.setValue([v.subjectType]); |
||||||
|
self.accountSubject.setValue([v.accountSubject]); |
||||||
|
self.beginDate.setValue(Dec.AMB.createDateWidgetValue(v.beginDate)); |
||||||
|
self.endDate.setValue(Dec.AMB.createDateWidgetValue(v.endDate)); |
||||||
|
self.mark.setValue(v.mark); |
||||||
|
}, |
||||||
|
getSchemaValue: function () { |
||||||
|
return this.schema.getValue() |
||||||
|
}, |
||||||
|
_itemsCreator:function (options, populate) { |
||||||
|
var self = this, o = this.options, keyword = options.keywords && options.keywords[0]; |
||||||
|
var filter = BI.filter(self.model.schemaItems,function (i, value) { |
||||||
|
if(BI.isEmpty(keyword)){ |
||||||
|
return true; |
||||||
|
} |
||||||
|
return BI.contains(value.value, keyword); |
||||||
|
}); |
||||||
|
populate({ |
||||||
|
items: self._processSchemaItems(filter) |
||||||
|
}) |
||||||
|
}, |
||||||
|
_processSchemaItems:function (items) { |
||||||
|
var self = this; |
||||||
|
return BI.map(items, function (i, v) { |
||||||
|
var res = { |
||||||
|
type: "bi.icon_text_item", |
||||||
|
value: v.value, |
||||||
|
cls: "item-check-font bi-list-item" |
||||||
|
}; |
||||||
|
return res; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
BI.shortcut("dec.hw.table.attr", info); |
||||||
|
})(); |
@ -0,0 +1,73 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
_init: function () { |
||||||
|
this.add = this.options.add; |
||||||
|
|
||||||
|
}, |
||||||
|
|
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
connectionItems: [], |
||||||
|
schemaItems: [], |
||||||
|
isSchemaLoaded: false |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
context: [ "connection", "schema", "aliasName", "tableName"], |
||||||
|
|
||||||
|
actions: { |
||||||
|
initData: function (callback) { |
||||||
|
var self=this; |
||||||
|
Dec.Utils.getConnections(function (res) { |
||||||
|
console.log(res); |
||||||
|
self.model.connectionItems = |
||||||
|
BI.map( |
||||||
|
/*// 根据驱动过滤下数据连接 |
||||||
|
BI.filter(res, |
||||||
|
function (i,val) { |
||||||
|
var reg = RegExp('MYSQL|ORACLE|SQLSERVER|POSTGRE|SYBASE'); |
||||||
|
return JSON.parse(val.connectionData).driver.toUpperCase().match(reg) != null |
||||||
|
}),*/ |
||||||
|
res, |
||||||
|
function (i,val) { |
||||||
|
return BI.extend({value:"",text:""},{ |
||||||
|
text : val.connectionName, |
||||||
|
value : val.connectionName |
||||||
|
}) |
||||||
|
}); |
||||||
|
callback(); |
||||||
|
}); |
||||||
|
//self.model.connectionItems=[{value: "zhizao", text: "制造"}, {value: "xiaoshou", text: "销售"}];
|
||||||
|
}, |
||||||
|
setConnection:function (v) { |
||||||
|
this.model.connection=v; |
||||||
|
}, |
||||||
|
setSchema:function (v) { |
||||||
|
this.model.schema=v; |
||||||
|
}, |
||||||
|
setSchemaLoaded:function (v) { |
||||||
|
this.model.isSchemaLoaded=v; |
||||||
|
}, |
||||||
|
setAliasName:function (v) { |
||||||
|
this.model.aliasName=v; |
||||||
|
}, |
||||||
|
setTableName:function (v) { |
||||||
|
this.model.tableName=v; |
||||||
|
}, |
||||||
|
getSchemaItems:function (v) { |
||||||
|
var self = this; |
||||||
|
self.setSchemaLoaded(false); |
||||||
|
Dec.reqGet( |
||||||
|
"/url/excelmng/getSchema?connectionName=" + v, |
||||||
|
null,null, |
||||||
|
function (e) { |
||||||
|
console.log(e); |
||||||
|
self.model.schemaItems = e.data; |
||||||
|
self.setSchemaLoaded(true); |
||||||
|
} |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.hw.table.attr.model", Model); |
||||||
|
})(); |
@ -0,0 +1,46 @@ |
|||||||
|
;!(function () { |
||||||
|
var EDITOR_WIDTH = 440, EDITOR_HEIGHT = 22, LABEL_WIDTH = 140; |
||||||
|
var info = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
widgetType: "", |
||||||
|
id: "", |
||||||
|
isArr: false, |
||||||
|
value: "", |
||||||
|
errorText: "", |
||||||
|
validationChecker: BI.emptyFn, |
||||||
|
listeners:[], |
||||||
|
handler: BI.emptyFn, |
||||||
|
items: [] |
||||||
|
}, |
||||||
|
/*beforeInit: function (callback) { |
||||||
|
this.store.initData(callback) |
||||||
|
},*/ |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
id:o.id, |
||||||
|
type: o.widgetType, |
||||||
|
value: o.value, |
||||||
|
text: o.value, |
||||||
|
items: o.items, |
||||||
|
disabled: o.disabled, |
||||||
|
validationChecker: o.validationChecker, |
||||||
|
errorText: o.errorText, |
||||||
|
handler:o.handler, |
||||||
|
listeners:o.listeners, |
||||||
|
ref: function (_ref) { |
||||||
|
self.showWidget = _ref; |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
getValue: function () { |
||||||
|
var o = this.options; |
||||||
|
var result = this.showWidget.getValue(); |
||||||
|
return o.isArr ? result[0] : result; |
||||||
|
}, |
||||||
|
getId: function () { |
||||||
|
return this.options.id; |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.hw.table.col.attr.td", info); |
||||||
|
})(); |
@ -0,0 +1,265 @@ |
|||||||
|
;!(function () { |
||||||
|
var commPath = Dec.fineServletURL + "/file?path=/com/fr/plugin/hw/decision/js"; |
||||||
|
|
||||||
|
BI.$import(commPath + "/utils.js"); |
||||||
|
BI.$import(commPath + "/table.info.js"); |
||||||
|
BI.$import(commPath + "/table.info.model.js"); |
||||||
|
BI.$import(commPath + "/hw.table.add.pop.js"); |
||||||
|
BI.$import(commPath + "/hw.table.add.pop.model.js"); |
||||||
|
|
||||||
|
BI.$import(commPath + "/attr/table.attr.js"); |
||||||
|
BI.$import(commPath + "/attr/table.attr.model.js"); |
||||||
|
BI.$import(commPath + "/attr/col.attr.js"); |
||||||
|
BI.$import(commPath + "/attr/col.attr.model.js"); |
||||||
|
BI.$import(commPath + "/attr/sheet.masker.js"); |
||||||
|
BI.$import(commPath + "/attr/td.widget.js"); |
||||||
|
|
||||||
|
BI.$import(commPath + "/pane/panes.js"); |
||||||
|
BI.$import(commPath + "/pane/panes.model.js"); |
||||||
|
BI.$import(commPath + "/pane/dec.hw.excel.export.pane.js"); |
||||||
|
BI.$import(commPath + "/pane/dec.hw.excel.export.pane.model.js"); |
||||||
|
BI.$import(commPath + "/pane/left.js"); |
||||||
|
BI.$import(commPath + "/pane/left.model.js"); |
||||||
|
BI.$import(commPath + "/pane/left.linklist.item.js"); |
||||||
|
BI.$import(commPath + "/pane/left.linklist.item.model.js"); |
||||||
|
BI.$import(commPath + "/pane/left.linklist.js"); |
||||||
|
BI.$import(commPath + "/pane/left.linklist.model.js"); |
||||||
|
BI.$import(commPath + "/pane/right.js"); |
||||||
|
BI.$import(commPath + "/pane/right.model.js"); |
||||||
|
BI.$import(commPath + "/pane/right.table.js"); |
||||||
|
BI.$import(commPath + "/pane/right.table.model.js"); |
||||||
|
BI.$import(commPath + "/pane/dec.page.table.plugin.js"); |
||||||
|
|
||||||
|
BI.$import(commPath + "/pane/authPane/auth.pane.js"); |
||||||
|
BI.$import(commPath + "/pane/authPane/auth.pane.model.js"); |
||||||
|
BI.$import(commPath + "/pane/authPane/auth.pane.right.js"); |
||||||
|
BI.$import(commPath + "/pane/authPane/auth.pane.right.model.js"); |
||||||
|
|
||||||
|
|
||||||
|
BI.config("dec.constant.management.navigation", function (items) { |
||||||
|
items.push({ |
||||||
|
value: "hw", // 地址栏显示的hash值
|
||||||
|
id: "fanruan-hw-excecl", // id
|
||||||
|
text: "Excel导入", // 文字
|
||||||
|
//cardType: "dec.mng.excelExportPane",
|
||||||
|
cardType: "dec.mng.panes", |
||||||
|
cls: "dir-font-20" // 图标类名
|
||||||
|
}); |
||||||
|
return items; |
||||||
|
}); |
||||||
|
|
||||||
|
/** |
||||||
|
* 管理项 |
||||||
|
*/ |
||||||
|
BI.constant("dec.hw.col.type", [ |
||||||
|
{value: "2", text: "整数"}, |
||||||
|
{value: "3", text: "小数"}, |
||||||
|
{value: "12", text: "文本"}, |
||||||
|
{value: "16", text: "布尔"}, |
||||||
|
{value: "91", text: "日期"} |
||||||
|
]); |
||||||
|
|
||||||
|
BI.constant("dec.hw.col.type.int", [2, 4]); |
||||||
|
BI.constant("dec.hw.col.type.str", [1, 12]); |
||||||
|
BI.constant("dec.hw.col.type.bool", [-7, 16]); |
||||||
|
BI.constant("dec.hw.col.type.date", [91, 93]); |
||||||
|
|
||||||
|
BI.hwColTypeDeal = function(data){ |
||||||
|
BI.each(data, function (index, val) { |
||||||
|
if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.int"), val.colType)) { |
||||||
|
val.colType = 2; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.str"), val.colType)) { |
||||||
|
val.colType = 12; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.bool"), val.colType)) { |
||||||
|
val.colType = 16; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.date"), val.colType)) { |
||||||
|
val.colType = 91; |
||||||
|
} |
||||||
|
}); |
||||||
|
console.log(data); |
||||||
|
return data; |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* tab项 |
||||||
|
*/ |
||||||
|
BI.constant("dec.hw.constant.tabs", [ |
||||||
|
{value: "export", text: "Excel数据管理"}, |
||||||
|
{value: "auth", text: "Excel权限管理"} |
||||||
|
]); |
||||||
|
|
||||||
|
|
||||||
|
// 组件实现,效果为使用绝对布局组件放置了一个iframe
|
||||||
|
var Fanruan = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "dec-management-fanruan" |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
|
||||||
|
var file = { |
||||||
|
type: "bi.multifile_editor", |
||||||
|
ref: function (_ref) { |
||||||
|
self.file = _ref; |
||||||
|
}, |
||||||
|
width: 200, |
||||||
|
// accept: "*.zip;",
|
||||||
|
url: Dec.fineServletURL + "/url/demo/test?width=32&height=32", |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: BI.MultifileEditor.EVENT_ERROR, |
||||||
|
action: function (args) { |
||||||
|
/* self.fireEvent("EVENT_ERROR"); |
||||||
|
self._closeUpload();*/ |
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: BI.MultifileEditor.EVENT_UPLOADED, |
||||||
|
action: function (args) { |
||||||
|
var files = this.getValue(); |
||||||
|
if (files[files.length - 1].errorCode) { |
||||||
|
BI.Msg.toast(BI.i18nText(files[files.length - 1].errorMsg), { |
||||||
|
level: "error" |
||||||
|
}); |
||||||
|
self._closeUpload(); |
||||||
|
return; |
||||||
|
} |
||||||
|
var id = files[files.length - 1].attach_id; |
||||||
|
var filename = files[files.length - 1].filename; |
||||||
|
// self.store.analysisFile(id, filename);
|
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: BI.MultifileEditor.EVENT_CHANGE, |
||||||
|
action: function () { |
||||||
|
this.upload(); |
||||||
|
/* self._startUpload();*/ |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: { |
||||||
|
type: "bi.center_adapt", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: file |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.button", |
||||||
|
width: 200, |
||||||
|
text: "123123", |
||||||
|
handler: function () { |
||||||
|
self.file.select(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
top: 100, |
||||||
|
left: 0, |
||||||
|
right: 0, |
||||||
|
bottom: 0 |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
items: [{ |
||||||
|
type: "bi.button", |
||||||
|
text: "新建", |
||||||
|
handler: function () { |
||||||
|
var pane = { |
||||||
|
type: "dec.hw.table.add.popup", |
||||||
|
add:true, |
||||||
|
infoId:"add", |
||||||
|
onClickConfirm: function (val, callback) { |
||||||
|
console.log(val); |
||||||
|
Dec.HW.importTableData(val,function (res) { |
||||||
|
debugger; |
||||||
|
}); |
||||||
|
|
||||||
|
callback(true); |
||||||
|
// self.store.addDepartment(val, callback);
|
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "add"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
BI.Popovers.create(self.getName() + "add", { |
||||||
|
type: "bi.popover", |
||||||
|
header: BI.i18nText("Dec-Add_Department"), |
||||||
|
body: pane, |
||||||
|
width: 700, |
||||||
|
height: 800, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "add"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}).open(self.getName() + "add"); |
||||||
|
|
||||||
|
} |
||||||
|
}, { |
||||||
|
type: "bi.button", |
||||||
|
text: "编辑", |
||||||
|
handler:function () { |
||||||
|
var pane = { |
||||||
|
type: "dec.hw.table.add.popup", |
||||||
|
add:false, |
||||||
|
infoId:"edit", |
||||||
|
onClickConfirm: function (val, callback) { |
||||||
|
console.log(val); |
||||||
|
Dec.HW.importTableData(val,function (res) { |
||||||
|
debugger; |
||||||
|
}); |
||||||
|
|
||||||
|
callback(true); |
||||||
|
// self.store.addDepartment(val, callback);
|
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
BI.Popovers.create(self.getName() + "edit", { |
||||||
|
type: "bi.popover", |
||||||
|
header: BI.i18nText("Dec-Add_Department"), |
||||||
|
body: pane, |
||||||
|
width: 700, |
||||||
|
height: 800, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}).open(self.getName() + "edit"); |
||||||
|
} |
||||||
|
}] |
||||||
|
|
||||||
|
}, |
||||||
|
top: 0, |
||||||
|
left: 0 |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.management.fanruan_demo", Fanruan); |
||||||
|
})(); |
@ -0,0 +1,15 @@ |
|||||||
|
!(function () { |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function(){ |
||||||
|
return{ |
||||||
|
importStatus: ""//导入的状态
|
||||||
|
} |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
setImportStatus:function (v) { |
||||||
|
this.model.importStatus=v; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.hw.table.add.popup", Store); |
||||||
|
})(); |
@ -0,0 +1,72 @@ |
|||||||
|
!(function () { |
||||||
|
var AuthPane = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "" |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.mng.authPane"); |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
var left = { |
||||||
|
type: "dec.common.resizeable_layout", |
||||||
|
ref: function (_ref) { |
||||||
|
self.left = _ref; |
||||||
|
}, |
||||||
|
width: 240, |
||||||
|
maxSize: 450, |
||||||
|
minSize: 200, |
||||||
|
resize: BI.bind(self.resize, this), |
||||||
|
item: { |
||||||
|
type: "dec.excelexport.left", |
||||||
|
showButton: false, |
||||||
|
cls: "bi-border-right" |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
var right = { |
||||||
|
type: "dec.auth.right", |
||||||
|
ref: function (_ref) { |
||||||
|
self.right = _ref; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [{ |
||||||
|
type: "bi.absolute", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: { |
||||||
|
type: "bi.htape", |
||||||
|
cls: "bi-card", |
||||||
|
ref: function (_ref) { |
||||||
|
self.wrapper = _ref; |
||||||
|
}, |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: left, |
||||||
|
width: 240 |
||||||
|
}, { |
||||||
|
el: right |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
top: 10, right: 10, left: 10, bottom: 10 |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
resize: function (size) { |
||||||
|
var self = this; |
||||||
|
self.wrapper.options.items[0].width = size; |
||||||
|
self.wrapper.resize(); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.mng.authPane", AuthPane); |
||||||
|
})(); |
@ -0,0 +1,12 @@ |
|||||||
|
!(function(){ |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
selectedLink: "" |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
childContext: ["selectedLink"] |
||||||
|
}); |
||||||
|
BI.model("dec.model.mng.authPane", Store); |
||||||
|
})(); |
@ -0,0 +1,99 @@ |
|||||||
|
!(function () { |
||||||
|
var Right = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "" |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.auth.right"); |
||||||
|
}, |
||||||
|
|
||||||
|
watch:{ |
||||||
|
selectedLink:function(v){ |
||||||
|
var self = this; |
||||||
|
self.loader.setVisible(true); |
||||||
|
self.store.setAllUser([]); |
||||||
|
self.store.setPage(2); |
||||||
|
self.store.initAuthData(function(){ |
||||||
|
self.store.initData(function(e){ |
||||||
|
self.loader.populate(e); |
||||||
|
self.store.setPage(2); |
||||||
|
}, 1); |
||||||
|
}); |
||||||
|
}, |
||||||
|
keyword:function(v){ |
||||||
|
var self = this; |
||||||
|
self.store.initData(function(e){ |
||||||
|
self.loader.populate(e); |
||||||
|
self.store.setPage(2); |
||||||
|
}, 1); |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
|
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [{ |
||||||
|
el:{ |
||||||
|
type: "bi.left_right_vertical_adapt", |
||||||
|
cls: "bi-border-bottom", |
||||||
|
items:{ |
||||||
|
left:[{ |
||||||
|
type: "bi.label", |
||||||
|
text: "人员列表", |
||||||
|
textAlign: "left", |
||||||
|
hgap: 5, |
||||||
|
lgap: 20 |
||||||
|
},{ |
||||||
|
type: "bi.search_editor", |
||||||
|
width: 200, |
||||||
|
watermark: "用户搜索", |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function() { |
||||||
|
self.store.setKeyword(this.getKeywords()[0]); |
||||||
|
} |
||||||
|
},{ |
||||||
|
eventName: "EVENT_CLEAR", |
||||||
|
action: function() { |
||||||
|
self.store.setAllUser([]); |
||||||
|
self.store.setKeyword(BI.emptyStr); |
||||||
|
} |
||||||
|
}] |
||||||
|
}], |
||||||
|
right:[{ |
||||||
|
type: "bi.label", |
||||||
|
text: "权限", |
||||||
|
textAlign: "left", |
||||||
|
hgap: 5, |
||||||
|
rgap: 20 |
||||||
|
}] |
||||||
|
} |
||||||
|
}, |
||||||
|
height: 40, |
||||||
|
},{ |
||||||
|
el:{ |
||||||
|
type: "bi.loader", |
||||||
|
height: "90%", |
||||||
|
invisible: true, |
||||||
|
ref: function(_ref) { |
||||||
|
self.loader = _ref |
||||||
|
}, |
||||||
|
// options 表示加载的次数 times:1
|
||||||
|
itemsCreator: function (options, populate) { |
||||||
|
self.store.initData(populate, self.model.page); |
||||||
|
self.store.setPage(self.model.page+1) ; |
||||||
|
}, |
||||||
|
hasNext: function (options) { |
||||||
|
return self.model.hasNext; |
||||||
|
} |
||||||
|
}, |
||||||
|
tgap: 15 |
||||||
|
}] |
||||||
|
}; |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.auth.right", Right); |
||||||
|
})(); |
@ -0,0 +1,123 @@ |
|||||||
|
!(function(){ |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
keyword: "", |
||||||
|
allUser:[], |
||||||
|
authUser:[], |
||||||
|
page: 1, |
||||||
|
count: 100, |
||||||
|
userName: "", |
||||||
|
hasNext: true |
||||||
|
}; |
||||||
|
}, |
||||||
|
context:["selectedLink"], |
||||||
|
computed: { |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
initData:function(callback, page){ |
||||||
|
var self = this; |
||||||
|
Dec.HW.getAllUserData({ |
||||||
|
page:page, |
||||||
|
count:self.model.count, |
||||||
|
keyword:self.model.keyword |
||||||
|
},function(e){ |
||||||
|
if (e.status) { |
||||||
|
self.model.hasNext = e.data.hasNext; |
||||||
|
self.model.allUser = e.data.items; |
||||||
|
callback && callback(self._formatItems(e.data.items)) |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
initAuthData:function(callback){ |
||||||
|
var self = this; |
||||||
|
Dec.HW.getAuthUserData({ |
||||||
|
linkName: self.model.selectedLink
|
||||||
|
},function(res){ |
||||||
|
if (res.status) { |
||||||
|
self.model.authUser = res.data; |
||||||
|
callback && callback() |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
|
||||||
|
setAllUser: function (v) { |
||||||
|
this.model.allUser = v |
||||||
|
}, |
||||||
|
|
||||||
|
setKeyword: function (v) { |
||||||
|
this.model.keyword = v |
||||||
|
}, |
||||||
|
|
||||||
|
setPage: function (v) { |
||||||
|
this.model.page = v |
||||||
|
}, |
||||||
|
|
||||||
|
updateAuth: function(v){ |
||||||
|
var self = this; |
||||||
|
Dec.HW.updateLinkAuth({ |
||||||
|
linkName: self.model.selectedLink, |
||||||
|
userName: self.model.userName, |
||||||
|
auth: v
|
||||||
|
},function(res){ |
||||||
|
self.initAuthData(BI.emptyFn); |
||||||
|
}) |
||||||
|
}, |
||||||
|
|
||||||
|
_formatItems:function(v){ |
||||||
|
var self = this; |
||||||
|
return BI.map( v, function(i,val){ |
||||||
|
var selected = BI.contains(self.model.authUser, val.id); |
||||||
|
var item = { |
||||||
|
type:"bi.htape", |
||||||
|
cls: "bi-list-item-active", |
||||||
|
ref: function(_ref) { |
||||||
|
self.tape = _ref |
||||||
|
}, |
||||||
|
height:24, |
||||||
|
items:[{ |
||||||
|
el:{ |
||||||
|
type:"bi.label", |
||||||
|
}, |
||||||
|
width:60 |
||||||
|
},{ |
||||||
|
el:{ |
||||||
|
type:"bi.label", |
||||||
|
value: val.realName + " (" + val.username + ")", |
||||||
|
text: val.realName + " (" + val.username + ")" |
||||||
|
}, |
||||||
|
},{ |
||||||
|
el:{ |
||||||
|
type:"dec.auth.checkbox", |
||||||
|
selected:selected, |
||||||
|
value: val.id, |
||||||
|
hoverHandler:{ |
||||||
|
moveIn:function(arguments){ |
||||||
|
self.model.userName = arguments |
||||||
|
}, |
||||||
|
moveOut:function(){ |
||||||
|
} |
||||||
|
}, |
||||||
|
listeners: [{ |
||||||
|
eventName: BI.Controller.EVENT_CHANGE, |
||||||
|
action: function() { |
||||||
|
self.updateAuth(this.isSelected()); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
rgap:10 |
||||||
|
},{ |
||||||
|
el:{ |
||||||
|
type:"bi.label", |
||||||
|
}, |
||||||
|
width:40 |
||||||
|
}] |
||||||
|
} |
||||||
|
return item; |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.auth.right", Store); |
||||||
|
})(); |
@ -0,0 +1,86 @@ |
|||||||
|
!(function () { |
||||||
|
var ExcelExportPane = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "" |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.mng.excelExportPane"); |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
var left = { |
||||||
|
type: "dec.common.resizeable_layout", |
||||||
|
ref: function (_ref) { |
||||||
|
self.left = _ref; |
||||||
|
}, |
||||||
|
width: 240, |
||||||
|
maxSize: 450, |
||||||
|
minSize: 200, |
||||||
|
resize: BI.bind(self.resize, this), |
||||||
|
item: { |
||||||
|
type: "dec.excelexport.left", |
||||||
|
showButton: true, |
||||||
|
containReuse: true, |
||||||
|
cls: "bi-border-right" |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
var right = { |
||||||
|
type: "dec.excelexport.right", |
||||||
|
ref: function (_ref) { |
||||||
|
self.mid = _ref; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [ |
||||||
|
/*{ |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
cls: "bi-card bi-border-bottom", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
type: "bi.label", |
||||||
|
text: "Excel数据管理", |
||||||
|
textAlign: "left", |
||||||
|
hgap: 10 |
||||||
|
} |
||||||
|
], |
||||||
|
height: 40 |
||||||
|
}, */{ |
||||||
|
type: "bi.absolute", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: { |
||||||
|
type: "bi.htape", |
||||||
|
cls: "bi-card", |
||||||
|
ref: function (_ref) { |
||||||
|
self.wrapper = _ref; |
||||||
|
}, |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: left, |
||||||
|
width: 240 |
||||||
|
}, { |
||||||
|
el: right |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
top: 10, right: 10, left: 10, bottom: 10 |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
resize: function (size) { |
||||||
|
var self = this; |
||||||
|
self.wrapper.options.items[0].width = size; |
||||||
|
self.wrapper.resize(); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.mng.excelExportPane", ExcelExportPane); |
||||||
|
})(); |
@ -0,0 +1,11 @@ |
|||||||
|
!(function () { |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
selectedLink: "" |
||||||
|
} |
||||||
|
}, |
||||||
|
childContext: ["selectedLink"] |
||||||
|
}); |
||||||
|
BI.model("dec.model.mng.excelExportPane", Store); |
||||||
|
})(); |
@ -0,0 +1,88 @@ |
|||||||
|
!(function () { |
||||||
|
var i = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "dec-page-table", |
||||||
|
perPage: 10, |
||||||
|
showPager: !0, |
||||||
|
columnSize: [] |
||||||
|
}, |
||||||
|
_store: function() { |
||||||
|
return BI.Models.getModel("dec.model.page.table") |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
sort: function(e) { |
||||||
|
this.fireEvent(i.EVENT_SORT, e) |
||||||
|
}, |
||||||
|
"totalCount || currentPage": function() { |
||||||
|
this.pager.setCount(this.model.totalCount), |
||||||
|
this.pager.setPage(this.model.currentPage), |
||||||
|
this.pager.setAllPages(Math.ceil(this.model.totalCount / this.options.perPage)) |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function() { |
||||||
|
var t = this |
||||||
|
, e = this.options; |
||||||
|
return { |
||||||
|
type: "bi.vertical", |
||||||
|
scrollx: true, |
||||||
|
items: [{ |
||||||
|
type: "dec.page.table.header", |
||||||
|
columnSize: e.columnSize, |
||||||
|
items: e.header |
||||||
|
}, { |
||||||
|
type: "bi.button_group", |
||||||
|
cls: "table-items", |
||||||
|
layouts: [{ |
||||||
|
type: "bi.vertical", |
||||||
|
scrollx: true |
||||||
|
}], |
||||||
|
items: this._createItems(e.items), |
||||||
|
ref: function(e) { |
||||||
|
t.listGroup = e |
||||||
|
}, |
||||||
|
height: e.listHeight |
||||||
|
}, { |
||||||
|
type: "dec.pager", |
||||||
|
height: 30, |
||||||
|
invisible: !e.showPager, |
||||||
|
tgap: 10, |
||||||
|
count: e.totalCount, |
||||||
|
pages: 0 === e.totalCount ? 1 : Math.ceil(e.totalCount / e.perPage), |
||||||
|
curr: e.currentPage, |
||||||
|
ref: function(e) { |
||||||
|
t.pager = e |
||||||
|
}, |
||||||
|
listeners: [{ |
||||||
|
eventName: i.PAGER_EVENT_CHANGE, |
||||||
|
action: function() { |
||||||
|
t.fireEvent(i.PAGER_EVENT_CHANGE, this.getCurrentPage()) |
||||||
|
} |
||||||
|
}] |
||||||
|
}] |
||||||
|
} |
||||||
|
}, |
||||||
|
setCount: function(e) { |
||||||
|
this.store.setCount(e) |
||||||
|
}, |
||||||
|
setPage: function(e) { |
||||||
|
this.store.setPage(e) |
||||||
|
}, |
||||||
|
populate: function(e) { |
||||||
|
this.listGroup.populate(this._createItems(e)) |
||||||
|
}, |
||||||
|
_createItems: function(e) { |
||||||
|
var i = this.options; |
||||||
|
return BI.map(e, function(e, t) { |
||||||
|
return { |
||||||
|
type: "dec.page.table.row", |
||||||
|
odd: BI.isOdd(e), |
||||||
|
columnSize: i.columnSize, |
||||||
|
item: t |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
i.PAGER_EVENT_CHANGE = "EVENT_CHANGE", |
||||||
|
i.EVENT_SORT = "EVENT_SORT", |
||||||
|
BI.shortcut("dec.page.table.plugin", i) |
||||||
|
})(); |
@ -0,0 +1,107 @@ |
|||||||
|
!(function () { |
||||||
|
var Left = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "", |
||||||
|
showButton: false, |
||||||
|
containReuse: false |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.excelexport.left"); |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
type: "bi.left_right_vertical_adapt", |
||||||
|
cls: "bi-border-bottom", |
||||||
|
items:{ |
||||||
|
left: [{ |
||||||
|
type: "bi.label", |
||||||
|
text: "数据列表", |
||||||
|
textAlign: "left", |
||||||
|
hgap: 5, |
||||||
|
height: 40 |
||||||
|
}], |
||||||
|
right: [{ |
||||||
|
type: "bi.icon_button", |
||||||
|
cls: "plus-font", |
||||||
|
invisible: !o.showButton, |
||||||
|
width: 16, |
||||||
|
hgap: 10, |
||||||
|
handler: function () { |
||||||
|
var pane = { |
||||||
|
type: "dec.hw.table.add.popup", |
||||||
|
add:true, |
||||||
|
infoId:"add", |
||||||
|
onClickConfirm: function (tableData, callback) { |
||||||
|
console.log(tableData); |
||||||
|
Dec.HW.importTableData(tableData, function (res) { |
||||||
|
if (res.status === "success") { |
||||||
|
BI.Utils.addTables2Pack({ |
||||||
|
packId: "__my_analysis__" + BI.Utils.getCurrentUserId(), |
||||||
|
tables: [{ |
||||||
|
tableName: tableData.tableName, |
||||||
|
connectionName: tableData.connection |
||||||
|
}] |
||||||
|
}, function () { |
||||||
|
callback(res); |
||||||
|
self.linkListPane.populate(); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
callback(res); |
||||||
|
self.linkListPane.populate(); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "add"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
BI.Popovers.create(self.getName() + "add", { |
||||||
|
type: "bi.popover", |
||||||
|
header: "添加Excel导入链接", |
||||||
|
body: pane, |
||||||
|
width: 700, |
||||||
|
height: 700, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "add"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}).open(self.getName() + "add"); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
height: 40 |
||||||
|
}, { |
||||||
|
type: "dec.excelexport.left.linklist", |
||||||
|
containReuse: o.containReuse, |
||||||
|
ref: function (_ref) { |
||||||
|
self.linkListPane = _ref; |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
resize: function (size) { |
||||||
|
var self = this; |
||||||
|
self.wrapper.options.items[0].width = size; |
||||||
|
self.wrapper.resize(); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.excelexport.left", Left); |
||||||
|
})(); |
@ -0,0 +1,100 @@ |
|||||||
|
!(function () { |
||||||
|
var ICON_WIDTH = 26; |
||||||
|
var Item = BI.inherit(BI.BasicButton, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "dec-tabledata-set-list-item", |
||||||
|
$testId: "dec-tabledata-set-list-item", |
||||||
|
height: 24, |
||||||
|
value: "", |
||||||
|
text: "", |
||||||
|
create: false |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.excelexport.left.linklist.item", this.options); |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
this.storeValue = o.value; |
||||||
|
return { |
||||||
|
type: "bi.htape", |
||||||
|
css: o.create == "true" ? {"color":"blue"}:{}, |
||||||
|
items: [{ |
||||||
|
type: "bi.center_adapt", |
||||||
|
width: 24, |
||||||
|
cls: "dcm-link-font", |
||||||
|
hgap: 5, |
||||||
|
items: [{ |
||||||
|
type: "bi.icon" |
||||||
|
}] |
||||||
|
}, { |
||||||
|
type: "bi.shelter_editor", |
||||||
|
allowBlank: false, |
||||||
|
value: o.value, |
||||||
|
text: o.text, |
||||||
|
validationChecker: BI.bind(this.store.nameChecker, this.store), |
||||||
|
errorText: function (v) { |
||||||
|
return BI.i18nText(BI.isEmptyString(v) ? "Dec-Data_Set_Server_Name_Empty" : "Dec-Data_Set_Server_Name_Duplicate"); |
||||||
|
}, |
||||||
|
title: function () { |
||||||
|
return self.editor.getValue(); |
||||||
|
}, |
||||||
|
ref: function (_ref) { |
||||||
|
self.editor = _ref; |
||||||
|
}, |
||||||
|
listeners: [{ |
||||||
|
eventName: BI.ShelterEditor.EVENT_CONFIRM, |
||||||
|
action: function () { |
||||||
|
self.storeValue = this.getValue(); |
||||||
|
self.fireEvent("EVENT_RENAME", self.storeValue); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, { |
||||||
|
type: "bi.vertical_adapt", |
||||||
|
width: ICON_WIDTH * 2 , |
||||||
|
cls: "operations", |
||||||
|
invisible: o.create != "true", |
||||||
|
items: [{ |
||||||
|
type: "bi.icon_button", |
||||||
|
cls: "rename-font", |
||||||
|
height: o.height, |
||||||
|
width: ICON_WIDTH, |
||||||
|
stopPropagation: true, |
||||||
|
title: BI.i18nText("Dec-Basic_Rename"), |
||||||
|
handler: function () { |
||||||
|
self.editor.focus(); |
||||||
|
} |
||||||
|
}, { |
||||||
|
type: "dec.bubble.combo", |
||||||
|
el: { |
||||||
|
type: "bi.icon_button", |
||||||
|
cls: "default-delete-font", |
||||||
|
height: o.height, |
||||||
|
width: ICON_WIDTH, |
||||||
|
title: BI.i18nText("Dec-Basic_Delete") |
||||||
|
}, |
||||||
|
text: BI.i18nText("Dec-Data_Set_Confirm_Delete"), |
||||||
|
onClickConfirm: function () { |
||||||
|
self.fireEvent("EVENT_DELETE"); |
||||||
|
self.deleteCombo.hideView(); |
||||||
|
}, |
||||||
|
ref: function (_ref) { |
||||||
|
self.deleteCombo = _ref; |
||||||
|
} |
||||||
|
}] |
||||||
|
}] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
getValue: function () { |
||||||
|
return this.storeValue; |
||||||
|
}, |
||||||
|
|
||||||
|
setValue: function (v) { |
||||||
|
this.editor.setValue(v); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.excelexport.left.linklist.item", Item); |
||||||
|
})(); |
@ -0,0 +1,18 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
|
||||||
|
context: ["names"], |
||||||
|
|
||||||
|
computed: {}, |
||||||
|
|
||||||
|
actions: { |
||||||
|
nameChecker: function (name) { |
||||||
|
if (name === this.options.value) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return !BI.contains(this.model.names, name); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.excelexport.left.linklist.item", Model); |
||||||
|
})(); |
@ -0,0 +1,60 @@ |
|||||||
|
!(function () { |
||||||
|
var SINGLE = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "dec-directory-left-single", |
||||||
|
$testId: "dec-directory-left-single", |
||||||
|
containReuse: false |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.excelexport.left.linklist", this.options); |
||||||
|
}, |
||||||
|
|
||||||
|
beforeInit: function (callback) { |
||||||
|
this.store.initData(callback); |
||||||
|
}, |
||||||
|
|
||||||
|
watch:{ |
||||||
|
linklist: function () { |
||||||
|
this.linkListPane.populate(this.model.items); |
||||||
|
this.linkListPane.setValue(this.model.selectedName); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.button_group", |
||||||
|
chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, |
||||||
|
layouts: [{ |
||||||
|
type: "bi.vertical" |
||||||
|
}], |
||||||
|
items: self.model.items, |
||||||
|
value: self.model.selectedLink, |
||||||
|
listeners: [{ |
||||||
|
eventName: BI.ButtonGroup.EVENT_CHANGE, |
||||||
|
action: function (v) { |
||||||
|
self.store.setSelectedLink(v); |
||||||
|
} |
||||||
|
}], |
||||||
|
ref: function (_ref) { |
||||||
|
self.linkListPane = _ref; |
||||||
|
} |
||||||
|
}, top: 10, left: 0, right: 0, bottom: 10 |
||||||
|
}] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
populate: function () { |
||||||
|
var self = this; |
||||||
|
self.store.initData( |
||||||
|
self.linkListPane.populate(this.model.items) |
||||||
|
); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.excelexport.left.linklist", SINGLE); |
||||||
|
})(); |
@ -0,0 +1,99 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
|
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
linklist: [] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
context: ["selectedLink"], |
||||||
|
|
||||||
|
computed: { |
||||||
|
items: function () { |
||||||
|
var self = this , o = this.options; |
||||||
|
|
||||||
|
return BI.map(self.model.linklist, function (i, v) { |
||||||
|
return { |
||||||
|
type: "dec.excelexport.left.linklist.item", |
||||||
|
value: v.name, |
||||||
|
create: v.create, |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_RENAME", |
||||||
|
action: function (name) { |
||||||
|
self.rename(v, name); |
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: "EVENT_DELETE", |
||||||
|
action: function () { |
||||||
|
self.deleteLink(v.id); |
||||||
|
} |
||||||
|
}] |
||||||
|
}; |
||||||
|
}); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
actions: { |
||||||
|
initData: function(callback){ |
||||||
|
var self = this ; |
||||||
|
Dec.reqGet("/url/excelmng/querylink?containReuse=" + self.options.containReuse,null,function(e){ |
||||||
|
self.model.linklist = e.data; |
||||||
|
console.log(self.model.linklist); |
||||||
|
BI.isFunction(callback) && callback(); |
||||||
|
},BI.emptyFn) |
||||||
|
}, |
||||||
|
|
||||||
|
//link重命名
|
||||||
|
rename: function(item, name){ |
||||||
|
if (item.name === name) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var self = this; |
||||||
|
var linkSet = BI.extend({}, item, { |
||||||
|
id: item.id, |
||||||
|
name: item.name |
||||||
|
}); |
||||||
|
|
||||||
|
Dec.reqGet("/url/excelmng/rename?id="+item.id+"&name="+name, |
||||||
|
null, |
||||||
|
function (e) { |
||||||
|
if (e.status === "success"){ |
||||||
|
BI.remove(self.model.linklist, function (i, v) { |
||||||
|
return v.id === item.id; |
||||||
|
}); |
||||||
|
self.model.linklist.unshift(BI.extend(linkSet, { |
||||||
|
name: name |
||||||
|
})); |
||||||
|
if (self.model.selectedLink === linkSet.name) { |
||||||
|
self.setSelectedDataSet(name); |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
BI.emptyFn) |
||||||
|
}, |
||||||
|
|
||||||
|
//link删除
|
||||||
|
deleteLink: function(id){ |
||||||
|
var self = this; |
||||||
|
Dec.reqGet("/url/excelmng/delete?id="+id, |
||||||
|
null, |
||||||
|
function (e) { |
||||||
|
if (e.status === "success"){ |
||||||
|
BI.remove(self.model.linklist, function (i, v) { |
||||||
|
return v.id === id; |
||||||
|
}); |
||||||
|
} else { |
||||||
|
BI.Msg.toast(BI.i18nText("Dec-Basic_Delete_Fail"), {level: "error"}); |
||||||
|
} |
||||||
|
}, |
||||||
|
BI.emptyFn) |
||||||
|
}, |
||||||
|
|
||||||
|
setSelectedLink: function(v){ |
||||||
|
this.model.selectedLink = v; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.excelexport.left.linklist", Model); |
||||||
|
}()); |
@ -0,0 +1,7 @@ |
|||||||
|
!(function () { |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
context:["selectedLink"], |
||||||
|
childContext: ["selectedLink"] |
||||||
|
}); |
||||||
|
BI.model("dec.model.excelexport.left", Store); |
||||||
|
})(); |
@ -0,0 +1,70 @@ |
|||||||
|
!(function () { |
||||||
|
var panes = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "" |
||||||
|
}, |
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.mng.panes"); |
||||||
|
}, |
||||||
|
watch:{ |
||||||
|
activeTab:function(v){ |
||||||
|
this.tab.setSelect(v); |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type: "bi.vertical", |
||||||
|
items: [{ |
||||||
|
type: "bi.htape", |
||||||
|
cls: "bi-card bi-border-bottom", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "dec.line_segment", |
||||||
|
cls: "dec-font-weight-bold", |
||||||
|
layouts: [{ |
||||||
|
type: "bi.vertical_adapt" |
||||||
|
}], |
||||||
|
items: BI.map(BI.Constants.getConstant("dec.hw.constant.tabs"), function(e, t) { |
||||||
|
return BI.extend({ |
||||||
|
type: "dec.line_segment_button", |
||||||
|
hgap: 15 |
||||||
|
}, t) |
||||||
|
}), |
||||||
|
value: "export", |
||||||
|
height: 40, |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function(e) { |
||||||
|
self.store.setSelect(e); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
lgap: 10 |
||||||
|
}], |
||||||
|
height: 40 |
||||||
|
}, { |
||||||
|
type: "bi.tab", |
||||||
|
ref: function(_ref) { |
||||||
|
self.tab = _ref; |
||||||
|
}, |
||||||
|
height: "95%", |
||||||
|
showIndex: "export", |
||||||
|
cardCreator: function(v) { |
||||||
|
switch (v) { |
||||||
|
case "export": |
||||||
|
return { |
||||||
|
type: "dec.mng.excelExportPane" |
||||||
|
}; |
||||||
|
case "auth": |
||||||
|
return { |
||||||
|
type: "dec.mng.authPane" |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
||||||
|
}] |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.mng.panes", panes); |
||||||
|
})(); |
@ -0,0 +1,16 @@ |
|||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
activeTab: "" |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
|
||||||
|
}, |
||||||
|
actions: { |
||||||
|
setSelect: function (v) { |
||||||
|
this.model.activeTab = v |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.mng.panes", Store); |
@ -0,0 +1,150 @@ |
|||||||
|
!(function () { |
||||||
|
var Left = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
props: { |
||||||
|
baseCls: "" |
||||||
|
}, |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.excelexport.right"); |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
|
||||||
|
return { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
type: "bi.left_right_vertical_adapt", |
||||||
|
cls: "bi-border-bottom", |
||||||
|
items:{ |
||||||
|
left: [{ |
||||||
|
type: "bi.label", |
||||||
|
text: "数据明细", |
||||||
|
textAlign: "left", |
||||||
|
hgap: 5, |
||||||
|
height: 40 |
||||||
|
}], |
||||||
|
right: [{ |
||||||
|
type: "bi.button", |
||||||
|
text: "刷新", |
||||||
|
level: "success", |
||||||
|
minWidth:60, |
||||||
|
hgap:10, |
||||||
|
handler:function(){ |
||||||
|
if (BI.isKey(self.model.selectedLink)) { |
||||||
|
self.table.populate(); |
||||||
|
} |
||||||
|
} |
||||||
|
},{ |
||||||
|
type: "bi.button", |
||||||
|
text: "覆盖", |
||||||
|
level: "common", |
||||||
|
minWidth:60, |
||||||
|
hgap:10, |
||||||
|
handler:function () { |
||||||
|
var pane = { |
||||||
|
type: "dec.hw.table.add.popup", |
||||||
|
add:false, |
||||||
|
infoId:"cover", |
||||||
|
aliasName: self.model.selectedLink, |
||||||
|
onClickConfirm: function (val, callback) { |
||||||
|
console.log(val); |
||||||
|
Dec.HW.importTableData(val,function (res) { |
||||||
|
debugger; |
||||||
|
callback(res); |
||||||
|
}); |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
if (self.model.selectedLink === BI.emptyStr) { |
||||||
|
BI.Msg.toast("先选择左侧链接"); |
||||||
|
return; |
||||||
|
} |
||||||
|
BI.Popovers.create(self.getName() + "edit", { |
||||||
|
type: "bi.popover", |
||||||
|
header: "覆盖", |
||||||
|
body: pane, |
||||||
|
width: 700, |
||||||
|
height: 600, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}).open(self.getName() + "edit"); |
||||||
|
} |
||||||
|
},{ |
||||||
|
type: "bi.button", |
||||||
|
text: "追加", |
||||||
|
level: "common", |
||||||
|
minWidth:60, |
||||||
|
hgap:10, |
||||||
|
handler:function () { |
||||||
|
var pane = { |
||||||
|
type: "dec.hw.table.add.popup", |
||||||
|
add:false, |
||||||
|
infoId:"addTo", |
||||||
|
aliasName: self.model.selectedLink, |
||||||
|
onClickConfirm: function (val, callback) { |
||||||
|
console.log(val); |
||||||
|
Dec.HW.importTableData(val,function (res) { |
||||||
|
callback(res); |
||||||
|
}) |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
if (self.model.selectedLink === BI.emptyStr) { |
||||||
|
BI.Msg.toast("先选择左侧链接"); |
||||||
|
return; |
||||||
|
} |
||||||
|
BI.Popovers.create(self.getName() + "edit", { |
||||||
|
type: "bi.popover", |
||||||
|
header: "追加", |
||||||
|
body: pane, |
||||||
|
width: 700, |
||||||
|
height: 600, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Popovers.remove(self.getName() + "edit"); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}).open(self.getName() + "edit"); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
height: 40 |
||||||
|
}, { |
||||||
|
type: "dec.excelexport.right.table", |
||||||
|
ref:function(_ref){ |
||||||
|
self.table = _ref |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
BI.shortcut("dec.excelexport.right", Left); |
||||||
|
})(); |
@ -0,0 +1,7 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
context:["selectedLink"], |
||||||
|
childContext: ["selectedLink"], |
||||||
|
}); |
||||||
|
BI.model("dec.model.excelexport.right", Model); |
||||||
|
})(); |
@ -0,0 +1,74 @@ |
|||||||
|
!(function () { |
||||||
|
var Counter = BI.inherit(BI.Widget, { |
||||||
|
|
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.model.excelexport.right.table"); |
||||||
|
}, |
||||||
|
|
||||||
|
watch:{ |
||||||
|
"header||items": function (v) { |
||||||
|
var self = this; |
||||||
|
self.pager.setAllPages(0 === self.model.totalCount ? 1 : Math.ceil(self.model.totalCount / self.model.perCount)); |
||||||
|
self.table.populate(self.model.items, [self.model.header]); |
||||||
|
}, |
||||||
|
selectedLink:function (v){ |
||||||
|
this.pager.setPage(1); |
||||||
|
this.tabpane.setVisible(true); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
return { |
||||||
|
type:"bi.absolute", |
||||||
|
items:[{ |
||||||
|
el:{ |
||||||
|
type:"bi.absolute", |
||||||
|
invisible: true, |
||||||
|
items:[{ |
||||||
|
el:{ |
||||||
|
type: "bi.preview_table", |
||||||
|
header: [self.model.header], |
||||||
|
items: self.model.items, |
||||||
|
headerRowSize: 40, |
||||||
|
ref: function (_ref) { |
||||||
|
self.table = _ref; |
||||||
|
} |
||||||
|
}, |
||||||
|
top:0,bottom:0,left:0,right:0 |
||||||
|
}], |
||||||
|
ref: function (_ref) { |
||||||
|
self.tabpane = _ref; |
||||||
|
} |
||||||
|
}, |
||||||
|
top:10,bottom:30,left:10,right:10 |
||||||
|
},{ |
||||||
|
el:{ |
||||||
|
type: "dec.pager", |
||||||
|
height: 30, |
||||||
|
tgap: 10, |
||||||
|
count: self.model.totalCount, |
||||||
|
pages: 0 === self.model.totalCount ? 1 : Math.ceil(self.model.totalCount / self.model.perCount), |
||||||
|
ref: function(_ref) { |
||||||
|
self.pager = _ref |
||||||
|
}, |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_CHANGE", |
||||||
|
action: function() { |
||||||
|
self.store.setPage(this.getCurrentPage()); |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
bottom:0,right:30 |
||||||
|
}] |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
populate: function(){ |
||||||
|
this.model.currentPage = 1; |
||||||
|
this.pager.setPage(1); |
||||||
|
this.store.initData(); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.excelexport.right.table", Counter); |
||||||
|
})(); |
@ -0,0 +1,77 @@ |
|||||||
|
!(function () { |
||||||
|
var Store = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
return { |
||||||
|
tableData:[], |
||||||
|
headerData:[], |
||||||
|
currentPage: 1, |
||||||
|
totalCount: 0, |
||||||
|
perCount: 20 |
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
context:["selectedLink"], |
||||||
|
|
||||||
|
watch: { |
||||||
|
selectedLink: function () { |
||||||
|
this.model.currentPage = 1; |
||||||
|
this.initData(); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
computed: { |
||||||
|
header: function () { |
||||||
|
var self = this; |
||||||
|
var head = []; |
||||||
|
var con = BI.Constants.getConstant("dec.hw.col.type") ; |
||||||
|
BI.map( self.model.headerData,function (i, val) { |
||||||
|
var text = BI.filter(con, function (index, v) { |
||||||
|
return BI.isEqual(val.colType, parseInt(v.value)) |
||||||
|
})[0].text; |
||||||
|
head.push({"text":val.colName + "(" + text + ")"}) |
||||||
|
}); |
||||||
|
return head; |
||||||
|
}, |
||||||
|
columnSize: function () { |
||||||
|
var self = this; |
||||||
|
var len = self.model.header.length; |
||||||
|
return new Array(len).fill((1/len).toFixed(2)); |
||||||
|
}, |
||||||
|
items: function () { |
||||||
|
var startNum = this.model.perCount * (this.model.currentPage - 1); |
||||||
|
return this.model.tableData.slice(startNum, startNum + this.model.perCount) |
||||||
|
}, |
||||||
|
totalCount: function () { |
||||||
|
return BI.size(this.model.tableData) |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
actions:{ |
||||||
|
initData: function (callback) { |
||||||
|
var self = this; |
||||||
|
Dec.HW.queryData({ |
||||||
|
name: self.model.selectedLink |
||||||
|
}, function (res) { |
||||||
|
self.model.tableData = res.data.tableData; |
||||||
|
/*BI.each(res.tabledata.colAttr, function (index, val) { |
||||||
|
if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.int"), val.colType)) { |
||||||
|
val.colType = 2; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.str"), val.colType)) { |
||||||
|
val.colType = 12; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.bool"), val.colType)) { |
||||||
|
val.colType = 16; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.date"), val.colType)) { |
||||||
|
val.colType = 91; |
||||||
|
} |
||||||
|
});*/ |
||||||
|
self.model.headerData = BI.hwColTypeDeal(res.data.colAttr); |
||||||
|
BI.isFunction(callback) && callback(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
setPage: function(val) { |
||||||
|
this.model.currentPage = val |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.model.excelexport.right.table", Store); |
||||||
|
})(); |
@ -0,0 +1,243 @@ |
|||||||
|
;!(function () { |
||||||
|
var tableInfo = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
add: true, |
||||||
|
infoId:"" |
||||||
|
}, |
||||||
|
_store: function () { |
||||||
|
return BI.Models.getModel("dec.hw.table.info.model",{ |
||||||
|
infoId:this.options.infoId, |
||||||
|
aliasName:this.options.aliasName |
||||||
|
}); |
||||||
|
}, |
||||||
|
beforeInit: function (callback) { |
||||||
|
this.store.initData(callback) |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
sheetItems: function (v) { |
||||||
|
if (v.show) { |
||||||
|
this.showSheetSelect(v.items); |
||||||
|
} else { |
||||||
|
this.hideSheetSelect() |
||||||
|
} |
||||||
|
}, |
||||||
|
importStatus: function (v) { |
||||||
|
switch (v) { |
||||||
|
case "importing": |
||||||
|
this._startImport(); |
||||||
|
break; |
||||||
|
case "abort": |
||||||
|
this._stopImport(); |
||||||
|
break; |
||||||
|
case "finish": |
||||||
|
default: |
||||||
|
this._finishImport(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var self = this, o = this.options; |
||||||
|
var file = { |
||||||
|
type: "bi.multifile_editor", |
||||||
|
ref: function (_ref) { |
||||||
|
self.file = _ref; |
||||||
|
}, |
||||||
|
url: Dec.fineServletURL + "/url/hw/file/upload?width=32&height=32", |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: BI.MultifileEditor.EVENT_ERROR, |
||||||
|
action: function (args) { |
||||||
|
/* self.fireEvent("EVENT_ERROR"); |
||||||
|
self._closeUpload();*/ |
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: BI.MultifileEditor.EVENT_UPLOADED, |
||||||
|
action: function (args) { |
||||||
|
console.log("EVENT_UPLOADED"); |
||||||
|
var files = this.getValue(); |
||||||
|
if (files[files.length - 1].errorCode) { |
||||||
|
BI.Msg.toast(BI.i18nText(files[files.length - 1].errorMsg), { |
||||||
|
level: "error" |
||||||
|
}); |
||||||
|
self.store.setImportStatus("abort"); |
||||||
|
return; |
||||||
|
} |
||||||
|
var filename = files[files.length - 1].filename; |
||||||
|
// 新增文件格式判断
|
||||||
|
if ( !BI.endWith(filename,".xls") && !BI.endWith(filename,".xlsx")){ |
||||||
|
BI.Msg.toast(BI.i18nText("上传文件格式不正确, 请重新上传excel文件"), { |
||||||
|
level: "error" |
||||||
|
}); |
||||||
|
self.store.setImportStatus("abort"); |
||||||
|
return; |
||||||
|
} |
||||||
|
self.uploadButton.setEnable(false); |
||||||
|
self.uploadButton.setText("已上传"); |
||||||
|
var id = files[files.length - 1].attach_id; |
||||||
|
self.store.getExcelSheetNumber(id, filename); |
||||||
|
} |
||||||
|
}, { |
||||||
|
eventName: BI.MultifileEditor.EVENT_CHANGE, |
||||||
|
action: function () { |
||||||
|
self.store.setImportStatus("importing"); |
||||||
|
this.upload(); |
||||||
|
/*self._startUpload();*/ |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
var header = { |
||||||
|
type: "bi.htape", |
||||||
|
height: 24, |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el:{ |
||||||
|
type: "bi.button", |
||||||
|
textAlign: "center", |
||||||
|
height: 24, |
||||||
|
text: "上传文件", |
||||||
|
ref: function (_ref) { |
||||||
|
self.uploadButton = _ref; |
||||||
|
}, |
||||||
|
handler: function () { |
||||||
|
self.file.select(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, { |
||||||
|
el: file |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: header, |
||||||
|
height: 24 |
||||||
|
}, |
||||||
|
{ |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.vtape", |
||||||
|
items: [{ |
||||||
|
height: 0.35, |
||||||
|
el: { |
||||||
|
type: "dec.card.vertical", |
||||||
|
showButtons: false, |
||||||
|
text: "表信息", |
||||||
|
content: { |
||||||
|
type: "dec.hw.table.attr", |
||||||
|
add:o.add, |
||||||
|
ref:function(_ref){ |
||||||
|
self.table = _ref; |
||||||
|
}, |
||||||
|
info:{ |
||||||
|
connection:self.model.connection, |
||||||
|
schema:self.model.schema, |
||||||
|
tableName:self.model.tableName, |
||||||
|
aliasName:o.aliasName |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, { |
||||||
|
height: 0.65, |
||||||
|
el: { |
||||||
|
type: "dec.card.vertical", |
||||||
|
showButtons: false, |
||||||
|
text: "列信息", |
||||||
|
content: { |
||||||
|
type: "dec.hw.table.col.attr", |
||||||
|
add:o.add |
||||||
|
//text: "111"
|
||||||
|
} |
||||||
|
} |
||||||
|
}] |
||||||
|
}, |
||||||
|
top: 0, bottom: 0, left: 0, right: 0 |
||||||
|
}] |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
top: 0, bottom: 0, left: 10, right: 10 |
||||||
|
}] |
||||||
|
} |
||||||
|
}, |
||||||
|
showSheetSelect: function (items) { |
||||||
|
var self=this; |
||||||
|
var name = this.getName() + "sheet"; |
||||||
|
BI.Maskers.create(name, null, { |
||||||
|
render: { |
||||||
|
type: "dec.hw.sheet.select", |
||||||
|
items: items, |
||||||
|
onClickConfirm:function(val,callback){ |
||||||
|
self.store.getSheetFiledWithNo(val,callback) |
||||||
|
}, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Maskers.hide(name); |
||||||
|
BI.Maskers.remove(name); |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.Maskers.show(name); |
||||||
|
}, |
||||||
|
hideSheetSelect: function () { |
||||||
|
var name = this.getName() + "sheet"; |
||||||
|
BI.Maskers.hide(name); |
||||||
|
BI.Maskers.remove(name); |
||||||
|
}, |
||||||
|
getValue: function () { |
||||||
|
return { |
||||||
|
items: this.model.items, |
||||||
|
connection: this.model.connection, |
||||||
|
schema: this.model.schema, |
||||||
|
aliasName: this.model.aliasName, |
||||||
|
tableName: this.model.tableName, |
||||||
|
infoId: this.model.infoId, |
||||||
|
sheetInfo:this.model.result |
||||||
|
} |
||||||
|
}, |
||||||
|
_startImport: function () { |
||||||
|
var self = this, name = this.getName() + "status"; |
||||||
|
var upload = { |
||||||
|
type: "dec.test.status", |
||||||
|
waitingText: "导入中", |
||||||
|
successText: "导入成功", |
||||||
|
failText: "导入失败", |
||||||
|
listeners: [{ |
||||||
|
eventName: "EVENT_CLOSE", |
||||||
|
action: function () { |
||||||
|
BI.Maskers.hide(name); |
||||||
|
BI.Maskers.remove(name); |
||||||
|
} |
||||||
|
}], |
||||||
|
ref: function (_ref) { |
||||||
|
self.uploadMasker = _ref; |
||||||
|
} |
||||||
|
}; |
||||||
|
BI.Maskers.create(name, null, { |
||||||
|
render: upload |
||||||
|
}); |
||||||
|
BI.Maskers.show(name); |
||||||
|
}, |
||||||
|
_stopImport: function () { |
||||||
|
var name = this.getName() + "status"; |
||||||
|
BI.Maskers.hide(name); |
||||||
|
BI.Maskers.remove(name); |
||||||
|
}, |
||||||
|
_finishImport: function () { |
||||||
|
this.uploadMasker && this.uploadMasker.setStatus({ |
||||||
|
status: DecCst.TestStatus.SUCCESS |
||||||
|
}); |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.shortcut("dec.hw.table.info", tableInfo); |
||||||
|
})(); |
@ -0,0 +1,158 @@ |
|||||||
|
!(function () { |
||||||
|
var Model = BI.inherit(Fix.Model, { |
||||||
|
state: function () { |
||||||
|
var o=this.options; |
||||||
|
return { |
||||||
|
items: [], |
||||||
|
connection: "", |
||||||
|
schema: "", |
||||||
|
tableName: "", |
||||||
|
excelItems: [], |
||||||
|
infoId: o.infoId, |
||||||
|
result: {attachId: "", fileName: "",titleRow:-1,sheetNo:-1}, |
||||||
|
sheetItems: {show: false, items: []}, |
||||||
|
importStatus: ""//导入的状态
|
||||||
|
}; |
||||||
|
}, |
||||||
|
|
||||||
|
childContext: ["items", "connection", "schema", "aliasName", "tableName", "excelItems", "infoId"], |
||||||
|
|
||||||
|
computed: {}, |
||||||
|
|
||||||
|
watch: { |
||||||
|
aliasName: function (v) { |
||||||
|
//console.log(v)
|
||||||
|
}, |
||||||
|
excelItems:function (v) { |
||||||
|
if (this.model.infoId == "add"){ |
||||||
|
this.addItems() |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
actions: { |
||||||
|
initData: function (callback) { |
||||||
|
var self = this, o = this.options; |
||||||
|
|
||||||
|
console.log(self.model.infoId); |
||||||
|
if(self.model.infoId === "add"){ |
||||||
|
callback && callback(); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Dec.HW.queryData({ |
||||||
|
name: o.aliasName |
||||||
|
}, function (res) { |
||||||
|
/*BI.each(res.tabledata.colAttr, function (index, val) { |
||||||
|
if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.int"), val.colType)) { |
||||||
|
val.colType = 2; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.str"), val.colType)) { |
||||||
|
val.colType = 12; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.bool"), val.colType)) { |
||||||
|
val.colType = 16; |
||||||
|
} else if (BI.contains(BI.Constants.getConstant("dec.hw.col.type.date"), val.colType)) { |
||||||
|
val.colType = 91; |
||||||
|
} |
||||||
|
});*/ |
||||||
|
self.model.items = BI.hwColTypeDeal(res.data.colAttr); |
||||||
|
self.model.connection = res.data.tableAttr.connection; |
||||||
|
self.model.schema = res.data.tableAttr.schema; |
||||||
|
self.model.tableName = res.data.tableAttr.tableName; |
||||||
|
BI.isFunction(callback) && callback(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
getExcelSheetNumber: function (attachId, fileName) { |
||||||
|
var self = this; |
||||||
|
Dec.HW.getExcelItmes({attachId: attachId, fileName: fileName}, function (res) { |
||||||
|
if (res.success) { |
||||||
|
self.model.result.attachId = attachId; |
||||||
|
self.model.result.fileName = fileName; |
||||||
|
self.getSheetFiled(res.data); |
||||||
|
} else { |
||||||
|
self.model.importStatus="abort"; |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
getSheetFiled: function (data) { |
||||||
|
var self = this; |
||||||
|
if (data.length == 1) {//只有一个sheet 的话 就不让选择了直接
|
||||||
|
Dec.HW.getSheetFiled({ |
||||||
|
attachId: self.model.result.attachId, |
||||||
|
sheetNo: 0, |
||||||
|
fileName: self.model.result.fileName |
||||||
|
}, function (res) { |
||||||
|
if (res.success) { |
||||||
|
self.model.result.sheetNo=0; |
||||||
|
self.model.result.titleRow=res.data[0].titleRow; |
||||||
|
self.model.excelItems = res.data; |
||||||
|
|
||||||
|
// items 匹配相同的列名
|
||||||
|
BI.each(self.model.items, function (index, item) { |
||||||
|
var sameNameItem = BI.filter(self.model.excelItems, function (i, v) { |
||||||
|
return v.text == item.colName |
||||||
|
}); |
||||||
|
if (sameNameItem.length != 0){ |
||||||
|
item.excelCol = sameNameItem[0].value; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
self.model.importStatus="finish"; |
||||||
|
} else { |
||||||
|
self.model.importStatus="abort"; |
||||||
|
BI.Msg.toast(res.msg,{level:"error"}); |
||||||
|
} |
||||||
|
}); |
||||||
|
} else { |
||||||
|
self.model.sheetItems = {show: true, items: data}; |
||||||
|
} |
||||||
|
}, |
||||||
|
getSheetFiledWithNo: function (sheetNo, callback) { |
||||||
|
var self = this; |
||||||
|
Dec.HW.getSheetFiled({ |
||||||
|
attachId: self.model.result.attachId, |
||||||
|
sheetNo: sheetNo, |
||||||
|
fileName: self.model.result.fileName |
||||||
|
}, function (res) { |
||||||
|
if (res.success) { |
||||||
|
self.model.result.sheetNo=sheetNo; |
||||||
|
self.model.result.titleRow=res.data[0].titleRow; |
||||||
|
self.model.excelItems = res.data; |
||||||
|
|
||||||
|
// items 匹配相同的列名
|
||||||
|
BI.each(self.model.items, function (index, item) { |
||||||
|
var sameNameItem = BI.filter(self.model.excelItems, function (i, v) { |
||||||
|
return v.text == item.colName |
||||||
|
}); |
||||||
|
if (sameNameItem.length != 0){ |
||||||
|
item.excelCol = sameNameItem[0].value; |
||||||
|
} |
||||||
|
}); |
||||||
|
self.model.importStatus="finish"; |
||||||
|
callback && callback(true); |
||||||
|
} else { |
||||||
|
self.model.importStatus="abort"; |
||||||
|
BI.Msg.toast(res.msg,{level:"error"}); |
||||||
|
callback && callback(false); |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
setImportStatus:function (v) { |
||||||
|
this.model.importStatus=v; |
||||||
|
}, |
||||||
|
addItems:function () { |
||||||
|
var self=this; |
||||||
|
var result=BI.map(self.model.excelItems,function (index, item) { |
||||||
|
return { |
||||||
|
id:BI.UUID(), |
||||||
|
colName:item.text, |
||||||
|
colType:"12", |
||||||
|
colLength: 255, |
||||||
|
excelCol:item.value |
||||||
|
} |
||||||
|
}); |
||||||
|
self.model.items=BI.concat(self.model.items,result); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
BI.model("dec.hw.table.info.model", Model); |
||||||
|
})(); |
@ -0,0 +1,26 @@ |
|||||||
|
;!(function (res) { |
||||||
|
Dec.HW = Dec.HW || {}; |
||||||
|
Dec.HW = $.extend(Dec.HW, { |
||||||
|
getExcelItmes: function (config, callback) { |
||||||
|
Dec.reqPost("/url/hw/excel/sheet", config, callback) |
||||||
|
}, |
||||||
|
getSheetFiled: function (config, callback) { |
||||||
|
Dec.reqPost("/url/hw/excel/filed", config, callback) |
||||||
|
}, |
||||||
|
importTableData: function (config, callback) { |
||||||
|
Dec.reqPost("/url/hw/table/import", config, callback) |
||||||
|
}, |
||||||
|
getAllUserData: function (config, callback) { |
||||||
|
Dec.reqPost("/url/excelmng/getAllUserList", config, callback) |
||||||
|
}, |
||||||
|
getAuthUserData: function (config, callback) { |
||||||
|
Dec.reqPost("/url/excelmng/getAuthUserList", config, callback) |
||||||
|
}, |
||||||
|
updateLinkAuth: function (config, callback) { |
||||||
|
Dec.reqPost("/url/excelmng/updateLinkAuth", config, callback) |
||||||
|
}, |
||||||
|
queryData: function (config, callback) { |
||||||
|
Dec.reqPost("/url/excelmng/querydata", config, callback) |
||||||
|
} |
||||||
|
}) |
||||||
|
})(); |
Loading…
Reference in new issue