Commit 6adbcc0d by 蘑菇🍄

project init

parent a7cacfe8
/**/.DS_Store
/logs/
/dubbo/
/**/*.iml
/**/test/**/*.java
target/
data/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
.settings
.classpath
.project
.springBeans
mvnw
mvnw.cmd
.mvn
/bin/
.flattened-pom.xml
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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
#
# http://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
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
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
# TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
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
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
wget "$jarUrl" -O "$wrapperJarPath"
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
curl -o "$wrapperJarPath" "$jarUrl"
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
echo Found %WRAPPER_JAR%
) else (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
echo Finished downloading %WRAPPER_JAR%
)
@REM End of extension
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gic</groupId>
<artifactId>jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>gic-jpa-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.17.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.53</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.gic.jpa;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* @author yaorw
*/
@ComponentScan(basePackages = "com.gic")
@EnableJpaRepositories(basePackages = "com.gic.jpa.repository")
@EntityScan(basePackages = "com.gic.jpa.entity")
@SpringBootApplication
public class GicJpaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(GicJpaDemoApplication.class, args);
}
}
package com.gic.jpa.base;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import java.util.ArrayList;
import java.util.List;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/28 16:09
*/
public abstract class BaseServiceImpl<T> {
private final static Logger logger = LoggerFactory.getLogger(BaseServiceImpl.class);
private static final int SIZE = 100;
@Autowired
private EntityManagerFactory entityManagerFactory;
private EntityManager em;
private EntityTransaction transaction ;
@PostConstruct
public void postConstruct(){
logger.info("I'm init method using @PostConstrut...." );
em = entityManagerFactory.createEntityManager();
transaction = em.getTransaction();
logger.info("createEntityManager ...." );
}
public List<T> batchCreate(List<T> list) {
List<List<T>> batchList = averageAssign(list, SIZE);
for (List<T> ts : batchList) {
transaction.begin();
create(ts);
transaction.commit();
em.clear();
}
return list;
}
public List<T> batchUpdate(List<T> list) {
List<List<T>> batchList = averageAssign(list, SIZE);
for (List<T> ts : batchList) {
transaction.begin();
update(ts);
transaction.commit();
em.clear();
}
return list;
}
private void update(List<T> singleList) {
for (T t : singleList) {
this.em.merge(t);
}
this.em.flush();
}
private void create(List<T> singleList) {
for (T t : singleList) {
this.em.persist(t);
}
this.em.flush();
}
/**
* 将一个list均分成n个list,主要通过偏移量来实现的
* @param source
* @return
*/
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
List<List<T>> result = new ArrayList<>();
//先计算出余数
int remaider = source.size() % n;
//然后是商
int number = source.size() / n;
//偏移量
int offset = 0;
for (int i = 0; i < n; i++) {
List<T> value = null;
if (remaider > 0) {
value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
remaider--;
offset++;
} else {
value = source.subList(i * number + offset, (i + 1) * number + offset);
}
result.add(value);
}
return result;
}
}
package com.gic.jpa.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 门店商品表
* @author 牧峰 2018-9-14 16:37:09
*/
@Entity
@Table(name = "order_import")
public class Order {
@Id
@Column(name = "erp_order_id")
private String erpOrderId;
@Column(name = "discount_amount_info")
private String discountAmountInfo;
@Column(name = "amount_payable_info")
private String amountPayableInfo;
@Column(name = "address_info")
private String addressInfo;
@Column(name = "province_name")
private String provinceName;
@Column(name = "city_name")
private String cityName;
@Column(name = "area_name")
private String areaName;
@Column(name = "area_id")
private String areaId;
@Column(name = "order_version")
private String orderVersion;
public String getOrderVersion() {
return orderVersion;
}
public void setOrderVersion(String orderVersion) {
this.orderVersion = orderVersion;
}
public String getProvinceName() {
return provinceName;
}
public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public String getAreaId() {
return areaId;
}
public void setAreaId(String areaId) {
this.areaId = areaId;
}
public String getAddressInfo() {
return addressInfo;
}
public void setAddressInfo(String addressInfo) {
this.addressInfo = addressInfo;
}
public String getErpOrderId() {
return erpOrderId;
}
public void setErpOrderId(String erpOrderId) {
this.erpOrderId = erpOrderId;
}
public String getDiscountAmountInfo() {
return discountAmountInfo;
}
public void setDiscountAmountInfo(String discountAmountInfo) {
this.discountAmountInfo = discountAmountInfo;
}
public String getAmountPayableInfo() {
return amountPayableInfo;
}
public void setAmountPayableInfo(String amountPayableInfo) {
this.amountPayableInfo = amountPayableInfo;
}
}
\ No newline at end of file
package com.gic.jpa.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 门店商品表
* @author 牧峰 2018-9-14 16:37:09
*/
@Entity
@Table(name = "order_item_import")
public class OrderItem {
@Id
@Column(name = "erp_order_item_id")
private String erpOrderItemId;
@Column(name = "discount_amount_info")
private String discountAmountInfo;
@Column(name = "amount_payable_info")
private String amountPayableInfo;
public String getErpOrderItemId() {
return erpOrderItemId;
}
public void setErpOrderItemId(String erpOrderItemId) {
this.erpOrderItemId = erpOrderItemId;
}
public String getDiscountAmountInfo() {
return discountAmountInfo;
}
public void setDiscountAmountInfo(String discountAmountInfo) {
this.discountAmountInfo = discountAmountInfo;
}
public String getAmountPayableInfo() {
return amountPayableInfo;
}
public void setAmountPayableInfo(String amountPayableInfo) {
this.amountPayableInfo = amountPayableInfo;
}
}
\ No newline at end of file
package com.gic.jpa.entity;
/**
* @author 蘑小菇
* @Description:
* @date 2018/12/1 21:27
*/
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "order_logistics_import")
public class OrderLogistics {
@Id
@Column(name = "logisid")
private String id;
@Column(name = "logistics_information")
private String logisticsInformation;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLogisticsInformation() {
return logisticsInformation;
}
public void setLogisticsInformation(String logisticsInformation) {
this.logisticsInformation = logisticsInformation;
}
}
package com.gic.jpa.entity;
/**
* @author 蘑小菇
* @Description:
* @date 2018/12/1 21:27
*/
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "order_refund_logistics_import")
public class OrderRefundLogistics {
@Id
@Column(name = "logisid")
private String id;
@Column(name = "logistics_information")
private String logisticsInformation;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLogisticsInformation() {
return logisticsInformation;
}
public void setLogisticsInformation(String logisticsInformation) {
this.logisticsInformation = logisticsInformation;
}
}
package com.gic.jpa.entity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:36
*/
@Entity
@Table(name="tag_gic_mall_seller_address")
public class SallerAddress {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "seller_address_id")
private String sellerAddressId;
@Column(name = "enterprise_id")
private String enterpriseId;
@Column(name = "contact_name")
private String contactName;
@Column(name = "contact_phone")
private String contactPhone;
@Column(name = "address_type")
private int addressType;
@Column(name = "if_default")
private int ifDefault;
@Column(name = "area_number")
private String areaNumber;
@Column(name = "seat_machine")
private String seatMachine;
@Column(name = "extension")
private String extension;
@Column(name = "province_id")
private String provinceId;
@Column(name = "province_name")
private String provinceName;
@Column(name = "city_id")
private String cityId;
@Column(name = "city_name")
private String cityName;
@Column(name = "area_id")
private String areaId;
@Column(name = "area_name")
private String areaName;
@Column(name = "address_detail")
private String addressDetail;
@Column(name = "if_del")
private int ifDel;
@Column(name = "create_time")
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
@Override
public String toString() {
return "SallerAddress{" +
"sellerAddressId='" + sellerAddressId + '\'' +
", enterpriseId='" + enterpriseId + '\'' +
", contactName='" + contactName + '\'' +
", contactPhone='" + contactPhone + '\'' +
", addressType=" + addressType +
", ifDefault=" + ifDefault +
", areaNumber='" + areaNumber + '\'' +
", seatMachine='" + seatMachine + '\'' +
", extension='" + extension + '\'' +
", provinceId='" + provinceId + '\'' +
", provinceName='" + provinceName + '\'' +
", cityId='" + cityId + '\'' +
", cityName='" + cityName + '\'' +
", areaId='" + areaId + '\'' +
", areaName='" + areaName + '\'' +
", addressDetail='" + addressDetail + '\'' +
", ifDel=" + ifDel +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
public String getSellerAddressId() {
return sellerAddressId;
}
public void setSellerAddressId(String sellerAddressId) {
this.sellerAddressId = sellerAddressId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactPhone() {
return contactPhone;
}
public void setContactPhone(String contactPhone) {
this.contactPhone = contactPhone;
}
public int getAddressType() {
return addressType;
}
public void setAddressType(int addressType) {
this.addressType = addressType;
}
public int getIfDefault() {
return ifDefault;
}
public void setIfDefault(int ifDefault) {
this.ifDefault = ifDefault;
}
public String getAreaNumber() {
return areaNumber;
}
public void setAreaNumber(String areaNumber) {
this.areaNumber = areaNumber;
}
public String getSeatMachine() {
return seatMachine;
}
public void setSeatMachine(String seatMachine) {
this.seatMachine = seatMachine;
}
public String getExtension() {
return extension;
}
public void setExtension(String extension) {
this.extension = extension;
}
public String getProvinceId() {
return provinceId;
}
public void setProvinceId(String provinceId) {
this.provinceId = provinceId;
}
public String getProvinceName() {
return provinceName;
}
public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
public String getCityId() {
return cityId;
}
public void setCityId(String cityId) {
this.cityId = cityId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getAreaId() {
return areaId;
}
public void setAreaId(String areaId) {
this.areaId = areaId;
}
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public int getIfDel() {
return ifDel;
}
public void setIfDel(int ifDel) {
this.ifDel = ifDel;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
package com.gic.jpa.init;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
* @author yaorw
*/
@Component
public class MyCommandLineRunner implements CommandLineRunner {
Logger logger = LoggerFactory.getLogger(MyCommandLineRunner.class);
@Override
public void run(String... args) throws Exception{
logger.info("This will be execute when the project was started!");
}
}
package com.gic.jpa.repository;
import com.gic.jpa.entity.OrderItem;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:46
*/
public interface OrderItemRepository extends JpaRepository<OrderItem, String> {
}
package com.gic.jpa.repository;
import com.gic.jpa.entity.OrderLogistics;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:46
*/
public interface OrderLogisticsRepository extends JpaRepository<OrderLogistics, String> {
}
package com.gic.jpa.repository;
import com.gic.jpa.entity.OrderRefundLogistics;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:46
*/
public interface OrderRefundLogisticsRepository extends JpaRepository<OrderRefundLogistics, String> {
}
package com.gic.jpa.repository;
import com.gic.jpa.entity.Order;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:46
*/
public interface OrderRepository extends JpaRepository<Order, String> {
}
package com.gic.jpa.repository;
import com.gic.jpa.entity.SallerAddress;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:46
*/
public interface SallerAddressRepository extends JpaRepository<SallerAddress, String> {
}
package com.gic.jpa.service;
/**
* @author 蘑小菇
* @Description:
* @date 2018/12/1 18:16
*/
public interface OrderService {
/**
* 格式化订单
*/
void formatOrder();
/**
* 格式化订单数据
*/
void formatOrderItem();
void formatLogistics();
}
package com.gic.jpa.service;
import com.gic.jpa.entity.SallerAddress;
import java.util.List;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:49
*/
public interface SallerAddressService {
String createSallerAddress(SallerAddress address);
void updateSallerAddress(SallerAddress address);
void removeSallerAddress(String addressId);
SallerAddress findSallerAddress(String addressId);
List<SallerAddress> listSallerAddress();
}
package com.gic.jpa.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.jpa.base.BaseServiceImpl;
import com.gic.jpa.entity.Order;
import com.gic.jpa.entity.OrderItem;
import com.gic.jpa.entity.OrderLogistics;
import com.gic.jpa.entity.OrderRefundLogistics;
import com.gic.jpa.repository.OrderItemRepository;
import com.gic.jpa.repository.OrderLogisticsRepository;
import com.gic.jpa.repository.OrderRefundLogisticsRepository;
import com.gic.jpa.repository.OrderRepository;
import com.gic.jpa.service.OrderService;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/20 11:22
*/
@Component
public class OrderServiceImpl extends BaseServiceImpl implements OrderService {
private static Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);
private static final int limit = 400;
/**
* 折扣默认数据
*/
private static final String DEFUALT_DISCOUNT = "{\"503\":0.00,\"504\":0.00,\"400\":0.00,\"501\":0.00,\"502\":0.00}";
/**
* 支付默认
*/
private static final String DEFUALT_PAYINFO = "{\"202\":0.00,\"300\":0.00,\"201\":0.00,\"100\":0.00}";
@Autowired
private OrderRepository orderRepository;
@Autowired
private OrderItemRepository orderItemRepository;
@Autowired
private OrderLogisticsRepository orderLogisticsRepository;
@Autowired
private OrderRefundLogisticsRepository orderRefundLogisticsRepository;
@Override
public void formatOrder() {
long count = orderRepository.count();
long total = (count / limit) + 1;
for (int i = 0; i <= total; i++) {
Pageable pageable = new PageRequest(i, limit);
Page<Order> page = orderRepository.findAll(pageable);
if (page == null || CollectionUtils.isEmpty(page.getContent())) {
continue;
}
CopyOnWriteArrayList<Order> copyList = new CopyOnWriteArrayList(page.getContent());
for (Order order : copyList) {
if (isJSON(order.getAmountPayableInfo()) && isJSON(order.getDiscountAmountInfo())) {
copyList.remove(order);
}
order.setAmountPayableInfo(formatPayinfo(order.getAmountPayableInfo()));
order.setDiscountAmountInfo(formatDiscount(order.getDiscountAmountInfo()));
formatAddress(order);
order.setOrderVersion("version_1.0");
}
if (!CollectionUtils.isEmpty(copyList)) {
orderRepository.save(copyList);
}
}
}
private void formatAddress(Order order) {
if (StringUtils.isNotBlank(order.getAddressInfo())) {
String fullName = order.getProvinceName() + order.getCityName() + order.getAreaName();
String addr =order.getAddressInfo().replace(fullName,"");
order.setAddressInfo(addr);
}
}
@Override
public void formatOrderItem() {
long count = orderItemRepository.count();
long total = (count / limit) + 1;
for (int i = 0; i <= total; i++) {
Pageable pageable = new PageRequest(i, limit);
Page<OrderItem> page = orderItemRepository.findAll(pageable);
if (page == null || CollectionUtils.isEmpty(page.getContent())) {
continue;
}
CopyOnWriteArrayList<OrderItem> copyList = new CopyOnWriteArrayList(page.getContent());
for (OrderItem order : copyList) {
if (isJSON(order.getAmountPayableInfo()) && isJSON(order.getDiscountAmountInfo())) {
copyList.remove(order);
}
order.setAmountPayableInfo(formatPayinfo(order.getAmountPayableInfo()));
order.setDiscountAmountInfo(formatDiscount(order.getDiscountAmountInfo()));
}
if (!CollectionUtils.isEmpty(copyList)) {
orderItemRepository.save(copyList);
}
}
}
/**
* // 优惠折扣详情 400会员等级折扣 500活动促销(501折扣活动 502满立减活动 503包邮活动 504阶梯价活动)
* @param string
* @return
*/
private String formatDiscount(String string) {
JSONObject json = JSONObject.parseObject(DEFUALT_DISCOUNT);
if (StringUtils.isBlank(string)) {
return DEFUALT_DISCOUNT;
}
if (isJSON(string)) {
return string;
}
formateJSON(string, json);
return json.toJSONString();
}
private void formateJSON(String string, JSONObject json) {
String[] array = string.split("\\|\\|");
for (String s : array) {
if (StringUtils.isBlank(s)) {
continue;
}
String[] item = s.split("=");
if (ArrayUtils.isEmpty(item)) {
continue;
}
if (StringUtils.isNotBlank(item[0]) && item.length == 2) {
json.remove(item[0]);
json.put(item[0], new BigDecimal(item[1]).setScale(2,BigDecimal.ROUND_HALF_DOWN));
}
}
}
private String formatPayinfo(String pay) {
JSONObject json = JSONObject.parseObject(DEFUALT_PAYINFO);
if (StringUtils.isBlank(pay)) {
return json.toJSONString();
}
if (isJSON(pay)) {
return pay;
}
formateJSON(pay, json);
return json.toJSONString();
}
private boolean isJSON(String str) {
try {
JSONObject.parse(str);
return true;
} catch (Exception e) {
return false;
}
}
@Override
public void formatLogistics() {
handlerOrderLogistics();
handlerOrderRefundLogistics();
}
private void handlerOrderLogistics(){
long count = orderLogisticsRepository.count();
long total = (count / limit) + 1;
for (int i = 0; i <= total; i++) {
Pageable pageable = new PageRequest(i, limit);
Page<OrderLogistics> page = orderLogisticsRepository.findAll(pageable);
if (page == null || CollectionUtils.isEmpty(page.getContent())) {
continue;
}
CopyOnWriteArrayList<OrderLogistics> copyList = new CopyOnWriteArrayList(page.getContent());
for (OrderLogistics order : copyList) {
if (isJSON(order.getLogisticsInformation()) ) {
copyList.remove(order);
}
order.setLogisticsInformation(formateTraces(order.getLogisticsInformation()));
}
if (CollectionUtils.isEmpty(copyList)) {
continue;
}
orderLogisticsRepository.save(copyList);
}
}
private void handlerOrderRefundLogistics(){
long count = orderRefundLogisticsRepository.count();
long total = (count / limit) + 1;
for (int i = 0; i <= total; i++) {
Pageable pageable = new PageRequest(i, limit);
Page<OrderRefundLogistics> page = orderRefundLogisticsRepository.findAll(pageable);
if (page == null || CollectionUtils.isEmpty(page.getContent())) {
continue;
}
CopyOnWriteArrayList<OrderRefundLogistics> copyList = new CopyOnWriteArrayList(page.getContent());
for (OrderRefundLogistics order : copyList) {
if (isJSON(order.getLogisticsInformation()) ) {
copyList.remove(order);
}
order.setLogisticsInformation(formateTraces(order.getLogisticsInformation()));
}
if (!CollectionUtils.isEmpty(copyList)) {
orderRefundLogisticsRepository.save(copyList);
}
}
}
private static final String empty= "[]";
private String formateTraces(String info){
JSONObject trace = new JSONObject(true);
trace.put("EBusinessID","1283242");
trace.put("LogisticCode","courierNumber");
trace.put("ShipperCode","logisticsCompanyCode");
trace.put("State",0);
trace.put("Success",true);
if (StringUtils.isBlank(info) || empty.equals(info)){
trace.put("Reason","暂无轨迹信息");
}
try {
trace.put("Traces", JSON.parseArray(info));
}catch (Exception e){
logger.info("source:{}",info);
trace.put("Traces", new JSONArray());
}
return trace.toJSONString();
}
}
package com.gic.jpa.service.impl;
import com.gic.jpa.entity.SallerAddress;
import com.gic.jpa.repository.SallerAddressRepository;
import com.gic.jpa.service.SallerAddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/16 16:54
*/
@Service("sallerAddressService")
public class SallerAddressServiceImpl implements SallerAddressService {
@Autowired
private SallerAddressRepository sallerAddressRepository;
@Override
public String createSallerAddress(SallerAddress address) {
sallerAddressRepository.save(address);
return address.getSellerAddressId();
}
@Override
public void updateSallerAddress(SallerAddress address) {
sallerAddressRepository.save(address);
}
@Override
public void removeSallerAddress(String addressId) {
sallerAddressRepository.delete(addressId);
}
@Override
public SallerAddress findSallerAddress(String addressId) {
return sallerAddressRepository.findOne(addressId);
}
@Override
public List<SallerAddress> listSallerAddress() {
return sallerAddressRepository.findAll();
}
}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://56cbb9f62fac6.sh.cdb.myqcloud.com:6634/gic_mall?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=cdb_outerroot
spring.datasource.password=@09ui%sbc09
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.database = MYSQL
spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
package com.gic.jpa;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.stream.Collectors;
@RunWith(SpringRunner.class)
@SpringBootTest
public class GicJpaDemoApplicationTests {
@Test
public void contextLoads() {
Collectors
}
}
package com.gic.jpa;
import com.gic.jpa.service.OrderService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author 蘑小菇
* @Description:
* @date 2018/11/20 11:22
*/
public class OrderJsonFormatTest extends GicJpaDemoApplicationTests{
@Autowired
private OrderService format;
@Test
public void testOrder() throws Exception {
format.formatOrder();
}
@Test
public void testOrderItem() {
format.formatOrderItem();
}
@Test
public void formatOrderTest() {
format.formatOrder();
format.formatOrderItem();
format.formatLogistics();
}
}
package com.gic.jpa;
import com.gic.jpa.entity.SallerAddress;
import com.gic.jpa.service.SallerAddressService;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
public class SallerAddressTest extends GicJpaDemoApplicationTests {
private static final Logger logger = LoggerFactory.getLogger(SallerAddressTest.class);
@Autowired
private SallerAddressService sallerAddressService;
@Test
public void save() {
SallerAddress o = new SallerAddress();
o.setEnterpriseId("ff808081593917d90159398ec6340012");
o.setContactName("联系人");
o.setContactPhone("18689658965");
o.setAddressType(2);
o.setSeatMachine("434");
o.setProvinceId("110000");
o.setProvinceName("北京市");
o.setCityId("110100");
o.setCityName("北京市区");
o.setAreaId("110101");
o.setAreaName("东城区");
o.setAddressDetail("向东再向西");
o.setCreateTime(new Date());
o.setUpdateTime( new Date());
String id= sallerAddressService.createSallerAddress(o);
logger.info("data id :{} ",id);
}
@Test
public void get() {
SallerAddress o= sallerAddressService.findSallerAddress("ff808081667b50f601667b8e8e3a0004");
logger.info("data:{}",o.toString());
}
@Test
public void insertAndUpdate() {
List<SallerAddress> list = sallerAddressService.listSallerAddress();
}
}
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