Commit 26bebfcf by wangweidong

霍煤鸿骏修改

parent 7de7533e
FROM java:8
VOLUME /tmp
EXPOSE 8005
# Path to jar created by gradle build
ADD build/libs/patzn-cloud-service-lims-1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
\ No newline at end of file
ext {
configuration = [
javaVersion = JavaVersion.VERSION_1_8
]
// 仓库配置
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://repo.spring.io/release' }
maven { url 'https://repo.spring.io/milestone' }
maven { url 'http://repo.spring.io/snapshot' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'http://119.3.176.130:8081/repository/patzn-releases/' }
maven { url 'http://119.3.176.130:8081/repository/patzn-snapshots/' }
jcenter()
}
}
// 编译脚本
buildscript {
ext {
springBootVersion = "2.3.0.RELEASE"
springCloudVersion = "Hoxton.SR5"
nettyAllVersion = '4.1.43.Final'
}
// 仓库配置
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://repo.spring.io/release' }
maven { url 'https://repo.spring.io/milestone' }
maven { url 'http://repo.spring.io/snapshot' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: "java"
apply plugin: "maven"
apply plugin: "idea"
apply plugin: 'org.springframework.boot'
apply plugin: "io.spring.dependency-management"
group = "com.patzn.cloud"
version = "1.0"
description "计量检定服务"
sourceCompatibility = "${javaVersion}"
targetCompatibility = "${javaVersion}"
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
configurations {
compile.exclude group: "ch.qos.logback"
compile.exclude group: "com.amazonaws"
compile.exclude group: "org.apache.tomcat"
// 使用Undertow 替代Tomcat
compile.exclude module: "spring-boot-starter-tomcat"
compile.exclude module: "undertow-websockets-jsr"
compile.exclude module: "spring-boot-starter-logging"
compile.exclude module: "slf4j-simple"
compile.exclude module: "slf4j-log4j12"
}
// 依赖管理
dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
dependencies {
compile fileTree(dir: "libs", include: "*.jar")
// 报表依赖 Begin
compile("org.apache.commons:commons-lang3:3.5")
compile("commons-beanutils:commons-beanutils-core:1.8.3")
compile("com.itextpdf:itextpdf:5.5.13")
compile("com.google.zxing:core:3.3.3")
compile("org.codehaus.jackson:jackson-mapper-asl:1.9.13")
compile("commons-io:commons-io:2.5")
compile("commons-fileupload:commons-fileupload:1.3.3")
compile("org.antlr:antlr4-runtime:4.7.1")
compile("org.dom4j:dom4j:2.1.1")
// 报表依赖 End
compile("com.baomidou:jobs-spring-boot-starter:1.0.3.3")
compile("io.netty:netty-all:${nettyAllVersion}")
compile("com.cronutils:cron-utils:9.0.2")
compile("com.caucho:hessian:4.0.62")
compile("com.patzn.cloud:patzn-entitys:2.0")
compile("com.patzn.cloud:patzn-entity-project:2.0")
compile("com.patzn.cloud:patzn-feign-base:2.0")
compile("com.patzn.cloud:patzn-feign-lims:2.0")
compile("com.patzn.cloud:patzn-feign-project:2.0")
compile("com.patzn.cloud:patzn-service-parent:2.0")
compile("com.patzn.cloud:patzn-oss-starter:2.0")
compile("com.patzn.cloud:patzn-mq-starter:2.0")
compile("org.springframework.boot:spring-boot-starter-mail")
compile('org.springframework.boot:spring-boot-starter-freemarker')
compile("org.springframework.boot:spring-boot-starter-data-redis")
compile("com.belerweb:pinyin4j:2.5.1")
compile("com.patzn.cloud:patzn-poi-box:2.0")
compile("net.coobird:thumbnailator:0.4.8")
compile("com.google.guava:guava:25.1-jre")
compile("net.java.dev.jna:jna-platform:4.5.2")
compile("net.coobird:thumbnailator:0.4.13")
compile("net.java.dev.jna:jna:4.5.2")
compile("com.google.zxing:core:3.3.3")
compile("org.samba.jcifs:jcifs:1.2.9")
compile("com.google.zxing:javase:3.3.3")
compile("com.baomidou:dynamic-datasource-spring-boot-starter:2.5.7")
compile("com.qcloud:cos_api:5.2.4") {
exclude module: 'slf4j-log4j12'
}
compile("org.json:json:20170516")
// compile group: 'cn.afterturn',name:'easypoi-spring-boot-starter',version:'4.0.0'
// 开发环境经常自动启动导致报错
// compileOnly("org.springframework.boot:spring-boot-devtools")
/*compile("mysql:mysql-connector-java:8.0.12")*/
// 监控客户端
compile("de.codecentric:spring-boot-admin-starter-client:2.2.0")
// 编译测试
testCompile("com.patzn.cloud:patzn-test-parent:2.0")
implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
}
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
\ No newline at end of file
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
\ No newline at end of file
// 帕特智能 - 云平台计量检测服务模块
rootProject.name = 'patzn-cloud-service-hmhj'
package com.patzn.cloud.service.lims;
import com.patzn.cloud.commons.lock.EnableRedisDistributedLock;
import com.patzn.cloud.commons.spring.SpringHelper;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* LimsService 实验室管理服务
*
* @author hubin
* @since 2017-08-28
*/
@EnableAsync
@EnableCaching
@EnableSwagger2
@EnableDiscoveryClient
@EnableRedisDistributedLock
@SpringBootApplication
@EnableTransactionManagement
@EnableFeignClients(basePackages = {"com.patzn.cloud.feign"})
public class HmhjServiceApplication {
public static void main(String[] args) {
try {
SpringApplication application = new SpringApplication(HmhjServiceApplication.class);
application.setBannerMode(Banner.Mode.CONSOLE);
SpringHelper.setApplicationContext(application.run(args));
System.out.println("SoilService start!\thttp://api.dev.patzn.com:7000/hmhj/swagger-ui.html");
} catch (Throwable t) {
t.printStackTrace();
}
}
}
package com.patzn.cloud.service.lims.common;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class AsposeUtil {
protected static final Logger logger = LoggerFactory.getLogger(AsposeUtil.class);
public static File mergeWork(String name,Workbook workbook, List<Workbook> workbooksList){
if (CollectionUtils.isEmpty(workbooksList)){
return null;
}
FileOutputStream fileOutputStream=null;
FileOutputStream fileOut=null;
try {
for (Workbook book:workbooksList) {
workbook.combine(book);
}
File tempFile = File.createTempFile(name+"pre",".xlsx");
fileOut =new FileOutputStream(tempFile);
workbook.save(fileOut, SaveFormat.XLSX);
XSSFWorkbook workbookOk = new XSSFWorkbook(tempFile);
workbookOk.setActiveSheet(0);
workbookOk.removeSheetAt(workbookOk.getNumberOfSheets()-1);
File file = File.createTempFile(name,".xlsx");
fileOutputStream=new FileOutputStream(file);
workbookOk.write(fileOutputStream);
fileOut.flush();
return file;
}catch (Exception e){
logger.error("合并EXCEL失败"+e.getMessage());
e.printStackTrace();
}finally {
try {
if (null !=fileOut){
fileOut.close();
}
if (null !=fileOutputStream){
fileOutputStream.close();
}
}catch (Exception e){
}
}
return null;
}
}
package com.patzn.cloud.service.lims.common;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class ChangeExcelData {
public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException {
String path = "D:\\HHKJ\\project\\test\\excel.xlsx";
String outPath = "D:\\HHKJ\\project\\test\\excel1.xlsx";
Map<String, Object> params = new HashMap<String, Object>();
params.put("county", "阳朔");
params.put("patroltime", "2019年1月15日");
params.put("address", "具体地点");
params.put("slyz_type", "乱建");
params.put("rectify", "2019年1月15日");
params.put("rectifyrequest", "拆除乱建");
params.put("sendtime", "2019年1月15日");
new ChangeExcelData().replaceExcel(path,outPath,params);
}
public void replaceExcel(String inPath, String outPath, Map params) throws IOException, InvalidFormatException {
InputStream is = new FileInputStream(new File(inPath));
Workbook wb = WorkbookFactory.create(is);
Sheet sheet = wb.getSheetAt(0);//获取Excel的工作表sheet,下标从0开始。
int trLength = sheet.getLastRowNum();//获取Excel的行数
for (int i = 0; i < trLength; i++) {
Row row = sheet.getRow(i);//获取Excel的行,下标从0开始
if (row == null) {//若行为空,则遍历下一行
continue;
}
int minColIx = row.getFirstCellNum();
int maxColIx = row.getLastCellNum();
for (int colIx = minColIx; colIx < maxColIx; colIx++) {
Cell cell = row.getCell(colIx);//获取指定单元格,单元格从左到右下标从0开始
String runText = cell.getStringCellValue();
if (runText.equals("")){
continue;
}
System.out.println(cell);
Matcher matcher = this.matcher(runText);
if (matcher.find()) {
while ((matcher = this.matcher(runText)).find()) {
runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));
}
cell.setCellValue(runText);
}
}
}
OutputStream out = new FileOutputStream(new File(outPath));
wb.write(out);
is.close();
out.close();
}
/**
* 正则匹配字符串
* @param str
* @return
*/
private Matcher matcher(String str) {
Pattern pattern = Pattern.compile("\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
return matcher;
}
}
package com.patzn.cloud.service.lims.common;
import com.aspose.cells.License;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
/**
* @version 1.0 说明 :
*/
public class Excel2Pdf {
public static boolean getLicense() {
boolean result = false;
try {
InputStream is = Word2Pdf.class.getClassLoader()
.getResourceAsStream("classpath:statis/license.xml");
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void excel2pdf(String sourceFilePath, String desFilePath) {
// 验证License 若不验证则转化出的pdf文档会有水印产生
if (!getLicense()) {
return;
}
try {
// 输出路径
File pdfFile = new File(desFilePath);
// 原始excel路径
Workbook wb = new Workbook(sourceFilePath);
FileOutputStream fileOS = new FileOutputStream(pdfFile);
wb.save(fileOS, SaveFormat.PDF);
fileOS.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.patzn.cloud.service.lims.common;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.poibox.xwpf.HSSFWorkbookUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ExcelReader {
protected static final Logger logger = LoggerFactory.getLogger(ExcelReader.class);
public static <T> Collection<T> readSheetAtOne(Class<T> type, MultipartFile file, List<String> listTemplate, List<String> listColumn) {
InputStream io = null;
XSSFWorkbook workbook = null;
try {
io=file.getInputStream();
workbook = new XSSFWorkbook(io);
}catch (Exception e){
logger.error("ExcelReader error :"+e.getMessage());
e.printStackTrace();
}
XSSFSheet sheet0= workbook.getSheetAt(0);
XSSFRow row0= sheet0.getRow(0);
int cellNum= row0.getLastCellNum();
List<String> listTitle=new ArrayList<>();
for (int i = 0; i < cellNum; i++) {
XSSFCell cell= row0.getCell(i);
String value = HSSFWorkbookUtil.getJavaValue(cell).toString();
listTitle.add(value);
}
RestAssert.fail(listTitle.size()!=listTemplate.size(),"请下载模板按照模板填写数据后导入");
int size = listTemplate.size();
for (int i = 0; i < size; i++) {
String c1 = listTitle.get(i);
String c2 = listTemplate.get(i);
RestAssert.fail(!c2.equals(c1),"请下载模板按照模板填写数据后导入");
}
int rowNum = sheet0.getLastRowNum();
Collection<T> etos = new ArrayList<>();
try {
for (int i = 1; i <= rowNum ; i++) {
T eto = type.newInstance();
XSSFRow row = sheet0.getRow(i);
for (int j = 0; j < size; j++) {
Field f = eto.getClass().getDeclaredField(listColumn.get(j));
f.setAccessible(true);
f.set(eto, HSSFWorkbookUtil.getJavaValue(row.getCell(j)).toString());
}
etos.add(eto);
}
}catch (Exception e){
RestAssert.fail("导入失败");
}finally {
try {
io.close();
workbook.close();
}catch (Exception e){
e.printStackTrace();
}
}
return etos;
}
}
package com.patzn.cloud.service.lims.common;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.math.BigInteger;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
public class HSSFWorkbookUtil {
public static HSSFWorkbook replaceModel(Map item, HSSFWorkbook wb) {
try {
HSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while(rows.hasNext()){
HSSFRow row = (HSSFRow) rows.next();
if(row!=null) {
int num = row.getLastCellNum();
for(int i=0;i<num;i++) {
HSSFCell cell= row.getCell(i);
if(cell!=null) {
cell.setCellType(CellType.STRING);
}
if(cell==null || cell.getStringCellValue()==null) {
continue;
}
String value= cell.getStringCellValue();
if(!"".equals(value)) {
Set<String> keySet = item.keySet();
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String text = it.next();
if(value.equalsIgnoreCase(text)) {
cell.setCellValue((String)item.get(text));
break;
}
}
} else {
cell.setCellValue("");
}
}
}
}
// 输出文件
} catch (Exception e) {
e.printStackTrace();
}
return wb;
}
public static XSSFWorkbook replaceModel(Map item, XSSFWorkbook wb) {
try {
XSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while(rows.hasNext()){
XSSFRow row = (XSSFRow) rows.next();
if(row!=null) {
int num = row.getLastCellNum();
for(int i=0;i<num;i++) {
XSSFCell cell= row.getCell(i);
if(cell!=null) {
cell.setCellType(CellType.STRING);
}
if(cell==null || cell.getStringCellValue()==null) {
continue;
}
String value= cell.getStringCellValue();
if(!"".equals(value)) {
Set<String> keySet = item.keySet();
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String text = it.next();
if(value.equalsIgnoreCase(text)) {
cell.setCellValue((String)item.get(text));
break;
}
}
} else {
cell.setCellValue("");
}
}
}
}
// 输出文件
} catch (Exception e) {
e.printStackTrace();
}
return wb;
}
public static String getRawValue(XSSFCell cell) {
if (null == cell) {
return "";
}
return cell.getRawValue();
}
public static Object getJavaValue(XSSFCell cell) {
if (null==cell){
return "";
}
Object o = null;
CellType cellType = cell.getCellType();
if (cellType.equals(CellType.BLANK)){
o = "";
}else if (cellType.equals(CellType.BOOLEAN)){
o = cell.getBooleanCellValue();
}else if (cellType.equals(CellType.ERROR)){
o = "";
}else if (cellType.equals(CellType.NUMERIC)){
o = getValueOfNumericCell(cell);
}else if (cellType.equals(CellType.FORMULA)){
try {
o = getValueOfNumericCell(cell);
} catch (IllegalStateException e) {
try {
o = cell.getRichStringCellValue().toString();
} catch (IllegalStateException e2) {
o = cell.getErrorCellString();
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
o = cell.getRichStringCellValue().getString();
}
return o;
}
public static Object getJavaCellValue(Cell cell) {
Object o = null;
CellType cellType = cell.getCellTypeEnum();
if (cellType.equals(CellType.BLANK)){
o = "";
}else if (cellType.equals(CellType.BOOLEAN)){
o = cell.getBooleanCellValue();
}else if (cellType.equals(CellType.ERROR)){
o = "";
}else if (cellType.equals(CellType.NUMERIC)){
o = cell.getNumericCellValue();
}else if (cellType.equals(CellType.FORMULA)){
try {
o = cell.getStringCellValue();
} catch (IllegalStateException e) {
try {
o = cell.getRichStringCellValue().toString();
} catch (IllegalStateException e2) {
o ="";
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
o = cell.getRichStringCellValue().getString();
}
return o;
}
public static Object getCellValue(Cell cell) {
Object o = null;
CellType cellType = cell.getCellType();
if (cellType.equals(CellType.BLANK)){
o = "";
}else if (cellType.equals(CellType.BOOLEAN)){
o = cell.getBooleanCellValue();
}else if (cellType.equals(CellType.ERROR)){
o = "";
}else if (cellType.equals(CellType.NUMERIC)){
DecimalFormat df = new DecimalFormat("0");
o = df.format(cell.getNumericCellValue());
}else if (cellType.equals(CellType.FORMULA)){
try {
o = cell.getStringCellValue();
} catch (IllegalStateException e) {
try {
o = cell.getRichStringCellValue().toString();
} catch (IllegalStateException e2) {
o ="";
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
o = cell.getRichStringCellValue().getString();
}
return o;
}
// 获取数字类型的cell值
private static Object getValueOfNumericCell(XSSFCell cell) {
Boolean isDate = DateUtil.isCellDateFormatted(cell);
Double d = cell.getNumericCellValue();
Object o = null;
if (isDate) {
o = DateFormat.getDateTimeInstance()
.format(cell.getDateCellValue());
} else {
o = getRealStringValueOfDouble(d);
}
return o;
}
// 处理科学计数法与普通计数法的字符串显示,尽最大努力保持精度
private static String getRealStringValueOfDouble(Double d) {
String doubleStr = d.toString();
boolean b = doubleStr.contains("E");
int indexOfPoint = doubleStr.indexOf('.');
if (b) {
int indexOfE = doubleStr.indexOf('E');
// 小数部分
BigInteger xs = new BigInteger(doubleStr.substring(indexOfPoint
+ BigInteger.ONE.intValue(), indexOfE));
// 指数
int pow = Integer.valueOf(doubleStr.substring(indexOfE
+ BigInteger.ONE.intValue()));
int xsLen;
if(xs.compareTo(new BigInteger("0"))==0){
//小数部分为0要单独处理,不然最后会多出一个0
xsLen = 0;
}else{
xsLen = xs.toByteArray().length;
}
int scale = xsLen - pow > 0 ? xsLen - pow : 0;
doubleStr = String.format("%." + scale + "f", d);
} else {
Pattern p = Pattern.compile(".0$");
java.util.regex.Matcher m = p.matcher(doubleStr);
if (m.find()) {
doubleStr = doubleStr.replace(".0", "");
}
}
return doubleStr;
}
/**
* 图片插入到excel固定的cell
* @throws IOException
* @throws FileNotFoundException
*/
public static XSSFWorkbook insertImage( XSSFWorkbook wb,Map<String,File> imageFileMap,boolean resize) throws FileNotFoundException, IOException {
XSSFSheet sheet = wb.getSheetAt(0);
//数据行数
int n = sheet.getLastRowNum();
Map<String, Integer> nameIndex = addPicture2Workbook(wb,imageFileMap);
CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
for (int i = 0; i < n; i++) {
XSSFRow xssfRow=sheet.getRow(i);
if (null!=xssfRow){
int column0=xssfRow.getFirstCellNum();
int column1=xssfRow.getLastCellNum();
for (int j=column0 ;j<column1;j++) {
XSSFCell cell= xssfRow.getCell(j);
if (null!=cell){
String qrcodeName=cell.getStringCellValue();
if (nameIndex.containsKey(qrcodeName)) {
anchor.setCol1(j);
anchor.setRow1(i);
System.out.println("setCol1:"+j);
System.out.println("setRow1:"+i);
Picture pict = drawing.createPicture(anchor, nameIndex.get(qrcodeName));
// 计算单元格的长宽
if (resize){
// 指定我想要的长宽
double standardWidth = 600;
double standardHeight = 830;
double w = sheet.getColumnWidth(cell.getColumnIndex());
double h = cell.getRow().getHeight();
double cellWidth = sheet.getColumnWidthInPixels(cell.getColumnIndex());
double cellHeight = cell.getRow().getHeightInPoints()/72*96;
// 计算需要的长宽比例的系数
double a = standardWidth / cellWidth;
double b = standardHeight / cellHeight;
pict.resize(a,b);
}else{
pict.resize();
}
}
}
}
}
}
return wb;
}
public static XSSFWorkbook insertImageByIO( XSSFWorkbook wb,Map<String,InputStream> imageFileMap,boolean resize) throws FileNotFoundException, IOException {
XSSFSheet sheet = wb.getSheetAt(0);
//数据行数
int n = sheet.getLastRowNum();
Map<String, Integer> nameIndex = addPicture2WorkbookByIO(wb,imageFileMap);
CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
for (int i = 0; i < n; i++) {
XSSFRow xssfRow=sheet.getRow(i);
if (null!=xssfRow){
int column0=xssfRow.getFirstCellNum();
int column1=xssfRow.getLastCellNum();
for (int j=column0 ;j<column1;j++) {
XSSFCell cell= xssfRow.getCell(j);
if (null!=cell){
String qrcodeName=HSSFWorkbookUtil.getJavaValue(cell).toString();
System.out.println(qrcodeName);
if (nameIndex.containsKey(qrcodeName)) {
anchor.setCol1(j);
anchor.setRow1(i);
System.out.println("setCol1:"+j);
System.out.println("setRow1:"+i);
Picture pict = drawing.createPicture(anchor, nameIndex.get(qrcodeName));
// 计算单元格的长宽
cell.setCellValue("");
if (resize){
// 指定我想要的长宽
double standardWidth = 600;
double standardHeight = 830;
double w = sheet.getColumnWidth(cell.getColumnIndex());
double h = cell.getRow().getHeight();
double cellWidth = sheet.getColumnWidthInPixels(cell.getColumnIndex());
double cellHeight = cell.getRow().getHeightInPoints()/72*96;
// 计算需要的长宽比例的系数
double a = standardWidth / cellWidth;
double b = standardHeight / cellHeight;
pict.resize(a,b);
}else{
pict.resize();
}
}
}
}
}
}
return wb;
}
public static XSSFWorkbook insertImageByIO( XSSFWorkbook wb,Map<String,InputStream> imageFileMap,boolean resize,int index) throws FileNotFoundException, IOException {
XSSFSheet sheet = wb.getSheetAt(index);
//数据行数
int n = sheet.getLastRowNum();
Map<String, Integer> nameIndex = addPicture2WorkbookByIO(wb,imageFileMap);
CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
for (int i = 0; i < n; i++) {
XSSFRow xssfRow=sheet.getRow(i);
if (null!=xssfRow){
int column0=xssfRow.getFirstCellNum();
int column1=xssfRow.getLastCellNum();
for (int j=column0 ;j<column1;j++) {
XSSFCell cell= xssfRow.getCell(j);
if (null!=cell){
String qrcodeName=HSSFWorkbookUtil.getJavaValue(cell).toString();
System.out.println(qrcodeName);
if (nameIndex.containsKey(qrcodeName)) {
anchor.setCol1(j);
anchor.setRow1(i);
System.out.println("setCol1:"+j);
System.out.println("setRow1:"+i);
Picture pict = drawing.createPicture(anchor, nameIndex.get(qrcodeName));
// 计算单元格的长宽
cell.setCellValue("");
if (resize){
// 指定我想要的长宽
double standardWidth = 600;
double standardHeight = 830;
double w = sheet.getColumnWidth(cell.getColumnIndex());
double h = cell.getRow().getHeight();
double cellWidth = sheet.getColumnWidthInPixels(cell.getColumnIndex());
double cellHeight = cell.getRow().getHeightInPoints()/72*96;
// 计算需要的长宽比例的系数
double a = standardWidth / cellWidth;
double b = standardHeight / cellHeight;
pict.resize(a,b);
}else{
pict.resize();
}
}
}
}
}
}
return wb;
}
private static Map<String, Integer> addPicture2Workbook(XSSFWorkbook wb, Map<String, File> qr) throws FileNotFoundException, IOException {
Map<String, Integer> indx = Maps.newHashMap();
for (Map.Entry<String, File> kv : qr.entrySet()) {
indx.put(kv.getKey(), wb.addPicture(new FileInputStream(kv.getValue()), XSSFWorkbook.PICTURE_TYPE_PNG));
}
System.out.println("pictures : " + indx.size());
return indx;
}
private static Map<String, Integer> addPicture2WorkbookByIO(XSSFWorkbook wb, Map<String, InputStream> qr) throws FileNotFoundException, IOException {
Map<String, Integer> indx = Maps.newHashMap();
for (Map.Entry<String, InputStream> kv : qr.entrySet()) {
indx.put(kv.getKey(), wb.addPicture(kv.getValue(), XSSFWorkbook.PICTURE_TYPE_PNG));
}
System.out.println("pictures : " + indx.size());
return indx;
}
public static void insertImageByRowColFile(XSSFWorkbook wb ,XSSFSheet sheet, int row, int col, File file) {
XSSFRow xssfRow=sheet.getRow(row);
if (null!=xssfRow){
XSSFCell cell= xssfRow.getCell(col);
if (null!=cell){
CreationHelper helper = wb.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(row);
anchor.setRow1(col);
try {
Picture pict = drawing.createPicture(anchor, wb.addPicture(new FileInputStream(file), XSSFWorkbook.PICTURE_TYPE_PNG));
// 计算单元格的长宽
pict.resize();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
public static XSSFWorkbook replaceModel(Map item, XSSFWorkbook wb,int index) {
try {
XSSFSheet sheet = wb.getSheetAt(index);
Iterator rows = sheet.rowIterator();
while(rows.hasNext()){
XSSFRow row = (XSSFRow) rows.next();
if(row!=null) {
int num = row.getLastCellNum();
for(int i=0;i<num;i++) {
XSSFCell cell= row.getCell(i);
if(cell==null || StringUtils.isBlank(getJavaValue(cell).toString())) {
continue;
}
String value= getJavaValue(cell).toString();
if(!"".equals(value)) {
Set<String> keySet = item.keySet();
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String text = it.next();
if (null == text){
text = "";
}
if(value.contains(text)) {
String txt = value.replace(text,(String)item.get(text));
cell.setCellValue(txt);
break;
}
}
} else {
cell.setCellValue("");
}
}
}
}
// 输出文件
} catch (Exception e) {
e.printStackTrace();
}
return wb;
}
public static XSSFWorkbook replaceModel(Map item, XSSFWorkbook wb,XSSFSheet sheet) {
try {
Iterator rows = sheet.rowIterator();
while(rows.hasNext()){
XSSFRow row = (XSSFRow) rows.next();
if(row!=null) {
int num = row.getLastCellNum();
for(int i=0;i<num;i++) {
XSSFCell cell= row.getCell(i);
if(cell==null || StringUtils.isBlank(getJavaValue(cell).toString())) {
continue;
}
String value= getJavaValue(cell).toString();
if(!"".equals(value)) {
Set<String> keySet = item.keySet();
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String text = it.next();
if(value.contains(text)) {
String txt = value.replace(text,(String)item.get(text));
cell.setCellValue(txt);
break;
}
}
} else {
cell.setCellValue("");
}
}
}
}
// 输出文件
} catch (Exception e) {
e.printStackTrace();
}
return wb;
}
public static XSSFWorkbook getWorkbookByIO(InputStream io) {
try {
XSSFWorkbook xssfWorkbook= new XSSFWorkbook(io);
io.close();
return xssfWorkbook;
}catch (Exception e){
e.printStackTrace();
return null;
}finally {
try {
io.close();
}catch (Exception e){
}
}
}
}
package com.patzn.cloud.service.lims.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
public class LabreOfficeUtil {
private static final Logger logger = LoggerFactory.getLogger(LabreOfficeUtil.class);
//
//
//
//
//
//
//
// public static synchronized File libreOffice2PDF(String url,File inputfile) {
// logger.error("LabreOfficeUtil开始转化PDF");
// String fileName = inputfile.getName().replace(".xlsx","");
// File outputfile=null;
// String LibreOffice_HOME = url;
// DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
// OfficeManager officeManager=null;
// logger.error("fileName"+fileName);
// try {
//
//
// outputfile= File.createTempFile(fileName,".pdf");
//
//
// logger.error("outputfile"+outputfile.getName());
//
//
// // libreOffice的安装目录
// configuration.setOfficeHome(new File(LibreOffice_HOME));
// // 端口号
// configuration.setPortNumber(8100);
// //configuration.setPortNumbers(ports);
// logger.error("configuration.setPortNumber(8100);F");
// configuration.setTaskExecutionTimeout(1000 * 60 * 25L);
//// 设置任务执行超时为10分钟
// configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
//// 设置任务队列超时为24小时
// officeManager = configuration.buildOfficeManager();
// officeManager.start();
// OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
// converter.getFormatRegistry();
// converter.convert(inputfile, outputfile);
// } catch (Exception e) {
// logger.error("pdf转化失败"+e.getMessage());
// e.printStackTrace();
// } finally {
// officeManager.stop();
// }
//
// return outputfile;
//
//
//
// }
public static void main(String[] args) {
convertOffice2PDF("D:/patzn-lims/libreoffice6.1/libreoffice6.1",new File("D:/icps/aaa.xlsx"));
}
public static synchronized File convertOffice2PDF(String url,File inputFile){
long start = System.currentTimeMillis();
boolean flag;
String parent= inputFile.getParent();
String pdfFile = parent+"/"+(inputFile.getName().replace(".xlsx",".pdf"));
// String osName = System.getProperty("os.name");
// if (osName.contains("Windows")) {
// }else {
// command = "libreoffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
// }
String osName = System.getProperty("os.name");
String command="";
if(osName.contains("win")||osName.contains("Win")){
command = "cmd /c soffice --headless --invisible --convert-to pdf " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command,url);
}else{
command = "libreoffice6.2 --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command);
}
long end = System.currentTimeMillis();
logger.debug("用时:{} ms", end - start);
if (true){
return new File(pdfFile);
}
return null;
}
/**
* 执行command指令
* @param command
* @return
*/
public static boolean executeLibreOfficeCommand(String command,String url) {
logger.info("开始进行转化.......");
Process process;// Process可以控制该子进程的执行或获取该子进程的信息
try {
logger.debug("convertOffice2PDF cmd : {}", command);
process = Runtime.getRuntime().exec(command,null,new File(url+"/program"));// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
// 下面两个可以获取输入输出流
// InputStream errorStream = process.getErrorStream();
// InputStream inputStream = process.getInputStream();
} catch (IOException e) {
logger.error(" convertOffice2PDF {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
// 第二种接受返回值的方法
int i = process.exitValue(); // 接收执行完毕的返回值
logger.debug("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException convertOffice2PDF {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
} else {
logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
}
process.destroy(); // 销毁子进程
logger.info("转化结束.......");
return true;
}
public static boolean executeLibreOfficeCommand(String command) {
logger.info("开始进行转化.......");
Process process;// Process可以控制该子进程的执行或获取该子进程的信息
try {
logger.debug("convertOffice2PDF cmd : {}", command);
process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
// 下面两个可以获取输入输出流
// InputStream errorStream = process.getErrorStream();
// InputStream inputStream = process.getInputStream();
} catch (IOException e) {
logger.error(" convertOffice2PDF {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
// 第二种接受返回值的方法
int i = process.exitValue(); // 接收执行完毕的返回值
logger.debug("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException convertOffice2PDF {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
} else {
logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
}
process.destroy(); // 销毁子进程
logger.info("转化结束.......");
return true;
}
}
package com.patzn.cloud.service.lims.common;
public class LongHandleUtils {
public static boolean isYes(Integer num){
return null!=num&&num.equals(1);
}
}
package com.patzn.cloud.service.lims.common;
import java.util.*;
public final class MsgUrlDataUtils {
public static final String REVIEW_URL = "/entrust/entrust_review";
}
package com.patzn.cloud.service.lims.common;
import com.patzn.cloud.commons.toolkit.StringHandleUtils;
import java.util.Comparator;
public class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
if (StringHandleUtils.isNumeric(o1)&&StringHandleUtils.isNumeric(o2)) {
return Integer.parseInt(o1)-Integer.parseInt(o2);
} else{
return o1.compareTo(o2);
}
}
@Override
public boolean equals(Object obj) {
return false;
}
}
package com.patzn.cloud.service.lims.common;
import java.time.Instant;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.FastDateFormat;
/**
* 订单编号策略
*
* @project common-utils
* @fileName ODDGenerator.java
* @Description
* @author light-zhang
* @date 2018年5月11日
* @version 1.0.0
*/
public abstract class ODDGenerator {
private static final FastDateFormat pattern = FastDateFormat.getInstance("yyyyMMddHHmmss");
private static final AtomicInteger atomicInteger = new AtomicInteger(1);
private static ThreadLocal<StringBuilder> threadLocal = new ThreadLocal<StringBuilder>();
/**
* 【长码生成策略】
*
* @时间20180511231532
* @二位随机数
* @lock的hash-code编码
* @param lock 生成的UUID32位参数
* @return 长码机制
*/
public static String getC(String lock) {
StringBuilder builder = new StringBuilder(pattern.format(Instant.now().toEpochMilli()));// 取系统当前时间作为订单号前半部分
builder.append(Math.abs(lock.hashCode()));// HASH-CODE
builder.append(atomicInteger.getAndIncrement());// 自增顺序
threadLocal.set(builder);
return threadLocal.get().toString();
}
/**
* 【短码生成策略】
*
* @param lock
* @return
*/
public static String getD(String lock) {
StringBuilder builder = new StringBuilder(ThreadLocalRandom.current().nextInt(0,999));// 随机数
builder.append(Math.abs(lock.hashCode()));// HASH-CODE
builder.append(atomicInteger.getAndIncrement());// 自增顺序
threadLocal.set(builder);
return threadLocal.get().toString();
}
/**
* 1000个线程并发测试
*
* @param args
* @throws InterruptedException
* @throws ExecutionException
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
Set<String> set = new HashSet<String>();
FutureTask<String> task = null;
long startTime = System.currentTimeMillis();
for (int i = 0; i <1; i++) {
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
// System.out.println("当前线程:>>>>> ".concat(Thread.currentThread().getName()));
// return getC(StringUtils.replace(UUID.randomUUID().toString(), "-", ""));
return getD(StringUtils.replace(UUID.randomUUID().toString(), "-", ""));
}
};
task = new FutureTask<String>(callable);
new Thread(task).start();
//System.out.println(task.get());
set.add(task.get());
}
System.out.println("总共耗时:" + ((System.currentTimeMillis() - startTime)) + "ms");
System.out.println("*************** " + set.size());
}
}
\ No newline at end of file
package com.patzn.cloud.service.lims.common;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class OrderNumUtil {
public final static Map<String, Integer> psdMap= new HashMap<>();
static {
psdMap.put("00",5);
psdMap.put("01",9);
psdMap.put("02",0);
psdMap.put("03",8);
psdMap.put("04",1);
psdMap.put("05",7);
psdMap.put("06",2);
psdMap.put("07",6);
psdMap.put("08",4);
psdMap.put("09",3);
psdMap.put("10",3);
psdMap.put("11",4);
psdMap.put("12",6);
psdMap.put("13",2);
psdMap.put("14",7);
psdMap.put("15",7);
psdMap.put("16",8);
psdMap.put("17",0);
psdMap.put("18",9);
psdMap.put("19",5);
psdMap.put("20",1);
psdMap.put("21",3);
psdMap.put("22",5);
psdMap.put("23",7);
psdMap.put("24",9);
psdMap.put("25",2);
psdMap.put("26",4);
psdMap.put("27",6);
psdMap.put("28",8);
psdMap.put("29",0);
psdMap.put("30",0);
psdMap.put("31",8);
psdMap.put("32",6);
psdMap.put("33",4);
psdMap.put("34",2);
psdMap.put("35",9);
psdMap.put("36",7);
psdMap.put("37",5);
psdMap.put("38",3);
psdMap.put("39",1);
psdMap.put("40",1);
psdMap.put("41",9);
psdMap.put("42",2);
psdMap.put("43",8);
psdMap.put("44",3);
psdMap.put("45",7);
psdMap.put("46",4);
psdMap.put("47",6);
psdMap.put("48",5);
psdMap.put("49",0);
psdMap.put("50",0);
psdMap.put("51",5);
psdMap.put("52",6);
psdMap.put("53",4);
psdMap.put("54",7);
psdMap.put("55",3);
psdMap.put("56",8);
psdMap.put("57",2);
psdMap.put("58",9);
psdMap.put("59",1);
psdMap.put("60",9);
psdMap.put("61",8);
psdMap.put("62",7);
psdMap.put("63",6);
psdMap.put("64",5);
psdMap.put("65",0);
psdMap.put("66",1);
psdMap.put("67",2);
psdMap.put("68",3);
psdMap.put("69",4);
psdMap.put("70",4);
psdMap.put("71",3);
psdMap.put("72",2);
psdMap.put("73",1);
psdMap.put("74",0);
psdMap.put("75",5);
psdMap.put("76",6);
psdMap.put("77",7);
psdMap.put("78",8);
psdMap.put("79",9);
}
public static String makePsd(String num) {
Map<Integer, Integer> indexNumMap= new HashMap<>();
int length = num.length();
for (int i=0;i<length;i++){
String indexNum= String.valueOf(num.charAt(i));
indexNumMap.put(i, Integer.parseInt(indexNum));
}
StringBuffer buffer = new StringBuffer();
for (Map.Entry<Integer, Integer> e:indexNumMap.entrySet()) {
int index = e.getKey();
int value = e.getValue();
String numKey = index+""+value;
numKey.intern();
Integer valueOk= psdMap.get(numKey);
if (null == valueOk){
valueOk= value;
}
buffer.append(valueOk);
}
return buffer.toString();
}
public static String getPsdNum(String num) {
Map<String, Integer> jiemi = new HashMap<>();
for (Map.Entry<String, Integer> e:psdMap.entrySet()) {
String index = e.getKey();
String first= String.valueOf(index.charAt(0)) ;
String next= String.valueOf(index.charAt(1)) ;
int firstNum = Integer.parseInt(first);
int nextNum = Integer.parseInt(next);
int trueNum = e.getValue();
jiemi.put(firstNum+"---"+trueNum,nextNum);
}
StringBuffer buffer = new StringBuffer();
int length = num.length();
for (int i=0;i<length;i++){
String indexNum= String.valueOf(num.charAt(i));
String key = i+"---"+indexNum;
key.intern();
Integer okValue= jiemi.get(key);
if (null == okValue){
okValue = Integer.parseInt(indexNum);
}
buffer.append(okValue);
}
return buffer.toString();
}
public static String getOrderNum(String code){
SimpleDateFormat sd = new SimpleDateFormat("yyMMddHHmmss");
return "NO"+sd.format(new Date())+""+makePsd(code);
}
public static void main(String[] args) {
System.out.println(getOrderNum("1234"));
System.out.println(getPsdNum("67509271099672"));
}
}
package com.patzn.cloud.service.lims.common;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ooxml.POIXMLDocument;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.BodyElementType;
import org.apache.poi.xwpf.usermodel.Borders;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TextAlignment;
import org.apache.poi.xwpf.usermodel.VerticalAlign;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRelation;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBackground;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTColor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTEm;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHighlight;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTMarkupRange;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageBorders;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageSz;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTParaRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSignedTwipsMeasure;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGrid;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGridCol;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextScale;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STEm;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHeightRule;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STPageOrientation;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
public class PoiUtil2007 {
// 替换 复制 表格 段落
/*------------------------------------Word 插入书签--------------------------------------------------- */
/**
* @Description: 添加书签
*/
public static void addParagraphContentBookmarkBasicStyle(XWPFParagraph p,
String content, BigInteger markId, String bookMarkName,
boolean isInsert, boolean isNewLine, String fontFamily,
String fontSize, String colorVal, boolean isBlod,
boolean isUnderLine, String underLineColor,
STUnderline.Enum underStyle, boolean isItalic, boolean isStrike) {
CTBookmark bookStart = p.getCTP().addNewBookmarkStart();
bookStart.setId(markId);
bookStart.setName(bookMarkName);
XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);
setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);
setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,
underLineColor, underStyle, isItalic, isStrike, false, false,
false, false, false, false, false, null, false, null, false,
null, null, null, 0, 0, 0);
CTMarkupRange bookEnd = p.getCTP().addNewBookmarkEnd();
bookEnd.setId(markId);
}
/* */
/**
* @Description: 添加书签
*/
public static void addParagraphContentBookmark(XWPFParagraph p, String content,
BigInteger markId, String bookMarkName, boolean isInsert,
boolean isNewLine, String fontFamily, String fontSize,
String colorVal, boolean isBlod, boolean isUnderLine,
String underLineColor, STUnderline.Enum underStyle,
boolean isItalic, boolean isStrike, boolean isDStrike,
boolean isShadow, boolean isVanish, boolean isEmboss,
boolean isImprint, boolean isOutline, boolean isEm,
STEm.Enum emType, boolean isHightLight,
STHighlightColor.Enum hightStyle, boolean isShd,
STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign,
int position, int spacingValue, int indent) {
CTBookmark bookStart = p.getCTP().addNewBookmarkStart();
bookStart.setId(markId);
bookStart.setName(bookMarkName);
XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);
setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);
setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,
underLineColor, underStyle, isItalic, isStrike, isDStrike,
isShadow, isVanish, isEmboss, isImprint, isOutline, isEm,
emType, isHightLight, hightStyle, isShd, shdStyle, shdColor,
verticalAlign, position, spacingValue, indent);
CTMarkupRange bookEnd = p.getCTP().addNewBookmarkEnd();
bookEnd.setId(markId);
}
/*------------------------------------Word 插入超链接--------------------------------------------------- */
/**
* @Description: 默认的超链接样式
*/
public static void addParagraphTextHyperlinkBasicStyle(XWPFParagraph paragraph,
String url, String text, String fontFamily, String fontSize,
String colorVal, boolean isBlod, boolean isItalic, boolean isStrike) {
addParagraphTextHyperlink(paragraph, url, text, fontFamily, fontSize,
colorVal, isBlod, true, "0000FF", STUnderline.SINGLE, isItalic,
isStrike, false, false, false, false, false, false, false,
null, false, null, false, null, null, null, 0, 0, 0);
}
/* */
/**
* @Description: 设置超链接样式
*/
public static void addParagraphTextHyperlink(XWPFParagraph paragraph, String url,
String text, String fontFamily, String fontSize, String colorVal,
boolean isBlod, boolean isUnderLine, String underLineColor,
STUnderline.Enum underStyle, boolean isItalic, boolean isStrike,
boolean isDStrike, boolean isShadow, boolean isVanish,
boolean isEmboss, boolean isImprint, boolean isOutline,
boolean isEm, STEm.Enum emType, boolean isHightLight,
STHighlightColor.Enum hightStyle, boolean isShd,
STShd.Enum shdStyle, String shdColor,
STVerticalAlignRun.Enum verticalAlign, int position,
int spacingValue, int indent) {
// Add the link as External relationship
String id = paragraph
.getDocument()
.getPackagePart()
.addExternalRelationship(url,
XWPFRelation.HYPERLINK.getRelation()).getId();
// Append the link and bind it to the relationship
CTHyperlink cLink = paragraph.getCTP().addNewHyperlink();
cLink.setId(id);
// Create the linked text
CTText ctText = CTText.Factory.newInstance();
ctText.setStringValue(text);
CTR ctr = CTR.Factory.newInstance();
CTRPr rpr = ctr.addNewRPr();
if (StringUtils.isNotBlank(fontFamily)) {
// 设置字体
CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr
.addNewRFonts();
fonts.setAscii(fontFamily);
fonts.setEastAsia(fontFamily);
fonts.setHAnsi(fontFamily);
}
if (StringUtils.isNotBlank(fontSize)) {
// 设置字体大小
CTHpsMeasure sz = rpr.isSetSz() ? rpr.getSz() : rpr.addNewSz();
sz.setVal(new BigInteger(fontSize));
CTHpsMeasure szCs = rpr.isSetSzCs() ? rpr.getSzCs() : rpr
.addNewSzCs();
szCs.setVal(new BigInteger(fontSize));
}
// 设置超链接样式
// 字体颜色
if (StringUtils.isNotBlank(colorVal)) {
CTColor color = CTColor.Factory.newInstance();
color.setVal(colorVal);
rpr.setColor(color);
}
// 加粗
if (isBlod) {
CTOnOff bCtOnOff = rpr.addNewB();
bCtOnOff.setVal(STOnOff.TRUE);
}
// 下划线
if (isUnderLine) {
CTUnderline udLine = rpr.addNewU();
udLine.setVal(underStyle);
udLine.setColor(underLineColor);
}
// 倾斜
if (isItalic) {
CTOnOff iCtOnOff = rpr.addNewI();
iCtOnOff.setVal(STOnOff.TRUE);
}
// 删除线
if (isStrike) {
CTOnOff sCtOnOff = rpr.addNewStrike();
sCtOnOff.setVal(STOnOff.TRUE);
}
// 双删除线
if (isDStrike) {
CTOnOff dsCtOnOff = rpr.addNewDstrike();
dsCtOnOff.setVal(STOnOff.TRUE);
}
// 阴影
if (isShadow) {
CTOnOff shadowCtOnOff = rpr.addNewShadow();
shadowCtOnOff.setVal(STOnOff.TRUE);
}
// 隐藏
if (isVanish) {
CTOnOff vanishCtOnOff = rpr.addNewVanish();
vanishCtOnOff.setVal(STOnOff.TRUE);
}
// 阳文
if (isEmboss) {
CTOnOff embossCtOnOff = rpr.addNewEmboss();
embossCtOnOff.setVal(STOnOff.TRUE);
}
// 阴文
if (isImprint) {
CTOnOff isImprintCtOnOff = rpr.addNewImprint();
isImprintCtOnOff.setVal(STOnOff.TRUE);
}
// 空心
if (isOutline) {
CTOnOff isOutlineCtOnOff = rpr.addNewOutline();
isOutlineCtOnOff.setVal(STOnOff.TRUE);
}
// 着重号
if (isEm) {
CTEm em = rpr.addNewEm();
em.setVal(emType);
}
// 突出显示文本
if (isHightLight) {
if (hightStyle != null) {
CTHighlight hightLight = rpr.addNewHighlight();
hightLight.setVal(hightStyle);
}
}
if (isShd) {
// 设置底纹
CTShd shd = rpr.addNewShd();
if (shdStyle != null) {
shd.setVal(shdStyle);
}
if (shdColor != null) {
shd.setColor(shdColor);
}
}
// 上标下标
if (verticalAlign != null) {
rpr.addNewVertAlign().setVal(verticalAlign);
}
// 设置文本位置
rpr.addNewPosition().setVal(new BigInteger(String.valueOf(position)));
if (spacingValue != 0) {
// 设置字符间距信息
CTSignedTwipsMeasure ctSTwipsMeasure = rpr.addNewSpacing();
ctSTwipsMeasure
.setVal(new BigInteger(String.valueOf(spacingValue)));
}
// 设置字符间距缩进
if (indent > 0) {
CTTextScale paramCTTextScale = rpr.addNewW();
paramCTTextScale.setVal(indent);
}
ctr.setTArray(new CTText[]{ctText});
cLink.setRArray(new CTR[]{ctr});
}
/*------------------------------------Word 页眉页脚相关--------------------------------------------------- */
/**
* @Description: 页脚:显示页码信息
*/
public static void simpleNumberFooter(XWPFDocument document) throws Exception {
CTP ctp = CTP.Factory.newInstance();
XWPFParagraph codePara = new XWPFParagraph(ctp, document);
XWPFRun r1 = codePara.createRun();
r1.setText("第");
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
r1 = codePara.createRun();
CTFldChar fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.BEGIN);
r1 = codePara.createRun();
CTText ctText = r1.getCTR().addNewInstrText();
ctText.setStringValue("PAGE \\* MERGEFORMAT");
ctText.setSpace(SpaceAttribute.Space.PRESERVE);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.END);
r1 = codePara.createRun();
r1.setText("页 总共");
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
r1 = codePara.createRun();
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.BEGIN);
r1 = codePara.createRun();
ctText = r1.getCTR().addNewInstrText();
ctText.setStringValue("NUMPAGES \\* MERGEFORMAT ");
ctText.setSpace(SpaceAttribute.Space.PRESERVE);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.END);
r1 = codePara.createRun();
r1.setText("页");
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
setParagraphAlignInfo(codePara, ParagraphAlignment.CENTER,
TextAlignment.CENTER);
codePara.setBorderTop(Borders.THICK);
XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
newparagraphs[0] = codePara;
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(
document, sectPr);
headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, newparagraphs);
}
/**
* @Description: 页眉:显示时间信息
*/
public static void simpleDateHeader(XWPFDocument document) throws Exception {
CTP ctp = CTP.Factory.newInstance();
XWPFParagraph codePara = new XWPFParagraph(ctp, document);
XWPFRun r1 = codePara.createRun();
CTFldChar fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.BEGIN);
r1 = codePara.createRun();
CTText ctText = r1.getCTR().addNewInstrText();
ctText.setStringValue("TIME \\@ \"EEEE\"");
ctText.setSpace(SpaceAttribute.Space.PRESERVE);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.END);
r1 = codePara.createRun();
r1.setText("年");
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
r1 = codePara.createRun();
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.BEGIN);
r1 = codePara.createRun();
ctText = r1.getCTR().addNewInstrText();
ctText.setStringValue("TIME \\@ \"O\"");
ctText.setSpace(SpaceAttribute.Space.PRESERVE);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.END);
r1 = codePara.createRun();
r1.setText("月");
r1.setFontSize(11);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
r1 = codePara.createRun();
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.BEGIN);
r1 = codePara.createRun();
ctText = r1.getCTR().addNewInstrText();
ctText.setStringValue("TIME \\@ \"A\"");
ctText.setSpace(SpaceAttribute.Space.PRESERVE);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
fldChar = r1.getCTR().addNewFldChar();
fldChar.setFldCharType(STFldCharType.END);
r1 = codePara.createRun();
r1.setText("日");
r1.setFontSize(11);
setParagraphRunFontInfo(codePara, r1, null, "微软雅黑", "22");
setParagraphAlignInfo(codePara, ParagraphAlignment.CENTER,
TextAlignment.CENTER);
codePara.setBorderBottom(Borders.THICK);
XWPFParagraph[] newparagraphs = new XWPFParagraph[1];
newparagraphs[0] = codePara;
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(
document, sectPr);
headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs);
}
/*------------------------------------Word 段落相关--------------------------------------------------- */
/**
* @Description: 得到段落CTPPr
*/
public static CTPPr getParagraphCTPPr(XWPFParagraph p) {
CTPPr pPPr = null;
if (p.getCTP() != null) {
if (p.getCTP().getPPr() != null) {
pPPr = p.getCTP().getPPr();
} else {
pPPr = p.getCTP().addNewPPr();
}
}
return pPPr;
}
/**
* @Description: 得到XWPFRun的CTRPr
*/
public static CTRPr getRunCTRPr(XWPFParagraph p, XWPFRun pRun) {
CTRPr pRpr = null;
if (pRun.getCTR() != null) {
pRpr = pRun.getCTR().getRPr();
if (pRpr == null) {
pRpr = pRun.getCTR().addNewRPr();
}
} else {
pRpr = p.getCTP().addNewR().addNewRPr();
}
return pRpr;
}
public static XWPFRun getOrAddParagraphFirstRun(XWPFParagraph p, boolean isInsert,
boolean isNewLine) {
XWPFRun pRun = null;
if (isInsert) {
pRun = p.createRun();
} else {
if (p.getRuns() != null && p.getRuns().size() > 0) {
pRun = p.getRuns().get(0);
} else {
pRun = p.createRun();
}
}
if (isNewLine) {
pRun.addBreak();
}
return pRun;
}
public static void setParagraphTextFontInfo(XWPFParagraph p, boolean isInsert,
boolean isNewLine, String content, String fontFamily,
String fontSize) {
XWPFRun pRun = getOrAddParagraphFirstRun(p, isInsert, isNewLine);
setParagraphRunFontInfo(p, pRun, content, fontFamily, fontSize);
}
/**
* @Description 设置字体信息
*/
public static void setParagraphRunFontInfo(XWPFParagraph p, XWPFRun pRun,
String content, String fontFamily, String fontSize) {
CTRPr pRpr = getRunCTRPr(p, pRun);
if (StringUtils.isNotBlank(content)) {
pRun.setText(content);
}
// 设置字体
CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr
.addNewRFonts();
fonts.setAscii(fontFamily);
fonts.setEastAsia(fontFamily);
fonts.setHAnsi(fontFamily);
// 设置字体大小
CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();
sz.setVal(new BigInteger(fontSize));
CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr
.addNewSzCs();
szCs.setVal(new BigInteger(fontSize));
}
/**
* @Description: 设置段落基本样式
*/
public static void setParagraphTextBasicStyleInfo(XWPFParagraph p, XWPFRun pRun,
String colorVal, boolean isBlod, boolean isUnderLine,
String underLineColor, STUnderline.Enum underStyle,
boolean isItalic, boolean isStrike, boolean isHightLight,
STHighlightColor.Enum hightStyle, boolean isShd,
STShd.Enum shdStyle, String shdColor) {
setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,
underLineColor, underStyle, isItalic, isStrike, false, false,
false, false, false, false, false, null, isHightLight,
hightStyle, isShd, shdStyle, shdColor, null, 0, 0, 0);
}
/**
* @param verticalAlign : SUPERSCRIPT上标 SUBSCRIPT下标
* @param position :字符间距位置:>0提升 <0降低=磅值*2 如3磅=6
* @param spacingValue :字符间距间距 >0加宽 <0紧缩 =磅值*20 如2磅=40
* @param indent :字符间距缩进 <100 缩
* @Description: 设置段落文本样式(高亮与底纹显示效果不同)设置字符间距信息(CTSignedTwipsMeasure)
*/
public static void setParagraphTextSimpleStyleInfo(XWPFParagraph p, XWPFRun pRun,
String colorVal, boolean isBlod, boolean isUnderLine,
String underLineColor, STUnderline.Enum underStyle,
boolean isItalic, boolean isStrike, boolean isHightLight,
STHighlightColor.Enum hightStyle, boolean isShd,
STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign,
int position, int spacingValue, int indent) {
setParagraphTextStyleInfo(p, pRun, colorVal, isBlod, isUnderLine,
underLineColor, underStyle, isItalic, isStrike, false, false,
false, false, false, false, false, null, isHightLight,
hightStyle, isShd, shdStyle, shdColor, verticalAlign, position,
spacingValue, indent);
}
/**
* @param verticalAlign : SUPERSCRIPT上标 SUBSCRIPT下标
* @param position :字符间距位置:>0提升 <0降低=磅值*2 如3磅=6
* @param spacingValue :字符间距间距 >0加宽 <0紧缩 =磅值*20 如2磅=40
* @param indent :字符间距缩进 <100 缩
* @Description: 设置段落文本样式(高亮与底纹显示效果不同)设置字符间距信息(CTSignedTwipsMeasure)
*/
public static void setParagraphTextStyleInfo(XWPFParagraph p, XWPFRun pRun,
String colorVal, boolean isBlod, boolean isUnderLine,
String underLineColor, STUnderline.Enum underStyle,
boolean isItalic, boolean isStrike, boolean isDStrike,
boolean isShadow, boolean isVanish, boolean isEmboss,
boolean isImprint, boolean isOutline, boolean isEm,
STEm.Enum emType, boolean isHightLight,
STHighlightColor.Enum hightStyle, boolean isShd,
STShd.Enum shdStyle, String shdColor, VerticalAlign verticalAlign,
int position, int spacingValue, int indent) {
if (pRun == null) {
return;
}
CTRPr pRpr = getRunCTRPr(p, pRun);
if (colorVal != null) {
pRun.setColor(colorVal);
}
// 设置字体样式
// 加粗
if (isBlod) {
pRun.setBold(isBlod);
}
// 倾斜
if (isItalic) {
pRun.setItalic(isItalic);
}
// 删除线
if (isStrike) {
pRun.setStrike(isStrike);
}
// 双删除线
if (isDStrike) {
CTOnOff dsCtOnOff = pRpr.isSetDstrike() ? pRpr.getDstrike() : pRpr
.addNewDstrike();
dsCtOnOff.setVal(STOnOff.TRUE);
}
// 阴影
if (isShadow) {
CTOnOff shadowCtOnOff = pRpr.isSetShadow() ? pRpr.getShadow()
: pRpr.addNewShadow();
shadowCtOnOff.setVal(STOnOff.TRUE);
}
// 隐藏
if (isVanish) {
CTOnOff vanishCtOnOff = pRpr.isSetVanish() ? pRpr.getVanish()
: pRpr.addNewVanish();
vanishCtOnOff.setVal(STOnOff.TRUE);
}
// 阳文
if (isEmboss) {
CTOnOff embossCtOnOff = pRpr.isSetEmboss() ? pRpr.getEmboss()
: pRpr.addNewEmboss();
embossCtOnOff.setVal(STOnOff.TRUE);
}
// 阴文
if (isImprint) {
CTOnOff isImprintCtOnOff = pRpr.isSetImprint() ? pRpr.getImprint()
: pRpr.addNewImprint();
isImprintCtOnOff.setVal(STOnOff.TRUE);
}
// 空心
if (isOutline) {
CTOnOff isOutlineCtOnOff = pRpr.isSetOutline() ? pRpr.getOutline()
: pRpr.addNewOutline();
isOutlineCtOnOff.setVal(STOnOff.TRUE);
}
// 着重号
if (isEm) {
CTEm em = pRpr.isSetEm() ? pRpr.getEm() : pRpr.addNewEm();
em.setVal(emType);
}
// 设置下划线样式
if (isUnderLine) {
CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU();
if (underStyle != null) {
u.setVal(underStyle);
}
if (underLineColor != null) {
u.setColor(underLineColor);
}
}
// 设置突出显示文本
if (isHightLight) {
if (hightStyle != null) {
CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr
.getHighlight() : pRpr.addNewHighlight();
hightLight.setVal(hightStyle);
}
}
if (isShd) {
// 设置底纹
CTShd shd = pRpr.isSetShd() ? pRpr.getShd() : pRpr.addNewShd();
if (shdStyle != null) {
shd.setVal(shdStyle);
}
if (shdColor != null) {
shd.setColor(shdColor);
}
}
// 上标下标
if (verticalAlign != null) {
pRun.setSubscript(verticalAlign);
}
// 设置文本位置
pRun.setTextPosition(position);
if (spacingValue > 0) {
// 设置字符间距信息
CTSignedTwipsMeasure ctSTwipsMeasure = pRpr.isSetSpacing() ? pRpr
.getSpacing() : pRpr.addNewSpacing();
ctSTwipsMeasure
.setVal(new BigInteger(String.valueOf(spacingValue)));
}
if (indent > 0) {
CTTextScale paramCTTextScale = pRpr.isSetW() ? pRpr.getW() : pRpr
.addNewW();
paramCTTextScale.setVal(indent);
}
}
/**
* @Description: 设置段落底纹(对整段文字起作用)
*/
public static void setParagraphShdStyle(XWPFParagraph p, boolean isShd,
STShd.Enum shdStyle, String shdColor) {
CTPPr pPpr = getParagraphCTPPr(p);
CTShd shd = pPpr.isSetShd() ? pPpr.getShd() : pPpr.addNewShd();
if (shdStyle != null) {
shd.setVal(shdStyle);
}
if (shdColor != null) {
shd.setColor(shdColor);
}
}
/**
* @Description: 设置段落间距信息, 一行=100 一磅=20
*/
public static void setParagraphSpacingInfo(XWPFParagraph p, boolean isSpace,
String before, String after, String beforeLines, String afterLines,
boolean isLine, String line, STLineSpacingRule.Enum lineValue) {
CTPPr pPPr = getParagraphCTPPr(p);
CTSpacing pSpacing = pPPr.getSpacing() != null ? pPPr.getSpacing()
: pPPr.addNewSpacing();
if (isSpace) {
// 段前磅数
if (before != null) {
pSpacing.setBefore(new BigInteger(before));
}
// 段后磅数
if (after != null) {
pSpacing.setAfter(new BigInteger(after));
}
// 段前行数
if (beforeLines != null) {
pSpacing.setBeforeLines(new BigInteger(beforeLines));
}
// 段后行数
if (afterLines != null) {
pSpacing.setAfterLines(new BigInteger(afterLines));
}
}
// 间距
if (isLine) {
if (line != null) {
pSpacing.setLine(new BigInteger(line));
}
if (lineValue != null) {
pSpacing.setLineRule(lineValue);
}
}
}
// 设置段落缩进信息 1厘米≈567
public static void setParagraphIndInfo(XWPFParagraph p, String firstLine,
String firstLineChar, String hanging, String hangingChar,
String right, String rigthChar, String left, String leftChar) {
CTPPr pPPr = getParagraphCTPPr(p);
CTInd pInd = pPPr.getInd() != null ? pPPr.getInd() : pPPr.addNewInd();
if (firstLine != null) {
pInd.setFirstLine(new BigInteger(firstLine));
}
if (firstLineChar != null) {
pInd.setFirstLineChars(new BigInteger(firstLineChar));
}
if (hanging != null) {
pInd.setHanging(new BigInteger(hanging));
}
if (hangingChar != null) {
pInd.setHangingChars(new BigInteger(hangingChar));
}
if (left != null) {
pInd.setLeft(new BigInteger(left));
}
if (leftChar != null) {
pInd.setLeftChars(new BigInteger(leftChar));
}
if (right != null) {
pInd.setRight(new BigInteger(right));
}
if (rigthChar != null) {
pInd.setRightChars(new BigInteger(rigthChar));
}
}
// 设置段落边框
public static void setParagraphBorders(XWPFParagraph p, Borders lborder,
Borders tBorders, Borders rBorders, Borders bBorders,
Borders btborders) {
if (lborder != null) {
p.setBorderLeft(lborder);
}
if (tBorders != null) {
p.setBorderTop(tBorders);
}
if (rBorders != null) {
p.setBorderRight(rBorders);
}
if (bBorders != null) {
p.setBorderBottom(bBorders);
}
if (btborders != null) {
p.setBorderBetween(btborders);
}
}
/**
* @Description: 设置段落对齐 居中等
*/
public static void setParagraphAlignInfo(XWPFParagraph p,
ParagraphAlignment pAlign, TextAlignment valign) {
if (pAlign != null) {
p.setAlignment(pAlign);
}
if (valign != null) {
p.setVerticalAlignment(valign);
}
}
/*------------------------------------Word 表格相关--------------------------------------------------- */
/**
* @Description:删除指定位置的表格,被删除表格后的索引位置--
*/
public static void deleteTableByIndex(XWPFDocument xdoc, int pos) {
Iterator<IBodyElement> bodyElement = xdoc.getBodyElementsIterator();
int eIndex = 0, tableIndex = -1;
while (bodyElement.hasNext()) {
IBodyElement element = bodyElement.next();
BodyElementType elementType = element.getElementType();
if (elementType == BodyElementType.TABLE) {
tableIndex++;
if (tableIndex == pos) {
break;
}
}
eIndex++;
}
xdoc.removeBodyElement(eIndex);
}
public static XWPFTable getTableByIndex(XWPFDocument xdoc, int index) {
List<XWPFTable> tablesList = getAllTable(xdoc);
if (tablesList == null || index < 0 || index > tablesList.size()) {
return null;
}
return tablesList.get(index);
}
public static List<XWPFTable> getAllTable(XWPFDocument xdoc) {
return xdoc.getTables();
}
/**
* @Description: 得到表格内容(第一次跨行单元格视为一个 , 第二次跳过跨行合并的单元格)
*/
public static List<List<String>> getTableRContent(XWPFTable table) {
List<List<String>> tableContentList = new ArrayList<List<String>>();
for (int rowIndex = 0, rowLen = table.getNumberOfRows(); rowIndex < rowLen; rowIndex++) {
XWPFTableRow row = table.getRow(rowIndex);
List<String> cellContentList = new ArrayList<String>();
for (int colIndex = 0, colLen = row.getTableCells().size(); colIndex < colLen; colIndex++) {
XWPFTableCell cell = row.getCell(colIndex);
CTTc ctTc = cell.getCTTc();
if (ctTc.isSetTcPr()) {
CTTcPr tcPr = ctTc.getTcPr();
if (tcPr.isSetHMerge()) {
CTHMerge hMerge = tcPr.getHMerge();
if (STMerge.RESTART.equals(hMerge.getVal())) {
cellContentList.add(getTableCellContent(cell));
}
} else if (tcPr.isSetVMerge()) {
CTVMerge vMerge = tcPr.getVMerge();
if (STMerge.RESTART.equals(vMerge.getVal())) {
cellContentList.add(getTableCellContent(cell));
}
} else {
cellContentList.add(getTableCellContent(cell));
}
}
}
tableContentList.add(cellContentList);
}
return tableContentList;
}
/**
* @Description: 得到表格内容, 合并后的单元格视为一个单元格
*/
public static List<List<String>> getTableContent(XWPFTable table) {
List<List<String>> tableContentList = new ArrayList<List<String>>();
for (int rowIndex = 0, rowLen = table.getNumberOfRows(); rowIndex < rowLen; rowIndex++) {
XWPFTableRow row = table.getRow(rowIndex);
List<String> cellContentList = new ArrayList<String>();
for (int colIndex = 0, colLen = row.getTableCells().size(); colIndex < colLen; colIndex++) {
XWPFTableCell cell = row.getCell(colIndex);
cellContentList.add(getTableCellContent(cell));
}
tableContentList.add(cellContentList);
}
return tableContentList;
}
public static String getTableCellContent(XWPFTableCell cell) {
StringBuffer sb = new StringBuffer();
List<XWPFParagraph> cellPList = cell.getParagraphs();
if (cellPList != null && cellPList.size() > 0) {
for (XWPFParagraph xwpfPr : cellPList) {
List<XWPFRun> runs = xwpfPr.getRuns();
if (runs != null && runs.size() > 0) {
for (XWPFRun xwpfRun : runs) {
sb.append(xwpfRun.getText(0));
}
}
}
}
return sb.toString();
}
/**
* @Description: 创建表格, 创建后表格至少有1行1列, 设置列宽
*/
public static XWPFTable createTable(XWPFDocument xdoc, int rowSize, int cellSize,
boolean isSetColWidth, int[] colWidths) {
XWPFTable table = xdoc.createTable(rowSize, cellSize);
if (isSetColWidth) {
CTTbl ttbl = table.getCTTbl();
CTTblGrid tblGrid = ttbl.addNewTblGrid();
for (int j = 0, len = Math.min(cellSize, colWidths.length); j < len; j++) {
CTTblGridCol gridCol = tblGrid.addNewGridCol();
gridCol.setW(new BigInteger(String.valueOf(colWidths[j])));
}
}
return table;
}
/**
* @Description: 设置表格总宽度与水平对齐方式
*/
public static void setTableWidthAndHAlign(XWPFTable table, String width,
STJc.Enum enumValue) {
CTTblPr tblPr = getTableCTTblPr(table);
CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr
.addNewTblW();
if (enumValue != null) {
CTJc cTJc = tblPr.addNewJc();
cTJc.setVal(enumValue);
}
tblWidth.setW(new BigInteger(width));
tblWidth.setType(STTblWidth.DXA);
}
/**
* @Description: 得到Table的CTTblPr, 不存在则新建
*/
public static CTTblPr getTableCTTblPr(XWPFTable table) {
CTTbl ttbl = table.getCTTbl();
CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl
.getTblPr();
return tblPr;
}
/**
* @Description: 得到Table的边框, 不存在则新建
*/
public static CTTblBorders getTableBorders(XWPFTable table) {
CTTblPr tblPr = getTableCTTblPr(table);
CTTblBorders tblBorders = tblPr.isSetTblBorders() ? tblPr
.getTblBorders() : tblPr.addNewTblBorders();
return tblBorders;
}
/**
* @Description: 设置表格边框样式
*/
public static void setTableBorders(XWPFTable table, CTBorder left, CTBorder top,
CTBorder right, CTBorder bottom) {
CTTblBorders tblBorders = getTableBorders(table);
if (left != null) {
tblBorders.setLeft(left);
}
if (top != null) {
tblBorders.setTop(top);
}
if (right != null) {
tblBorders.setRight(right);
}
if (bottom != null) {
tblBorders.setBottom(bottom);
}
}
/**
* @Description: 表格指定位置插入一行, index为新增行所在的行位置(不能大于表行数)
*/
public static void insertTableRowAtIndex(XWPFTable table, int index) {
insertTableRowAtIndexFromRow(table, 0, index);
}
//根据数据条数插入数据行数 本来有一行所以少插入一行
public static void insertTableRowAtIndex(XWPFTable table, int index, int rowSize) {
if (rowSize > 0) {
for (int i = 0; i < rowSize - 1; i++) {
insertTableRowAtIndexFromRow(table, 2, index);
}
}
}
public static void insertTableRowAtIndexFromRow(XWPFTable table, int indexRow, int index) {
XWPFTableRow row = table.insertNewTableRow(index);
if (row == null) {
return;
}
CTTbl ctTbl = table.getCTTbl();
CTTblGrid tblGrid = ctTbl.getTblGrid();
int cellSize = 0;
boolean isAdd = false;
if (tblGrid != null) {
List<CTTblGridCol> gridColList = tblGrid.getGridColList();
if (gridColList != null && gridColList.size() > 0) {
isAdd = true;
for (CTTblGridCol ctlCol : gridColList) {
XWPFTableCell cell = row.addNewTableCell();
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
CTTc cttc = cell.getCTTc();
CTP ctp = cttc.getPList().get(0);
CTPPr ctppr = ctp.getPPr();
if (ctppr == null) {
ctppr = ctp.addNewPPr();
}
CTJc ctjc = ctppr.getJc();
if (ctjc == null) {
ctjc = ctppr.addNewJc();
}
//水平居中
ctjc.setVal(STJc.CENTER);
setCellWidthAndVAlign(cell, ctlCol.getW().toString(),
STTblWidth.DXA, null);
}
}
}
// 大部分都不会走到这一步
if (!isAdd) {
XWPFTableRow firstRow = table.getRow(indexRow);
cellSize = getCellSizeWithMergeNum(firstRow);
for (int i = 0; i < cellSize; i++) {
row.addNewTableCell();
}
}
}
public static List<XWPFTableCell> getRowCells(XWPFTable table, int rowIndex) {
XWPFTableRow row = table.getRow(rowIndex);
if (null != row) {
return row.getTableCells();
}
return null;
}
public static Map<Integer, String> getCellsContent(XWPFTable table, int rowIndex) {
Map<Integer, String> map = new LinkedHashMap<>();
try {
XWPFTableRow row = table.getRow(rowIndex);
List<XWPFTableCell> cellList = row.getTableCells();
int length = cellList.size();
for (int i = 0; i < length; i++) {
XWPFTableCell cell = cellList.get(i);
List<XWPFParagraph> cells = cell.getParagraphs();
for (XWPFParagraph p : cells) {
String text = StringUtils.join(p.getRuns().toArray());
}
map.put(i, cell.getText());
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* @Description: 删除表一行
*/
public static void deleteTableRow(XWPFTable table, int index) {
table.removeRow(index);
}
/**
* @Description: 统计列数(包括合并的列数)
*/
public static int getCellSizeWithMergeNum(XWPFTableRow row) {
List<XWPFTableCell> firstRowCellList = row.getTableCells();
int cellSize = firstRowCellList.size();
for (XWPFTableCell xwpfTableCell : firstRowCellList) {
CTTc ctTc = xwpfTableCell.getCTTc();
if (ctTc.isSetTcPr()) {
CTTcPr tcPr = ctTc.getTcPr();
if (tcPr.isSetGridSpan()) {
CTDecimalNumber gridSpan = tcPr.getGridSpan();
cellSize += gridSpan.getVal().intValue() - 1;
}
}
}
return cellSize;
}
/**
* @Description: 得到CTTrPr, 不存在则新建
*/
public static CTTrPr getRowCTTrPr(XWPFTableRow row) {
CTRow ctRow = row.getCtRow();
CTTrPr trPr = ctRow.isSetTrPr() ? ctRow.getTrPr() : ctRow.addNewTrPr();
return trPr;
}
/**
* @Description: 设置行高
*/
public static void setRowHeight(XWPFTableRow row, String hight,
STHeightRule.Enum heigthEnum) {
CTTrPr trPr = getRowCTTrPr(row);
CTHeight trHeight;
if (trPr.getTrHeightList() != null && trPr.getTrHeightList().size() > 0) {
trHeight = trPr.getTrHeightList().get(0);
} else {
trHeight = trPr.addNewTrHeight();
}
trHeight.setVal(new BigInteger(hight));
if (heigthEnum != null) {
trHeight.setHRule(heigthEnum);
}
}
/**
* @Description: 隐藏行
*/
public static void setRowHidden(XWPFTableRow row, boolean hidden) {
CTTrPr trPr = getRowCTTrPr(row);
CTOnOff hiddenValue;
if (trPr.getHiddenList() != null && trPr.getHiddenList().size() > 0) {
hiddenValue = trPr.getHiddenList().get(0);
} else {
hiddenValue = trPr.addNewHidden();
}
if (hidden) {
hiddenValue.setVal(STOnOff.TRUE);
} else {
hiddenValue.setVal(STOnOff.FALSE);
}
setRowAllCellHidden(row, hidden);
}
public static void setRowAllCellHidden(XWPFTableRow row, boolean isVanish) {
for (int colIndex = 0, colLen = row.getTableCells().size(); colIndex < colLen; colIndex++) {
XWPFTableCell cell = row.getCell(colIndex);
setCellHidden(cell, isVanish);
}
}
/**
* @Description: 追加设置单元格内容
*/
public static void setCellAppendNewContent(XWPFTable table, int rowIndex, int col, String content) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
XWPFParagraph p = getCellFirstParagraph(cell);
List<XWPFRun> cellRunList = p.getRuns();
if (cellRunList == null || cellRunList.size() == 0) {
return;
}
for (int i = cellRunList.size() - 1; i >= 1; i--) {
p.removeRun(i);
}
XWPFRun run = cellRunList.get(0);
run.setText(content);
}
/**
* @Description: 重新设置单元格内容保留原格式
*/
public static void setCellNewContent(XWPFTable table, int rowIndex, int col, String content) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
XWPFParagraph p = getCellFirstParagraph(cell);
List<XWPFRun> cellRunList = p.getRuns();
if (cellRunList == null || cellRunList.size() == 0) {
return;
}
for (int i = 0; i < cellRunList.size(); i++) {
String fontFamily = cellRunList.get(i).getFontFamily();
int fontsize = cellRunList.get(i).getFontSize();
p.removeRun(i);
XWPFRun run = p.insertNewRun(i);
run.setFontFamily(fontFamily);
run.setFontSize(fontsize);
run.setText(content);
}
}
/**
* @Description: 追加设置单元格科学计数法内容
*/
public static void setCellNewContentScientificNotation(XWPFTable table, int rowIndex, int col, String content) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
XWPFParagraph p = getCellFirstParagraph(cell);
List<XWPFRun> cellRunList = p.getRuns();
if (cellRunList == null || cellRunList.size() == 0) {
return;
}
for (int i = cellRunList.size() - 1; i >= 0; i--) {
String fontFamily = cellRunList.get(i).getFontFamily();
int fontsize = cellRunList.get(i).getFontSize();
p.removeRun(i);
XWPFRun run = p.insertNewRun(i);
run.setFontFamily(fontFamily);
run.setFontSize(fontsize);
run.setSubscript(VerticalAlign.SUPERSCRIPT);//下标
run.setText(content);
}
}
/**
* @Description: 删除单元格内容
*/
public static void deleteCellContent(XWPFTable table, int rowIndex, int col) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
XWPFParagraph p = getCellFirstParagraph(cell);
List<XWPFRun> cellRunList = p.getRuns();
if (cellRunList == null || cellRunList.size() == 0) {
return;
}
for (int i = cellRunList.size() - 1; i >= 0; i--) {
p.removeRun(i);
}
}
/**
* @Description: 隐藏单元格内容
*/
public static void setHiddenCellContent(XWPFTable table, int rowIndex, int col) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
setCellHidden(cell, true);
}
public static void setCellHidden(XWPFTableCell cell, boolean isVanish) {
XWPFParagraph p = getCellFirstParagraph(cell);
CTPPr pPPr = getParagraphCTPPr(p);
CTParaRPr paRpr = pPPr.isSetRPr() ? pPPr.getRPr() : pPPr.addNewRPr();
CTOnOff vanishCtOnOff = paRpr.isSetVanish() ? paRpr.getVanish() : paRpr
.addNewVanish();
if (isVanish) {
vanishCtOnOff.setVal(STOnOff.TRUE);
} else {
vanishCtOnOff.setVal(STOnOff.FALSE);
}
List<XWPFRun> cellRunList = p.getRuns();
if (cellRunList == null || cellRunList.size() == 0) {
return;
}
for (XWPFRun xwpfRun : cellRunList) {
CTRPr pRpr = getRunCTRPr(p, xwpfRun);
vanishCtOnOff = pRpr.isSetVanish() ? pRpr.getVanish() : pRpr
.addNewVanish();
if (isVanish) {
vanishCtOnOff.setVal(STOnOff.TRUE);
} else {
vanishCtOnOff.setVal(STOnOff.FALSE);
}
}
}
/**
* @Description: 得到Cell的CTTcPr, 不存在则新建
*/
public static CTTcPr getCellCTTcPr(XWPFTableCell cell) {
CTTc cttc = cell.getCTTc();
CTTcPr tcPr = cttc.isSetTcPr() ? cttc.getTcPr() : cttc.addNewTcPr();
return tcPr;
}
/**
* @Description: 设置垂直对齐方式
*/
public static void setCellVAlign(XWPFTableCell cell, STVerticalJc.Enum vAlign) {
setCellWidthAndVAlign(cell, null, null, vAlign);
}
/**
* @Description: 设置列宽和垂直对齐方式
*/
public static void setCellWidthAndVAlign(XWPFTableCell cell, String width,
STTblWidth.Enum typeEnum, STVerticalJc.Enum vAlign) {
CTTcPr tcPr = getCellCTTcPr(cell);
CTTblWidth tcw = tcPr.isSetTcW() ? tcPr.getTcW() : tcPr.addNewTcW();
if (width != null) {
tcw.setW(new BigInteger(width));
}
if (typeEnum != null) {
tcw.setType(typeEnum);
}
if (vAlign != null) {
CTVerticalJc vJc = tcPr.isSetVAlign() ? tcPr.getVAlign() : tcPr
.addNewVAlign();
vJc.setVal(vAlign);
}
}
/**
* @Description: 得到单元格第一个Paragraph
*/
public static XWPFParagraph getCellFirstParagraph(XWPFTableCell cell) {
XWPFParagraph p;
if (cell.getParagraphs() != null && cell.getParagraphs().size() > 0) {
p = cell.getParagraphs().get(0);
} else {
p = cell.addParagraph();
}
return p;
}
/**
* @Description: 跨列合并
*/
public static void mergeCellsHorizontal(XWPFTable table, int row, int fromCell,
int toCell) {
for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
if (cellIndex == fromCell) {
// The first merged cell is set with RESTART merge value
getCellCTTcPr(cell).addNewHMerge().setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one,are set with CONTINUE
getCellCTTcPr(cell).addNewHMerge().setVal(STMerge.CONTINUE);
}
}
}
public static void mergeCellsVertically(XWPFTable table, int col, int fromRow,
int toRow) {
for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
if (rowIndex == fromRow) {
// The first merged cell is set with RESTART merge value
getCellCTTcPr(cell).addNewVMerge().setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one,are set with CONTINUE
getCellCTTcPr(cell).addNewVMerge().setVal(STMerge.CONTINUE);
}
}
}
/*------------------------------------Word 文档信息--------------------------------------------------- */
/**
* @Description: 设置页面背景色
*/
public static void setDocumentbackground(XWPFDocument document, String bgColor) {
CTBackground bg = document.getDocument().isSetBackground() ? document
.getDocument().getBackground() : document.getDocument()
.addNewBackground();
bg.setColor(bgColor);
}
public static CTSectPr getDocumentCTSectPr(XWPFDocument document) {
CTSectPr sectPr = document.getDocument().getBody().isSetSectPr() ? document
.getDocument().getBody().getSectPr()
: document.getDocument().getBody().addNewSectPr();
return sectPr;
}
/**
* @Description: 页面Break
*/
public static void addNewPageBreak(XWPFDocument document, BreakType breakType) {
XWPFParagraph xp = document.createParagraph();
xp.createRun().addBreak(breakType);
}
/**
* @Description: 设置页面边框
*/
public void setPgBorders(XWPFDocument document, CTBorder top,
CTBorder right, CTBorder bottom, CTBorder left) {
CTSectPr sectPr = getDocumentCTSectPr(document);
CTPageBorders pd = sectPr.isSetPgBorders() ? sectPr.getPgBorders()
: sectPr.addNewPgBorders();
/*
* CTBorder bb = pd.addNewBottom(); bb.setVal(STBorder.SINGLE);
* bb.setSz(new BigInteger("4")); bb.setSpace(new BigInteger("24"));
* bb.setColor("FBB61F");
*/
if (top != null) {
pd.setTop(top);
}
if (right != null) {
pd.setRight(right);
}
if (bottom != null) {
pd.setBottom(bottom);
}
if (left != null) {
pd.setLeft(left);
}
}
/**
* @Description: 设置页面大小及纸张方向 landscape横向
*/
public static void setDocumentSize(XWPFDocument document, String width,
String height, STPageOrientation.Enum stValue) {
CTSectPr sectPr = getDocumentCTSectPr(document);
CTPageSz pgsz = sectPr.isSetPgSz() ? sectPr.getPgSz() : sectPr
.addNewPgSz();
pgsz.setH(new BigInteger(height));
pgsz.setW(new BigInteger(width));
pgsz.setOrient(stValue);
}
/**
* @Description: 设置页边距 (word中1厘米约等于567)
*/
public static void setDocumentMargin(XWPFDocument document, String left,
String top, String right, String bottom) {
CTSectPr sectPr = getDocumentCTSectPr(document);
CTPageMar ctpagemar = sectPr.addNewPgMar();
if (StringUtils.isNotBlank(left)) {
ctpagemar.setLeft(new BigInteger(left));
}
if (StringUtils.isNotBlank(top)) {
ctpagemar.setTop(new BigInteger(top));
}
if (StringUtils.isNotBlank(right)) {
ctpagemar.setRight(new BigInteger(right));
}
if (StringUtils.isNotBlank(bottom)) {
ctpagemar.setBottom(new BigInteger(bottom));
}
}
/**
* @Description: 保存文档
*/
public static void saveDocument(XWPFDocument document, String savePath)
throws Exception {
FileOutputStream fos = new FileOutputStream(savePath);
document.write(fos);
fos.close();
}
/**
* @Description: 打开word文档
*/
public static XWPFDocument openDocument(String filePath) throws Exception {
XWPFDocument xdoc = new XWPFDocument(
POIXMLDocument.openPackage(filePath));
return xdoc;
}
public static Map<Integer, String> getCellSnMap(XWPFTable table, int rowIndex) {
Map<Integer, String> map = new LinkedHashMap<>();
try {
XWPFTableRow row = table.getRow(rowIndex);
List<XWPFTableCell> cellList = row.getTableCells();
int length = cellList.size();
for (int i = 0; i < length; i++) {
map.put(i, cellList.get(i).getText());
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
package com.patzn.cloud.service.lims.common;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PoiUtil2007ForReplace {
public static ArrayList<String> getReplaceElements(XWPFDocument document,String regex) {
ArrayList<String> al = new ArrayList<>();
// 遍历段落
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
al.addAll(PoiUtil2007ForReplace.getReplaceElements(regex, paragraph));
}
// 遍历表
Iterator<XWPFTable> itTable = document.getTablesIterator();
while (itTable.hasNext()) {
XWPFTable table = (XWPFTable) itTable.next();
int rcount = table.getNumberOfRows();
for (int i = 0; i < rcount; i++) {
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells = row.getTableCells();
for (XWPFTableCell cell : cells) {
List<XWPFParagraph> paraList=cell.getParagraphs();
for(XWPFParagraph paragraph:paraList){
al.addAll(PoiUtil2007ForReplace.getReplaceElements(regex, paragraph));
}
}
}
}
return al;
}
private static ArrayList<String> getReplaceElements(String regex, XWPFParagraph paragraph) {
// System.out.println("====================");
ArrayList<String> al = new ArrayList<>();
List<XWPFRun> runs = paragraph.getRuns();
for (int i = 0; i < runs.size(); i++) {
XWPFRun run=runs.get(i);
String runString = run.getText(run.getTextPosition());
// System.out.println("run["+i+"]:"+runString);
if(runString!=null){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(runString);
while (matcher.find()) {
if (!al.contains(matcher.group())) {
al.add(matcher.group());
}
}
}
}
return al;
}
public static boolean replaceHeadText(XWPFDocument document, Map<String, String> map) {
try {
// 替换段落中的指定文字
List<XWPFParagraph> headers = document.getHeaderFooterPolicy().getDefaultHeader().getParagraphs();
for (XWPFParagraph paragraph : headers) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if (StringUtils.isNotEmpty(text)) {
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
if (text.indexOf(key) != -1) {
Object value = entry.getValue();
if (value instanceof String) {
text = text.replace(key, value.toString());
run.setText(text, 0);
}
}
}
}
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean replaceText(XWPFDocument document,Map<String, String> map) {
try {
// 替换段落中的指定文字
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
PoiUtil2007ForReplace.replaceText(map, paragraph);
}
// 替换表格中的指定文字
Iterator<XWPFTable> itTable = document.getTablesIterator();
while (itTable.hasNext()) {
XWPFTable table = (XWPFTable) itTable.next();
int rcount = table.getNumberOfRows();
for (int i = 0; i < rcount; i++) {
XWPFTableRow row = table.getRow(i);
List<XWPFTableCell> cells = row.getTableCells();
for (XWPFTableCell cell : cells) {
List<XWPFParagraph> paraList=cell.getParagraphs();
for(XWPFParagraph paragraph:paraList){
PoiUtil2007ForReplace.replaceText(map, paragraph);
}
}
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean replaceBookMarkText(XWPFDocument document,Map<String, String> map,Map<String,String> bookLabelList) {
try {
// 替换段落中的指定文字
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
CTP ctp = paragraph.getCTP();
List<CTBookmark> bookmarks = ctp.getBookmarkStartList();
for(CTBookmark bookmark : bookmarks) {
String bookmarkName = bookmark.getName();
for(Map.Entry<String, String> entry:bookLabelList.entrySet()){
String bookmarkValue =entry.getKey();
if(bookmarkName!=null && bookmarkName.equals(bookmarkValue)) {
CTR ctr = ctp.addNewR();
CTText text = ctr.addNewT();
text.setStringValue(entry.getValue());
}
}
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static void replaceText(Map<String, String> map, XWPFParagraph paragraph) {
List<XWPFRun> runs = paragraph.getRuns();
for (int i = 0; i < runs.size(); i++) {
XWPFRun run=runs.get(i);
int position= run.getTextPosition();
if (position==-1&&null!=run.getText(position)){
String oneparaString = run.getText(run.getTextPosition());
if(oneparaString!=null){
for (Map.Entry<String, String> entry : map.entrySet()) {
oneparaString = oneparaString.replace(entry.getKey(), entry.getValue());
}
run.setText(oneparaString,0);
}
}
}
}
/**
* 根据正则表达式替换字符串
*/
public static boolean replaceText(XWPFDocument document,String oldText,String newText) {
try {
Map<String, String> replaceMap = new HashMap<>();
replaceMap.put(oldText, newText);
return PoiUtil2007ForReplace.replaceText(document, replaceMap);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 根据正则表达式替换字符串
* @param regex
* @param newText
* @return
*/
public static boolean replaceTextByRegex(XWPFDocument document,String regex,String newText) {
try {
Map<String, String> map = new HashMap<>();
List<String> replaceEles = PoiUtil2007ForReplace.getReplaceElements(document, regex);
for(String replaceEle:replaceEles){
map.put(replaceEle, newText);
}
return PoiUtil2007ForReplace.replaceText(document, map);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static int getPictureType(String picType) {
int res = XWPFDocument.PICTURE_TYPE_PICT;
if (picType != null) {
if (picType.equalsIgnoreCase("png")) {
res = XWPFDocument.PICTURE_TYPE_PNG;
} else if (picType.equalsIgnoreCase("dib")) {
res = XWPFDocument.PICTURE_TYPE_DIB;
} else if (picType.equalsIgnoreCase("emf")) {
res = XWPFDocument.PICTURE_TYPE_EMF;
} else if (picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")) {
res = XWPFDocument.PICTURE_TYPE_JPEG;
} else if (picType.equalsIgnoreCase("wmf")) {
res = XWPFDocument.PICTURE_TYPE_WMF;
}
}
return res;
}
public static Map<String,Object> getWordXWPFRunStyle(XWPFRun runOld) {
Map<String, Object> mapAttr = new HashMap<>();
mapAttr.put("Color", runOld.getColor());
if (-1 == runOld.getFontSize()) {
mapAttr.put("FontSize", 12);
} else {
mapAttr.put("FontSize", runOld.getFontSize());
}
mapAttr.put("Subscript", runOld.getSubscript());
mapAttr.put("Underline", runOld.getUnderline());
mapAttr.put("FontFamily", runOld.getFontFamily());
return mapAttr;
}
public static XWPFRun setWordXWPFRunStyle(XWPFRun runNew, Map<String,Object> mapAttr, String text, boolean flag) {
runNew.setColor((String) mapAttr.get("Color"));
if ("-1".equals(mapAttr.get("FontSize").toString())) {// 处理小四字号读取为-1的问题
runNew.setFontSize(12);
} else {
runNew.setFontSize((Integer) mapAttr.get("FontSize"));
}
runNew.setBold(flag);
runNew.setUnderline((UnderlinePatterns) mapAttr.get("Underline"));
runNew.setText(text);
runNew.setSubscript((VerticalAlign) mapAttr.get("Subscript"));
runNew.setFontFamily((String) mapAttr.get("FontFamily"));
return runNew;
}
/**
* 得到后缀
* @param name
* @return
*/
public static String getSuffix(String name){
return name.substring(name.lastIndexOf(".") + 1);
}
/**
* 保存
*
* @param destPath
* 保存的路径
* @throws Exception
*/
public static void save(XWPFDocument document,String destPath) throws Exception {
FileOutputStream outStream = new FileOutputStream(destPath);
document.write(outStream);
outStream.close();
}
/**
* 保存
*
* @param
*
* @throws Exception
*/
public static void save(XWPFDocument document,OutputStream outputStream) throws Exception {
document.write(outputStream);
}
/**
* 将输入流中的数据写入字节数组
*
* @param in
* @return
*/
public static byte[] inputStream2ByteArray(InputStream in, boolean isClose) {
byte[] byteArray = null;
try {
int total = in.available();
byteArray = new byte[total];
in.read(byteArray);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (isClose) {
try {
in.close();
} catch (Exception e2) {
System.out.println("关闭流失败");
}
}
}
return byteArray;
}
}
package com.patzn.cloud.service.lims.common;
import com.google.common.collect.Lists;
import com.patzn.cloud.commons.enums.IBaseEnum;
import com.patzn.cloud.commons.toolkit.DateUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author wwd
*/
public class StringHandleUtils {
public static boolean validateNumber(String str) {
if(StringUtils.isBlank(str)) {
return false;
}
// 说明一下的是该正则只能识别4位小数;如果不限制小数位数的话,写成[+-]?[0-9]+(\\.[0-9]+)?就可以了
return str.matches("[+-]?[0-9]+(\\.[0-9]+)?");
}
public static String getContinuousStringData(String[] intString, String stringPre) {
StringBuffer result = new StringBuffer();
if (null == intString || intString.length == 0) {
return "";
}
if (intString.length == 1) {
return stringPre + intString[0];
}
for (String string : intString) {
try {
Integer.parseInt(string);
} catch (Exception e) {
return "";
}
}
int[] a = new int[intString.length];
for (int i = 0; i < intString.length; i++) {
a[i] = Integer.parseInt(intString[i]);
}
Arrays.sort(a);
if (a[0] + 1 != a[1]) {
result.append(stringPre + intString[0] + ",");
} else {
result.append(stringPre + intString[0] + "~");
}
for (int i = 1; i < a.length - 1; i++) {
if ((a[i] - 1 != a[i - 1]) & (a[i] + 1 != a[i + 1])) {
result.append(stringPre + intString[i] + ",");
} else if ((a[i] - 1 == a[i - 1]) & (a[i] + 1 != a[i + 1])) {
result.append(stringPre + intString[i] + ",");
} else if ((a[i] - 1 == a[i - 1]) & (a[i] + 1 == a[i + 1])) {
result.append("");
} else {
result.append(stringPre + intString[i] + "~");
}
}
result.append(stringPre + intString[a.length - 1]);
return result.toString();
}
public static boolean isEven(int a){
//是偶数
if((a&1) != 1){
return true;
}
return false;
}
public static boolean is_alpha(String str) {
if(str==null) return false;
String regex = "[\u4e00-\u9fa5]"; //汉字的Unicode取值范围
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(str);
return !match.find();
}
public static String getNumFromString(String str) {
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
String outNum = m.replaceAll("").trim();
return outNum;
}
public static boolean isAllFieldNull(Object object) {
Class clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field:fields) {
field.setAccessible(true);
Object value = field.get(object);
if (value!=null){
return false;
}
}
}catch (Exception e){
e.printStackTrace();
}
return true;
}
public static String join(Collection<String> collection) {
return join(collection, "、");
}
public static String join(Collection<String> collection, String split) {
if (CollectionUtils.isEmpty(collection)) {
return "";
}
split = StringUtils.isEmpty(split) ? "," : split;
StringBuffer sb = new StringBuffer();
for (String s : collection) {
if (!sb.toString().contains(s)) {
sb.append(s).append("、");
}
}
return sb.toString().length() == 0 ? "" : sb.toString().substring(0, sb.toString().length() - 1);
}
public static String joinLong(Collection<Long> collection, String split) {
if (CollectionUtils.isEmpty(collection)) {
return "";
}
split = StringUtils.isEmpty(split) ? "," : split;
StringBuffer sb = new StringBuffer();
for (Long s : collection) {
if (!sb.toString().contains(s.toString())) {
sb.append(s).append("、");
}
}
return sb.toString().length() == 0 ? "" : sb.toString().substring(0, sb.toString().length() - 1);
}
public static String getReplacePreporty(String replace) {
if (StringUtils.isBlank(replace)) {
return "";
}
if (!replace.contains("${")) {
return replace;
}
if (!replace.contains("}")) {
return replace;
}
try {
if (replace.contains(".")) {
String replaced = replace.replace("}", "");
String[] arrayReplaced = replaced.split("\\.");
return arrayReplaced[1];
} else {
return replace.replace("$", "").replace("{", "").replace("}", "");
}
} catch (Exception e) {
return replace;
}
}
public static boolean isYesOrNo(String str) {
if (StringUtils.isEmpty(str)) {
return false;
}
return "是".equals(str) || "否".equals(str);
}
public static boolean equals(String str, String param) {
if (StringUtils.isEmpty(str)) {
return false;
}
return str.equals(param);
}
public static String getExcepLastOne(String string) {
if (StringUtils.isEmpty(string)) {
return "";
}
return string.substring(0, string.length() - 1);
}
public static String getSnJoinString(Map<String, List<String>> snMap) {
StringBuffer snBuffer = new StringBuffer();
for (Map.Entry<String, List<String>> map : snMap.entrySet()) {
String[] array = new String[map.getValue().size()];
int length = map.getValue().size();
for (int i = 0; i < length; i++) {
array[i] = map.getValue().get(i);
}
Arrays.sort(array);
snBuffer.append(StringHandleUtils.getContinuousStringData(array, map.getKey())).append(",");
}
return snBuffer.toString();
}
public static void setText(XWPFTable table, int rowIndex, int cellIndex, String content) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(cellIndex);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
CTTc cttc = cell.getCTTc();
CTP ctp = cttc.getPList().get(0);
CTPPr ctppr = ctp.getPPr();
if (ctppr == null) {
ctppr = ctp.addNewPPr();
}
CTJc ctjc = ctppr.getJc();
if (ctjc == null) {
ctjc = ctppr.addNewJc();
}
//水平居中
ctjc.setVal(STJc.CENTER);
cell.setText(null == content ? "" : content);
}
public static StringBuilder getAppendContent(StringBuilder builder, String content) {
if (StringUtils.isEmpty(content)) {
return builder;
}
if (builder.toString().contains(content)) {
return builder;
}
builder.append(content);
return builder;
}
public static List<String> compareSys() {
List<String> compareList = new ArrayList<>();
compareList.add("<");
compareList.add(">");
compareList.add("=");
compareList.add("≥");
compareList.add("≤");
compareList.add("#");
return compareList;
}
public static boolean compareIsOk(String compare) {
if (StringUtils.isBlank(compare)) {
return false;
}
return StringHandleUtils.compareSys().contains(compare);
}
/**
* 判断 limitValue 是否区间形式, 这样以 # 分隔的为区间形式: 1#9
*
* @param limitValue 限量值
* @return true or false
*/
public static boolean isInterval(String limitValue) {
if (StringUtils.isBlank(limitValue)) {
return false;
}
if (!limitValue.contains(StringStaticDataUtils.JING)) {
return false;
}
if (limitValue.split(StringStaticDataUtils.JING).length != 2) {
return false;
}
if (!NumberUtils.isCreatable(limitValue.split(StringStaticDataUtils.JING)[0])) {
return false;
}
if (!NumberUtils.isCreatable(limitValue.split(StringStaticDataUtils.JING)[1])) {
return false;
}
if (NumberUtils.createBigDecimal(limitValue.split(StringStaticDataUtils.JING)[0])
.compareTo(NumberUtils.createBigDecimal(limitValue.split(StringStaticDataUtils.JING)[1])) > 0) {
return false;
}
return true;
}
public static String getString(String string) {
if (StringUtils.isEmpty(string)) {
return "";
}
return string;
}
public static String getStringToSkewLine(String string) {
if (StringUtils.isEmpty(string)) {
return "/";
}
return string;
}
public static List<String> getDiffrent(Collection<String> list1, Collection<String> list2) {
List<String> diff = new ArrayList<>();
for (String str : list1) {
if (!list2.contains(str)) {
diff.add(str);
}
}
return diff;
}
public static String getAttributesFromCodeRules(String code) {
String[] codeArray = code.split("\\.");
if (codeArray.length < 2) {
return "";
}
return StringHandleUtils.getExcepLastOne(codeArray[1]);
}
public static String getFieldValueByFieldName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(o, new Object[]{});
if (value instanceof Date) {
return DateUtils.toYearMonthDay((Date) value);
}
return value.toString();
} catch (Exception e) {
return "/";
}
}
public static void setFieldValueByFieldName(String fieldName, Object o,Object value) {
try {
Field objField = o.getClass().getDeclaredField(fieldName);
objField.setAccessible(true);
objField.set(o, value);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getFieldIfNummReturnBlankValueByFieldName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(o, new Object[]{});
if (value instanceof Date) {
return DateUtils.toYearMonthDay((Date) value);
}
return value.toString();
} catch (Exception e) {
return "";
}
}
public static Object getObjectValue(Object object) {
if (null == object) {
return "";
}
if (object instanceof Integer) {
if (object.toString().equalsIgnoreCase(StringStaticDataUtils.ONE)) {
return "是";
}
if (object.toString().equalsIgnoreCase(StringStaticDataUtils.ZERO)) {
return "否";
}
}
if (object instanceof IBaseEnum) {
return ((IBaseEnum) object).getDisplay();
}
return object;
}
public static boolean isOnlyZeroOne(String string) {
if (StringUtils.isBlank(string)) {
return false;
}
return StringStaticDataUtils.ONE.equals(string) || StringStaticDataUtils.ZERO.equals(string);
}
public static String getObjectDifferent(String title, Map<String, String> propertyNameMap, Map<String, List<Object>>... intArray) {
return StringHandleUtils.getObjectDifferent(title, propertyNameMap, Arrays.asList(intArray));
}
public static String getObjectDifferent(String title, Map<String, String> propertyNameMap, List<Map<String, List<Object>>> intArray) {
int length = 0;
for (Map<String, List<Object>> map : intArray) {
if (null != map) {
length += map.size();
}
}
if (length == 0) {
return "";
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(title);
for (Map<String, List<Object>> map : intArray) {
for (Map.Entry<String, List<Object>> content : map.entrySet()) {
stringBuilder.append("'").append(propertyNameMap.get(content.getKey())).append("'由'").append(StringHandleUtils.getObjectValue(content.getValue().get(1))).append("'修改为'").append(StringHandleUtils.getObjectValue(content.getValue().get(0))).append("'、");
}
}
return StringHandleUtils.getExcepLastOne(stringBuilder.toString());
}
public static String getObjectFromMap(Map<Integer, String> map, Integer key) {
for (Map.Entry<Integer, String> m : map.entrySet()) {
if (m.getKey().equals(key)) {
return m.getValue().replace("{", "").replace("}", "")
.replace("(", "").replace(")", "")
.replace("#", "").replace("&", "")
.replace("*", "")
.replace("@", "");
}
}
return "";
}
public static String getSameElement(List<String> list) {
String[] indexArr;
Map<String, String> map = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
String key = list.get(i);
String old = map.get(key);
if (old != null) {
map.put(key, old + "," + (i + 1));
} else {
map.put(key, "" + (i + 1));
}
}
Iterator<String> it = map.keySet().iterator();
int index = -1;
List<String> repeatList = Lists.newArrayList();
while (it.hasNext()) {
String key = it.next();
String value = map.get(key);
if (value.indexOf(",") != -1) {
repeatList.add(key);
indexArr = value.split(",");
for (int i = 0; i < indexArr.length; i++) {
index = Integer.parseInt(indexArr[i]) - 1;
list.set(index, list.get(index) + (1 + i));
}
}
}
return StringHandleUtils.join(repeatList);
}
public static boolean containsString(String text, String... strings) {
for (String str : strings) {
if (text.contains(str)) {
return true;
}
}
return false;
}
public static <T extends Comparable<T>> boolean compareListEqual(List<T> a, List<T> b) {
if (a.size() != b.size()) {
return false;
}
Collections.sort(a);
Collections.sort(b);
for (int i = 0; i < a.size(); i++) {
if (!a.get(i).equals(b.get(i))) {
return false;
}
}
return true;
}
public static String convertBlankString(String str, String replace) {
return StringUtils.isBlank(str) ? replace : str;
}
public static String parse(CharSequence cs) {
return StringHandleUtils.parse(cs, "");
}
public static String parse(CharSequence cs, String defVal) {
if (StringUtils.isEmpty(defVal)) {
defVal = "";
}
return StringUtils.isEmpty(cs) ? defVal : cs.toString();
}
public static String getObjectFromMapAll(Map<Integer, String> map, Integer key) {
//改动时需注意,字母不可乱去
for (Map.Entry<Integer, String> entry : map.entrySet()) {
if (entry.getKey().equals(key)) {
return entry.getValue().replace("{", "").replace("}", "")
.replace("(", "").replace(")", "")
.replace("#", "").replace("&", "")
.replace("*", "")
.replace("@", "")
.replace(".", "")
.replace("I", "")
.replace("$", "");
}
}
return "";
}
public static String getSnJoinStringSimple(Map<String, List<String>> snMap) {
StringBuffer snBuffer = new StringBuffer();
for (Map.Entry<String, List<String>> map : snMap.entrySet()) {
String[] array = new String[map.getValue().size()];
int length = map.getValue().size();
for (int i = 0; i < length; i++) {
array[i] = map.getValue().get(i);
}
Arrays.sort(array);
snBuffer.append(getContinuousStringDataSimple(array, map.getKey())).append("、");
}
String result = snBuffer.toString();
if (StringUtils.isBlank(result)) {
return result;
} else {
return result.substring(0, result.length() - 1);
}
}
public static String getContinuousStringDataSimple(String[] intString, String stringPre) {
StringBuffer result = new StringBuffer();
if (ArrayUtils.isEmpty(intString)) {
return "";
}
if (intString.length == 1) {
return stringPre + intString[0];
}
for (String string : intString) {
try {
Integer.parseInt(string);
} catch (Exception e) {
return "";
}
}
int[] a = new int[intString.length];
for (int i = 0; i < intString.length; i++) {
a[i] = Integer.parseInt(intString[i]);
}
Arrays.sort(a);
if (a[0] + 1 != a[1]) {
result.append(intString[0] + "、");
} else {
result.append(intString[0] + "~");
}
for (int i = 1; i < a.length - 1; i++) {
if ((a[i] - 1 != a[i - 1]) & (a[i] + 1 != a[i + 1])) {
result.append(intString[i] + "、");
} else if ((a[i] - 1 == a[i - 1]) & (a[i] + 1 != a[i + 1])) {
result.append(intString[i] + "、");
} else if ((a[i] - 1 == a[i - 1]) & (a[i] + 1 == a[i + 1])) {
result.append("");
} else {
result.append(intString[i] + "~");
}
}
result.append(intString[a.length - 1]);
return stringPre + result.toString();
}
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot >-1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
}
package com.patzn.cloud.service.lims.common;
import java.util.*;
public final class StringStaticDataUtils {
public static final String SUCCESS = "success";
public static final String FALSE = "false";
public static final String ZERO = "0";
public static final String ONE = "1";
public static final String JING = "#";
public static final String SELECT_WAITING_ITEM = "请选择待提交的项目";
public static final String CONTRACT_ID_NULL = "委托id未传递";
public static final String CONTRACT_WRONG = "委托有误";
public static final String SELECT_SAMPLE = "请选择样品";
public static final String DATA_WRONG = "数据有误";
public static final String MSG_TITLE_QC_TASK = "新的质控编制任务";
public static final Map<String,List<String>> mapItemFlows=new HashMap<>();
static {
List<String> draftItemList=new ArrayList<>();
draftItemList.add("ALLOT");
draftItemList.add("INPUT");
mapItemFlows.put("DRAFT",draftItemList);
List<String> allotItemList=new ArrayList<>();
allotItemList.add("INPUT");
mapItemFlows.put("ALLOT",allotItemList);
List<String> inputItemList=new ArrayList<>();
inputItemList.add("REVIEW");
inputItemList.add("AUDIT");
inputItemList.add("COLLECT");
mapItemFlows.put("INPUT",inputItemList);
List<String> reviewItemList=new ArrayList<>();
reviewItemList.add("AUDIT");
reviewItemList.add("COLLECT");
mapItemFlows.put("REVIEW",reviewItemList);
List<String> auditItemList=new ArrayList<>();
auditItemList.add("COLLECT");
mapItemFlows.put("AUDIT",auditItemList);
List<String> collectItemList=new ArrayList<>();
collectItemList.add("END");
mapItemFlows.put("COLLECT",collectItemList);
}
public static final Map<String,List<String>> mapFlows=new HashMap<>();
static {
List<String> draftList=new ArrayList<>();
draftList.add("SEARCH");
draftList.add("PLAN");
draftList.add("REVIEW");
draftList.add("SIGN");
draftList.add("SAMPLING_ARRANGE");
mapFlows.put("DRAFT",draftList);
List<String> searchList=new ArrayList<>();
searchList.add("PLAN");
searchList.add("REVIEW");
searchList.add("SIGN");
searchList.add("SAMPLING_ARRANGE");
mapFlows.put("SEARCH",searchList);
List<String> planList=new ArrayList<>();
planList.add("PROJECT_LEADER");
planList.add("REVIEW");
planList.add("SIGN");
planList.add("SAMPLING_ARRANGE");
mapFlows.put("PLAN",planList);
List<String> planCheckList=new ArrayList<>();
planCheckList.add("REVIEW");
planCheckList.add("SIGN");
planCheckList.add("SAMPLING_ARRANGE");
mapFlows.put("PROJECT_LEADER",planCheckList);
List<String> reviewList=new ArrayList<>();
reviewList.add("SIGN");
reviewList.add("SAMPLING_ARRANGE");
mapFlows.put("REVIEW",reviewList);
List<String> signList=new ArrayList<>();
signList.add("SAMPLING_ARRANGE");
mapFlows.put("SIGN",signList);
List<String> samplingArrangeList=new ArrayList<>();
samplingArrangeList.add("SAMPLING");
mapFlows.put("SAMPLING_ARRANGE",samplingArrangeList);
List<String> samplingList=new ArrayList<>();
samplingList.add("RECEIVE");
mapFlows.put("SAMPLING",samplingList);
List<String> receiveList=new ArrayList<>();
receiveList.add("WAIT_QC");
receiveList.add("TESTING");
mapFlows.put("RECEIVE",receiveList);
List<String> testingList=new ArrayList<>();
receiveList.add("REPORT_ALLOT");
mapFlows.put("TESTING",testingList);
List<String> reportAllotList=new ArrayList<>();
reportAllotList.add("REPORT_MAKE");
mapFlows.put("REPORT_ALLOT",reportAllotList);
List<String> reportMakeList=new ArrayList<>();
reportMakeList.add("REPORT_CHECK");
mapFlows.put("REPORT_MAKE",reportMakeList);
List<String> reportCheckList=new ArrayList<>();
reportCheckList.add("REPORT_ISSUE");
mapFlows.put("REPORT_CHECK",reportCheckList);
List<String> reportIssueList=new ArrayList<>();
reportIssueList.add("REPORT_PRINT");
mapFlows.put("REPORT_ISSUE",reportIssueList);
List<String> reportPrintList=new ArrayList<>();
reportPrintList.add("REPORT_FILE");
mapFlows.put("REPORT_PRINT",reportPrintList);
List<String> reportFileList=new ArrayList<>();
reportFileList.add("END");
mapFlows.put("REPORT_FILE",reportFileList);
}
public static final Map<String,String> mapFlowOption=new LinkedHashMap<>();
static {
mapFlowOption.put("DRAFT", "草稿");
mapFlowOption.put("SEARCH", "现场调查");
mapFlowOption.put("PLAN", "方案编制");
mapFlowOption.put("PROJECT_LEADER", "项目负责人评审");
mapFlowOption.put("TECHNOLOGY_LEADER", "技术负责人评审");
mapFlowOption.put("REVIEW", "采样委托评审");
mapFlowOption.put("SIGN", "采样委托签订");
mapFlowOption.put("SAMPLING_ARRANGE", "采样任务安排");
mapFlowOption.put("SAMPLING", "采样任务进行中");
mapFlowOption.put("RECEIVE", "待样品接收发放");
mapFlowOption.put("WAIT_QC", "待实验室加质控");
mapFlowOption.put("TESTING", "实验室检测中");
mapFlowOption.put("REPORT_ALLOT", "待报告编制分配");
mapFlowOption.put("REPORT_MAKE", "待报告编制");
mapFlowOption.put("REPORT_CHECK", "待报告审核");
mapFlowOption.put("REPORT_ISSUE", "待报告签发");
mapFlowOption.put("REPORT_PRINT", "待报告打印发放");
mapFlowOption.put("REPORT_FILE", "待报告归档");
mapFlowOption.put("END", "结束");
}
public static final Map<String,String> mapFlowItemOption=new LinkedHashMap<>();
static {
mapFlowItemOption.put("DRAFT", "初始");
mapFlowItemOption.put("ALLOT", "待分配");
mapFlowItemOption.put("CLAIM", "待认领");
mapFlowItemOption.put("INPUT", "待数据录入");
mapFlowItemOption.put("REVIEW", "待数据复核");
mapFlowItemOption.put("AUDIT", "待数据审核");
mapFlowItemOption.put("COLLECT", "数据汇总");
mapFlowItemOption.put("END", "检测完成");
}
public static final List<String> reportModelList=new ArrayList<>();
static {
reportModelList.add("envReport.docx");
reportModelList.add("envSendReport.docx");
reportModelList.add("envSampleItemReport.docx");
}
public static final List<String> soilAptitudeListTemplate=new ArrayList<>();
static {
soilAptitudeListTemplate.add("试验名称");
soilAptitudeListTemplate.add("检定依据");
soilAptitudeListTemplate.add("检测科室");
soilAptitudeListTemplate.add("英文名称");
soilAptitudeListTemplate.add("试验项目英文简写");
soilAptitudeListTemplate.add("大类");
soilAptitudeListTemplate.add("小类");
soilAptitudeListTemplate.add("试验方法");
soilAptitudeListTemplate.add("备注");
}
public static final List<String> soilAptitudeListColumn=new ArrayList<>();
static {
soilAptitudeListColumn.add("name");
soilAptitudeListColumn.add("testBasis");
soilAptitudeListColumn.add("groupName");
soilAptitudeListColumn.add("elName");
soilAptitudeListColumn.add("shortName");
soilAptitudeListColumn.add("mainType");
soilAptitudeListColumn.add("smallType");
soilAptitudeListColumn.add("testMethod");
soilAptitudeListColumn.add("remark");
}
public static final List<String> importEntrustTitle=new ArrayList<>();
static {
importEntrustTitle.add("说明:");
importEntrustTitle.add("说明");
importEntrustTitle.add("制 表");
importEntrustTitle.add("批 准");
importEntrustTitle.add("土质试验项目单");
importEntrustTitle.add("制表");
importEntrustTitle.add("批准");
importEntrustTitle.add("样品编号");
importEntrustTitle.add("样\n" +
"品\n" +
"编\n" +
"号");
}
public static final Map<String,String> mapGdsColumnCheck=new LinkedHashMap<>();
static {
mapGdsColumnCheck.put("Stage Number","stageNumber");
mapGdsColumnCheck.put("Time since start of test (s)","timeSinceStartOfTest");
mapGdsColumnCheck.put("Time since start of stage (s)","timeSinceStartOfStage");
mapGdsColumnCheck.put("Axial Displacement (mm)","axialDisplacement");
mapGdsColumnCheck.put("Axial Load (kN)","axialLoad");
mapGdsColumnCheck.put("Horizontal Displacement (mm)","horizontalDisplacement");
mapGdsColumnCheck.put("Horizontal Load (kN)","horizontalLoad");
mapGdsColumnCheck.put("Pore Water Pressure (kPa)","poreWaterPressure");
mapGdsColumnCheck.put("Back Pressure (kPa)","backPressure");
mapGdsColumnCheck.put("Back Volume (mm3)","backVolume");
mapGdsColumnCheck.put("Undefined Transducer 1","undefinedTransducerOne");
mapGdsColumnCheck.put("Undefined Transducer 2","undefinedTransducerTwo");
mapGdsColumnCheck.put("Ring Shear Torque (Nm)","ringShearTorqueNm");
mapGdsColumnCheck.put("Ring Shear Angle (degs)","ringShearTorqueDegs");
mapGdsColumnCheck.put("Lower Chamber Pr (kPa)","lowerChamberPr");
mapGdsColumnCheck.put("Lower Chamber Vol (mm3)","lowerChamberVol");
mapGdsColumnCheck.put("Axial Displacement 2 (mm)","axialDisplacementTwo");
mapGdsColumnCheck.put("Horizontal Displacement 2 (mm)","horizontalDisplacementTwo");
mapGdsColumnCheck.put("Ring Shear Load 1 (kN)","ringShearLoadOne");
mapGdsColumnCheck.put("Ring Shear Load 2 (kN)","ringShearLoadTwo");
mapGdsColumnCheck.put("Axial Load 2 (kN)","axialLoadTwo");
mapGdsColumnCheck.put("Horizontal Load 2 (kN)","horizontalLoadTwo");
mapGdsColumnCheck.put("Horizontal Load 3 (kN)","horizontalLoadThree");
mapGdsColumnCheck.put("Axial Stroke (mm)","axialStroke");
mapGdsColumnCheck.put("Horizontal Stroke (mm)","horizontalStroke");
mapGdsColumnCheck.put("Pore Air Pressure (kPa)","poreAirPressure");
mapGdsColumnCheck.put("Pore Air Pressure 2 (kPa)","poreAirPressureTwo");
mapGdsColumnCheck.put("Atmospheric Pressure (kPa)","atmosphericPressure");
mapGdsColumnCheck.put("Back to Air differential (kPa)","backToAirDifferential");
mapGdsColumnCheck.put("Cell Pressure (kPa)","cellPressure");
mapGdsColumnCheck.put("Cell Volume (mm3)","cellVolume");
mapGdsColumnCheck.put("Pore Air Volume (mm3)","poreAirVolume");
mapGdsColumnCheck.put("Axial Strain (%)","axialStrain");
mapGdsColumnCheck.put("Normal Stress (kPa)","normalStress");
mapGdsColumnCheck.put("Horizontal Strain (%) or Horizontal Ring Displacement for Ring Shear Machine (mm)","hsohrdfrsm");
mapGdsColumnCheck.put("Horizontal Stress (kPa) or Shear Stress for Ring Shear Machine (kPa)","hsossfrsm");
mapGdsColumnCheck.put("Horizontal Eff Stress (kPa)","horizontalEffStress");
mapGdsColumnCheck.put("Effective Area (mm2)","effectiveArea");
mapGdsColumnCheck.put("Normal Effective Stress (kPa)","normalEffectiveStress");
mapGdsColumnCheck.put("Average Ring Shear Load (kN)","averageRingShearLoad");
}
public static final Map<String,String> mapGdsMain=new LinkedHashMap<>();
static {
mapGdsMain.put("Initial Height (mm)","initialHeight");
mapGdsMain.put("Initial Diameter (mm)","initialDiameter");
mapGdsMain.put("Specific Gravity (kN/m3):","specificGravityKn");
mapGdsMain.put("Job reference:","jobReference");
mapGdsMain.put("Borehole:","borehole");
mapGdsMain.put("Sample Name:","sampleName");
mapGdsMain.put("Depth:","depth");
mapGdsMain.put("Sample Date (dd/mm/yyyy):","sampleDate");
mapGdsMain.put("Description of Sample:","descriptionOfSample");
mapGdsMain.put("Initial mass (g):","initialMass");
mapGdsMain.put("Initial dry mass (g):","initialDryMass");
mapGdsMain.put("Specific Gravity (ass/meas):","specificGravityAss");
mapGdsMain.put("Test Clause:","testClause");
mapGdsMain.put("Date Test Started:","dateTestStarted");
mapGdsMain.put("Date Test Finished:","dateTestFinished");
mapGdsMain.put("Specimen Type (dis/undis):","specimenType");
mapGdsMain.put("Final Mass:","finalMass");
mapGdsMain.put("Final Dry Mass:","finalDryMass");
mapGdsMain.put("Machine no.:","machineNo");
mapGdsMain.put("Cell No.:","cellNo");
mapGdsMain.put("Job Location:","jobLocation");
mapGdsMain.put("Start of Repeated Data","startOfRepeatedData");
}
}
package com.patzn.cloud.service.lims.common;
import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
/**
* @version 1.0
* 说明 :
*/
public class Word2Pdf {
public static void main(String[] args) {
String sourceFilePath="L:/testPDF/test.xls";//可生成PDF 没问题
String desFilePath="L:\\testPDF\\PDF\\test.pdf";
word2pdf(sourceFilePath, desFilePath);
}
public static boolean getLicense() {
boolean result = false;
try {
InputStream is = Word2Pdf.class.getClassLoader().getResourceAsStream(
"classpath:statis/license.xml");
com.aspose.words.License aposeLic = new com.aspose.words.License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void word2pdf(String sourceFilePath,String desFilePath) {
if (!getLicense()) { // 验证License 若不验证则转化出的PDP文档会有水印产生
return;
}
try {
File file = new File(desFilePath); // 新建一个空白pdf文档
FileOutputStream os = new FileOutputStream(file);
Document doc = new Document(sourceFilePath); // Address是将要被转化的word文档
doc.save(os, SaveFormat.PDF); // 全面支持DOC, DOCX, OOXML, RTF HTML,
// OpenDocument, PDF, EPUB, XPS, SWF
// 相互转换 os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.patzn.cloud.service.lims.common.service;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Map;
public interface IExportService {
String storageWord(XWPFDocument doc, String filePath);
Map<String, Object> wordToMap(String docFilePath);
String filePath(String fileName);
InputStream entrustInputStreamPath(String fileName);
InputStream inputStreamPath(String fileName);
String fileFolderPath(String folder, String fileName);
/**
* <p>
* 下载 DOCX 文件
* </p>
*
* @param response 响应流
* @param fileName 文件名
* @param doc DOCX 文档对象
*/
void downloadDoc(HttpServletResponse response, String fileName, XWPFDocument doc);
void downloadXls(HttpServletResponse response, String fileName, HSSFWorkbook workbook);
void downloadXlsx(HttpServletResponse response, String fileName, XSSFWorkbook workbook);
void downloadXlsxs(HttpServletResponse response, String fileName, SXSSFWorkbook workbook);
XWPFDocument getXWPFDoc(String folder, String modelName);
XWPFDocument getXWPFDoc(InputStream io);
XSSFWorkbook getXSSFWorkbook(String modelName);
SXSSFWorkbook getSXSSFWorkbook(String modelName);
XSSFWorkbook getXSSFWorkbook(InputStream io);
HSSFWorkbook getHSSFWorkbook(String modelName);
}
package com.patzn.cloud.service.lims.common.service;
import com.patzn.cloud.commons.controller.Account;
import java.util.List;
public interface ILmsMsgService {
/**
* <p>
* 发送消息通知
* </p>
*
* @param uri 取拥有uri权限人员的参数
* @param content 发送消息的主体内容
* @param title 标题
* @param account 发送消息的人
* @param toUserId 接受消息的人
*/
void sendMsg(String uri, String content, String title, Account account, List<Long> toUserId);
/**
* <p>
* 发送消息通知
* </p>
*
* @param uri 取拥有uri权限人员的参数
* @param msgType 消息类型
* @param content 发送消息的主体内容
* @param title 标题
* @param account 发送消息的人
* @param toUserId 接受消息的人
*/
void sendMsg(String uri, String msgType, String content, String title, Account account, List<Long> toUserId);
/**
* <p>
* 给审批组下的人发消息
* </p>
*
* @param businessType 消息业务类型
* @param groupAlias 审批组别名
* @param content 消息主题内容
* @param title 标题
* @param account 发送消息的人
*/
void sendMsg(int businessType, String groupAlias, String content, String title, Account account);
}
package com.patzn.cloud.service.lims.common.service;
import com.patzn.cloud.commons.controller.Account;
import java.util.List;
public interface ISteelMsgService {
void sendMsg(String uri, String content, String title, Account account, List<Long> toUserId);
}
package com.patzn.cloud.service.lims.common.service.impl;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.service.lims.common.service.IExportService;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 导出相关
* </p>
*
* @author wwd
* @since 2018-06-13
*/
@Service
public class ExportServiceImpl implements IExportService {
private final Logger logger = LoggerFactory.getLogger(ExportServiceImpl.class);
@Override
public String storageWord(XWPFDocument doc, String filePath) {
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
FileOutputStream out = new FileOutputStream(filePath, true)
) {
doc.write(bos);
out.write(bos.toByteArray());
} catch (Exception e) {
logger.error("保存 word 异常", e);
return null;
}
return filePath;
}
@Override
public Map<String, Object> wordToMap(String docFilePath) {
String filePath = String.format("templates/word/model/%s", docFilePath);
// 兼容打包 JAR 压缩情况处理
logger.debug("doc 文件路径 {}", docFilePath);
XWPFDocument doc = null;
try (InputStream in = this.getClass().getClassLoader().getResourceAsStream(filePath)) {
doc = new XWPFDocument(in);
} catch (Exception e) {
logger.error("word 转 map 异常", e);
}
Map<String, Object> map = new HashMap<>(2);
if (null!=doc&&null != doc.getTables()) {
map.put("table", doc.getTables().iterator());
}
map.put("doc", doc);
return map;
}
@Override
public String filePath(String fileName) {
URL url = this.getClass().getClassLoader().getResource("templates/word/model/" + fileName);
RestAssert.fail(null == url, fileName + "不存在");
return url.getPath();
}
@Override
public String fileFolderPath(String folder,String fileName) {
URL url = this.getClass().getClassLoader().getResource("templates/word/"+folder+"/" + fileName);
RestAssert.fail(null == url, fileName + "不存在");
return url.getPath();
}
public String fileFolderPath(String fileName) {
URL url = this.getClass().getClassLoader().getResource("templates/excel/"+fileName);
RestAssert.fail(null == url, fileName + "不存在");
return url.getPath();
}
public InputStream fileInputStreamPath(String fileName) {
InputStream url = this.getClass().getClassLoader().getResourceAsStream("templates/excel/"+fileName);
return url;
}
@Override
public InputStream entrustInputStreamPath(String fileName) {
InputStream url = this.getClass().getClassLoader().getResourceAsStream("templates/word/entrust/"+fileName);
return url;
}
@Override
public InputStream inputStreamPath(String fileName) {
InputStream url = this.getClass().getClassLoader().getResourceAsStream("templates/"+fileName);
return url;
}
@Override
public void downloadDoc(HttpServletResponse response, String fileName, XWPFDocument doc) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s;charset=UTF-8", fileName));
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream os = response.getOutputStream()
) {
doc.write(bos);
os.write(bos.toByteArray());
os.flush();
} catch (Exception e) {
logger.error("word 转 map 异常", e);
}
}
@Override
public void downloadXls(HttpServletResponse response, String fileName, HSSFWorkbook workbook) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s;charset=UTF-8", fileName));
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream os = response.getOutputStream()
) {
workbook.write(bos);
os.write(bos.toByteArray());
os.flush();
} catch (Exception e) {
logger.error("excel 转 map 异常", e);
}
}
@Override
public void downloadXlsx(HttpServletResponse response, String fileName, XSSFWorkbook workbook) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s;charset=UTF-8", fileName));
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream os = response.getOutputStream()
) {
workbook.write(bos);
os.write(bos.toByteArray());
os.flush();
} catch (Exception e) {
logger.error("excel 转 map 异常", e);
}
}
@Override
public void downloadXlsxs(HttpServletResponse response, String fileName, SXSSFWorkbook workbook) {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.addHeader("Content-Disposition", String.format("attachment; filename=%s;charset=UTF-8", fileName));
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStream os = response.getOutputStream()
) {
workbook.write(bos);
os.write(bos.toByteArray());
os.flush();
} catch (Exception e) {
logger.error("excel 转 map 异常", e);
}
}
@Override
public XWPFDocument getXWPFDoc(String folder, String modelName) {
FileInputStream in;
XWPFDocument doc = null;
try {
in = new FileInputStream(new File(fileFolderPath(folder,modelName)));
doc = new XWPFDocument(in);
} catch (Exception e1) {
e1.printStackTrace();
}
return doc;
}
@Override
public XWPFDocument getXWPFDoc(InputStream io) {
XWPFDocument doc = null;
try {
doc = new XWPFDocument(io);
} catch (Exception e1) {
e1.printStackTrace();
}
return doc;
}
@Override
public XSSFWorkbook getXSSFWorkbook(String modelName){
InputStream is;
XSSFWorkbook xssfWorkbook=null;
try {
is = fileInputStreamPath(modelName);
xssfWorkbook = new XSSFWorkbook(is);
} catch (Exception e1) {
e1.printStackTrace();
}
return xssfWorkbook;
}
@Override
public SXSSFWorkbook getSXSSFWorkbook(String modelName){
InputStream is;
SXSSFWorkbook xssfWorkbook=null;
try {
is = fileInputStreamPath(modelName);
xssfWorkbook = new SXSSFWorkbook(new XSSFWorkbook(is));
xssfWorkbook.setCompressTempFiles(true); //压缩临时文件,很重要,否则磁盘很快就会被写满
} catch (Exception e1) {
e1.printStackTrace();
}
return xssfWorkbook;
}
@Override
public XSSFWorkbook getXSSFWorkbook(InputStream io) {
XSSFWorkbook xssfWorkbook=null;
try {
xssfWorkbook = new XSSFWorkbook(io);
} catch (Exception e1) {
e1.printStackTrace();
}
return xssfWorkbook;
}
@Override
public HSSFWorkbook getHSSFWorkbook(String modelName){
FileInputStream is;
HSSFWorkbook xssfWorkbook=null;
try {
is = new FileInputStream(new File(fileFolderPath(modelName)));
xssfWorkbook = new HSSFWorkbook(is);
} catch (Exception e1) {
e1.printStackTrace();
}
return xssfWorkbook;
}
}
\ No newline at end of file
package com.patzn.cloud.service.lims.common.service.impl;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.mq.MqMsg;
import com.patzn.cloud.mq.MqProperties;
import com.patzn.cloud.service.lims.common.service.ILmsMsgService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class LmsMsgService implements ILmsMsgService {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private AmqpTemplate amqpTemplate;
@Autowired
private MqProperties mqProperties;
@Value("${spring.application.name}")
private String service;
@Override
public void sendMsg(String uri, String content, String title, Account account, List<Long> toUserId) {
sendMsg(uri, null, content, title, account, toUserId);
}
@Override
public void sendMsg(String uri, String msgType, String content, String title, Account account, List<Long> toUserId) {
try {
MqMsg mqMsg = getMqMsg(uri, msgType, content, title, account, toUserId, 0, null);
mqMsg.setService(service);
amqpTemplate.convertAndSend(mqProperties.getTopic().getSoilWorkMsg(), mqMsg);
} catch (AmqpException e) {
logger.error("发送消息异常:", e);
}
}
@Override
public void sendMsg(int businessType, String groupAlias, String content, String title, Account account) {
try {
MqMsg mqMsg = getMqMsg(null, null, content, title, account, null, businessType, groupAlias);
amqpTemplate.convertAndSend(mqProperties.getTopic().getSoilWorkMsg(), mqMsg);
} catch (AmqpException e) {
logger.error("发送消息异常:", e);
}
}
private MqMsg getMqMsg(String uri, String msgType, String content, String title, Account account, List<Long> toUserId, int businessType, String groupAlias) {
MqMsg mqMsg = new MqMsg();
mqMsg.setUid(account.getUserId());
// 消息类型
mqMsg.setMsgType(msgType);
// 路由
mqMsg.setUri(uri);
// 企业ID
mqMsg.setCompanyId(account.getCompanyId());
// 发送人
mqMsg.setSender(account.getUserName());
// 标题
mqMsg.setTitle(title);
// 内容
mqMsg.setContent(content);
// 类型
mqMsg.setType(1);
// 服务名称
mqMsg.setService(service);
// 接收人集合
mqMsg.setReceiverIds(toUserId);
mqMsg.setBusinessType(businessType);
mqMsg.setBusiness(groupAlias);
return mqMsg;
}
}
package com.patzn.cloud.service.lims.config;
import com.netflix.loadbalancer.IRule;
import com.patzn.cloud.zuul.LocalRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.patzn.cloud.commons.controller.LoginHelper;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
/**
* <p>
* Feign拦截器
* </p>
*
* @author hubin
* @since 2017-09-28
*/
@Configuration
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
LoginHelper.setAccessToken(requestTemplate);
}
@Bean
public Request.Options options() {
return new Request.Options(
10000,
10000
);
}
}
package com.patzn.cloud.service.lims.config;
import com.patzn.cloud.commons.spring.ServiceExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* <p>
* 全局异常处理
* </p>
*
* @author hubin
* @since 2017-02-18
*/
@RestControllerAdvice
public class GlobalExceptionHandler extends ServiceExceptionHandler {
}
package com.patzn.cloud.service.lims.config;
import com.baomidou.jobs.starter.EnableJobs;
import org.springframework.context.annotation.Configuration;
/**
* @author dingzg
* @since 2019/10/18
*/
//@EnableJobs
//@Configuration
public class JobsConfig {
}
package com.patzn.cloud.service.lims.config;
import com.baomidou.dynamic.datasource.plugin.MasterSlaveAutoRoutingPlugin;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
import com.baomidou.mybatisplus.plugins.parser.ISqlParser;
import com.baomidou.mybatisplus.plugins.parser.SqlInfo;
import com.baomidou.mybatisplus.plugins.parser.tenant.TenantHandler;
import com.baomidou.mybatisplus.plugins.parser.tenant.TenantSqlParser;
import com.baomidou.mybatisplus.toolkit.PluginUtils;
import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.commons.service.BlockAttackSqlParser;
import com.patzn.cloud.commons.spring.PatznMetaObjectHandler;
import net.sf.jsqlparser.expression.BinaryExpression;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.insert.Insert;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* MybatisPlus 配置
* </p>
*
* @author hubin
* @since 2017-03-31
*/
@EnableTransactionManagement
@Configuration
@MapperScan("com.patzn.cloud.service.lims.*.mapper*")
public class MybatisPlusConfig {
@Autowired
protected HttpServletRequest request;
private Long currentCompanyId() {
try {
return LoginHelper.getAccount(request).getCompanyId();
} catch (Throwable t) {
// 不处理
return null;
}
}
/**
* mybatis-plus分页插件<br>
* 文档:http://mp.baomidou.com<br>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
List<ISqlParser> sqlParserList = new ArrayList<>();
TenantSqlParser tenantSqlParser = new TenantSqlParser() {
@Override
public SqlInfo processParser(Statement statement) {
if (statement instanceof Insert) {
// 不处理插入操作
return null;
}
return super.processParser(statement);
}
@Override
protected BinaryExpression andExpression(Table table, Expression where) {
return super.andExpression(table, where);
}
@Override
public boolean allowProcess(MetaObject metaObject) {
MappedStatement mappedStatement = PluginUtils.getMappedStatement(metaObject);
if ("com.baomidou.mybatisplus.mapper.SqlRunner.SelectList".equals(mappedStatement.getId())) {
return false;
}
return true;
}
};
tenantSqlParser.setTenantHandler(new TenantHandler() {
@Override
public Expression getTenantId() {
return new LongValue(currentCompanyId());
}
@Override
public String getTenantIdColumn() {
return "company_id";
}
@Override
public boolean doTableFilter(String tableName) {
// 过滤不存在企业 ID 的表,兼容企业 ID 不存在定时任务可用
if (null == currentCompanyId()
|| "lms_chemical_stock_delivery".equals(tableName)
|| "lms_customer_detail".equals(tableName)
|| "lms_supplier_detail".equals(tableName)
|| "lms_equip_product".equals(tableName)
|| "lms_staff_rel_org".equals(tableName)
|| "lms_staff_item".equals(tableName)
|| "lms_staff_equip".equals(tableName)
|| "lms_staff_professional".equals(tableName)
|| "food_keywords".equals(tableName)) {
return true;
}
return false;
}
});
sqlParserList.add(tenantSqlParser);
sqlParserList.add(new BlockAttackSqlParser());
paginationInterceptor.setSqlParserList(sqlParserList);
return paginationInterceptor;
}
/**
* mybatis-plus SQL执行效率插件
*/
@Bean
@Profile({"dev", "test"})
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
/**
* 注入自动填充器
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new PatznMetaObjectHandler();
}
/**
* 读写分离配置
*/
@Bean
@Profile({"test"})
public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin(){
return new MasterSlaveAutoRoutingPlugin();
}
}
\ No newline at end of file
package com.patzn.cloud.service.lims.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.patzn.cloud.mq.MqAutoConfiguration;
import com.patzn.cloud.mq.log.LogDisruptor;
/**
* <p>
* RabbitMQ 消息推送服务配置
* </p>
*
* @author hubin
* @since 2018-01-05
*/
@Configuration
public class RabbitMQConfig extends MqAutoConfiguration {
/**
* 初始化耗材归类报警队列
*/
@Bean
public Queue chemicalClassifyWarningQueue() {
return new Queue(mqProperties.getTopic().getChemicalClassifyWarning());
}
/**
* 初始化跟踪日志队列
*/
@Bean
public Queue syslog() {
// 启动 lmax Disruptor
LogDisruptor.INSTANCE.start();
return new Queue(mqProperties.getTopic().getSyslog());
}
/**
* 初始化推送消息队列
*/
@Bean
public Queue pushMsgQueue() {
return new Queue(mqProperties.getTopic().getPushMsg());
}
/**
* 初始化霍煤鸿骏
*/
@Bean
public Queue hmhjQueue() {
return new Queue(mqProperties.getTopic().getHmhjWorkMsg());
}
}
package com.patzn.cloud.service.lims.config;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import com.patzn.report.console.ReportServlet;
/**
* <p>
* 报表配置
* </p>
*
* @author hubin
* @since 2018-12-03
*/
//@Configuration
//@ImportResource("classpath:report-context.xml")
public class ReportConfig {
// @Bean
public ServletRegistrationBean initUReport() {
return new ServletRegistrationBean(new ReportServlet(), "/report/*");
}
}
\ No newline at end of file
package com.patzn.cloud.service.lims.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* <p>
* 服务配置属性,对应 yml 中配置
* </p>
*
* @author hubin
* @since 2018-07-17
*/
@Configuration
@ConfigurationProperties(prefix = "service")
public class ServiceProperties {
/**
* LibreOffice 转换路径 soffice
*/
private String soffice;
private String url;
public String getSoffice() {
return soffice;
}
public void setSoffice(String soffice) {
this.soffice = soffice;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
package com.patzn.cloud.service.lims.config;
import java.util.ArrayList;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* <p>
* RESTful 服务 API 管理框架 Swagger 配置初始化 <br>
* 官方地址:http://swagger.io<br>
* </p>
*
* @author hubin
* @since 2017-08-23
*/
@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "swagger", value = "enable")
public class SwaggerConfig {
/**
* 可以定义多个组,比如本类中定义把test和demo区分开了 (访问页面就可以看到效果了)
*/
@Bean
public Docket testApi() {
//全局参数配置
// List<Parameter> params = new ArrayList<>();
// Parameter jwtHeader = new ParameterBuilder()
// .name(RestConstants.TOKEN_FLAG)
// .defaultValue(RestConstants.TOKEN_DEFAULT)
// .description("访问 Token 登录授权 KEY")
// .modelRef(new ModelRef("string"))
// .parameterType("header")
// .required(false)
// .build();
// params.add(jwtHeader);
// API 配置
ApiSelectorBuilder asb = new Docket(DocumentationType.SWAGGER_2)
// .globalOperationParameters(params)
.apiInfo(this.apiInfo()).select();
asb.apis(RequestHandlerSelectors.basePackage("com.patzn.cloud.service"));
asb.paths(PathSelectors.any());
return asb.build();
}
private ApiInfo apiInfo() {
return new ApiInfo("Lims Service API",
"Lims 服务 API",
"1.0",
"NO terms of service",
new Contact("帕特智能", "", ""),
"帕特智能云",
"http://patzn.com"
, new ArrayList()
);
}
}
package com.patzn.cloud.service.lims.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import com.baomidou.kisso.web.interceptor.SSOSpringInterceptor;
import com.patzn.cloud.commons.spring.LoginHandlerInterceptor;
import com.patzn.cloud.commons.spring.WebServiceConfigurer;
import com.patzn.cloud.mq.log.LogInterceptor;
/**
* <p>
* WEB 初始化相关配置
* </p>
*
* @author hubin
* @since 2017-03-31
*/
@ControllerAdvice
@Configuration
public class WebConfig extends WebServiceConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// SSO 授权拦截器
SSOSpringInterceptor ssoInterceptor = new SSOSpringInterceptor();
ssoInterceptor.setHandlerInterceptor(new LoginHandlerInterceptor());
registry.addInterceptor(ssoInterceptor).addPathPatterns("/**");
// 表单重复提交拦截器
// registry.addInterceptor(new RepeatFormInterceptor()).excludePathPatterns("/list");
// 注入跟踪访问日志
registry.addInterceptor(new LogInterceptor().setService("lims"));
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
package com.patzn.cloud.service.lims.excel.controller;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.commons.toolkit.IoUtils;
import com.patzn.poibox.excel.ExcelHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* Excel 相关控制器
* </p>
*
* @author hubin
* @since 2018-04-08
*/
@Api(description = "Excel 相关操作")
@RestController
@RequestMapping("/v1/excel")
public class ExcelController extends ServiceController {
private static final Map<String, String> TPL = new HashMap<>();
static {
ExcelController.TPL.put("QuotationList", "报价单导入模板");
ExcelController.TPL.put("MeterAptitudeItemImport", "授权资质检测项目导入模板");
ExcelController.TPL.put("MeterSampleImport", "样品导入模板");
ExcelController.TPL.put("MeterAptitudeImport", "授权资质导入模板");
ExcelController.TPL.put("MeterOutAptitudeImport", "资质外计量器具导入模板");
ExcelController.TPL.put("MeterSendSampleImport", "出检样品导入模板");
ExcelController.TPL.put("SoilEntrustImport", "试验委托单导入模板");
ExcelController.TPL.put("SoilAptExpImport", "试样项目导入模板");
ExcelController.TPL.put("TenderContractSupplement.docx", "标书合同(协议)补充单.docx");
ExcelController.TPL.put("TenderContractEvaluationForm.docx", "标书合同(协议)评审表.docx");
ExcelController.TPL.put("TestEntrustBook.docx", "检测委托书.docx");
ExcelController.TPL.put("AnnualTrainingSchedule.doc", "年度培训计划表.doc");
ExcelController.TPL.put("EquipAll.docx", "仪器设备总览表.docx");
ExcelController.TPL.put("ChixuGaiJinJILu.docx", "持续改进记录.docx");
ExcelController.TPL.put("GaiJinPlan.docx", "改进计划.docx");
ExcelController.TPL.put("JinceWuPinDengJI.docx", "检测物品登记表.docx");
ExcelController.TPL.put("KehuTouShuDengJI.docx", "客户投诉登记表.docx");
ExcelController.TPL.put("LiuYangDengJI.docx", "留样登记表.docx");
ExcelController.TPL.put("QuYang.docx", "取(采)样记录.docx");
ExcelController.TPL.put("YangPinBiaoShiKa.docx", "样品标识卡.docx");
ExcelController.TPL.put("YangPinChouYangDan.docx", "样品抽样单.docx");
}
@ApiOperation(value = "根据模板名称下载模板", notes = "根据模板名称下载导入模板")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "模板名称", required = true, paramType = "path", dataType = "String"),
})
@GetMapping("/template/{name}")
public void template(@PathVariable("name") String name) {
RestAssert.fail(null == ExcelController.TPL.get(name), "导入模板不存请联系管理员");
try {
// 文件路径
String filePath = String.format("templates/excel/input/%s.xlsx", name);
// 兼容打包 JAR 压缩情况处理
ExcelHelper.excelTemplateDownload(response, ExcelController.TPL.get(name), getClass().getClassLoader().getResourceAsStream(filePath));
} catch (Throwable t) {
RestAssert.fail("该模板不存在");
}
}
@ApiOperation(value = "根据模板名称下载模板", notes = "根据模板名称下载导入模板")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "模板名称", required = true, paramType = "path", dataType = "String"),
})
@GetMapping("/template_soil/{name}")
public void templateSoil(@PathVariable("name") String name) {
RestAssert.fail(null == ExcelController.TPL.get(name), "导入模板不存请联系管理员");
try {
// 文件路径
String filePath = String.format("templates/soil/%s", name);
// 兼容打包 JAR 压缩情况处理
templateDownload(response, ExcelController.TPL.get(name),
new ClassPathResource(filePath).getInputStream());
} catch (Throwable t) {
RestAssert.fail("该模板不存在");
}
}
public static void templateDownload(HttpServletResponse response, String templateName, InputStream in) {
if (null != in || StringUtils.isNotEmpty(templateName)) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
setExcelHeader(response, templateName);
ServletOutputStream out = response.getOutputStream();
bis = new BufferedInputStream(in);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception var11) {
} finally {
IoUtils.close(new Closeable[]{bis, bos, in});
}
}
}
public static void setExcelHeader(HttpServletResponse response, String templateName) throws UnsupportedEncodingException {
response.reset();
response.setContentType("application/msword;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(templateName, "UTF-8"));
}
}
# 开发环境
server:
exception:
enable: false
swagger:
enable: true
service:
api-url: http://api.dev.patzn.com:7000
url: http://api.dev.patzn.com:7000
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
# url: jdbc:postgresql://localhost:5432/dev_lims_meter
username: postgres
password: 123456
url: jdbc:postgresql://192.168.0.115:5432/dev_lims_hmhj
driver-class-name: org.postgresql.Driver
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: 192.168.0.115
discovery:
health-check-interval: 5s
# host: localhost
rabbitmq:
host: 124.70.150.247
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: dev.topic.push.msg
sys-log: dev.topic.sys.log
chemical-classify-warning: dev.topic.chemical.classify.warning
equip-check-msg: dev.topic.equip.check.msg
report-make-msg: dev.topic.report.make.msg
hmhj-work-msg: dev.topic.hmhj.work.msg
### jobs
jobs:
admin-address: http://api.dev.patzn.com:7000/print
# 对象存储配置
oss:
bucket-name: pt-web-sys
aliyun:
endpoint: http://oss.test.patzn.com
folder: dev/hmhj
#libreOffice 安装信息
libreOffice:
url: C:/Program Files/LibreOffice
# ribbon 路由配置
food.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
print.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
res.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
convert.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
hmhj.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
# 开发环境
server:
exception:
enable: false
swagger:
enable: true
service:
api-url: http://api.dev.patzn.com:7000
url: http://api.dev.patzn.com:7000
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
# url: jdbc:postgresql://localhost:5432/dev_lims_meter
username: dbmeter
password: sfdWrE39&d!Pt
url: jdbc:postgresql://139.9.144.39:5432/pertest_lims_soil
driver-class-name: org.postgresql.Driver
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: localhost
discovery:
health-check-interval: 5s
# host: localhost
rabbitmq:
host: 121.36.130.208
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: dev.topic.push.msg
sys-log: dev.topic.sys.log
chemical-classify-warning: dev.topic.chemical.classify.warning
equip-check-msg: dev.topic.equip.check.msg
env-work-msg: dev.topic.env.work.msg
food-work-msg: dev.topic.food.work.msg
food-statistics-customer-contract: dev.topic.food.statistics.customer.contract
food-statistics-contract-progress: dev.topic.food.statistics.contract.progress
food-statistics-sample-progress: dev.topic.food.statistics.sample.progress
report-make-msg: dev.topic.report.make.msg
### jobs
jobs:
admin-address: http://api.dev.patzn.com:7000/print
# 对象存储配置
oss:
bucket-name: pt-web-sys
aliyun:
endpoint: http://oss.test.patzn.com
folder: dev/soil
# ribbon 路由配置
food.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
print.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
res.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
convert.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
# 测试环境
server:
exception:
enable: false
swagger:
enable: true
service:
api-url: http://api.devtest.patzn.com
url: http://api.devtest.patzn.com
food-url: http://food.devtest.patzn.com
province-item-url: http://60.216.97.250:8087/
soffice: /opt/libreoffice6.1/program/soffice
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://114.116.10.31:5432/devtest_lims
username: dbdevtest
password: devTest&10@31!Bg
# 注册中心配置
cloud:
consul:
host: 114.116.10.31
rabbitmq:
host: 114.116.10.31
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: devtest.topic.push.msg
sys-log: devtest.topic.sys.log
chemical-classify-warning: devtest.topic.chemical.classify.warning
equip-check-msg: devtest.topic.equip.check.msg
env-work-msg: devtest.topic.env.work.msg
food-work-msg: devtest.topic.food.work.msg
food-statistics-customer-contract: devtest.topic.food.statistics.customer.contract
food-statistics-contract-progress: devtest.topic.food.statistics.contract.progress
food-statistics-sample-progress: devtest.topic.food.statistics.sample.progress
report-make-msg: devtest.topic.report.make.msg
# Mongodb GridFS
data:
mongodb:
uri: mongodb://114.116.10.31:27017/lims
grid-fs-database: lims
# Mongodb GridFS 存储
oss:
grid-fs: true
bucket-name: base
\ No newline at end of file
# 开发环境
server:
exception:
enable: false
swagger:
enable: true
service:
api-url: http://api.dev.patzn.com:7000
url: http://api.dev.patzn.com:7000
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
# url: jdbc:postgresql://localhost:5432/dev_lims_meter
url: jdbc:postgresql://139.9.144.39:5432/test_lims_soil
username: dbsoil
password: sfdWrE39&d!Pt
driver-class-name: org.postgresql.Driver
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: localhost
discovery:
health-check-interval: 5s
# host: localhost
rabbitmq:
host: 121.36.130.208
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: dev.topic.push.msg
sys-log: dev.topic.sys.log
chemical-classify-warning: dev.topic.chemical.classify.warning
equip-check-msg: dev.topic.equip.check.msg
report-make-msg: dev.topic.report.make.msg
soil-work-msg: dev.topic.soil.work.msg
### jobs
jobs:
admin-address: http://api.dev.patzn.com:7000/print
# 对象存储配置
oss:
bucket-name: pt-web-sys
aliyun:
endpoint: http://oss.test.patzn.com
folder: dev/soil
#libreOffice 安装信息
libreOffice:
url: C:/Program Files/LibreOffice
# ribbon 路由配置
food.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
print.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
res.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
convert.ribbon.NFLoadBalancerRuleClassName: com.patzn.cloud.zuul.LocalRule
# 测试环境
server:
exception:
to: 1327531085@qq.com;18463106881@163.com
form: ptlims@163.com
subject: 测试 soil服务异常
swagger:
enable: true
service:
api-url: http://api.pertest.patzn.com
url: http://api.pertest.patzn.com
food-url: http://food.pertest.patzn.com
province-item-url: http://60.216.97.250:8087/
soffice: /opt/libreoffice6.2/program/soffice
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://139.9.144.39:5432/test_lims_soil
username: dbsoil
password: sfdWrE39&d!Pt
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: 124.70.150.247
redis:
host: 124.70.150.247
password: patzn123TQa
mail:
host: smtp.163.com
username: ptlims@163.com
password: HFQYDSHMSKTVYRQW
port: 25
protocol: smtp
default-encoding: UTF-8
rabbitmq:
host: 124.70.150.247
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: test.topic.push.msg
sys-log: test.topic.sys.log
chemical-classify-warning: test.topic.chemical.classify.warning
equip-check-msg: test.topic.equip.check.msg
report-make-msg: test.topic.report.make.msg
soil-work-msg: test.topic.soil.work.msg
# 对象存储配置
oss:
bucket-name: pt-web-sys
aliyun:
endpoint: http://oss.test.patzn.com
folder: pertest/soil
#libreOffice 安装信息
libreOffice:
url: /opt/libreOffice6.2
### jobs
jobs:
admin-address: http://api.pertest.patzn.com/print
\ No newline at end of file
# 生产环境
service:
api-url: http://api.patzn.com
url: http://api.patzn.com
food-url: http://food.patzn.com
province-item-url: http://60.216.97.250:8087
soffice: /opt/libreoffice6.1/program/soffice
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://121.36.94.193:5432/pc_lims_soil
username: dbsoil
password: ptd435%a!381
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: 124.70.154.133
rabbitmq:
host: 124.70.154.133
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: pro.topic.push.msg
sys-log: pro.topic.sys.log
chemical-classify-warning: pro.topic.chemical.classify.warning
equip-check-msg: pro.topic.equip.check.msg
report-make-msg: pro.topic.report.make.msg
soil-work-msg: pro.topic.soil.work.msg
redis:
database: 0
host: 124.70.154.133
port: 6379
password: patzn123TQa
#服务监控
boot:
admin:
client:
instance:
service-url: http://${network-ip}:${server.port}
name: food
username: "patznAdmin"
password: "asd9*765"
url:
- http://springadmin.patzn.com
# 对象存储配置
oss:
aliyun:
folder: soil
### jobs
jobs:
admin-address: http://api.patzn.com/print
# 日志
logging:
config: classpath:log4j2-pro.xml
#libreOffice 安装信息
libreOffice:
url: /opt/libreoffice6.2
# 测试环境
server:
exception:
to: 1327531085@qq.com;18463106881@163.com
subject: 测试 food 服务异常
swagger:
enable: true
service:
api-url: http://api.test.patzn.com
url: http://api.test.patzn.com
food-url: http://food.test.patzn.com
province-item-url: http://60.216.97.250:8087/
soffice: /opt/libreoffice6.1/program/soffice
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://121.36.94.193:5432/test_lims_soil
username: dbsoil
password: ptd434%b!361
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: 121.36.130.208
rabbitmq:
host: 121.36.130.208
port: 5672
username: mqbase
password: mqb123#@$5
virtual-host: /
topic:
push-msg: test.topic.push.msg
sys-log: test.topic.sys.log
chemical-classify-warning: test.topic.chemical.classify.warning
equip-check-msg: test.topic.equip.check.msg
env-work-msg: test.topic.env.work.msg
food-work-msg: test.topic.food.work.msg
food-statistics-customer-contract: test.topic.food.statistics.customer.contract
food-statistics-contract-progress: test.topic.food.statistics.contract.progress
food-statistics-sample-progress: test.topic.food.statistics.sample.progress
report-make-msg: test.topic.report.make.msg
# 对象存储配置
oss:
bucket-name: pt-web-sys
aliyun:
endpoint: http://oss.test.patzn.com
folder: test/food
#libreOffice 安装信息
libreOffice:
url: C:/Program Files/LibreOffice
### jobs
jobs:
admin-address: http://api.test.patzn.com/print
\ No newline at end of file
server:
exception:
to: 929339256@qq.com;1516330897@qq.com;18463106881@163.com
subject: 中海油服 soil 服务异常
service:
api-url: http://api.lims.com
url: http://api.lims.com
food-url: http://food.lims.com
province-item-url: http://60.216.97.250:8087
soffice: /opt/libreoffice6.1/program/soffice
spring:
datasource:
username: dbsoiladmin
password: ptoil!%&wzhj768
url: jdbc:postgresql://127.0.0.1:5432/pc_lims_soil
driver-class-name: org.postgresql.Driver
dynamic:
enabled: false
# 注册中心配置
cloud:
consul:
host: 127.0.0.1
rabbitmq:
host: 127.0.0.1
port: 5672
username: patznsomq
password: mqsoil456#@$5
virtual-host: /
topic:
push-msg: pro.topic.push.msg
sys-log: pro.topic.sys.log
chemical-classify-warning: pro.topic.chemical.classify.warning
equip-check-msg: pro.topic.equip.check.msg
report-make-msg: pro.topic.report.make.msg
soil-work-msg: pro.topic.soil.work.msg
redis:
host: 127.0.0.1
password: ptsoil476TMa
# Mongodb GridFS
data:
mongodb:
uri: mongodb://mgluser:soild574ld@127.0.0.1:27017/lims
grid-fs-database: lims
# Mongodb GridFS 存储
oss:
grid-fs: true
bucket-name: base
### jobs
jobs:
admin-address: http://api.lims.com/print
# 日志
logging:
config: classpath:log4j2-pro.xml
server:
port: 8038
exception:
to: 1781849245@qq.com
subject: hmhj 服务异常
compression:
enabled: true
mime-types: application/json
spring:
# 环境 dev|test|pro
profiles:
active: dev
application:
name: hmhj
# 模板引擎配置
freemarker:
prefix: classpath:/templates/html
suffix: .html
cache: false
# thymeleaf模板配置
thymeleaf:
template-loader-path: classpath:/templates/
suffix: .html
cache: false
encoding: UTF-8
# 文件上传大小设置 50MB
servlet:
multipart:
max-request-size: 50MB
max-file-size: 50MB
datasource:
driver-class-name: org.postgresql.Driver
platform: postgres
continue-on-error: true
hikari:
minimum-idle: 5 #最小连接数量
idle-timeout: 180000 #空闲连接存活最大时间
maximum-pool-size: 20 #最大连接数,默认是10
max-lifetime: 1800000 #在连接池中的最长生命周期
connection-timeout: 600000 #超时时间
#validation-timeout: #默认是5秒
cloud:
loadbalancer:
retry:
enabled: true # 是否重试机制,默认 fasle
# 注册中心配置
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true
ip-address: ${network-ip:${spring.cloud.client.ip-address}}
tags: version=1.0,author=pt
health-check-path: /actuator/health
health-check-interval: 15s
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
acl-token: 26fcba2e-c460-2644-be78-584ea3b91a0c
# 缓存配置
cache:
infinispan.config: infinispan.xml
caffeine.spec: maximumSize=500,expireAfterAccess=60s
# Redis 数据库索引(默认为0),如果设置为1,那么存入的key-value都存放在select 1中
redis:
database: 0
host: 124.70.150.247
port: 6379
password: patzn123TQa
mail:
host: smtp.exmail.qq.com
username: admin@qd-partner.com
password: 5Ddz2stH4yrcixo3
port: 587
protocol: smtp
default-encoding: UTF-8
main:
allow-bean-definition-overriding: true
#ribbon超时设置
ribbon:
OkToRetryOnAllOperations: true
MaxAutoRetriesNextServer: 2
MaxAutoRetries: 1
ReadTimeout: 600000
ConnectTimeout: 100000
res:
ribbon:
ReadTimeout: 600000
ConnectTimeout: 100000
standard:
ribbon:
ReadTimeout: 600000
ConnectTimeout: 100000
### jobs
#jobs:
# app-name: soil
# app-port: 8026
#mybatis
mybatis-plus:
mapper-locations: classpath:/mapper/*/*Mapper.xml
type-aliases-package: com.patzn.cloud.service.hmhj.entity
type-enums-package: com.patzn.cloud.service.hmhj.enums
global-config:
#字段策略 0:"忽略判断",1:"非 NULL 判断",2:"非空判断"
field-strategy: 2
# 逻辑删除
logic-delete-value: 1
logic-not-delete-value: 0
# 自定义 SQL 注入器
sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
sql-parser-cache: true
configuration:
cache-enabled: false
map-underscore-to-camel-case: true
# 单点登录
kisso:
config:
signAlgorithm: RS512
rsaCertstore: public.cert
# 日志
logging:
config: classpath:log4j2.xml
pattern:
console: "%-5level - %msg%n"
management:
health:
defaults:
enabled: false
db:
enabled: true
endpoint:
health:
show-details: always
\ No newline at end of file
__________ __ .__ .___
\______ \_____ _/ |_________ ____ ____ | | ____ __ __ __| _/
| ___/\__ \\ __\___ // \ _/ ___\| | / _ \| | \/ __ |
| | / __ \| | / /| | \ \ \___| |_( <_> ) | / /_/ |
|____| (____ /__| /_____ \___| / \___ >____/\____/|____/\____ |
\/ \/ \/ \/ \/
Service-hmhj 霍煤鸿骏LIMS平台服务
<?xml version="1.0" encoding="UTF-8"?>
<infinispan>
<cache-container default-cache="default">
<local-cache name="default"/>
<local-cache name="resource">
<eviction max-entries="200"/>
<expiration lifespan="600000"/>
</local-cache>
</cache-container>
</infinispan>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。-->
<!--monitorInterval:Log4j2能够自动检测修改配置 文件和重新配置本身,设置间隔秒数。-->
<Configuration status="off" monitorInterval="600">
<properties>
<!--通用变量-->
<property name="LOG_HOME">../logs/patzn-service-soil</property>
<property name="ERROR_LOG_FILE_NAME">error</property>
<property name="INFO_LOG_FILE_NAME">info</property>
<Property name="PATTERN">[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} - (%F:%L) - %m%n</Property>
</properties>
<Appenders>
<!-- ELK 日志分析 http://logging.apache.org/log4j/2.x/manual/appenders.html#SocketAppender
<Socket name="Logstash" host="114.115.217.147" port="5044">
<Filters>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<JsonLayout properties="true" compact="true" eventEol="true"/>
</Socket>
-->
<!-- 控制台日志打印 -->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!--输出日志的格式-->
<PatternLayout pattern="${PATTERN}"/>
</Console>
<!-- 服务器日志文件记录 -->
<RollingRandomAccessFile name="ErrorLog" fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout pattern="${PATTERN}"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="128MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="InfoLog" fileName="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout pattern="${PATTERN}"/>
<Filters>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="200MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!--AsyncLogger-->
<AsyncLogger name="com.patzn.cloud" level="debug" includeLocation="true"/>
<AsyncLogger name="org.apache.ibatis" level="error" includeLocation="true"/>
<AsyncLogger name="org.springframework.web" level="error" includeLocation="true"/>
<!--root的logger-->
<AsyncRoot level="error" includeLocation="true">
<AppenderRef ref="Console"/>
<AppenderRef ref="InfoLog"/>
<AppenderRef ref="ErrorLog"/>
<AppenderRef ref="Logstash"/>
</AsyncRoot>
</Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!--status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。-->
<!--monitorInterval:Log4j2能够自动检测修改配置 文件和重新配置本身,设置间隔秒数。-->
<Configuration status="off" monitorInterval="600">
<properties>
<!--通用变量-->
<property name="LOG_HOME">../logs/patzn-service-soil</property>
<property name="ERROR_LOG_FILE_NAME">error</property>
<property name="INFO_LOG_FILE_NAME">info</property>
<Property name="PATTERN">[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} - (%F:%L) - %m%n</Property>
</properties>
<Appenders>
<!-- 控制台日志打印 -->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<Filters>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!--输出日志的格式-->
<PatternLayout pattern="${PATTERN}"/>
</Console>
<!-- 服务器日志文件记录 -->
<RollingRandomAccessFile name="ErrorLog" fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout pattern="${PATTERN}"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="128MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="InfoLog" fileName="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${INFO_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout pattern="${PATTERN}"/>
<Filters>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="128MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!--AsyncLogger-->
<AsyncLogger name="com.patzn.cloud" level="debug" includeLocation="true"/>
<AsyncLogger name="org.apache.ibatis" level="error" includeLocation="true"/>
<AsyncLogger name="springfox.documentation" level="error" includeLocation="true"/>
<AsyncLogger name="org.springframework.web" level="error" includeLocation="true"/>
<!--root的logger-->
<AsyncRoot level="error" includeLocation="true">
<AppenderRef ref="Console"/>
<AppenderRef ref="InfoLog"/>
<AppenderRef ref="ErrorLog"/>
</AsyncRoot>
</Loggers>
</Configuration>
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAucwkbQyl33CAIod4NT64
2Swwjh8izNBdXju6EQTBTGAWBcCBPG3Q2IoNN64jQzRURLlSDZ1oJIB0e65KBkQM
0y8IZcHKRG97f1lYQVWwlqdwtVkn1BwDdBNTRf2CO6fDwxGhukugX91f0KkgNv8B
NXB8AzB3f03XEyzxLFMD0Az8KaYfauc5CV+OP2aPUNEaChhmW2G5Nmmg45iFKCY9
I/UBKFsAeP7rrUxKErY1CSWdbPKeDSwNM+BRqDDNLudxN8Rz1XJzt3Zx2NPNEYbZ
VQDqm2ze/8baozvSsqvnIA3Izd6VuswCIhWkBStypO/q66jOjkv4qWifgNyccIPu
LQIDAQAB
-----END PUBLIC KEY-----
\ No newline at end of file
# 关闭默认报表存储器
report.disableFileProvider=true
report.service=food
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<import resource="classpath:report-console-context.xml"/>
<bean id="propertyConfigurer" parent="report.props">
<property name="location">
<value>classpath:report-config.properties</value>
</property>
</bean>
</beans>
\ No newline at end of file
var CreatedOKLodop7766=null;
//====判断是否需要安装CLodop云打印服务器:====
function needCLodop(){
try{
var ua=navigator.userAgent;
if (ua.match(/Windows\sPhone/i) !=null) return true;
if (ua.match(/iPhone|iPod/i) != null) return true;
if (ua.match(/Android/i) != null) return true;
if (ua.match(/Edge\D?\d+/i) != null) return true;
var verTrident=ua.match(/Trident\D?\d+/i);
var verIE=ua.match(/MSIE\D?\d+/i);
var verOPR=ua.match(/OPR\D?\d+/i);
var verFF=ua.match(/Firefox\D?\d+/i);
var x64=ua.match(/x64/i);
if ((verTrident==null)&&(verIE==null)&&(x64!==null))
return true; else
if ( verFF !== null) {
verFF = verFF[0].match(/\d+/);
if ((verFF[0]>= 41)||(x64!==null)) return true;
} else
if ( verOPR !== null) {
verOPR = verOPR[0].match(/\d+/);
if ( verOPR[0] >= 32 ) return true;
} else
if ((verTrident==null)&&(verIE==null)) {
var verChrome=ua.match(/Chrome\D?\d+/i);
if ( verChrome !== null ) {
verChrome = verChrome[0].match(/\d+/);
if (verChrome[0]>=41) return true;
};
};
return false;
} catch(err) {return true;};
};
//====页面引用CLodop云打印必须的JS文件:====
if (needCLodop()) {
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
var oscript = document.createElement("script");
oscript.src ="http://localhost:8000/CLodopfuncs.js?priority=1";
head.insertBefore( oscript,head.firstChild );
//引用双端口(8000和18000)避免其中某个被占用:
oscript = document.createElement("script");
oscript.src ="http://localhost:18000/CLodopfuncs.js?priority=0";
head.insertBefore( oscript,head.firstChild );
};
//====获取LODOP对象的主过程:====
function getLodop(oOBJECT,oEMBED){
var strHtmInstall="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
var strHtmUpdate="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
var strHtm64_Install="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
var strHtm64_Update="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
var strHtmFireFox="<br><br><font color='#FF00FF'>(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>";
var strHtmChrome="<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>";
var strCLodopInstall="<br><font color='#FF00FF'>CLodop云打印服务(localhost本地)未安装启动!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行安装</a>,安装后请刷新页面。</font>";
var strCLodopUpdate="<br><font color='#FF00FF'>CLodop云打印服务需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>,升级后请刷新页面。</font>";
var LODOP;
try{
var isIE = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
if (needCLodop()) {
try{ LODOP=getCLodop();} catch(err) {};
if (!LODOP && document.readyState!=="complete") {alert("C-Lodop没准备好,请稍后再试!"); return;};
if (!LODOP) {
if (isIE) document.write(strCLodopInstall); else
document.body.innerHTML=strCLodopInstall+document.body.innerHTML;
return;
} else {
if (CLODOP.CVERSION<"3.0.3.7") {
if (isIE) document.write(strCLodopUpdate); else
document.body.innerHTML=strCLodopUpdate+document.body.innerHTML;
};
if (oEMBED && oEMBED.parentNode) oEMBED.parentNode.removeChild(oEMBED);
if (oOBJECT && oOBJECT.parentNode) oOBJECT.parentNode.removeChild(oOBJECT);
};
} else {
var is64IE = isIE && (navigator.userAgent.indexOf('x64')>=0);
//=====如果页面有Lodop就直接使用,没有则新建:==========
if (oOBJECT!=undefined || oEMBED!=undefined) {
if (isIE) LODOP=oOBJECT; else LODOP=oEMBED;
} else if (CreatedOKLodop7766==null){
LODOP=document.createElement("object");
LODOP.setAttribute("width",0);
LODOP.setAttribute("height",0);
LODOP.setAttribute("style","position:absolute;left:0px;top:-100px;width:0px;height:0px;");
if (isIE) LODOP.setAttribute("classid","clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
else LODOP.setAttribute("type","application/x-print-lodop");
document.documentElement.appendChild(LODOP);
CreatedOKLodop7766=LODOP;
} else LODOP=CreatedOKLodop7766;
//=====Lodop插件未安装时提示下载地址:==========
if ((LODOP==null)||(typeof(LODOP.VERSION)=="undefined")) {
if (navigator.userAgent.indexOf('Chrome')>=0)
document.body.innerHTML=strHtmChrome+document.body.innerHTML;
if (navigator.userAgent.indexOf('Firefox')>=0)
document.body.innerHTML=strHtmFireFox+document.body.innerHTML;
if (is64IE) document.write(strHtm64_Install); else
if (isIE) document.write(strHtmInstall); else
document.body.innerHTML=strHtmInstall+document.body.innerHTML;
return LODOP;
};
};
if (LODOP.VERSION<"6.2.2.1") {
if (!needCLodop()){
if (is64IE) document.write(strHtm64_Update); else
if (isIE) document.write(strHtmUpdate); else
document.body.innerHTML=strHtmUpdate+document.body.innerHTML;
};
return LODOP;
};
//===如下空白位置适合调用统一功能(如注册语句、语言选择等):===
//===========================================================
return LODOP;
} catch(err) {alert("getLodop出错:"+err);};
};
table {border-collapse: collapse; border-style: double;border-width:3px;border-color: black;}
td {border-width: 1px;border-style: solid;}
\ No newline at end of file
function test_script(){
document.write('<font color="red">这是用script加入的动态内容</font>');
}
\ No newline at end of file
<License>
<Data>
<Products>
<Product>Aspose.Total for Java</Product>
<Product>Aspose.Words for Java</Product>
</Products>
<EditionType>Enterprise</EditionType>
<SubscriptionExpiry>20991231</SubscriptionExpiry>
<LicenseExpiry>20991231</LicenseExpiry>
<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
</Data>
<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
\ No newline at end of file
12
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>打开Excel文件</title>
<script type="text/javascript">
function Save() {
document.getElementById("PageOfficeCtrl1").WebSave();
}
</script>
<script type="text/javascript">
function AddSeal() {
try{
document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
}catch (e){ };
}
</script>
</head>
<body>
<div style="width:auto;height:700px;" th:utext="${pageoffice}"></div>
</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>打开Word文件</title>
<script type="text/javascript">
function Save() {
document.getElementById("PageOfficeCtrl1").WebSave();
}
</script>
<script type="text/javascript">
function AddSeal() {
try{
document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
}catch (e){ };
}
</script>
</head>
<body>
<div style="width:1000px;height:700px;" th:utext="${pageoffice}"> </div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<SCRIPT type=text/javascript src="/lims/PrintSample10.js"></SCRIPT>
<title>WEB打印控件演示demo</title>
<style id="style1">
table {
border-width: 5px;
border-style: solid;
border-color: #0000FF;
}
td {
border-width: 1px;
border-style: solid;
}
</style>
<script language="javascript" src="/lims/LodopFuncs.js"></script>
</head>
<body id="body01">
<h2><font color="#009999">演示clodop打印</font>
</h2>
<p><a href="javascript:myPreview1()">打印设计</a></p>
<script language="javascript" type="text/javascript">
var LODOP; //声明为全局变量
function myPreview1(){
LODOP=getLodop();
LODOP.PRINT_INITA("0mm","0mm","60.01mm","40.01mm","打印标签");
LODOP.ADD_PRINT_TEXT(0,55,100,20,"备样标签");
LODOP.SET_PRINT_STYLEA(0,"FontName","楷体");
LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
LODOP.SET_PRINT_STYLEA(0,"Bold",1);
LODOP.ADD_PRINT_TEXT(18,11,67,20,"样品名称:");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(19,67,155,19,"2017-04-06");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(44,11,64,20,"样品编号:");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(45,66,152,20,"14578411425");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_BARCODE(59,11,204,35,"128A","20170017-001");
LODOP.SET_PRINT_STYLEA(0,"FontSize",6);
LODOP.ADD_PRINT_TEXT(99,9,80,20,"收样日期:");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(98,72,135,20,"2017-08-06");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(115,9,80,20,"保存条件:");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.ADD_PRINT_TEXT(114,73,136,20,"shd=shhhwveedwsdsds");
LODOP.SET_PRINT_STYLEA(0,"FontSize",8);
LODOP.PRINT_DESIGN();
};
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正在打开编辑文档</title>
<script src="//s1.pstatp.com/cdn/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="http://api.dev.patzn.com:7000/lims/pageoffice.js" id="po_js_main"></script>
</head>
<body>
<a href="javascript:POBrowser.openWindowModeless('/lims/v1/page_office/word','width=1200px;height=800px;');">打开文件 </a>
<script>
function pageOffice() {
POBrowser.openWindowModeless('/lims/v1/page_office/word', 'width=1200px;height=800px;');
}
window.onload = pageOffice();
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编辑原始记录</title>
<script type="text/javascript">
function Save() {
document.getElementById("PageOfficeCtrl1").WebSave();
}
</script>
<script type="text/javascript">
function AddSeal() {
try {
document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
} catch (e) {
}
}
</script>
</head>
<body>
<div style="width:100%;height:1000px;">${pageoffice}</div>
</body>
</html>
package com.patzn.cloud.service.lims.test;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.patzn.cloud.commons.generator.PostgresqlGenerator;
/**
* <p>
* 代码生成 run 执行
* </p>
*
* @author hubin
* @since 2017-08-28
*/
public class LimsCodeGenerator {
public static void main(String[] args) {
new PostgresqlGenerator().setDataSourceConfig(new DataSourceConfig()
.setDbType(DbType.POSTGRE_SQL)
.setDriverName("org.postgresql.Driver")
.setUrl("jdbc:postgresql://192.168.0.115:5432/dev_lims_hmhj")
.setUsername("postgres")
.setPassword("123456")
).execute("lims");
}
}
<License>
<Data>
<Products>
<Product>Aspose.Total for Java</Product>
<Product>Aspose.Words for Java</Product>
</Products>
<EditionType>Enterprise</EditionType>
<SubscriptionExpiry>20991231</SubscriptionExpiry>
<LicenseExpiry>20991231</LicenseExpiry>
<SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
</Data>
<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>
\ No newline at end of file
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1324269818219528193, 1304006677087891457, 1304244453771292673, '留存位置查询', 0, 'sample_keep', '/soil/sample/keep', 'pt-config', NULL, 1, 65, '2020-11-05 16:38:23.065', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1324269818219528193, 1304006677087891457, 1304244453771292673, '留存位置查询', 0, 'sample_keep', '/soil/sample/keep', 'pt-config', NULL, 1, 65, '2020-11-05 16:38:23.065', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1323896863182544897, 1304006677087891457, 1304244453771292673, '副样管理', 0, 'copy', '/soil/sample/copy', 'pt-config', NULL, 1, 55, '2020-11-04 15:56:23.654', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1334793765047459841, 1304006677087891457, 1304244453771292673, '盒号管理', 0, 'sample_box', '/soil/sample/box', 'pt-config', NULL, 1, 1, '2020-12-04 17:36:47.513', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1334793765047459841, 1304006677087891457, 1304244453771292673, '盒号管理', 0, 'sample_box', '/soil/sample/box', 'pt-config', NULL, 1, 1, '2020-12-04 17:36:47.513', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1338658190481367041, 1304006677087891457, 1304245208477577218, '试验项目报告模板', 0, 'item_report', '/soil/report/item_report', 'pt-config', NULL, 1, 1, '2020-12-15 09:32:38.339', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1338658190481367041, 1304006677087891457, 1304245208477577218, '试验项目报告模板', 0, 'item_report', '/soil/report/item_report', 'pt-config', NULL, 1, 1, '2020-12-15 09:32:38.339', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1330763273583169537, 1304006677087891457, 1304246874937470978, '原始记录模板管理', 0, 'template', '/soil/aptitude/record_template', 'pt-config', NULL, 1, 1, '2020-11-23 14:41:03.465', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343361673277194241, 1304006677087891457, 1343358970677411841, '出库管理', 0, 'outstock', '/soil/alone_sample/outstock', 'pt-config', NULL, 1, 195, '2020-12-28 09:02:36.019', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343361673277194241, 1304006677087891457, 1343358970677411841, '出库管理', 0, 'outstock', '/soil/alone_sample/outstock', 'pt-config', NULL, 1, 195, '2020-12-28 09:02:36.019', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343361393781358593, 1304006677087891457, 1343358970677411841, '库房位置管理', 0, 'storehouse_place', '/soil/alone_sample/storehouse_place', 'pt-config', NULL, 1, 196, '2020-12-28 09:01:29.382', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343360814950629377, 1304006677087891457, 1343358970677411841, '库房样品管理', 0, 'storehouse_sample', '/soil/alone_sample/storehouse_sample', 'pt-config', NULL, 1, 197, '2020-12-28 08:59:11.382', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343360397663518721, 1304006677087891457, 1343358970677411841, '入库管理', 0, 'alone_sample_instock', '/soil/alone_sample/instock', 'pt-config', NULL, 1, 199, '2020-12-28 08:57:31.889', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343359611810332674, 1304006677087891457, 1343358970677411841, '收样管理', 0, 'soil_alone_receive', '/soil/alone_sample/receive_sample', 'pt-config', '独立收样管理', 1, 200, '2020-12-28 08:54:24.535', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1343358970677411841, 1304006677087891457, 1304240390677704705, '样品管理', 0, 'soil_sample', '/', 'pt-config', '土工试验独立样品管理', 1, 700, '2020-12-28 08:51:51.669', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1342711206436126721, 1304006677087891457, 1304245208477577218, '汇总表报告模板', 0, 'summary_sheet', '/soil/report/summary_sheet', 'pt-config', NULL, 1, 1, '2020-12-26 13:57:52.64', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1344190601411657730, 1304006677087891457, 1310765372454940673, '样品进度查询', 0, 'sample_progress', '/soil/statistics/sample_progress', 'pt-config', NULL, 1, 90, '2020-12-30 15:56:27.887', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1344190601411657730, 1304006677087891457, 1310765372454940673, '样品进度查询', 0, 'sample_progress', '/soil/statistics/sample_progress', 'pt-config', NULL, 1, 90, '2020-12-30 15:56:27.887', NULL);
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1304244453771292673, "name" = '样品分波', "type" = 0, "code" = 'sample_receive', "uri" = '/soil/sample/receive', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 100, "ctime" = '2020-09-11 10:35:59.522', "ename" = NULL WHERE "id" = 1304247286566465538;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1304244453771292673, "name" = '样品分波', "type" = 0, "code" = 'sample_receive', "uri" = '/soil/sample/receive', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 100, "ctime" = '2020-09-11 10:35:59.522', "ename" = NULL WHERE "id" = 1304247286566465538;
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1345910204256989185, 1304006677087891457, 1310765372454940673, '试验项目进度', 0, 'experiment_progress', '/soil/statistics/experiment_progress', 'pt-config', NULL, 1, 469, '2021-01-04 09:49:33.158', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1346339387936321538, 1304006677087891457, 1304244453771292673, '独立留存', 0, 'alone_keep', '/soil/sample/alone_keep', 'pt-config', NULL, 1, 99, '2021-01-05 14:14:58.517', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1346339387936321538, 1304006677087891457, 1304244453771292673, '独立留存', 0, 'alone_keep', '/soil/sample/alone_keep', 'pt-config', NULL, 1, 99, '2021-01-05 14:14:58.517', NULL);
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样管理', "type" = 0, "code" = 'sample_backups', "uri" = '/soil/sample/backups', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 70, "ctime" = '2020-09-11 10:43:28.608', "ename" = NULL WHERE "id" = 1304249170190643201;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '余样管理', "type" = 0, "code" = 'sample_surplus', "uri" = '/soil/sample/surplus', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 60, "ctime" = '2020-09-11 10:44:25.619', "ename" = NULL WHERE "id" = 1304249409312108545;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '余样处理审批', "type" = 0, "code" = 'surplus_dispose', "uri" = '/soil/sample/surplus_dispose', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 45, "ctime" = '2020-10-20 10:21:23.155', "ename" = NULL WHERE "id" = 1318376737596182530;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样样品处理', "type" = 0, "code" = 'sample_dispose', "uri" = '/soil/sample/dispose', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 50, "ctime" = '2020-09-11 10:46:42.391', "ename" = NULL WHERE "id" = 1304249982975455234;
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1330798482672304129, 1304006677087891457, '审批待办', 'myTask', NULL, NULL, 8, 1, 0);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1330798482672304129, 1304006677087891457, '审批待办', 'myTask', NULL, NULL, 8, 1, 0);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344160245014831105, 1304006677087891457, '土工试验-消息通知', 'messagePanel', NULL, NULL, 8, 1, 100);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344160483163217921, 1304006677087891457, '土工试验-审批待办', 'myTask', NULL, NULL, 8, 1, 95);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344160913192624129, 1304006677087891457, '土工试验-待办任务日历', 'taskCalendar', NULL, NULL, 8, 1, 90);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344161180113936385, 1304006677087891457, '土工试验-待完成委托', 'UnfinishedContract', NULL, NULL, 8, 1, 85);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344161459966287874, 1304006677087891457, '土工试验-项目进度', 'SampleProgress', NULL, NULL, 8, 1, 80);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344161636483571713, 1304006677087891457, '土工试验-个人试验项目查询', 'UnfinishedItem', NULL, NULL, 8, 1, 75);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344161795602882562, 1304006677087891457, '土工试验-年度委托量统计', 'YearContractNum', NULL, NULL, 8, 1, 70);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344161976591294465, 1304006677087891457, '土工试验-检测类型委托统计', 'DetectTypeNum', NULL, NULL, 8, 1, 65);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344162118958555137, 1304006677087891457, '土工试验-委托完成额占比', 'ContractEndNum', NULL, NULL, 8, 1, 60);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1344162304875274241, 1304006677087891457, '土工试验-年度检测量统计', 'YearTestItem', NULL, NULL, 8, 1, 55);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1347739715927781377, 1304006677087891457, 1347738492851957761, '项目报告报告签发', 0, 'exp_report_issue', '/soil/soil_exp_report/issue', 'pt-config', '项目报告签发', 1, 90, '2021-01-09 10:59:22.731', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1347739715927781377, 1304006677087891457, 1347738492851957761, '项目报告报告签发', 0, 'exp_report_issue', '/soil/soil_exp_report/issue', 'pt-config', '项目报告签发', 1, 90, '2021-01-09 10:59:22.731', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1347739449727889410, 1304006677087891457, 1347738492851957761, '项目报告报告审核', 0, 'exp_report_check', '/soil/soil_exp_report/check', 'pt-config', '土工项目报告审核', 1, 95, '2021-01-09 10:58:19.26', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1347739181476982786, 1304006677087891457, 1347738492851957761, '项目报告编制', 0, 'exp_report_make', '/soil/soil_exp_report/make', 'pt-config', NULL, 1, 100, '2021-01-09 10:57:15.304', NULL);
INSERT INTO "public"."sys_resource"("id", "system_id", "pid", "name", "type", "code", "uri", "icon", "remark", "status", "sort", "ctime", "ename") VALUES (1347738492851957761, 1304006677087891457, 1304240390677704705, '项目报告管理', 0, 'soil_exp_report', '/', 'pt-config', '土工试验项目报告管理', 1, 495, '2021-01-09 10:54:31.123', NULL);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1349189699080531970, 1304006677087891457, '土工试验-委托进度', 'ItemFlow', NULL, NULL, 8, 1, 0);
INSERT INTO "public"."sys_module"("id", "system_id", "name", "alias", "img", "remark", "type", "status", "sort") VALUES (1349189699080531970, 1304006677087891457, '土工试验-委托进度', 'ItemFlow', NULL, NULL, 8, 1, 0);
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样样品管理', "type" = 0, "code" = 'sample_keep', "uri" = '/soil/sample/keep', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 55, "ctime" = '2020-12-02 18:08:09.19', "ename" = NULL WHERE "id" = 1334076881641627650;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样样品管理', "type" = 0, "code" = 'sample_keep', "uri" = '/soil/sample/keep', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 55, "ctime" = '2020-12-02 18:08:09.19', "ename" = NULL WHERE "id" = 1334076881641627650;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样管理', "type" = 0, "code" = 'sample_backups', "uri" = '/soil/sample/backups', "icon" = 'pt-config', "remark" = NULL, "status" = 0, "sort" = 70, "ctime" = '2020-09-11 10:43:28.608', "ename" = NULL WHERE "id" = 1304249170190643201;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1343358970677411841, "name" = '备样样品处理', "type" = 0, "code" = 'sample_dispose', "uri" = '/soil/sample/dispose', "icon" = 'pt-config', "remark" = NULL, "status" = 0, "sort" = 50, "ctime" = '2020-09-11 10:46:42.391', "ename" = NULL WHERE "id" = 1304249982975455234;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1304244453771292673, "name" = '备样样品处理', "type" = 0, "code" = 'sample_dispose', "uri" = '/soil/sample/dispose', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 50, "ctime" = '2020-09-11 10:46:42.391', "ename" = NULL WHERE "id" = 1304249982975455234;
UPDATE "public"."sys_resource" SET "system_id" = 1304006677087891457, "pid" = 1304244453771292673, "name" = '备样样品处理', "type" = 0, "code" = 'sample_dispose', "uri" = '/soil/sample/dispose', "icon" = 'pt-config', "remark" = NULL, "status" = 1, "sort" = 50, "ctime" = '2020-09-11 10:46:42.391', "ename" = NULL WHERE "id" = 1304249982975455234;
ALTER TABLE "public"."soil_prepare"
ALTER TABLE "public"."soil_prepare"
ADD COLUMN "keep_location" varchar(255);
COMMENT ON COLUMN "public"."soil_prepare"."keep_location" IS '留样位置';
\ No newline at end of file
ALTER TABLE "public"."soil_sample"
ALTER TABLE "public"."soil_sample"
ADD COLUMN "remark" varchar(255);
COMMENT ON COLUMN "public"."soil_sample"."remark" IS '备注';
DROP INDEX "public"."fk_location_code";
DROP INDEX "public"."fk_location_name";
\ No newline at end of file
ALTER TABLE "public"."soil_entrust"
ALTER TABLE "public"."soil_entrust"
ADD COLUMN "project_name" varchar(150);
COMMENT ON COLUMN "public"."soil_entrust"."project_name" IS '项目名称';
CREATE TABLE "public"."soil_box" (
"id" int8 NOT NULL DEFAULT NULL,
"name" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"box_code" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"quality" numeric(10,2) DEFAULT NULL::numeric,
"unit" varchar(50) COLLATE "pg_catalog"."default" DEFAULT 'g'::character varying,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0
)
;
COMMENT ON COLUMN "public"."soil_box"."id" IS '主键ID';
COMMENT ON COLUMN "public"."soil_box"."name" IS '盒子名称';
COMMENT ON COLUMN "public"."soil_box"."box_code" IS '盒号';
COMMENT ON COLUMN "public"."soil_box"."quality" IS '质量';
COMMENT ON COLUMN "public"."soil_box"."unit" IS '单位';
COMMENT ON COLUMN "public"."soil_box"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_box"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_box"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_box"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_box"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_box"."deleted" IS '是否删除(0否1是)';
-- ----------------------------
-- Primary Key structure for table soil_box
-- ----------------------------
ALTER TABLE "public"."soil_box" ADD CONSTRAINT "soil_box_pkey" PRIMARY KEY ("id");
\ No newline at end of file
CREATE TABLE "public"."soil_original_template" (
CREATE TABLE "public"."soil_original_template" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 NOT NULL DEFAULT NULL,
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"alias" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"type" varchar(30) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uid" int8 NOT NULL DEFAULT NULL,
"ctime" timestamp(0) NOT NULL DEFAULT NULL::timestamp without time zone,
"classify_id" int8 DEFAULT NULL,
"service" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"sort" int2 NOT NULL DEFAULT 0,
"class_type" varchar(120) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"sample_begin_row" int2 DEFAULT NULL,
"sample_begin_col" int2 DEFAULT NULL,
"sample_merger_num" int2 DEFAULT NULL,
"template_sample_num" int2 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_original_template"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_original_template"."company_id" IS '企业 ID';
COMMENT ON COLUMN "public"."soil_original_template"."name" IS '名称';
COMMENT ON COLUMN "public"."soil_original_template"."alias" IS '别名';
COMMENT ON COLUMN "public"."soil_original_template"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_original_template"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_original_template"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_original_template"."type" IS '类型';
COMMENT ON COLUMN "public"."soil_original_template"."uid" IS '用户 ID';
COMMENT ON COLUMN "public"."soil_original_template"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_original_template"."classify_id" IS '分类 ID';
COMMENT ON COLUMN "public"."soil_original_template"."service" IS '服务名';
COMMENT ON COLUMN "public"."soil_original_template"."sort" IS '排序';
COMMENT ON COLUMN "public"."soil_original_template"."class_type" IS '类别';
COMMENT ON COLUMN "public"."soil_original_template"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_original_template"."sample_begin_row" IS '样品开始行';
COMMENT ON COLUMN "public"."soil_original_template"."sample_begin_col" IS '样品开始列';
COMMENT ON COLUMN "public"."soil_original_template"."sample_merger_num" IS '样品合并数';
COMMENT ON COLUMN "public"."soil_original_template"."template_sample_num" IS '模板样品数量';
COMMENT ON TABLE "public"."soil_original_template" IS '模板文件表';
CREATE TABLE "public"."soil_original_template_config" (
"id" int8 NOT NULL DEFAULT NULL,
"attribute_name" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"data_attribute" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"column_place" int2 DEFAULT NULL,
"template_id" int8 DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"deleted" int2 DEFAULT 0,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"merge_begin" int2 DEFAULT NULL,
"merge_end" int2 DEFAULT NULL,
"merge_row_num" int2 DEFAULT NULL,
"formula" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"itemed" int2 DEFAULT NULL,
"unit" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_original_template_config"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_original_template_config"."attribute_name" IS '属性名称';
COMMENT ON COLUMN "public"."soil_original_template_config"."data_attribute" IS '属性';
COMMENT ON COLUMN "public"."soil_original_template_config"."column_place" IS '列位置';
COMMENT ON COLUMN "public"."soil_original_template_config"."template_id" IS '试验项目模板ID';
COMMENT ON COLUMN "public"."soil_original_template_config"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_original_template_config"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_original_template_config"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_original_template_config"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_original_template_config"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_original_template_config"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_original_template_config"."merge_begin" IS '合并开始列';
COMMENT ON COLUMN "public"."soil_original_template_config"."merge_end" IS '合并结束列';
COMMENT ON COLUMN "public"."soil_original_template_config"."merge_row_num" IS '合并行数';
COMMENT ON COLUMN "public"."soil_original_template_config"."formula" IS '原始记录公式';
COMMENT ON COLUMN "public"."soil_original_template_config"."itemed" IS '是否是项目指标';
COMMENT ON COLUMN "public"."soil_original_template_config"."unit" IS '单位';
CREATE TABLE "public"."soil_original_template_version" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 NOT NULL DEFAULT NULL,
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"alias" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"type" varchar(30) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uid" int8 NOT NULL DEFAULT NULL,
"ctime" timestamp(0) NOT NULL DEFAULT NULL::timestamp without time zone,
"template_id" int8 NOT NULL DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_original_template_version"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_original_template_version"."company_id" IS '企业 ID';
COMMENT ON COLUMN "public"."soil_original_template_version"."name" IS '名称';
COMMENT ON COLUMN "public"."soil_original_template_version"."alias" IS '别名';
COMMENT ON COLUMN "public"."soil_original_template_version"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_original_template_version"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_original_template_version"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_original_template_version"."type" IS '类型';
COMMENT ON COLUMN "public"."soil_original_template_version"."uid" IS '用户 ID';
COMMENT ON COLUMN "public"."soil_original_template_version"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_original_template_version"."template_id" IS '模板ID';
COMMENT ON TABLE "public"."soil_original_template_version" IS '模板文件历史表';
-- ----------------------------
-- Primary Key structure for table soil_original_template
-- ----------------------------
ALTER TABLE "public"."soil_original_template" ADD CONSTRAINT "sys_file_template_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Primary Key structure for table soil_original_template_version
-- ----------------------------
ALTER TABLE "public"."soil_original_template_version" ADD CONSTRAINT "meter_file_template_version_pkey" PRIMARY KEY ("id");
CREATE TABLE "public"."soil_exp_report" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"deleted" int2 DEFAULT 0,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"entrust_id" int8 DEFAULT NULL,
"version" int2 DEFAULT NULL,
"uri" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"pdf_object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uname" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"exp_name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_exp_report"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_exp_report"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_exp_report"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_exp_report"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_exp_report"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_exp_report"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_exp_report"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_exp_report"."entrust_id" IS '样品id';
COMMENT ON COLUMN "public"."soil_exp_report"."version" IS '版本';
COMMENT ON COLUMN "public"."soil_exp_report"."uri" IS '证书地址';
COMMENT ON COLUMN "public"."soil_exp_report"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_exp_report"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_exp_report"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_exp_report"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_exp_report"."pdf_object_key" IS 'pdf对象key';
COMMENT ON COLUMN "public"."soil_exp_report"."uname" IS '修改人';
COMMENT ON COLUMN "public"."soil_exp_report"."exp_name" IS '试验项目ID';
CREATE TABLE "public"."soil_exp_report_template" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 NOT NULL DEFAULT NULL,
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"alias" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"type" varchar(30) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uid" int8 NOT NULL DEFAULT NULL,
"ctime" timestamp(0) NOT NULL DEFAULT NULL::timestamp without time zone,
"classify_id" int8 DEFAULT NULL,
"service" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"sort" int2 NOT NULL DEFAULT 0,
"class_type" varchar(120) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"sample_begin_row" int2 DEFAULT NULL,
"sample_begin_col" int2 DEFAULT NULL,
"sample_merger_num" int2 DEFAULT NULL,
"template_sample_num" int2 DEFAULT NULL,
"total_column" int2 DEFAULT NULL,
"data_total_row" int2 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_exp_report_template"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_exp_report_template"."company_id" IS '企业 ID';
COMMENT ON COLUMN "public"."soil_exp_report_template"."name" IS '名称';
COMMENT ON COLUMN "public"."soil_exp_report_template"."alias" IS '别名';
COMMENT ON COLUMN "public"."soil_exp_report_template"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_exp_report_template"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_exp_report_template"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_exp_report_template"."type" IS '类型';
COMMENT ON COLUMN "public"."soil_exp_report_template"."uid" IS '用户 ID';
COMMENT ON COLUMN "public"."soil_exp_report_template"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_exp_report_template"."classify_id" IS '分类 ID';
COMMENT ON COLUMN "public"."soil_exp_report_template"."service" IS '服务名';
COMMENT ON COLUMN "public"."soil_exp_report_template"."sort" IS '排序';
COMMENT ON COLUMN "public"."soil_exp_report_template"."class_type" IS '类别';
COMMENT ON COLUMN "public"."soil_exp_report_template"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_exp_report_template"."sample_begin_row" IS '样品开始行';
COMMENT ON COLUMN "public"."soil_exp_report_template"."sample_begin_col" IS '样品开始列';
COMMENT ON COLUMN "public"."soil_exp_report_template"."sample_merger_num" IS '样品合并数';
COMMENT ON COLUMN "public"."soil_exp_report_template"."template_sample_num" IS '模板样品数量';
COMMENT ON COLUMN "public"."soil_exp_report_template"."total_column" IS '总列数';
COMMENT ON COLUMN "public"."soil_exp_report_template"."data_total_row" IS '数据占用行';
CREATE TABLE "public"."soil_exp_report_template_config" (
"id" int8 NOT NULL DEFAULT NULL,
"attribute_name" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"data_attribute" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"column_place" int2 DEFAULT NULL,
"template_id" int8 DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"deleted" int2 DEFAULT 0,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"merge_begin" int2 DEFAULT NULL,
"merge_end" int2 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."attribute_name" IS '属性名称';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."data_attribute" IS '属性';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."column_place" IS '列位置';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."template_id" IS '试验项目模板ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."merge_begin" IS '合并开始列';
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."merge_end" IS '合并结束列';
CREATE TABLE "public"."soil_exp_report_template_version" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 NOT NULL DEFAULT NULL,
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"alias" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"type" varchar(30) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uid" int8 NOT NULL DEFAULT NULL,
"ctime" timestamp(0) NOT NULL DEFAULT NULL::timestamp without time zone,
"template_id" int8 NOT NULL DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."company_id" IS '企业 ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."name" IS '名称';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."alias" IS '别名';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."type" IS '类型';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."uid" IS '用户 ID';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_exp_report_template_version"."template_id" IS '模板ID';
-- ----------------------------
-- Primary Key structure for table soil_exp_report
-- ----------------------------
ALTER TABLE "public"."soil_exp_report" ADD CONSTRAINT "soil_exp_report_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Primary Key structure for table soil_exp_report_template
-- ----------------------------
ALTER TABLE "public"."soil_exp_report_template" ADD CONSTRAINT "soil_exp_report_template_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Primary Key structure for table soil_exp_report_template_version
-- ----------------------------
ALTER TABLE "public"."soil_exp_report_template_version" ADD CONSTRAINT "soil_exp_report_template_version_pkey" PRIMARY KEY ("id");
ALTER TABLE "public"."soil_original_record"
ALTER TABLE "public"."soil_original_record"
ADD COLUMN "object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL;
COMMENT ON COLUMN "public"."soil_original_record"."object_key" IS '原始记录key';
\ No newline at end of file
ALTER TABLE "public"."soil_original_template"
ALTER TABLE "public"."soil_original_template"
ADD COLUMN "more_sheet" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_original_template"."more_sheet" IS '多Sheet模板(0否1是)';
CREATE TABLE "public"."soil_data_gds" (
"id" int8 NOT NULL DEFAULT NULL,
"initial_height" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"initial_diameter" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"specific_gravity_kn" varchar(10) COLLATE "pg_catalog"."default" DEFAULT NULL::numeric,
"job_reference" varchar(50) COLLATE "pg_catalog"."default" DEFAULT 'g'::character varying,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"borehole" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"sample_name" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"depth" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"sample_date" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"description_of_sample" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"initial_mass" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"initial_dry_mass" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"specific_gravity_ass" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"test_clause" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"date_test_started" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"date_test_finished" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"specimen_type" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"final_mass" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"final_dry_mass" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"machine_no" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"cell_no" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"job_location" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"start_of_repeated_data" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_data_gds"."id" IS '主键ID';
COMMENT ON COLUMN "public"."soil_data_gds"."initial_height" IS '初始高度Initial Height (mm)';
COMMENT ON COLUMN "public"."soil_data_gds"."initial_diameter" IS '初始直径Initial Diameter (mm)';
COMMENT ON COLUMN "public"."soil_data_gds"."specific_gravity_kn" IS 'Specific Gravity (kN/m3)';
COMMENT ON COLUMN "public"."soil_data_gds"."job_reference" IS '工作参考Job reference';
COMMENT ON COLUMN "public"."soil_data_gds"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_data_gds"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_data_gds"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_data_gds"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_data_gds"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_data_gds"."deleted" IS '是否删除(0否1是)';
COMMENT ON COLUMN "public"."soil_data_gds"."borehole" IS '钻孔Borehole';
COMMENT ON COLUMN "public"."soil_data_gds"."sample_name" IS '样品名称Sample Name';
COMMENT ON COLUMN "public"."soil_data_gds"."depth" IS '深度Depth';
COMMENT ON COLUMN "public"."soil_data_gds"."sample_date" IS '样品日期Sample Date (dd/mm/yyyy)';
COMMENT ON COLUMN "public"."soil_data_gds"."description_of_sample" IS '样品描述Description of Sample';
COMMENT ON COLUMN "public"."soil_data_gds"."initial_mass" IS '初始质量Initial mass (g)';
COMMENT ON COLUMN "public"."soil_data_gds"."initial_dry_mass" IS '初始干质量Initial dry mass (g)';
COMMENT ON COLUMN "public"."soil_data_gds"."specific_gravity_ass" IS '比重Specific Gravity (ass/meas)';
COMMENT ON COLUMN "public"."soil_data_gds"."test_clause" IS '试验条款Test Clause';
COMMENT ON COLUMN "public"."soil_data_gds"."date_test_started" IS '测试开始日期Date Test Started';
COMMENT ON COLUMN "public"."soil_data_gds"."date_test_finished" IS '测试结束日期Date Test Finished';
COMMENT ON COLUMN "public"."soil_data_gds"."specimen_type" IS '试样类型Specimen Type (dis/undis)';
COMMENT ON COLUMN "public"."soil_data_gds"."final_mass" IS '最终质量Final Mass';
COMMENT ON COLUMN "public"."soil_data_gds"."final_dry_mass" IS '最终干质量Final Dry Mass';
COMMENT ON COLUMN "public"."soil_data_gds"."machine_no" IS '设备编号Machine no';
COMMENT ON COLUMN "public"."soil_data_gds"."cell_no" IS 'Cell No';
COMMENT ON COLUMN "public"."soil_data_gds"."job_location" IS '工作地点Job Location';
COMMENT ON COLUMN "public"."soil_data_gds"."start_of_repeated_data" IS '重复数据开始Start of Repeated Data';
CREATE TABLE "public"."soil_data_gds_detail" (
"id" int8 NOT NULL DEFAULT NULL,
"gds_id" int8 NOT NULL DEFAULT NULL,
"stage_number" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL,
"time_since_start_of_test" varchar COLLATE "pg_catalog"."default" DEFAULT NULL,
"time_since_start_of_stage" varchar COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_displacement" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_load" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_displacement" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_load" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"pore_water_pressure" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"back_pressure" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"back_volume" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"undefined_transducer_one" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"undefined_transducer_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"ring_shear_torque_nm" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"ring_shear_torque_degs" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"lower_chamber_pr" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"lower_chamber_vol" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_displacement_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_displacement_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"ring_shear_load_one" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"ring_shear_load_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_load_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_load_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_load_three" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_stroke" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_stroke" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"pore_air_pressure" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"pore_air_pressure_two" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"atmospheric_pressure" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"back_to_air_differential" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"cell_pressure" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"cell_volume" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"pore_air_volume" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"axial_strain" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"normal_stress" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"hsohrdfrsm" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"hsossfrsm" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"horizontal_eff_stress" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"effective_area" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"normal_effective_stress" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"average_ring_shear_load" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0
)
;
COMMENT ON COLUMN "public"."soil_data_gds_detail"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."gds_id" IS 'gds的ID';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."stage_number" IS '阶段编号';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."time_since_start_of_test" IS '试验开始后的时间Time since start of test (s)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."time_since_start_of_stage" IS '阶段开始后的时间Time since start of stage (s)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_displacement" IS '轴向位移(mm)Axial Displacement (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_load" IS '轴向载荷(kN)Axial Load (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_displacement" IS '水平位移(mm)Horizontal Displacement (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_load" IS '水平荷载(kN)Horizontal Load (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."pore_water_pressure" IS '孔隙水压力(kPa)Pore Water Pressure (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."back_pressure" IS '背压(kPa)Back Pressure (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."back_volume" IS '回流量(mm3)Back Volume (mm3)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."undefined_transducer_one" IS '未定义传感器1Undefined Transducer 1';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."undefined_transducer_two" IS '未定义传感器2Undefined Transducer 2';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ring_shear_torque_nm" IS '环剪切扭矩(Nm)Ring Shear Torque (Nm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ring_shear_torque_degs" IS '环剪切角(degs)Ring Shear Angle (degs)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."lower_chamber_pr" IS '下腔压力(kPa)Lower Chamber Pr (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."lower_chamber_vol" IS '下腔容积(mm3)Lower Chamber Vol (mm3)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_displacement_two" IS '轴向位移2(mm)Axial Displacement 2 (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_displacement_two" IS '水平位移2(mm)Horizontal Displacement 2 (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ring_shear_load_one" IS '环向剪切荷载1(kN)Ring Shear Load 1 (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ring_shear_load_two" IS '环向剪切荷载2(kN)Ring Shear Load 2 (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_load_two" IS '轴向载荷2(kN)Axial Load 2 (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_load_two" IS '水平荷载2(kN)Horizontal Load 2 (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_load_three" IS '水平荷载3(kN)Horizontal Load 3 (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_stroke" IS '轴向行程(mm)Axial Stroke (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_stroke" IS '水平行程(mm)Horizontal Stroke (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."pore_air_pressure" IS '孔隙气压(kPa)Pore Air Pressure (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."pore_air_pressure_two" IS '孔隙气压2(kPa)Pore Air Pressure 2 (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."atmospheric_pressure" IS '大气压力(kPa)Atmospheric Pressure (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."back_to_air_differential" IS '背压差(kPa)Back to Air differential (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."cell_pressure" IS '围压Cell Pressure (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."cell_volume" IS 'Cell Volume (mm3)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."pore_air_volume" IS '孔隙风量(mm3)Pore Air Volume (mm3)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."axial_strain" IS '轴向应变(%)Axial Strain (%)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."normal_stress" IS '正应力(kPa)Normal Stress (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."hsohrdfrsm" IS '环剪机水平应变(%)或水平环位移(mm)Horizontal Strain (%) or Horizontal Ring Displacement for Ring Shear Machine (mm)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."hsossfrsm" IS '环剪机的水平应力(kPa)或剪切应力(kPa)Horizontal Stress (kPa) or Shear Stress for Ring Shear Machine (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."horizontal_eff_stress" IS '水平有效应力(kPa)Horizontal Eff Stress (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."effective_area" IS '有效面积(mm2)Effective Area (mm2)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."normal_effective_stress" IS '法向有效应力(kPa)Normal Effective Stress (kPa)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."average_ring_shear_load" IS '平均环向剪切荷载(kN)Average Ring Shear Load (kN)';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_data_gds_detail"."deleted" IS '是否删除(0否1是)';
-- ----------------------------
-- Primary Key structure for table soil_data_gds
-- ----------------------------
ALTER TABLE "public"."soil_data_gds" ADD CONSTRAINT "soil_data_gds_pkey" PRIMARY KEY ("id");
ALTER TABLE "public"."soil_exp_report_template"
ALTER TABLE "public"."soil_exp_report_template"
ADD COLUMN "more_sheet" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_exp_report_template"."more_sheet" IS '多Sheet模板(0否1是)';
ALTER TABLE "public"."soil_exp_report_template_config"
ADD COLUMN "merge_row_num" int2 DEFAULT NULL;
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."merge_row_num" IS '合并行数';
ALTER TABLE "public"."soil_exp_report"
ADD COLUMN "group_id" int8,
ADD COLUMN "group_name" varchar(150);
COMMENT ON COLUMN "public"."soil_exp_report"."group_id" IS '检测科室ID';
COMMENT ON COLUMN "public"."soil_exp_report"."group_name" IS '检测科室';
ALTER TABLE "public"."soil_exp_report_template"
ADD COLUMN "template_type" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_exp_report_template"."template_type" IS '模板类型(0试验项目 1汇总表模板)';
ALTER TABLE "public"."soil_exp_report_template_config"
ADD COLUMN "sheet_num" int2;
COMMENT ON COLUMN "public"."soil_exp_report_template_config"."sheet_num" IS 'sheet索引';
\ No newline at end of file
CREATE TABLE "public"."soil_appendix" (
CREATE TABLE "public"."soil_appendix" (
"id" int8 NOT NULL DEFAULT NULL,
"entrust_id" int8 DEFAULT NULL,
"title" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"uname" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"sample_id" int8 DEFAULT NULL,
"type" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"exp_id" int8 DEFAULT NULL,
"sample_code" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"entrust_code" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_appendix"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_appendix"."entrust_id" IS '试验委托单ID';
COMMENT ON COLUMN "public"."soil_appendix"."title" IS '标题';
COMMENT ON COLUMN "public"."soil_appendix"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_appendix"."uid" IS '创建人';
COMMENT ON COLUMN "public"."soil_appendix"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_appendix"."lid" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_appendix"."ltime" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_appendix"."deleted" IS '是否删除';
COMMENT ON COLUMN "public"."soil_appendix"."uname" IS '创建人';
COMMENT ON COLUMN "public"."soil_appendix"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_appendix"."object_key" IS '原始记录key';
COMMENT ON COLUMN "public"."soil_appendix"."sample_id" IS '样品ID';
COMMENT ON COLUMN "public"."soil_appendix"."type" IS '附录类型';
COMMENT ON COLUMN "public"."soil_appendix"."sample_code" IS '样品编号';
COMMENT ON COLUMN "public"."soil_appendix"."entrust_code" IS '委托编号';
COMMENT ON COLUMN "public"."soil_appendix"."name" IS '附录名称';
CREATE TABLE "public"."soil_exp_report_rel_exp" (
"id" int8 NOT NULL DEFAULT NULL,
"exp_report_id" int8 NOT NULL DEFAULT NULL,
"exp_id" int8 DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0
)
;
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."exp_report_id" IS '试验项目报告ID';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."exp_id" IS '试验委托单ID';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."uid" IS '创建人';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."lid" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."ltime" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_exp_report_rel_exp"."deleted" IS '是否删除';
-- ----------------------------
-- Primary Key structure for table soil_appendix
-- ----------------------------
ALTER TABLE "public"."soil_appendix" ADD CONSTRAINT "soil_appendix_pkey" PRIMARY KEY ("id");
-- ----------------------------
-- Primary Key structure for table soil_exp_report_rel_exp
-- ----------------------------
ALTER TABLE "public"."soil_exp_report_rel_exp" ADD CONSTRAINT "soil_exp_report_rel_exp_pkey" PRIMARY KEY ("id");
CREATE TABLE "public"."soil_alone_sample" (
"id" int8 NOT NULL DEFAULT NULL,
"receiver" varchar(150) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL,
"receive_time" timestamp(6) DEFAULT NULL,
"project_name" varchar(120) COLLATE "pg_catalog"."default" DEFAULT NULL,
"project_leader" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
"project_leader_id" int8 DEFAULT NULL,
"borehole_name" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"borehole_number" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL,
"cases_num" int2 DEFAULT NULL,
"registrant_id" int8 DEFAULT NULL,
"registrant" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"regist_time" timestamp(6) DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"status" int2 DEFAULT NULL,
"progress" int2 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_alone_sample"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_alone_sample"."receiver" IS '收样人';
COMMENT ON COLUMN "public"."soil_alone_sample"."receive_time" IS '收样时间';
COMMENT ON COLUMN "public"."soil_alone_sample"."project_name" IS '项目名称';
COMMENT ON COLUMN "public"."soil_alone_sample"."project_leader" IS '项目负责人';
COMMENT ON COLUMN "public"."soil_alone_sample"."project_leader_id" IS '项目负责人ID';
COMMENT ON COLUMN "public"."soil_alone_sample"."borehole_name" IS '钻孔名称';
COMMENT ON COLUMN "public"."soil_alone_sample"."borehole_number" IS '钻孔孔号';
COMMENT ON COLUMN "public"."soil_alone_sample"."cases_num" IS '箱数';
COMMENT ON COLUMN "public"."soil_alone_sample"."registrant_id" IS '登记人ID';
COMMENT ON COLUMN "public"."soil_alone_sample"."registrant" IS '登记人';
COMMENT ON COLUMN "public"."soil_alone_sample"."regist_time" IS '登记时间';
COMMENT ON COLUMN "public"."soil_alone_sample"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_alone_sample"."uid" IS '创建人';
COMMENT ON COLUMN "public"."soil_alone_sample"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_alone_sample"."lid" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_alone_sample"."ltime" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_alone_sample"."deleted" IS '是否删除';
COMMENT ON COLUMN "public"."soil_alone_sample"."status" IS '状态';
COMMENT ON COLUMN "public"."soil_alone_sample"."progress" IS '进度';
COMMENT ON TABLE "public"."soil_alone_sample" IS '收样登记表';
CREATE TABLE "public"."soil_alone_sample_annex" (
"id" int8 NOT NULL DEFAULT NULL,
"alone_sample_id" int8 NOT NULL DEFAULT NULL,
"file_name" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(0) DEFAULT NULL::timestamp without time zone,
"type" varchar(20) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(0) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"remark" varchar(200) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"company_id" int8 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."alone_sample_id" IS '委托ID';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."file_name" IS '文件名称';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."version_id" IS '版本ID';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."uid" IS '创建者ID';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."type" IS '文件类型';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_alone_sample_annex"."company_id" IS '企业ID';
COMMENT ON TABLE "public"."soil_alone_sample_annex" IS '收样管理附件';
-- ----------------------------
-- Primary Key structure for table soil_alone_sample_annex
-- ----------------------------
ALTER TABLE "public"."soil_alone_sample_annex" ADD CONSTRAINT "soil_alone_sample_annex_pkey" PRIMARY KEY ("id");
CREATE TABLE "public"."soil_alone_warehouse_location" (
"id" int8 NOT NULL DEFAULT NULL,
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT NULL::character varying,
"remark" varchar(250) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"lid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"manager" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"manager_id" int8 DEFAULT NULL,
"type" int2 DEFAULT 0,
"warehouse" varchar(150) COLLATE "pg_catalog"."default" DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."name" IS '货架号';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."remark" IS '备注说明';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."manager" IS '位置管理人';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."manager_id" IS '位置管理人ID';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."type" IS '位置分类A待检 B备样 C备用';
COMMENT ON COLUMN "public"."soil_alone_warehouse_location"."warehouse" IS '库房号';
-- ----------------------------
-- Primary Key structure for table soil_alone_warehouse_location
-- ----------------------------
ALTER TABLE "public"."soil_alone_warehouse_location" ADD CONSTRAINT "soil_alone_warehouse_location_pkey" PRIMARY KEY ("id");
CREATE TABLE "public"."soil_alone_in_out_stock" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"storehouse" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"shelf_code" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"in_stocker" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"in_stocker_id" int8 DEFAULT NULL,
"instock_time" timestamp(6) DEFAULT NULL,
"keep_limit_time" timestamp(6) DEFAULT NULL,
"out_stocker" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"out_stocker_id" int8 DEFAULT NULL,
"out_stock" timestamp(6) DEFAULT NULL,
"out_stock_receiver" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"out_stock_receiver_id" int8 DEFAULT NULL,
"entrust_code" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL,
"alone_sample_id" int8 DEFAULT NULL
)
;
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."uid" IS '创建人';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."lid" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."ltime" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."deleted" IS '是否删除';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."storehouse" IS '库房号';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."shelf_code" IS '架位号';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."in_stocker" IS '入库人';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."in_stocker_id" IS '入库人ID';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."instock_time" IS '入库时间';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."keep_limit_time" IS '留存有效期';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."out_stocker" IS '出库人';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."out_stocker_id" IS '出库人ID';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."out_stock" IS '出库时间';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."out_stock_receiver" IS '出库接收方';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."out_stock_receiver_id" IS '出库接收方ID';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."entrust_code" IS '委托编号';
COMMENT ON COLUMN "public"."soil_alone_in_out_stock"."alone_sample_id" IS '样品ID';
ALTER TABLE "public"."soil_sample"
ALTER TABLE "public"."soil_sample"
ADD COLUMN "keep_limit_time" timestamp(6);
COMMENT ON COLUMN "public"."soil_sample"."keep_limit_time" IS '留存有效期';
ALTER TABLE "public"."soil_report"
ADD COLUMN "report_type" varchar(255);
COMMENT ON COLUMN "public"."soil_report"."report_type" IS '报告类型';
\ No newline at end of file
ALTER TABLE "public"."soil_exp_report"
ALTER TABLE "public"."soil_exp_report"
ADD COLUMN "status" int2 DEFAULT 0,
ADD COLUMN "progress" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_exp_report"."status" IS '状态';
COMMENT ON COLUMN "public"."soil_exp_report"."progress" IS '进度';
\ No newline at end of file
ALTER TABLE "public"."soil_sample_operation"
ALTER TABLE "public"."soil_sample_operation"
ADD COLUMN "warehouse" varchar(100);
COMMENT ON COLUMN "public"."soil_sample_operation"."warehouse" IS '库房号';
\ No newline at end of file
ALTER TABLE "public"."soil_alone_sample"
ALTER TABLE "public"."soil_alone_sample"
ALTER COLUMN "cases_num" TYPE varchar(16) USING "cases_num"::varchar(100);
ALTER TABLE "public"."soil_entrust"
ADD COLUMN "project_leader" varchar(100),
ADD COLUMN "project_leader_id" int8;
COMMENT ON COLUMN "public"."soil_entrust"."project_leader" IS '项目负责人';
COMMENT ON COLUMN "public"."soil_entrust"."project_leader_id" IS '项目负责人ID';
\ No newline at end of file
ALTER TABLE "public"."soil_report"
ALTER TABLE "public"."soil_report"
ADD COLUMN "status" int2 DEFAULT 0,
ADD COLUMN "progress" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_report"."status" IS '状态';
COMMENT ON COLUMN "public"."soil_report"."progress" IS '进度';
\ No newline at end of file
ALTER TABLE "public"."soil_exp_report_template"
ALTER TABLE "public"."soil_exp_report_template"
ADD COLUMN "deleted" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_exp_report_template"."deleted" IS '是否删除0否1是';
ALTER TABLE "public"."soil_original_template"
ADD COLUMN "deleted" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_original_template"."deleted" IS '是否删除0否1是';
ALTER TABLE "public"."soil_original_template"
ADD COLUMN "template_type" int2 DEFAULT 0;
COMMENT ON COLUMN "public"."soil_original_template"."template_type" IS '模板类型(0原始记录 1开土制备记录)';
CREATE TABLE "public"."soil_open_soil_record" (
"id" int8 NOT NULL DEFAULT NULL,
"company_id" int8 DEFAULT NULL,
"deleted" int2 DEFAULT 0,
"uid" int8 DEFAULT NULL,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8 DEFAULT NULL,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"entrust_id" int8 DEFAULT NULL,
"version" int2 DEFAULT NULL,
"uri" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"bucket_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"version_id" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"pdf_object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"uname" varchar(100) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"status" int2 DEFAULT 0,
"progress" int2 DEFAULT 0
)
;
COMMENT ON COLUMN "public"."soil_open_soil_record"."id" IS '主键';
COMMENT ON COLUMN "public"."soil_open_soil_record"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."soil_open_soil_record"."deleted" IS '是否删除0否1是';
COMMENT ON COLUMN "public"."soil_open_soil_record"."uid" IS '创建人ID';
COMMENT ON COLUMN "public"."soil_open_soil_record"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."soil_open_soil_record"."lid" IS '最后修改人ID';
COMMENT ON COLUMN "public"."soil_open_soil_record"."ltime" IS '最后修改时间';
COMMENT ON COLUMN "public"."soil_open_soil_record"."entrust_id" IS '样品id';
COMMENT ON COLUMN "public"."soil_open_soil_record"."version" IS '版本';
COMMENT ON COLUMN "public"."soil_open_soil_record"."uri" IS '证书地址';
COMMENT ON COLUMN "public"."soil_open_soil_record"."remark" IS '备注';
COMMENT ON COLUMN "public"."soil_open_soil_record"."bucket_name" IS '桶名称';
COMMENT ON COLUMN "public"."soil_open_soil_record"."object_key" IS '对象key';
COMMENT ON COLUMN "public"."soil_open_soil_record"."version_id" IS '版本';
COMMENT ON COLUMN "public"."soil_open_soil_record"."pdf_object_key" IS 'pdf对象key';
COMMENT ON COLUMN "public"."soil_open_soil_record"."uname" IS '修改人';
COMMENT ON COLUMN "public"."soil_open_soil_record"."status" IS '状态';
COMMENT ON COLUMN "public"."soil_open_soil_record"."progress" IS '进度';
-- ----------------------------
-- Primary Key structure for table soil_open_soil_record
-- ----------------------------
ALTER TABLE "public"."soil_open_soil_record" ADD CONSTRAINT "soil_open_soil_record_pkey" PRIMARY KEY ("id");
ALTER TABLE "public"."soil_sample_operation"
ADD COLUMN "senior_type" varchar(120);
COMMENT ON COLUMN "public"."soil_sample_operation"."senior_type" IS '高级样品分类';
\ No newline at end of file
ALTER TABLE "public"."soil_experiment"
ALTER TABLE "public"."soil_experiment"
ADD COLUMN "order_by" int2;
COMMENT ON COLUMN "public"."soil_experiment"."order_by" IS '排序';
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment