Ver código fonte

添加监控数据项目

zjl 7 anos atrás
pai
commit
51fca634dc
81 arquivos alterados com 4587 adições e 0 exclusões
  1. 25 0
      .gitignore
  2. 86 0
      build.gradle
  3. 26 0
      src/main/java/com/emato/cus/supervise/CusWmsSuperviseApplication.java
  4. 88 0
      src/main/java/com/emato/cus/supervise/aop/AspectWebLog.java
  5. 18 0
      src/main/java/com/emato/cus/supervise/biz/CusData.java
  6. 14 0
      src/main/java/com/emato/cus/supervise/biz/CusWmsTask.java
  7. 19 0
      src/main/java/com/emato/cus/supervise/biz/DataConversion.java
  8. 18 0
      src/main/java/com/emato/cus/supervise/biz/OmsData.java
  9. 24 0
      src/main/java/com/emato/cus/supervise/biz/RecordTime.java
  10. 21 0
      src/main/java/com/emato/cus/supervise/biz/WmsData.java
  11. 104 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoBiz.java
  12. 43 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoCusData.java
  13. 80 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoDataConversion.java
  14. 58 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoOmsData.java
  15. 103 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoRecordTime.java
  16. 60 0
      src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoWmsData.java
  17. 30 0
      src/main/java/com/emato/cus/supervise/config/SpringPropertyResolverConfig.java
  18. 72 0
      src/main/java/com/emato/cus/supervise/config/ds/primary/PrimaryDataSourceConfig.java
  19. 42 0
      src/main/java/com/emato/cus/supervise/config/ds/primary/PrimaryMapperConfig.java
  20. 71 0
      src/main/java/com/emato/cus/supervise/config/ds/second/SecondDataSourceConfig.java
  21. 42 0
      src/main/java/com/emato/cus/supervise/config/ds/second/SecondMapperConfig.java
  22. 71 0
      src/main/java/com/emato/cus/supervise/config/ds/third/ThirdDataSourceConfig.java
  23. 42 0
      src/main/java/com/emato/cus/supervise/config/ds/third/ThirdMapperConfig.java
  24. 65 0
      src/main/java/com/emato/cus/supervise/config/httpMsgCvt/CustomHttpMessageConverterConfig.java
  25. 52 0
      src/main/java/com/emato/cus/supervise/config/jackson/JacksonObjectMapper.java
  26. 32 0
      src/main/java/com/emato/cus/supervise/config/servlet/ServletConfig.java
  27. 20 0
      src/main/java/com/emato/cus/supervise/constant/CommonConstant.java
  28. 23 0
      src/main/java/com/emato/cus/supervise/constant/Dict.java
  29. 40 0
      src/main/java/com/emato/cus/supervise/constant/EmtRecordTimeEnum.java
  30. 209 0
      src/main/java/com/emato/cus/supervise/domain/WmsAcqInventoryInfo.java
  31. 231 0
      src/main/java/com/emato/cus/supervise/domainCus/CusAcqGoodsMove05.java
  32. 238 0
      src/main/java/com/emato/cus/supervise/domainCus/CusAcqGoodsSeat06.java
  33. 209 0
      src/main/java/com/emato/cus/supervise/domainCus/CusAcqInventoryInfo03.java
  34. 239 0
      src/main/java/com/emato/cus/supervise/domainCus/CusAcqShelfLoad04.java
  35. 78 0
      src/main/java/com/emato/cus/supervise/domainCus/EmtRecordTime.java
  36. 46 0
      src/main/java/com/emato/cus/supervise/domainOms/OmsAcqInventoryInfo.java
  37. 25 0
      src/main/java/com/emato/cus/supervise/mapper/WmsAcqInventoryInfoMapper.java
  38. 23 0
      src/main/java/com/emato/cus/supervise/mapperCus/CusAcqGoodsMoveMapper05.java
  39. 23 0
      src/main/java/com/emato/cus/supervise/mapperCus/CusAcqGoodsSeatMapper06.java
  40. 22 0
      src/main/java/com/emato/cus/supervise/mapperCus/CusAcqInventoryInfoMapper03.java
  41. 22 0
      src/main/java/com/emato/cus/supervise/mapperCus/CusAcqShelfLoadMapper04.java
  42. 22 0
      src/main/java/com/emato/cus/supervise/mapperCus/EmtRecordTimeMapper.java
  43. 26 0
      src/main/java/com/emato/cus/supervise/mapperOms/OmsAcqInventoryInfoMapper.java
  44. 57 0
      src/main/java/com/emato/cus/supervise/msg/MessageException.java
  45. 25 0
      src/main/java/com/emato/cus/supervise/msg/Messages.java
  46. 166 0
      src/main/java/com/emato/cus/supervise/msg/ResponseMessage.java
  47. 79 0
      src/main/java/com/emato/cus/supervise/msg/ResponseMessageData.java
  48. 46 0
      src/main/java/com/emato/cus/supervise/schedule/AcqInventoryInfo.java
  49. 20 0
      src/main/java/com/emato/cus/supervise/service/cus/CusAcqGoodsMoveService05.java
  50. 20 0
      src/main/java/com/emato/cus/supervise/service/cus/CusAcqGoodsSeatService06.java
  51. 20 0
      src/main/java/com/emato/cus/supervise/service/cus/CusAcqInventoryInfoService03.java
  52. 20 0
      src/main/java/com/emato/cus/supervise/service/cus/CusAcqShelfLoadService04.java
  53. 19 0
      src/main/java/com/emato/cus/supervise/service/cus/EmtRecordTimeService.java
  54. 30 0
      src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqGoodsMoveSeatServiceImpl06.java
  55. 30 0
      src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqGoodsMoveServiceImpl05.java
  56. 30 0
      src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqInventoryInfoServiceImpl03.java
  57. 30 0
      src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqShelfLoadServiceImpl04.java
  58. 36 0
      src/main/java/com/emato/cus/supervise/service/cus/impl/EmtRecordTimeServiceImpl.java
  59. 20 0
      src/main/java/com/emato/cus/supervise/service/wms/OmsAcqInventoryInfoService.java
  60. 21 0
      src/main/java/com/emato/cus/supervise/service/wms/WmsAcqInventoryInfoService.java
  61. 35 0
      src/main/java/com/emato/cus/supervise/service/wms/impl/OmsAcqInventoryInfoServiceImpl.java
  62. 37 0
      src/main/java/com/emato/cus/supervise/service/wms/impl/WmsAcqInventoryInfoServiceImpl.java
  63. 110 0
      src/main/java/com/emato/cus/supervise/util/LocalDateTimeUtils.java
  64. 11 0
      src/main/resources/application-dev.yml
  65. 83 0
      src/main/resources/application.yml
  66. 125 0
      src/main/resources/logback.xml
  67. 30 0
      src/main/resources/mybatis/mapper/wms-acq-inventory-info.xml
  68. 60 0
      src/main/resources/mybatis/mapperCus/cus-acq-goods-move.xml
  69. 65 0
      src/main/resources/mybatis/mapperCus/cus-acq-goods-seat.xml
  70. 54 0
      src/main/resources/mybatis/mapperCus/cus-acq-inventory-info.xml
  71. 64 0
      src/main/resources/mybatis/mapperCus/cus-acq-shelf-load.xml
  72. 58 0
      src/main/resources/mybatis/mapperCus/emt-record-time.xml
  73. 23 0
      src/main/resources/mybatis/mapperOms/oms-acq-inventory-info.xml
  74. 14 0
      src/main/resources/mybatis/mybatis-config-cus.xml
  75. 11 0
      src/main/resources/mybatis/mybatis-config-oms.xml
  76. 11 0
      src/main/resources/mybatis/mybatis-config.xml
  77. 4 0
      src/sql/emt-record-time-2.0.sql
  78. 19 0
      src/sql/emt-record-time.sql
  79. 13 0
      src/sql/wms-data-2.0.sql
  80. 212 0
      src/sql/wms-data.sql
  81. 77 0
      src/sql/wms监控数据SQL语句.sql

+ 25 - 0
.gitignore

@@ -0,0 +1,25 @@
+.gradle
+/build/
+!gradle/wrapper/gradle-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/

+ 86 - 0
build.gradle

@@ -0,0 +1,86 @@
+buildscript {
+	ext {
+		springBootVersion = '1.5.8.RELEASE'
+	}
+	repositories {
+		/*本地仓库*/
+		mavenLocal()
+		jcenter()
+		mavenCentral()
+		maven {
+			url "http://central.maven.org/maven2"
+		}
+	}
+	dependencies {
+		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
+	}
+}
+
+apply plugin: 'java'
+apply plugin: 'org.springframework.boot'
+
+group = 'com.emato'
+version = '1.0.0'
+sourceCompatibility = 1.8
+
+// 解决中文乱码
+tasks.withType(JavaCompile) {
+	options.encoding = "UTF-8"
+}
+
+repositories {
+	/*本地仓库*/
+	mavenLocal()
+	jcenter()
+	mavenCentral()
+	maven {
+		url('http://central.maven.org/maven2')
+	}
+}
+
+ext {
+	mybatis_spring_boot = '1.3.1'
+	mybatis_typehandlers_jsr310 = '1.0.2'
+
+	logback_ext_spring = '0.1.4'
+
+	jackson = '2.8.4'
+	google_guava = '23.3-jre'
+	cage = '1.0'
+	okhttp = '3.4.1'
+	apache_commons_lang3 = '3.6'
+}
+dependencies {
+
+	// Spring Boot
+	testCompile('org.springframework.boot:spring-boot-starter-test')
+
+	compile('org.springframework.boot:spring-boot-starter-web')
+	compile('org.springframework.boot:spring-boot-starter-aop')
+
+
+	compile('org.springframework.boot:spring-boot-starter-jdbc')
+	// Mybatis Spring Boot
+	compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatis_spring_boot}")
+	// Mybatis支持使用LocalDateTime
+	compile("org.mybatis:mybatis-typehandlers-jsr310:${mybatis_typehandlers_jsr310}")
+
+	/*runtime('mysql:mysql-connector-java')*/
+	runtime('com.microsoft.sqlserver:mssql-jdbc')
+	// Mariadb jdbc
+	compile('org.mariadb.jdbc:mariadb-java-client')
+	// HikariCP
+	compile('com.zaxxer:HikariCP')
+
+
+	// logback对spring的支持
+	compile("org.logback-extensions:logback-ext-spring:${logback_ext_spring}")
+	// 数据序列化
+	compile("com.fasterxml.jackson.core:jackson-databind:${jackson}")
+	compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jackson}")
+	compile("com.fasterxml.jackson.module:jackson-module-afterburner:${jackson}")
+
+	// 工具类
+	compile("com.google.guava:guava:${google_guava}")
+	compile("org.apache.commons:commons-lang3:${apache_commons_lang3}")
+}

+ 26 - 0
src/main/java/com/emato/cus/supervise/CusWmsSuperviseApplication.java

@@ -0,0 +1,26 @@
+package com.emato.cus.supervise;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@SpringBootApplication(
+		exclude ={
+				// 多数据源,不使用自动配置
+				DataSourceAutoConfiguration.class
+		},scanBasePackages = {
+		"com.emato.cus.supervise"
+	}
+)
+//允许事务
+@EnableTransactionManagement
+public class CusWmsSuperviseApplication {
+	private final static Logger logger = LoggerFactory.getLogger(CusWmsSuperviseApplication.class);
+	public static void main(String[] args) {
+		SpringApplication.run(CusWmsSuperviseApplication.class, args);
+		logger.info("========= 启动完成 =========");
+	}
+}

+ 88 - 0
src/main/java/com/emato/cus/supervise/aop/AspectWebLog.java

@@ -0,0 +1,88 @@
+package com.emato.cus.supervise.aop;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+/**
+ * Created by Anyx on 2015/5/13.
+ * 日志AOP
+ */
+
+@Aspect
+public class AspectWebLog {
+    private static final Logger logger = LoggerFactory.getLogger(AspectWebLog.class);
+    ObjectMapper mapper = new ObjectMapper();
+    /**
+     * 方法开始前执行
+     * @param jp:JoinPoint
+     * @return
+     */
+    public void beforeAdvice(JoinPoint jp) {
+        try {
+            Object[] args = jp.getArgs();
+
+            StringBuffer sb = new StringBuffer();
+            String str = null;
+
+            if (args[0] instanceof Map) {
+                Map<String, String> map = (Map<String, String>) args[0];
+                str = mapper.writeValueAsString(map);
+            }else{
+                str = mapper.writeValueAsString(args[0]);
+            }
+            logger.info("入参:{}", str);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 方法返回后执行
+     * @param jp:JoinPoint
+     * @param retValue:String 主体方法传递到通知方法的返回值
+     * @return
+     */
+    public void afterReturningAdvice(JoinPoint jp, String retValue) {
+        logger.info("出参:{}",retValue);
+    }
+
+    /**
+     * 方法异常后执行
+     * @param jp:JoinPoint
+     * @return
+     */
+    public void afterThrowingAdvice(JoinPoint jp) {
+        logger.info("异常结束后:{}");
+    }
+
+    /**
+     * 方法完后执行,无论成功还是异常
+     * @param jp:JoinPoint
+     * @return
+     */
+    public void afterAdvice(JoinPoint jp) {
+        logger.info("执行结束后:{}");
+    }
+
+    /**
+     * 主体方法返回后将执行的通知方法
+     * @param pjp:ProceedingJoinPoint
+     * @return
+     */
+    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
+        long bftime = System.currentTimeMillis();
+        Object retVal = pjp.proceed();
+        double time =(double)(System.currentTimeMillis() - bftime) / 1000;
+        logger.debug("执行时间:{}秒", time);
+        return retVal;
+    }
+
+}

+ 18 - 0
src/main/java/com/emato/cus/supervise/biz/CusData.java

@@ -0,0 +1,18 @@
+package com.emato.cus.supervise.biz;
+
+import java.util.List;
+
+/**
+ * CUS 数据
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 11:59
+ */
+public interface CusData {
+    /**
+     * 写入CUS 数据
+     * @param list
+     * @return
+     */
+    int insertCus(List<?> list);
+}

+ 14 - 0
src/main/java/com/emato/cus/supervise/biz/CusWmsTask.java

@@ -0,0 +1,14 @@
+package com.emato.cus.supervise.biz;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 13:41
+ */
+public interface CusWmsTask {
+    /**
+     * 任务入口
+     */
+    void task();
+
+}

+ 19 - 0
src/main/java/com/emato/cus/supervise/biz/DataConversion.java

@@ -0,0 +1,19 @@
+package com.emato.cus.supervise.biz;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 14:41
+ */
+public interface DataConversion {
+    /**
+     *  外部数据转换
+     * @param params
+     * @return
+     */
+    List conversion(Map params);
+
+}

+ 18 - 0
src/main/java/com/emato/cus/supervise/biz/OmsData.java

@@ -0,0 +1,18 @@
+package com.emato.cus.supervise.biz;
+
+import java.util.List;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 17:49
+ */
+public interface OmsData {
+
+    /**
+     * 获取oms 数据
+     * @param
+     * @return
+     */
+    List getOmsData(List<String> merchSnList);
+}

+ 24 - 0
src/main/java/com/emato/cus/supervise/biz/RecordTime.java

@@ -0,0 +1,24 @@
+package com.emato.cus.supervise.biz;
+
+/**
+ * 扫描时间
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 11:56
+ */
+public interface RecordTime {
+    /**
+     * 获取扫描时间
+     * @return
+     */
+    String getEmtRecordTime();
+
+    /**
+     * 更新记录时间
+     *
+     * @param thisTime 当前时间作为下次扫描时间
+     * @param lastTime 本次扫描时间成为上次扫描时间
+     * @return
+     */
+    boolean updateWmsRecordTime(String thisTime, String lastTime);
+}

+ 21 - 0
src/main/java/com/emato/cus/supervise/biz/WmsData.java

@@ -0,0 +1,21 @@
+package com.emato.cus.supervise.biz;
+
+import java.util.List;
+
+/**
+ * WMS 数据
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 11:57
+ */
+public interface WmsData {
+    /**
+     * 获取WMS 数据
+     * @param thisTime
+     * @return
+     */
+    List getWmsData(String thisTime);
+
+
+}
+

+ 104 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoBiz.java

@@ -0,0 +1,104 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.CusWmsTask;
+import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+import com.emato.cus.supervise.util.LocalDateTimeUtils;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业库存信息业务
+ *
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-01 16:29
+ */
+@Component
+public class AcqInventoryInfoBiz implements CusWmsTask {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoBiz.class);
+
+    private static final String DATA_TYPE_INFO = "[" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode() + "]" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getName();
+
+    @Autowired
+    private AcqInventoryInfoRecordTime acqInventoryInfoRecordTime;
+
+    @Autowired
+    private AcqInventoryInfoWmsData acqInventoryInfoWmsData;
+
+    @Autowired
+    private AcqInventoryInfoCusData acqInventoryInfoCusData;
+
+    @Autowired
+    private AcqInventoryInfoDataConversion acqInventoryInfoDataConversion;
+
+    @Autowired
+    private AcqInventoryInfoOmsData acqInventoryInfoOmsData;
+
+    /**
+     * 任务入口
+     */
+    @Override
+    public void task() {
+        // 获取扫描时间
+        String oldThisTime = acqInventoryInfoRecordTime.getEmtRecordTime();
+        if (StringUtils.isBlank(oldThisTime)) {
+            logger.info("--- 【" + DATA_TYPE_INFO + "】未获取到本次扫描时间, 本次扫描提前结束!!!");
+            //下次扫描时间
+            acqInventoryInfoRecordTime.updateWmsRecordTime(LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN),
+                    LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN));
+            return;
+
+        }
+
+        // 扫描WMS 数据
+        List<WmsAcqInventoryInfo> wmsList = acqInventoryInfoWmsData.getWmsData(oldThisTime);
+        if (wmsList == null || wmsList.size() == 0) {
+            logger.info("--- 【" + DATA_TYPE_INFO + "】获取到本次扫描WMS数据为空, 不执行写数据操作, 本次扫描提前结束!!!");
+            //下次扫描时间
+            acqInventoryInfoRecordTime.updateWmsRecordTime(LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN),
+                    LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN));
+            return;
+        }
+        List<String> merchSnList = Lists.newArrayList();
+
+        wmsList.forEach(i -> merchSnList.add(i.getMerchSn()));
+
+        // 根据sku查询oms系统数据。
+        List<OmsAcqInventoryInfo> omsList = acqInventoryInfoOmsData.getOmsData(merchSnList);
+
+        if (omsList == null || omsList.isEmpty()) {
+            logger.info("--- 【" + DATA_TYPE_INFO + "】获取到本次扫描OMS数据为空, 不执行写数据操作, 本次扫描提前结束!!!");
+            //下次扫描时间
+            acqInventoryInfoRecordTime.updateWmsRecordTime(LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN),
+                    LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN));
+            return;
+        }
+        Map params = Maps.newHashMap();
+        params.put("wmsList", wmsList);
+        params.put("omsList", omsList);
+
+        //oms和wms数据,转成海关数据
+        List<CusAcqInventoryInfo03> cusAcqInventoryInfo03List = acqInventoryInfoDataConversion.conversion(params);
+
+        // 写CUS 数据
+        int res = acqInventoryInfoCusData.insertCus(cusAcqInventoryInfo03List);
+
+        // 更新扫描时间
+        boolean bl = acqInventoryInfoRecordTime.updateWmsRecordTime(LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN),
+                oldThisTime);
+    }
+
+
+}

+ 43 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoCusData.java

@@ -0,0 +1,43 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.CusData;
+import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+import com.emato.cus.supervise.service.cus.CusAcqInventoryInfoService03;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 09:44
+ */
+@Component
+public class AcqInventoryInfoCusData implements CusData {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoCusData.class);
+
+    @Autowired
+    private CusAcqInventoryInfoService03 cusAcqInventoryInfoService03;
+
+    private static final String DATA_TYPE_INFO = "[" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode() + "]" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getName();
+
+
+    @Override
+    public int insertCus(List<?> list) {
+        logger.info("---------- 货物库存数据::写入本次监控数据开始 --------------------");
+
+        List<CusAcqInventoryInfo03> cusList = ( List<CusAcqInventoryInfo03>)list;
+        int result = cusAcqInventoryInfoService03.addCusAcqInventoryInfo(cusList);
+
+        logger.info("---【" + DATA_TYPE_INFO + "】写入监控数据:{} 条", result);
+
+        logger.info("---------- 货物库存数据::写入本次监控数据结束 --------------------");
+        return result;
+    }
+
+}

+ 80 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoDataConversion.java

@@ -0,0 +1,80 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.DataConversion;
+import com.emato.cus.supervise.constant.Dict;
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 14:43
+ */
+@Component
+public class AcqInventoryInfoDataConversion implements DataConversion {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoDataConversion.class);
+
+    /**
+     * 外部数据转换
+     * 将oms,和wms查询处理的数据进行转换
+     *
+     * @param params
+     * @return
+     */
+    @Override
+    public List conversion(Map params) {
+        logger.info("开始转换oms,wms 组装cus数据===========================");
+
+        List<WmsAcqInventoryInfo> wmsList = (List<WmsAcqInventoryInfo>) params.get("wmsList");
+        List<OmsAcqInventoryInfo> omsList = (List<OmsAcqInventoryInfo>) params.get("omsList");
+
+        final Map<String,OmsAcqInventoryInfo> omsAcqInventoryInfoMap = omsList.stream().collect(Collectors.toMap(k->k.getMerchSn(),v->v));
+
+        List<CusAcqInventoryInfo03> cusAcqInventoryInfo03List = Lists.newArrayList();
+
+        for (int i = 0; i < wmsList.size(); i++) {
+            WmsAcqInventoryInfo wmsAcqInventoryInfo = wmsList.get(i);
+            OmsAcqInventoryInfo omsAcqInventoryInfo = omsAcqInventoryInfoMap.get(wmsAcqInventoryInfo.getMerchSn());
+
+            CusAcqInventoryInfo03 cusAcqInventoryInfo03 = new CusAcqInventoryInfo03();
+            cusAcqInventoryInfo03.setGoodsName(wmsAcqInventoryInfo.getGoodsName());
+            //wms codeTs(商品编码) = 料件号,sku
+            cusAcqInventoryInfo03.setCodeTs(wmsAcqInventoryInfo.getCodeTs());
+            cusAcqInventoryInfo03.setSkuNo(wmsAcqInventoryInfo.getCodeTs());
+            cusAcqInventoryInfo03.setGoodsId(wmsAcqInventoryInfo.getCodeTs());
+
+            cusAcqInventoryInfo03.setGUnit(wmsAcqInventoryInfo.getgUnit());
+            cusAcqInventoryInfo03.setgQty(wmsAcqInventoryInfo.getgQty());
+
+            //法定单位,法定数量暂时未查询
+            cusAcqInventoryInfo03.setLegalUnit(wmsAcqInventoryInfo.getLegalUnit());
+            cusAcqInventoryInfo03.setLegalQty(wmsAcqInventoryInfo.getLegalQty());
+
+            cusAcqInventoryInfo03.setGoodsModel(wmsAcqInventoryInfo.getGoodsModel());
+            cusAcqInventoryInfo03.setLocalEmsNo(Dict.localEmsNo);
+            cusAcqInventoryInfo03.setOwnerCode(omsAcqInventoryInfo.getOwnerCode());
+            cusAcqInventoryInfo03.setOwnerName(omsAcqInventoryInfo.getOwnerName());
+
+            cusAcqInventoryInfo03.setStoreCompanyName(Dict.storeCompanyName);
+            cusAcqInventoryInfo03.setStoreUscCode(Dict.storeUscCode);
+            cusAcqInventoryInfo03.setStoreCustomsCode(Dict.storeCustomsCode);
+            cusAcqInventoryInfo03.setStoreCode(Dict.storeCode);
+            cusAcqInventoryInfo03.setCreateTime(LocalDateTime.now());
+            cusAcqInventoryInfo03List.add(cusAcqInventoryInfo03);
+        }
+        logger.info("转换oms,wms 组装cus数据结束===========================");
+        return cusAcqInventoryInfo03List;
+    }
+}

+ 58 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoOmsData.java

@@ -0,0 +1,58 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.OmsData;
+import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+import com.emato.cus.supervise.service.wms.impl.OmsAcqInventoryInfoServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 14:33
+ */
+@Component
+public class AcqInventoryInfoOmsData implements OmsData {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoOmsData.class);
+
+    private static final String DATA_TYPE_INFO = "[" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode() + "]" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getName();
+
+    @Autowired
+    private OmsAcqInventoryInfoServiceImpl omsAcqInventoryInfoService;
+    /**
+     * 获取oms 数据
+     *
+     * @param merchSnList
+     * @return
+     */
+    @Override
+    public List getOmsData(List<String> merchSnList) {
+        logger.info("---------- 查询Oms数据开始 --------------------");
+
+        if (merchSnList == null || merchSnList.isEmpty()) {
+            String err = "---【" + DATA_TYPE_INFO + "】本次商户编号集合为空.";
+            logger.error(err);
+            return Collections.EMPTY_LIST;
+        }
+
+        List<OmsAcqInventoryInfo> resultList = omsAcqInventoryInfoService.getOmsAcqInventoryInfoList(merchSnList);
+        if (resultList == null || resultList.size() == 0) {
+            String err = "---【" + DATA_TYPE_INFO + "】获取本次OMS监控数据为空.";
+            logger.error(err);
+            return Collections.EMPTY_LIST;
+        }
+
+        logger.info("---【" + DATA_TYPE_INFO + "】获取本数据{}条.", resultList.size());
+
+        logger.info("---------- 查询Oms数据结束 --------------------");
+        return resultList;
+    }
+}

+ 103 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoRecordTime.java

@@ -0,0 +1,103 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.RecordTime;
+import com.emato.cus.supervise.constant.CommonConstant;
+import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
+import com.emato.cus.supervise.domainCus.EmtRecordTime;
+import com.emato.cus.supervise.service.cus.EmtRecordTimeService;
+import com.emato.cus.supervise.util.LocalDateTimeUtils;
+import com.google.common.collect.ImmutableMap;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-01 16:43
+ */
+@Component
+public class AcqInventoryInfoRecordTime implements RecordTime {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoRecordTime.class);
+
+    @Autowired
+    private EmtRecordTimeService emtRecordTimeService;
+
+    private static final String DATA_TYPE_INFO = "[" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode() + "]" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getName();
+
+    /**
+     * 获取扫描时间
+     *
+     * @return
+     */
+    @Override
+    public String getEmtRecordTime() {
+        logger.info("---------- 货物库存数据::获取上次扫描时间开始 --------------------");
+
+        //根据数据类型, 取扫描时间
+        Map<String, Object> param = ImmutableMap.of("dataType", EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode());
+
+        List<EmtRecordTime> list = emtRecordTimeService.selectEmtRecordTime(param);
+        if (list == null || list.size() == 0) {
+            String err = "---【" + DATA_TYPE_INFO + "】取扫描时间数据为空.";
+            logger.error(err);
+            return null;
+        }
+
+        String oldLastTime = list.get(0).getLastTime();
+        String oldThisTime = list.get(0).getThisTime();
+
+        logger.info("---【" + DATA_TYPE_INFO + "】任务上次扫描时间:{}", oldLastTime);
+        logger.info("---【" + DATA_TYPE_INFO + "】任务本次扫描时间:{}", oldThisTime);
+
+        logger.info("---------- 货物库存数据::获取上次扫描时间结束 --------------------");
+        return oldThisTime;
+    }
+    /**
+     * 更新记录时间
+     *
+     * @param thisTime 当前时间作为下次扫描时间
+     * @param lastTime 本次扫描时间成为上次扫描时间
+     * @return
+     */
+    @Override
+    public boolean updateWmsRecordTime(String thisTime, String lastTime) {
+        logger.info("---------- 货物库存数据::更新扫描时间开始 --------------------");
+
+        if (StringUtils.isBlank(thisTime)) {
+            thisTime = LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN);
+        }
+        if (StringUtils.isBlank(lastTime)) {
+            logger.info("---【" + DATA_TYPE_INFO + "】本次更新时间为空, 不能写入扫描时间表, 更新扫描时间提前结束.");
+            return false;
+        }
+
+        logger.info("---【" + DATA_TYPE_INFO + "】本次扫描时间为:{}, 下次扫描时间:{}.", lastTime, thisTime);
+
+
+        ImmutableMap.Builder builder = new ImmutableMap.Builder();
+        builder.put("dataType", EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode());
+        builder.put("lastTime", lastTime);
+        builder.put("thisTime", thisTime);
+        builder.put("moderSn", CommonConstant.moderSn);
+        builder.put("modTime", LocalDateTime.now());
+
+        int res = emtRecordTimeService.updateEmtRecordTime(builder.build());
+        String err = "---【" + DATA_TYPE_INFO + "】更新扫描时间'{" + (res == 1 ? "成功" : "失败, 结束本次扫描!!!") + "}'.";
+        logger.info(err);
+        if (res != 1) {
+            return false;
+        }
+
+        logger.info("---------- 货物库存数据::更新扫描时间结束 --------------------");
+
+        return res == 1;
+    }
+}

+ 60 - 0
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoWmsData.java

@@ -0,0 +1,60 @@
+package com.emato.cus.supervise.biz.acqInventoryInfo;
+
+import com.emato.cus.supervise.biz.WmsData;
+import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import com.emato.cus.supervise.service.wms.WmsAcqInventoryInfoService;
+import com.google.common.collect.ImmutableMap;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 09:28
+ */
+@Component
+public class AcqInventoryInfoWmsData implements WmsData {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfoWmsData.class);
+
+    @Autowired
+    private WmsAcqInventoryInfoService wmsAcqInventoryInfoService;
+
+    private static final String DATA_TYPE_INFO = "[" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getCode() + "]" + EmtRecordTimeEnum.I_ACQ_INVENTORY_INFO.getName();
+
+
+    @Override
+    public List getWmsData(String thisTime) {
+        logger.info("---------- 货物库存数据::获取本次监控数据开始 --------------------");
+
+        if (StringUtils.isBlank(thisTime)) {
+            String err = "---【" + DATA_TYPE_INFO + "】本次扫描时间为空.";
+            logger.error(err);
+            return Collections.EMPTY_LIST;
+        }
+
+        ImmutableMap param = ImmutableMap.of("thisTime", thisTime);
+        List<WmsAcqInventoryInfo> resultList = wmsAcqInventoryInfoService.getWmsAcqInventoryInfo(param);
+
+        if (resultList == null || resultList.size() == 0) {
+            String err = "---【" + DATA_TYPE_INFO + "】获取本次监控数据为空.";
+            logger.error(err);
+            return Collections.EMPTY_LIST;
+        }
+
+        logger.info("---【" + DATA_TYPE_INFO + "】获取本次监控数据{}条.", resultList.size());
+
+        logger.info("---------- 货物库存数据::获取本次监控数据结束 --------------------");
+
+        return resultList;
+    }
+
+
+}

+ 30 - 0
src/main/java/com/emato/cus/supervise/config/SpringPropertyResolverConfig.java

@@ -0,0 +1,30 @@
+package com.emato.cus.supervise.config;
+
+import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertyResolver;
+
+/**
+ * Spring property Resolver
+ *
+ * @author Scott Chen
+ * @date 2017/4/23
+ */
+@Configuration
+public class SpringPropertyResolverConfig implements EnvironmentAware {
+
+    private PropertyResolver propertyResolver;
+
+    @Override
+    public void setEnvironment(Environment environment) {
+        propertyResolver = new RelaxedPropertyResolver(environment);
+    }
+
+    @Bean
+    public PropertyResolver propertyResolver() {
+        return propertyResolver;
+    }
+}

+ 72 - 0
src/main/java/com/emato/cus/supervise/config/ds/primary/PrimaryDataSourceConfig.java

@@ -0,0 +1,72 @@
+package com.emato.cus.supervise.config.ds.primary;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.PropertyResolver;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+/**
+ * 多数据源配置
+ *
+ * 数据源配置
+ *
+ * 指定mybatis-config.xml, 和要扫描的别名包
+ *
+ * @author Scott Chen
+ * @date 2017/4/22
+ */
+@Configuration
+public class PrimaryDataSourceConfig {
+
+    @Autowired
+    private PropertyResolver propertyResolver;
+
+    @Bean
+    public DataSource primaryDataSource() {
+        return primaryDataSourceProperties().initializeDataSourceBuilder().build();
+    }
+
+    @Bean
+    @ConfigurationProperties(prefix = "spring.datasource.primary")
+    public DataSourceProperties primaryDataSourceProperties() {
+        return new DataSourceProperties();
+    }
+
+    @Bean
+    public SqlSessionFactory primarySqlSessionFactory(DataSource primaryDataSource) throws Exception  {
+        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(primaryDataSource);
+        //Mybatis XML配置文件
+        sessionFactoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(
+                propertyResolver.getProperty("mybatis.primary.config-location")));
+        sessionFactoryBean.setTypeAliasesPackage(propertyResolver.getProperty("mybatis.primary.type-aliases-package"));
+        //sessionFactoryBean.setMapperLocations(mapperLocations());
+        return sessionFactoryBean.getObject();
+    }
+
+    @Bean
+    public DataSourceTransactionManager primaryTransactionManager(DataSource primaryDataSource) {
+        return new DataSourceTransactionManager(primaryDataSource);
+    }
+
+
+    @Bean
+    public SqlSessionTemplate primarySqlSessionTemplate(SqlSessionFactory primarySqlSessionFactory) {
+        return new SqlSessionTemplate(primarySqlSessionFactory);
+    }
+
+    /*private Resource[] mapperLocations(){
+        Resource resource = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mapper*//*.xml");
+        return ImmutableSet.of(resource).stream().toArray(Resource[]::new);
+    }*/
+
+}

+ 42 - 0
src/main/java/com/emato/cus/supervise/config/ds/primary/PrimaryMapperConfig.java

@@ -0,0 +1,42 @@
+package com.emato.cus.supervise.config.ds.primary;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * Mybatis Mapper接口扫描配置
+ *
+ * @author Scott Chen
+ * @date 2017/4/23
+ */
+@Configuration
+/*@DependsOn(value = {"primarySqlSessionTemplate"})*/
+public class PrimaryMapperConfig {
+
+    @Bean
+    public MapperScannerConfigurer primaryMapperScannerConfigurer() {
+        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
+        //Mapper接口包
+        mapperScannerConfigurer.setBasePackage(mapperPackage());
+        //要使用的数据源
+        mapperScannerConfigurer.setSqlSessionTemplateBeanName("primarySqlSessionTemplate");
+        return mapperScannerConfigurer;
+    }
+
+    /**
+     * 添加要扫描的Mapper接口包
+     * 以逗号分隔的字符串
+     *
+     * @return
+     */
+    protected String mapperPackage() {
+        ImmutableList.Builder<String> builder = new ImmutableList.Builder();
+        builder.add("com.emato.cus.supervise.mapper");
+        return Joiner.on(",").join(builder.build());
+    }
+
+}

+ 71 - 0
src/main/java/com/emato/cus/supervise/config/ds/second/SecondDataSourceConfig.java

@@ -0,0 +1,71 @@
+package com.emato.cus.supervise.config.ds.second;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.PropertyResolver;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+/**
+ * 多数据源配置
+ *
+ * 数据源配置
+ *
+ * 指定mybatis-config.xml, 和要扫描的别名包
+ *
+ * @author Scott Chen
+ * @date 2017/4/22
+ */
+@Configuration
+public class SecondDataSourceConfig {
+
+    @Autowired
+    private PropertyResolver propertyResolver;
+
+    @Bean
+    public DataSource secondDataSource() {
+        return secondDataSourceProperties().initializeDataSourceBuilder().build();
+    }
+
+    @Bean
+    @ConfigurationProperties(prefix = "spring.datasource.second")
+    public DataSourceProperties secondDataSourceProperties() {
+        return new DataSourceProperties();
+    }
+
+    @Bean
+    public SqlSessionFactory secondSqlSessionFactory(DataSource secondDataSource) throws Exception  {
+        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(secondDataSource);
+        //Mybatis XML配置文件
+        sessionFactoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(
+                propertyResolver.getProperty("mybatis.second.config-location")));
+        sessionFactoryBean.setTypeAliasesPackage(propertyResolver.getProperty("mybatis.second.type-aliases-package"));
+        //sessionFactoryBean.setMapperLocations(mapperLocations());
+        return sessionFactoryBean.getObject();
+    }
+
+    @Bean
+    public DataSourceTransactionManager secondTransactionManager(DataSource secondDataSource) {
+        return new DataSourceTransactionManager(secondDataSource);
+    }
+
+    @Bean
+    public SqlSessionTemplate secondSqlSessionTemplate(SqlSessionFactory secondSqlSessionFactory) {
+        return new SqlSessionTemplate(secondSqlSessionFactory);
+    }
+
+    /*private Resource[] mapperLocations(){
+        Resource resource = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mapper*//*.xml");
+        return ImmutableSet.of(resource).stream().toArray(Resource[]::new);
+    }*/
+
+}

+ 42 - 0
src/main/java/com/emato/cus/supervise/config/ds/second/SecondMapperConfig.java

@@ -0,0 +1,42 @@
+package com.emato.cus.supervise.config.ds.second;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * Mybatis Mapper接口扫描配置
+ *
+ * @author Scott Chen
+ * @date 2017/4/23
+ */
+@Configuration
+/*@DependsOn(value = {"secondSqlSessionTemplate"})*/
+public class SecondMapperConfig {
+
+    @Bean
+    public MapperScannerConfigurer secondMapperScannerConfigurer() {
+        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
+        //Mapper接口包
+        mapperScannerConfigurer.setBasePackage(mapperPackage());
+        //要使用的数据源
+        mapperScannerConfigurer.setSqlSessionTemplateBeanName("secondSqlSessionTemplate");
+        return mapperScannerConfigurer;
+    }
+
+    /**
+     * 添加要扫描的Mapper接口包
+     * 以逗号分隔的字符串
+     *
+     * @return
+     */
+    protected String mapperPackage() {
+        ImmutableList.Builder<String> builder = new ImmutableList.Builder();
+        builder.add("com.emato.cus.supervise.mapperCus");
+        return Joiner.on(",").join(builder.build());
+    }
+
+}

+ 71 - 0
src/main/java/com/emato/cus/supervise/config/ds/third/ThirdDataSourceConfig.java

@@ -0,0 +1,71 @@
+package com.emato.cus.supervise.config.ds.third;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.PropertyResolver;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+/**
+ * 多数据源配置
+ *
+ * 数据源配置
+ *
+ * 指定mybatis-config.xml, 和要扫描的别名包
+ *
+ * @author Scott Chen
+ * @date 2017/4/22
+ */
+@Configuration
+public class ThirdDataSourceConfig {
+
+    @Autowired
+    private PropertyResolver propertyResolver;
+
+    @Bean
+    public DataSource thirdDataSource() {
+        return thirdDataSourceProperties().initializeDataSourceBuilder().build();
+    }
+
+    @Bean
+    @ConfigurationProperties(prefix = "spring.datasource.third")
+    public DataSourceProperties thirdDataSourceProperties() {
+        return new DataSourceProperties();
+    }
+
+    @Bean
+    public SqlSessionFactory thirdSqlSessionFactory(DataSource thirdDataSource) throws Exception  {
+        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(thirdDataSource);
+        //Mybatis XML配置文件
+        sessionFactoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(
+                propertyResolver.getProperty("mybatis.third.config-location")));
+        sessionFactoryBean.setTypeAliasesPackage(propertyResolver.getProperty("mybatis.third.type-aliases-package"));
+        //sessionFactoryBean.setMapperLocations(mapperLocations());
+        return sessionFactoryBean.getObject();
+    }
+
+    @Bean
+    public DataSourceTransactionManager thirdTransactionManager(DataSource thirdDataSource) {
+        return new DataSourceTransactionManager(thirdDataSource);
+    }
+
+    @Bean
+    public SqlSessionTemplate thirdSqlSessionTemplate(SqlSessionFactory thirdSqlSessionFactory) {
+        return new SqlSessionTemplate(thirdSqlSessionFactory);
+    }
+
+    /*private Resource[] mapperLocations(){
+        Resource resource = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mapper*//*.xml");
+        return ImmutableSet.of(resource).stream().toArray(Resource[]::new);
+    }*/
+
+}

+ 42 - 0
src/main/java/com/emato/cus/supervise/config/ds/third/ThirdMapperConfig.java

@@ -0,0 +1,42 @@
+package com.emato.cus.supervise.config.ds.third;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * Mybatis Mapper接口扫描配置
+ *
+ * @author Scott Chen
+ * @date 2017/4/23
+ */
+@Configuration
+/*@DependsOn(value = {"thirdSqlSessionTemplate"})*/
+public class ThirdMapperConfig {
+
+    @Bean
+    public MapperScannerConfigurer thirdMapperScannerConfigurer() {
+        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
+        //Mapper接口包
+        mapperScannerConfigurer.setBasePackage(mapperPackage());
+        //要使用的数据源
+        mapperScannerConfigurer.setSqlSessionTemplateBeanName("thirdSqlSessionTemplate");
+        return mapperScannerConfigurer;
+    }
+
+    /**
+     * 添加要扫描的Mapper接口包
+     * 以逗号分隔的字符串
+     *
+     * @return
+     */
+    protected String mapperPackage() {
+        ImmutableList.Builder<String> builder = new ImmutableList.Builder();
+        builder.add("com.emato.cus.supervise.mapperOms");
+        return Joiner.on(",").join(builder.build());
+    }
+
+}

+ 65 - 0
src/main/java/com/emato/cus/supervise/config/httpMsgCvt/CustomHttpMessageConverterConfig.java

@@ -0,0 +1,65 @@
+package com.emato.cus.supervise.config.httpMsgCvt;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+
+/**
+ * 自定义 HttpMessageConverter 消息转换器
+ *
+ * @author Scott Chen
+ * @date 2017/4/19
+ */
+@Configuration
+public class CustomHttpMessageConverterConfig {
+
+  @Bean
+  public MappingJackson2HttpMessageConverter customMessageConverter(ObjectMapper objectMapper) {
+
+    MappingJackson2HttpMessageConverter bean =
+        new MappingJackson2HttpMessageConverter(objectMapper) {
+          private final Logger logger = LoggerFactory.getLogger(MappingJackson2HttpMessageConverter.class);
+
+            @Override
+          protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage)
+              throws IOException, HttpMessageNotWritableException {
+
+            /**
+             * 外部消息如果不是 ResponseMessage
+             * 重新包装成 ResponseMessage
+             */
+            /*ResponseMessage responseMessage;
+
+            if (object == null) {
+              responseMessage = ResponseMessage.builder().build();
+            } else if (object instanceof ResponseMessage) {
+              responseMessage = (ResponseMessage) object;
+            } else if (object instanceof String) {
+              responseMessage = ResponseMessage.builder()
+                  .setMsg((String) object)
+                  .build();
+            } else {
+              ResponseMessageData respData = ResponseMessageData.builder(object, Object.class).build();
+              responseMessage = ResponseMessage.builder()
+                  .setData(respData)
+                  .build();
+            }*/
+
+            super.writeInternal(object, Object.class, outputMessage);
+
+            String result = objectMapper.writeValueAsString(object);
+            logger.info("返回数据:{}", result);
+          }
+        };
+
+    return bean;
+  }
+}

+ 52 - 0
src/main/java/com/emato/cus/supervise/config/jackson/JacksonObjectMapper.java

@@ -0,0 +1,52 @@
+package com.emato.cus.supervise.config.jackson;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Scott Chen
+ * @date 2017/4/19
+ */
+@Configuration
+public class JacksonObjectMapper {
+
+    @Bean
+    public ObjectMapper objectMapper() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        //序列化时,如果没有为类型找到访问者,则会抛出异常以将其指定为非可序列化类型; 如果禁用,它们将被序列化为空对象
+        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        //反序列化时,遇到未知属性是否抛JsonMappingException异常.默认JsonMappingException
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        //设置null值不参与序列化(字段不被显示)
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+        //使Jackson JSON支持Unicode编码非ASCII字符
+        /*SimpleModule module = new SimpleModule();
+        module.addSerializer(String.class, new JacksonStringUnicodeSerializer());
+        objectMapper.registerModule(module);*/
+
+        // register modules
+        objectMapper.registerModule(javaTimeModule());
+        objectMapper.registerModule(afterburnerModule());
+
+        return objectMapper;
+    }
+
+    @Bean
+    public JavaTimeModule javaTimeModule() {
+        return new JavaTimeModule();
+    }
+
+    @Bean
+    public AfterburnerModule afterburnerModule() {
+        return new AfterburnerModule();
+    }
+
+
+}

+ 32 - 0
src/main/java/com/emato/cus/supervise/config/servlet/ServletConfig.java

@@ -0,0 +1,32 @@
+package com.emato.cus.supervise.config.servlet;
+
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.CharacterEncodingFilter;
+
+/**
+ * Servlet 配置
+ *
+ * @author Scott Chen
+ * @date 2017/5/4
+ */
+@Configuration
+public class ServletConfig {
+
+    /**
+     * 字符过滤
+     * @return
+     */
+    @Bean
+    public FilterRegistrationBean characterEncodingFilter() {
+        FilterRegistrationBean filterBean = new FilterRegistrationBean();
+        filterBean.setName("characterEncoding");
+        filterBean.setFilter(new CharacterEncodingFilter());
+        filterBean.addInitParameter("encoding", "UTF-8");
+        filterBean.addInitParameter("forceEncoding", "true");
+        filterBean.addUrlPatterns("/*");
+        return filterBean;
+    }
+
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/constant/CommonConstant.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.constant;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 10:49
+ */
+public class CommonConstant {
+
+    /**
+     * 创建人编码
+     */
+    public static final String createSn = "1";
+
+    /**
+     * 修改人编码
+     */
+    public static final String moderSn = "1";
+
+}

+ 23 - 0
src/main/java/com/emato/cus/supervise/constant/Dict.java

@@ -0,0 +1,23 @@
+package com.emato.cus.supervise.constant;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 16:13
+ */
+public class Dict {
+    //园区账册号
+    public static final String localEmsNo = "I440366000315001";
+    //仓库使用企业名称
+    public static final String storeCompanyName = "深圳前海电商供应链管理有限公司";
+    //仓库使用企业社会信用代码
+    public static final String storeUscCode = "440301111758322";
+    //仓库使用企业海关编码
+    public static final String storeCustomsCode = "4403660003";
+    //仓库编码
+    public static final String storeCode = "534931948971720171102000281725";
+
+
+
+
+}

+ 40 - 0
src/main/java/com/emato/cus/supervise/constant/EmtRecordTimeEnum.java

@@ -0,0 +1,40 @@
+package com.emato.cus.supervise.constant;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 11:54
+ */
+public enum EmtRecordTimeEnum {
+    I_ACQ_INVENTORY_INFO("ACQ_INVENTORY_INFO", "企业库存信息"),
+    I_00("00", "货物库存数据"),
+    I_01_01("01_01", "货物上下架_上架"),
+    I_01_02("01_02", "货物上下架_退港"),
+    I_01_03("01_03", "货物上下架_正常拣货"),
+    I_02("02", "货物库位移动数据"),
+    I_03("03", "库位货物");
+
+    private String code;
+    private String name;
+
+    EmtRecordTimeEnum(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 209 - 0
src/main/java/com/emato/cus/supervise/domain/WmsAcqInventoryInfo.java

@@ -0,0 +1,209 @@
+package com.emato.cus.supervise.domain;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 货物库存数据 WMS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:24
+ */
+public class WmsAcqInventoryInfo implements Serializable {
+    private static final long serialVersionUID = -1786218576323478234L;
+
+    private String merchSn;
+    private String goodsName;
+    private String codeTs;
+    private String skuNo;
+    private String goodsId;
+
+    private String gUnit;
+    private Double gQty;
+    private String legalUnit;
+    private Double legalQty;
+
+    private String goodsModel;
+    private String localEmsNo;
+    private String ownerCode;
+    private String ownerName;
+
+    private String storeCompanyName;
+    private String storeUscCode;
+    private String storeCustomsCode;
+    private String storeCode;
+
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
+    public String getSkuNo() {
+        return skuNo;
+    }
+
+    public void setSkuNo(String skuNo) {
+        this.skuNo = skuNo;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getgUnit() {
+        return gUnit;
+    }
+
+    public void setgUnit(String gUnit) {
+        this.gUnit = gUnit;
+    }
+
+    public Double getgQty() {
+        return gQty;
+    }
+
+    public void setgQty(Double gQty) {
+        this.gQty = gQty;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public Double getLegalQty() {
+        return legalQty;
+    }
+
+    public void setLegalQty(Double legalQty) {
+        this.legalQty = legalQty;
+    }
+
+    public String getGoodsModel() {
+        return goodsModel;
+    }
+
+    public void setGoodsModel(String goodsModel) {
+        this.goodsModel = goodsModel;
+    }
+
+    public String getLocalEmsNo() {
+        return localEmsNo;
+    }
+
+    public void setLocalEmsNo(String localEmsNo) {
+        this.localEmsNo = localEmsNo;
+    }
+
+    public String getOwnerCode() {
+        return ownerCode;
+    }
+
+    public void setOwnerCode(String ownerCode) {
+        this.ownerCode = ownerCode;
+    }
+
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+
+    public String getStoreCompanyName() {
+        return storeCompanyName;
+    }
+
+    public void setStoreCompanyName(String storeCompanyName) {
+        this.storeCompanyName = storeCompanyName;
+    }
+
+    public String getStoreUscCode() {
+        return storeUscCode;
+    }
+
+    public void setStoreUscCode(String storeUscCode) {
+        this.storeUscCode = storeUscCode;
+    }
+
+    public String getStoreCustomsCode() {
+        return storeCustomsCode;
+    }
+
+    public void setStoreCustomsCode(String storeCustomsCode) {
+        this.storeCustomsCode = storeCustomsCode;
+    }
+
+    public String getStoreCode() {
+        return storeCode;
+    }
+
+    public void setStoreCode(String storeCode) {
+        this.storeCode = storeCode;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+}

+ 231 - 0
src/main/java/com/emato/cus/supervise/domainCus/CusAcqGoodsMove05.java

@@ -0,0 +1,231 @@
+package com.emato.cus.supervise.domainCus;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 货物库位移动数据 WMS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 13:41
+ */
+public class CusAcqGoodsMove05 implements Serializable {
+
+    private static final long serialVersionUID = 1427472942297944139L;
+
+    private String id;
+
+    private LocalDateTime shelfLoadTime;
+    private LocalDateTime shelfUnloadTime;
+    private String targetSeatNo;
+    private String originSeatNo;
+
+    private String goodsName;
+    private String codeTs;
+    private String skuNo;
+    private String goodsId;
+
+    private String gUnit;
+    private Double gQty;
+    private String legalUnit;
+    private Double legalQty;
+
+    private String goodsModel;
+    private String localEmsNo;
+
+    private String storeCompanyName;
+    private String storeUscCode;
+    private String storeCustomsCode;
+    private String storeCode;
+
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public LocalDateTime getShelfLoadTime() {
+        return shelfLoadTime;
+    }
+
+    public void setShelfLoadTime(LocalDateTime shelfLoadTime) {
+        this.shelfLoadTime = shelfLoadTime;
+    }
+
+    public LocalDateTime getShelfUnloadTime() {
+        return shelfUnloadTime;
+    }
+
+    public void setShelfUnloadTime(LocalDateTime shelfUnloadTime) {
+        this.shelfUnloadTime = shelfUnloadTime;
+    }
+
+    public String getTargetSeatNo() {
+        return targetSeatNo;
+    }
+
+    public void setTargetSeatNo(String targetSeatNo) {
+        this.targetSeatNo = targetSeatNo;
+    }
+
+    public String getOriginSeatNo() {
+        return originSeatNo;
+    }
+
+    public void setOriginSeatNo(String originSeatNo) {
+        this.originSeatNo = originSeatNo;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
+    public String getSkuNo() {
+        return skuNo;
+    }
+
+    public void setSkuNo(String skuNo) {
+        this.skuNo = skuNo;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getgUnit() {
+        return gUnit;
+    }
+
+    public void setgUnit(String gUnit) {
+        this.gUnit = gUnit;
+    }
+
+    public Double getgQty() {
+        return gQty;
+    }
+
+    public void setgQty(Double gQty) {
+        this.gQty = gQty;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public Double getLegalQty() {
+        return legalQty;
+    }
+
+    public void setLegalQty(Double legalQty) {
+        this.legalQty = legalQty;
+    }
+
+    public String getGoodsModel() {
+        return goodsModel;
+    }
+
+    public void setGoodsModel(String goodsModel) {
+        this.goodsModel = goodsModel;
+    }
+
+    public String getLocalEmsNo() {
+        return localEmsNo;
+    }
+
+    public void setLocalEmsNo(String localEmsNo) {
+        this.localEmsNo = localEmsNo;
+    }
+
+    public String getStoreCompanyName() {
+        return storeCompanyName;
+    }
+
+    public void setStoreCompanyName(String storeCompanyName) {
+        this.storeCompanyName = storeCompanyName;
+    }
+
+    public String getStoreUscCode() {
+        return storeUscCode;
+    }
+
+    public void setStoreUscCode(String storeUscCode) {
+        this.storeUscCode = storeUscCode;
+    }
+
+    public String getStoreCustomsCode() {
+        return storeCustomsCode;
+    }
+
+    public void setStoreCustomsCode(String storeCustomsCode) {
+        this.storeCustomsCode = storeCustomsCode;
+    }
+
+    public String getStoreCode() {
+        return storeCode;
+    }
+
+    public void setStoreCode(String storeCode) {
+        this.storeCode = storeCode;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+
+}

+ 238 - 0
src/main/java/com/emato/cus/supervise/domainCus/CusAcqGoodsSeat06.java

@@ -0,0 +1,238 @@
+package com.emato.cus.supervise.domainCus;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 库位货物数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 13:41
+ */
+public class CusAcqGoodsSeat06 implements Serializable {
+    private static final long serialVersionUID = -7234420460632649121L;
+
+    private String id;
+    private String seatNo;
+
+    private String goodsName;
+    private String codeTs;
+    private String formNoDec;
+    private String formNo;
+
+    private String skuNo;
+    private String goodsId;
+
+    private String gUnit;
+    private Double gQty;
+    private String legalUnit;
+    private Double legalQty;
+
+    private String goodsModel;
+    private String localEmsNo;
+    private String ownerCode;
+    private String ownerName;
+
+    private String storeCompanyName;
+    private String storeUscCode;
+    private String storeCustomsCode;
+    private String storeCode;
+
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getSeatNo() {
+        return seatNo;
+    }
+
+    public void setSeatNo(String seatNo) {
+        this.seatNo = seatNo;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
+    public String getFormNoDec() {
+        return formNoDec;
+    }
+
+    public void setFormNoDec(String formNoDec) {
+        this.formNoDec = formNoDec;
+    }
+
+    public String getFormNo() {
+        return formNo;
+    }
+
+    public void setFormNo(String formNo) {
+        this.formNo = formNo;
+    }
+
+    public String getSkuNo() {
+        return skuNo;
+    }
+
+    public void setSkuNo(String skuNo) {
+        this.skuNo = skuNo;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getgUnit() {
+        return gUnit;
+    }
+
+    public void setgUnit(String gUnit) {
+        this.gUnit = gUnit;
+    }
+
+    public Double getgQty() {
+        return gQty;
+    }
+
+    public void setgQty(Double gQty) {
+        this.gQty = gQty;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public Double getLegalQty() {
+        return legalQty;
+    }
+
+    public void setLegalQty(Double legalQty) {
+        this.legalQty = legalQty;
+    }
+
+    public String getGoodsModel() {
+        return goodsModel;
+    }
+
+    public void setGoodsModel(String goodsModel) {
+        this.goodsModel = goodsModel;
+    }
+
+    public String getLocalEmsNo() {
+        return localEmsNo;
+    }
+
+    public void setLocalEmsNo(String localEmsNo) {
+        this.localEmsNo = localEmsNo;
+    }
+
+    public String getOwnerCode() {
+        return ownerCode;
+    }
+
+    public void setOwnerCode(String ownerCode) {
+        this.ownerCode = ownerCode;
+    }
+
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+
+    public String getStoreCompanyName() {
+        return storeCompanyName;
+    }
+
+    public void setStoreCompanyName(String storeCompanyName) {
+        this.storeCompanyName = storeCompanyName;
+    }
+
+    public String getStoreUscCode() {
+        return storeUscCode;
+    }
+
+    public void setStoreUscCode(String storeUscCode) {
+        this.storeUscCode = storeUscCode;
+    }
+
+    public String getStoreCustomsCode() {
+        return storeCustomsCode;
+    }
+
+    public void setStoreCustomsCode(String storeCustomsCode) {
+        this.storeCustomsCode = storeCustomsCode;
+    }
+
+    public String getStoreCode() {
+        return storeCode;
+    }
+
+    public void setStoreCode(String storeCode) {
+        this.storeCode = storeCode;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+}

+ 209 - 0
src/main/java/com/emato/cus/supervise/domainCus/CusAcqInventoryInfo03.java

@@ -0,0 +1,209 @@
+package com.emato.cus.supervise.domainCus;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 货物库存数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:24
+ */
+public class CusAcqInventoryInfo03 implements Serializable {
+    private static final long serialVersionUID = -1786218576323478234L;
+
+    private String id;
+    private String goodsName;
+    private String codeTs;
+    private String skuNo;
+    private String goodsId;
+
+    private String gUnit;
+    private Double gQty;
+    private String legalUnit;
+    private Double legalQty;
+
+    private String goodsModel;
+    private String localEmsNo;
+    private String ownerCode;
+    private String ownerName;
+
+    private String storeCompanyName;
+    private String storeUscCode;
+    private String storeCustomsCode;
+    private String storeCode;
+
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
+    public String getSkuNo() {
+        return skuNo;
+    }
+
+    public void setSkuNo(String skuNo) {
+        this.skuNo = skuNo;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getGUnit() {
+        return gUnit;
+    }
+
+    public void setGUnit(String gUnit) {
+        this.gUnit = gUnit;
+    }
+
+    public Double getgQty() {
+        return gQty;
+    }
+
+    public void setgQty(Double gQty) {
+        this.gQty = gQty;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public Double getLegalQty() {
+        return legalQty;
+    }
+
+    public void setLegalQty(Double legalQty) {
+        this.legalQty = legalQty;
+    }
+
+    public String getGoodsModel() {
+        return goodsModel;
+    }
+
+    public void setGoodsModel(String goodsModel) {
+        this.goodsModel = goodsModel;
+    }
+
+    public String getLocalEmsNo() {
+        return localEmsNo;
+    }
+
+    public void setLocalEmsNo(String localEmsNo) {
+        this.localEmsNo = localEmsNo;
+    }
+
+    public String getOwnerCode() {
+        return ownerCode;
+    }
+
+    public void setOwnerCode(String ownerCode) {
+        this.ownerCode = ownerCode;
+    }
+
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+
+    public String getStoreCompanyName() {
+        return storeCompanyName;
+    }
+
+    public void setStoreCompanyName(String storeCompanyName) {
+        this.storeCompanyName = storeCompanyName;
+    }
+
+    public String getStoreUscCode() {
+        return storeUscCode;
+    }
+
+    public void setStoreUscCode(String storeUscCode) {
+        this.storeUscCode = storeUscCode;
+    }
+
+    public String getStoreCustomsCode() {
+        return storeCustomsCode;
+    }
+
+    public void setStoreCustomsCode(String storeCustomsCode) {
+        this.storeCustomsCode = storeCustomsCode;
+    }
+
+    public String getStoreCode() {
+        return storeCode;
+    }
+
+    public void setStoreCode(String storeCode) {
+        this.storeCode = storeCode;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+}

+ 239 - 0
src/main/java/com/emato/cus/supervise/domainCus/CusAcqShelfLoad04.java

@@ -0,0 +1,239 @@
+package com.emato.cus.supervise.domainCus;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 货物上下架数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-31 09:27
+ */
+public class CusAcqShelfLoad04 implements Serializable {
+
+    private static final long serialVersionUID = 4549632312455490275L;
+
+    private String id;
+    private String goodsName;
+    private String codeTs;
+
+    private String formNoDec;
+    private String formNo;
+
+    private String skuNo;
+    private String goodsId;
+
+    private String gUnit;
+    private Double gQty;
+    private String legalUnit;
+    private Double legalQty;
+
+    private String goodsModel;
+    private String localEmsNo;
+
+    private String seatNo;
+    private LocalDateTime shelfLoadTime;
+    private String shelfLoadType;
+
+    private String storeCompanyName;
+    private String storeUscCode;
+    private String storeCustomsCode;
+    private String storeCode;
+
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
+    public String getFormNoDec() {
+        return formNoDec;
+    }
+
+    public void setFormNoDec(String formNoDec) {
+        this.formNoDec = formNoDec;
+    }
+
+    public String getFormNo() {
+        return formNo;
+    }
+
+    public void setFormNo(String formNo) {
+        this.formNo = formNo;
+    }
+
+    public String getSkuNo() {
+        return skuNo;
+    }
+
+    public void setSkuNo(String skuNo) {
+        this.skuNo = skuNo;
+    }
+
+    public String getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getgUnit() {
+        return gUnit;
+    }
+
+    public void setgUnit(String gUnit) {
+        this.gUnit = gUnit;
+    }
+
+    public Double getgQty() {
+        return gQty;
+    }
+
+    public void setgQty(Double gQty) {
+        this.gQty = gQty;
+    }
+
+    public String getLegalUnit() {
+        return legalUnit;
+    }
+
+    public void setLegalUnit(String legalUnit) {
+        this.legalUnit = legalUnit;
+    }
+
+    public Double getLegalQty() {
+        return legalQty;
+    }
+
+    public void setLegalQty(Double legalQty) {
+        this.legalQty = legalQty;
+    }
+
+    public String getGoodsModel() {
+        return goodsModel;
+    }
+
+    public void setGoodsModel(String goodsModel) {
+        this.goodsModel = goodsModel;
+    }
+
+    public String getLocalEmsNo() {
+        return localEmsNo;
+    }
+
+    public void setLocalEmsNo(String localEmsNo) {
+        this.localEmsNo = localEmsNo;
+    }
+
+    public String getSeatNo() {
+        return seatNo;
+    }
+
+    public void setSeatNo(String seatNo) {
+        this.seatNo = seatNo;
+    }
+
+    public LocalDateTime getShelfLoadTime() {
+        return shelfLoadTime;
+    }
+
+    public void setShelfLoadTime(LocalDateTime shelfLoadTime) {
+        this.shelfLoadTime = shelfLoadTime;
+    }
+
+    public String getShelfLoadType() {
+        return shelfLoadType;
+    }
+
+    public void setShelfLoadType(String shelfLoadType) {
+        this.shelfLoadType = shelfLoadType;
+    }
+
+    public String getStoreCompanyName() {
+        return storeCompanyName;
+    }
+
+    public void setStoreCompanyName(String storeCompanyName) {
+        this.storeCompanyName = storeCompanyName;
+    }
+
+    public String getStoreUscCode() {
+        return storeUscCode;
+    }
+
+    public void setStoreUscCode(String storeUscCode) {
+        this.storeUscCode = storeUscCode;
+    }
+
+    public String getStoreCustomsCode() {
+        return storeCustomsCode;
+    }
+
+    public void setStoreCustomsCode(String storeCustomsCode) {
+        this.storeCustomsCode = storeCustomsCode;
+    }
+
+    public String getStoreCode() {
+        return storeCode;
+    }
+
+    public void setStoreCode(String storeCode) {
+        this.storeCode = storeCode;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+}

+ 78 - 0
src/main/java/com/emato/cus/supervise/domainCus/EmtRecordTime.java

@@ -0,0 +1,78 @@
+package com.emato.cus.supervise.domainCus;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 扫描WMS时间
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 09:44
+ */
+public class EmtRecordTime implements Serializable {
+    private static final long serialVersionUID = 71055833819912201L;
+
+    private String dataType;
+    private String lastTime;
+    private String thisTime;
+    private String createrSn;
+    private LocalDateTime createTime;
+    private String moderSn;
+    private LocalDateTime modTime;
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public String getLastTime() {
+        return lastTime;
+    }
+
+    public void setLastTime(String lastTime) {
+        this.lastTime = lastTime;
+    }
+
+    public String getThisTime() {
+        return thisTime;
+    }
+
+    public void setThisTime(String thisTime) {
+        this.thisTime = thisTime;
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    public LocalDateTime getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(LocalDateTime modTime) {
+        this.modTime = modTime;
+    }
+}

+ 46 - 0
src/main/java/com/emato/cus/supervise/domainOms/OmsAcqInventoryInfo.java

@@ -0,0 +1,46 @@
+package com.emato.cus.supervise.domainOms;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 货物库存数据 OMS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:24
+ */
+public class OmsAcqInventoryInfo implements Serializable {
+
+    private static final long serialVersionUID = 6083001599825316607L;
+    //商户编码
+    private String merchSn;
+    //货主企业海关编码
+    private String ownerCode;
+    //货主企业名称
+    private String ownerName;
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getOwnerCode() {
+        return ownerCode;
+    }
+
+    public void setOwnerCode(String ownerCode) {
+        this.ownerCode = ownerCode;
+    }
+
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+}

+ 25 - 0
src/main/java/com/emato/cus/supervise/mapper/WmsAcqInventoryInfoMapper.java

@@ -0,0 +1,25 @@
+package com.emato.cus.supervise.mapper;
+
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-01 15:51
+ */
+@Repository
+public interface WmsAcqInventoryInfoMapper {
+
+    /**
+     * 货物库存数据
+     * @param param
+     * @return
+     */
+    List<WmsAcqInventoryInfo> getWmsAcqInventoryInfo(Map<String, Object> param);
+
+
+}

+ 23 - 0
src/main/java/com/emato/cus/supervise/mapperCus/CusAcqGoodsMoveMapper05.java

@@ -0,0 +1,23 @@
+package com.emato.cus.supervise.mapperCus;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsMove05;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 货物库位移动数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:38
+ */
+@Repository
+public interface CusAcqGoodsMoveMapper05 {
+    /**
+     * 货物库位移动数据
+     * @param list
+     * @return
+     */
+    int addCusAcqGoodsMove05(List<CusAcqGoodsMove05> list);
+}

+ 23 - 0
src/main/java/com/emato/cus/supervise/mapperCus/CusAcqGoodsSeatMapper06.java

@@ -0,0 +1,23 @@
+package com.emato.cus.supervise.mapperCus;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsSeat06;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 库位货物数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:38
+ */
+@Repository
+public interface CusAcqGoodsSeatMapper06 {
+    /**
+     * 货物库位移动数据
+     * @param list
+     * @return
+     */
+    int addCusAcqGoodsSeat06(List<CusAcqGoodsSeat06> list);
+}

+ 22 - 0
src/main/java/com/emato/cus/supervise/mapperCus/CusAcqInventoryInfoMapper03.java

@@ -0,0 +1,22 @@
+package com.emato.cus.supervise.mapperCus;
+
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 货物库存数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:38
+ */
+@Repository
+public interface CusAcqInventoryInfoMapper03 {
+    /**
+     * 货物库存数据
+     * @param list
+     * @return
+     */
+    int addAcqInventoryInfo03(List<CusAcqInventoryInfo03> list);
+}

+ 22 - 0
src/main/java/com/emato/cus/supervise/mapperCus/CusAcqShelfLoadMapper04.java

@@ -0,0 +1,22 @@
+package com.emato.cus.supervise.mapperCus;
+
+import com.emato.cus.supervise.domainCus.CusAcqShelfLoad04;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 货物上下架数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 15:38
+ */
+@Repository
+public interface CusAcqShelfLoadMapper04 {
+    /**
+     * 货物上下架数据
+     * @param list
+     * @return
+     */
+    int addCusAcqShelfLoad04(List<CusAcqShelfLoad04> list);
+}

+ 22 - 0
src/main/java/com/emato/cus/supervise/mapperCus/EmtRecordTimeMapper.java

@@ -0,0 +1,22 @@
+package com.emato.cus.supervise.mapperCus;
+
+import com.emato.cus.supervise.domainCus.EmtRecordTime;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 扫描WMS时间记录 Mapper
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 09:42
+ */
+@Repository
+public interface EmtRecordTimeMapper {
+
+    List<EmtRecordTime> selectEmtRecordTime(Map<String, Object> param);
+
+    int updateEmtRecordTime(Map<String, Object> param);
+
+}

+ 26 - 0
src/main/java/com/emato/cus/supervise/mapperOms/OmsAcqInventoryInfoMapper.java

@@ -0,0 +1,26 @@
+package com.emato.cus.supervise.mapperOms;
+
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-01 15:51
+ */
+@Repository
+public interface OmsAcqInventoryInfoMapper {
+
+    /**
+     * 货物库存数据
+     * @param merchSnList 商户编码
+     * @return
+     */
+    List<OmsAcqInventoryInfo> getOmsAcqInventoryInfoList(List<String> merchSnList);
+
+
+}

+ 57 - 0
src/main/java/com/emato/cus/supervise/msg/MessageException.java

@@ -0,0 +1,57 @@
+package com.emato.cus.supervise.msg;
+
+/**
+ * 自定义异常
+ *
+ * @author Scott Chen
+ * @date 2017/3/22
+ */
+public class MessageException extends RuntimeException {
+
+    private static final long serialVersionUID = -1422580005904561463L;
+
+    private String code;
+    private String msg;
+
+    public MessageException() {
+        super();
+    }
+
+    public MessageException(String msg) {
+        super(msg);
+        this.msg = msg;
+    }
+
+    public MessageException(String code, String msg) {
+        super(msg);
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public MessageException(String code, String msg, Throwable cause) {
+        super(msg, cause);
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public MessageException(String msg, Throwable cause) {
+        super(msg, cause);
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 25 - 0
src/main/java/com/emato/cus/supervise/msg/Messages.java

@@ -0,0 +1,25 @@
+package com.emato.cus.supervise.msg;
+
+/**
+ * Message消息代码定义
+ *
+ * 可以根据业务不同进行拆分, 对不同业务功能定义不同消息代码
+ *
+ * @author Scott Chen
+ * @date 2017/3/9
+ */
+public enum Messages {
+
+    I_0("0", "成功"),
+    I_MINUS_1("-1", "失败"),
+    I_100000("100000", "非法请求");
+
+    public String CODE;
+    public String MSG;
+
+    Messages(String code, String msg) {
+        this.CODE = code;
+        this.MSG = msg;
+    }
+
+}

+ 166 - 0
src/main/java/com/emato/cus/supervise/msg/ResponseMessage.java

@@ -0,0 +1,166 @@
+package com.emato.cus.supervise.msg;
+
+import com.google.common.base.Strings;
+
+import java.util.List;
+
+/**
+ * @author Scott Chen
+ * @date 2017/4/20
+ */
+public class ResponseMessage {
+
+    private static final String SUCCESS_CODE = "0";
+    private static final String SUCCESS_MSG = "成功";
+
+    public static final String ERROR_CODE = "-1";
+    public static final String ERROR_MSG = "错误";
+
+    private static final String FAILURE_CODE = "-2";
+    private static final String FAILURE_MSG = "失败";
+
+    private String code;
+    private String msg;
+    private ResponseMessageData data;
+
+    private ResponseMessage() {
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public ResponseMessageData getData() {
+        return data;
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+    public static Builder builder(String code, String msg) {
+        return new Builder(code, msg);
+    }
+    public static Builder builder(String code, String msg, ResponseMessageData responseMessageData) {
+        return new Builder(code, msg, responseMessageData);
+    }
+    public static Builder builder(String code, String msg, List list) {
+        return new Builder(code, msg, list);
+    }
+
+    //---------- 直接返回结果 ----------
+    //成功
+    public static ResponseMessage success() {
+        return new Builder().build();
+    }
+    public static ResponseMessage success(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage success(String msg) {
+        return new Builder(SUCCESS_CODE, msg).build();
+    }
+    public static ResponseMessage success(String msg, List rows) {
+        return new Builder(SUCCESS_CODE, msg, rows).build();
+    }
+    public static ResponseMessage success(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+    public static ResponseMessage success(List rows) {
+        return new Builder(SUCCESS_CODE, SUCCESS_MSG, rows).build();
+    }
+
+    //错误
+    public static ResponseMessage error() {
+        return new Builder(ERROR_CODE, ERROR_MSG).build();
+    }
+    public static ResponseMessage error(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage error(String msg) {
+        return new Builder(ERROR_CODE, msg).build();
+    }
+    public static ResponseMessage error(List rows) {
+        return new Builder(ERROR_CODE, ERROR_MSG, rows).build();
+    }
+    public static ResponseMessage error(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+
+    //失败
+    public static ResponseMessage failed() {
+        return new Builder(FAILURE_CODE, FAILURE_MSG).build();
+    }
+    public static ResponseMessage failed(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+    public static ResponseMessage failed(String msg) {
+        return new Builder(FAILURE_CODE, msg).build();
+    }
+    public static ResponseMessage failed(List rows) {
+        return new Builder(FAILURE_CODE, FAILURE_MSG, rows).build();
+    }
+    public static ResponseMessage failed(String code, String msg, List rows) {
+        return new Builder(code, msg, rows).build();
+    }
+
+    /**
+     * 消息构建器类
+     */
+    public static class Builder {
+        private String code;
+        private String msg;
+        private ResponseMessageData data;
+
+        public Builder() {
+            this.code = SUCCESS_CODE;
+            this.msg = SUCCESS_MSG;
+            this.data = ResponseMessageData.builder().build();
+        }
+
+        public Builder(String code, String msg) {
+            this.code = Strings.isNullOrEmpty(code) ? SUCCESS_CODE : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? SUCCESS_MSG : msg;
+            this.data = ResponseMessageData.builder().build();
+        }
+
+        public Builder(String code, String msg, ResponseMessageData responseMessageData) {
+            this.code = code;
+            this.msg = msg;
+            this.data = responseMessageData;
+        }
+
+        public Builder(String code, String msg, List rows) {
+            this.code = code;
+            this.msg = msg;
+            this.data = ResponseMessageData.builder(rows).build();
+        }
+
+        public Builder setCode(String code) {
+            this.code = code;
+            return this;
+        }
+
+        public Builder setMsg(String msg) {
+            this.msg = msg;
+            return this;
+        }
+
+        public Builder setData(ResponseMessageData data) {
+            this.data = data;
+            return this;
+        }
+
+        public ResponseMessage build() {
+            ResponseMessage message = new ResponseMessage();
+            message.code = this.code;
+            message.msg = this.msg;
+            message.data = this.data;
+            return message;
+        }
+
+    }
+}
+

+ 79 - 0
src/main/java/com/emato/cus/supervise/msg/ResponseMessageData.java

@@ -0,0 +1,79 @@
+package com.emato.cus.supervise.msg;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Scott Chen
+ * @date 2017/4/20
+ */
+public class ResponseMessageData {
+
+    private int total;
+    private List rows;
+
+    private ResponseMessageData() {
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public List getRows() {
+        return rows;
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+    public static Builder builder(List rows) {
+        return new Builder(rows);
+    }
+    public static <T> Builder builder(T t, Class<T> type) {
+        return new Builder(t, type);
+    }
+
+
+    public static class Builder {
+        private int total = 0;
+        private List rows = new ArrayList<>();
+
+        public Builder() {
+        }
+
+        public Builder(List rows) {
+            this.total = rows ==null ? 0 : rows.size();
+            this.rows = rows ==null ? new ArrayList<>() : rows;
+        }
+
+        public <T> Builder(T t, Class<T> type) {
+            List rows = new ArrayList<>();
+            if (t == null) {
+                this.total = 0;
+            }else{
+                rows.add(t);
+                this.total = rows.size();
+            }
+            this.rows = rows;
+        }
+
+        public Builder setTotal(int total) {
+            this.total = total;
+            return this;
+        }
+
+        public Builder setRows(List rows) {
+            this.rows = rows;
+            return this;
+        }
+
+        public ResponseMessageData build() {
+            ResponseMessageData data = new ResponseMessageData();
+            data.total = this.total;
+            data.rows = this.rows;
+            return data;
+        }
+
+    }
+
+}

+ 46 - 0
src/main/java/com/emato/cus/supervise/schedule/AcqInventoryInfo.java

@@ -0,0 +1,46 @@
+package com.emato.cus.supervise.schedule;
+
+import com.emato.cus.supervise.biz.acqInventoryInfo.AcqInventoryInfoBiz;
+import com.emato.cus.supervise.util.LocalDateTimeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+/**
+ * 企业库存信息数据监控 (迁移数据至海关中间库)
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-01 16:24
+ */
+@Configuration
+@EnableScheduling
+public class AcqInventoryInfo {
+
+    private static final Logger logger = LoggerFactory.getLogger(AcqInventoryInfo.class);
+
+    @Autowired
+    private AcqInventoryInfoBiz acqInventoryInfoBiz;
+
+    /**
+     * 货物库存数据
+     */
+    //每月1号开始,每天12,22点各1次,共2次
+    //@Scheduled(cron = "0 0 12,22 1/1 * ?")
+    @Scheduled(cron = "10/10 * * * * ? ")
+    public void timer() {
+        logger.info("==================== 货物库存数据::监控数据读取开始 ====================");
+        String begDateTime = LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN);
+        logger.info("--- 任务开始时间: {}", begDateTime);
+
+        acqInventoryInfoBiz.task();
+
+        String endDateTime = LocalDateTimeUtils.formatNow(LocalDateTimeUtils.DATA_TIME_HYPHEN);
+        logger.info("--- 任务结束时间: {}", endDateTime);
+        logger.info("==================== 货物库存数据::监控数据读取结束 ====================");
+
+    }
+
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/service/cus/CusAcqGoodsMoveService05.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.service.cus;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsMove05;
+
+import java.util.List;
+
+/**
+ * 货物库位移动数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:14
+ */
+public interface CusAcqGoodsMoveService05 {
+    /**
+     * 货物库位移动数据
+     * @param list
+     * @return
+     */
+    int addCusAcqGoodsMove05(List<CusAcqGoodsMove05> list);
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/service/cus/CusAcqGoodsSeatService06.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.service.cus;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsSeat06;
+
+import java.util.List;
+
+/**
+ * 库位货物数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:14
+ */
+public interface CusAcqGoodsSeatService06 {
+    /**
+     * 库位货物数据
+     * @param list
+     * @return
+     */
+    int addCusAcqGoodsSeat06(List<CusAcqGoodsSeat06> list);
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/service/cus/CusAcqInventoryInfoService03.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.service.cus;
+
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+
+import java.util.List;
+
+/**
+ * 货物库存数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:14
+ */
+public interface CusAcqInventoryInfoService03 {
+    /**
+     * 货物库存数据
+     * @param list
+     * @return
+     */
+    int addCusAcqInventoryInfo(List<CusAcqInventoryInfo03> list);
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/service/cus/CusAcqShelfLoadService04.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.service.cus;
+
+import com.emato.cus.supervise.domainCus.CusAcqShelfLoad04;
+
+import java.util.List;
+
+/**
+ * 货物库存数据 CUS
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:14
+ */
+public interface CusAcqShelfLoadService04 {
+    /**
+     * 货物库存数据
+     * @param list
+     * @return
+     */
+    int addCusAcqShelfLoad04(List<CusAcqShelfLoad04> list);
+}

+ 19 - 0
src/main/java/com/emato/cus/supervise/service/cus/EmtRecordTimeService.java

@@ -0,0 +1,19 @@
+package com.emato.cus.supervise.service.cus;
+
+import com.emato.cus.supervise.domainCus.EmtRecordTime;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 10:20
+ */
+public interface EmtRecordTimeService {
+
+    List<EmtRecordTime> selectEmtRecordTime(Map<String, Object> param);
+
+    int updateEmtRecordTime(Map<String, Object> param);
+
+}

+ 30 - 0
src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqGoodsMoveSeatServiceImpl06.java

@@ -0,0 +1,30 @@
+package com.emato.cus.supervise.service.cus.impl;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsSeat06;
+import com.emato.cus.supervise.mapperCus.CusAcqGoodsSeatMapper06;
+import com.emato.cus.supervise.service.cus.CusAcqGoodsSeatService06;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 库位货物数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:15
+ */
+@Service
+public class CusAcqGoodsMoveSeatServiceImpl06 implements CusAcqGoodsSeatService06 {
+
+    @Autowired
+    CusAcqGoodsSeatMapper06 cusAcqGoodsSeatMapper06;
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public int addCusAcqGoodsSeat06(List<CusAcqGoodsSeat06> list) {
+        return cusAcqGoodsSeatMapper06.addCusAcqGoodsSeat06(list);
+    }
+}

+ 30 - 0
src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqGoodsMoveServiceImpl05.java

@@ -0,0 +1,30 @@
+package com.emato.cus.supervise.service.cus.impl;
+
+import com.emato.cus.supervise.domainCus.CusAcqGoodsMove05;
+import com.emato.cus.supervise.mapperCus.CusAcqGoodsMoveMapper05;
+import com.emato.cus.supervise.service.cus.CusAcqGoodsMoveService05;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 货物库位移动数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:15
+ */
+@Service
+public class CusAcqGoodsMoveServiceImpl05 implements CusAcqGoodsMoveService05 {
+
+    @Autowired
+    CusAcqGoodsMoveMapper05 cusAcqGoodsMoveMapper05;
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public int addCusAcqGoodsMove05(List<CusAcqGoodsMove05> list) {
+        return cusAcqGoodsMoveMapper05.addCusAcqGoodsMove05(list);
+    }
+}

+ 30 - 0
src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqInventoryInfoServiceImpl03.java

@@ -0,0 +1,30 @@
+package com.emato.cus.supervise.service.cus.impl;
+
+import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
+import com.emato.cus.supervise.mapperCus.CusAcqInventoryInfoMapper03;
+import com.emato.cus.supervise.service.cus.CusAcqInventoryInfoService03;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 货物库存数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:15
+ */
+@Service
+public class CusAcqInventoryInfoServiceImpl03 implements CusAcqInventoryInfoService03 {
+
+    @Autowired
+    CusAcqInventoryInfoMapper03 cusAcqInventoryInfoMapper03;
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public int addCusAcqInventoryInfo(List<CusAcqInventoryInfo03> list) {
+        return cusAcqInventoryInfoMapper03.addAcqInventoryInfo03(list);
+    }
+}

+ 30 - 0
src/main/java/com/emato/cus/supervise/service/cus/impl/CusAcqShelfLoadServiceImpl04.java

@@ -0,0 +1,30 @@
+package com.emato.cus.supervise.service.cus.impl;
+
+import com.emato.cus.supervise.domainCus.CusAcqShelfLoad04;
+import com.emato.cus.supervise.mapperCus.CusAcqShelfLoadMapper04;
+import com.emato.cus.supervise.service.cus.CusAcqShelfLoadService04;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 货物上下架数据 CUS
+ *
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 17:15
+ */
+@Service
+public class CusAcqShelfLoadServiceImpl04 implements CusAcqShelfLoadService04 {
+
+    @Autowired
+    CusAcqShelfLoadMapper04 cusAcqShelfLoadMapper04;
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public int addCusAcqShelfLoad04(List<CusAcqShelfLoad04> list) {
+        return cusAcqShelfLoadMapper04.addCusAcqShelfLoad04(list);
+    }
+}

+ 36 - 0
src/main/java/com/emato/cus/supervise/service/cus/impl/EmtRecordTimeServiceImpl.java

@@ -0,0 +1,36 @@
+package com.emato.cus.supervise.service.cus.impl;
+
+import com.emato.cus.supervise.domainCus.EmtRecordTime;
+import com.emato.cus.supervise.mapperCus.EmtRecordTimeMapper;
+import com.emato.cus.supervise.service.cus.EmtRecordTimeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 扫描时间
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 10:23
+ */
+@Service
+public class EmtRecordTimeServiceImpl implements EmtRecordTimeService {
+
+    @Autowired
+    private EmtRecordTimeMapper emtRecordTimeMapper;
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public List<EmtRecordTime> selectEmtRecordTime(Map<String, Object> param) {
+        return emtRecordTimeMapper.selectEmtRecordTime(param);
+    }
+
+    @Override
+    @Transactional(value ="secondTransactionManager")
+    public int updateEmtRecordTime(Map<String, Object> param) {
+        return emtRecordTimeMapper.updateEmtRecordTime(param);
+    }
+}

+ 20 - 0
src/main/java/com/emato/cus/supervise/service/wms/OmsAcqInventoryInfoService.java

@@ -0,0 +1,20 @@
+package com.emato.cus.supervise.service.wms;
+
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+
+import java.util.List;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 17:42
+ */
+public interface OmsAcqInventoryInfoService {
+
+    /**
+     * 货物库存数据
+     * @param merchSnList 商户编码
+     * @return
+     */
+    List<OmsAcqInventoryInfo> getOmsAcqInventoryInfoList(List<String> merchSnList);
+}

+ 21 - 0
src/main/java/com/emato/cus/supervise/service/wms/WmsAcqInventoryInfoService.java

@@ -0,0 +1,21 @@
+package com.emato.cus.supervise.service.wms;
+
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 09:29
+ */
+public interface WmsAcqInventoryInfoService {
+
+    /**
+     * 根据上次时间取企业库存信息
+     * @param param
+     * @return
+     */
+    List<WmsAcqInventoryInfo> getWmsAcqInventoryInfo(Map<String, Object> param);
+}

+ 35 - 0
src/main/java/com/emato/cus/supervise/service/wms/impl/OmsAcqInventoryInfoServiceImpl.java

@@ -0,0 +1,35 @@
+package com.emato.cus.supervise.service.wms.impl;
+
+import com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo;
+import com.emato.cus.supervise.mapperOms.OmsAcqInventoryInfoMapper;
+import com.emato.cus.supervise.service.wms.OmsAcqInventoryInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 17:42
+ */
+@Service
+public class OmsAcqInventoryInfoServiceImpl implements OmsAcqInventoryInfoService{
+
+    @Autowired
+    private OmsAcqInventoryInfoMapper omsAcqInventoryInfoMapper;
+
+
+    /**
+     * 货物库存数据
+     *
+     * @param merchSnList 商户编码
+     * @return
+     */
+    @Override
+    @Transactional(value = "thirdTransactionManager")
+    public List<OmsAcqInventoryInfo> getOmsAcqInventoryInfoList(List<String> merchSnList) {
+        return omsAcqInventoryInfoMapper.getOmsAcqInventoryInfoList(merchSnList);
+    }
+}

+ 37 - 0
src/main/java/com/emato/cus/supervise/service/wms/impl/WmsAcqInventoryInfoServiceImpl.java

@@ -0,0 +1,37 @@
+package com.emato.cus.supervise.service.wms.impl;
+
+import com.emato.cus.supervise.domain.WmsAcqInventoryInfo;
+import com.emato.cus.supervise.mapper.WmsAcqInventoryInfoMapper;
+import com.emato.cus.supervise.service.wms.WmsAcqInventoryInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2018-02-02 09:30
+ */
+@Service
+public class WmsAcqInventoryInfoServiceImpl implements WmsAcqInventoryInfoService{
+
+    @Autowired
+    private WmsAcqInventoryInfoMapper wmsAcqInventoryInfoMapper;
+
+    /**
+     * 根据上次时间取企业库存信息
+     *
+     * @param param
+     * @return
+     */
+    @Override
+    @Transactional(value = "primaryTransactionManager")
+    public List<WmsAcqInventoryInfo> getWmsAcqInventoryInfo(Map<String, Object> param) {
+        return wmsAcqInventoryInfoMapper.getWmsAcqInventoryInfo(param);
+    }
+
+}

+ 110 - 0
src/main/java/com/emato/cus/supervise/util/LocalDateTimeUtils.java

@@ -0,0 +1,110 @@
+package com.emato.cus.supervise.util;
+
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalUnit;
+import java.util.Date;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-10-28 10:47
+ */
+public class LocalDateTimeUtils {
+
+    public static final String DATA_TIME_HYPHEN = "yyyy-MM-dd HH:mm:ss";
+
+    private LocalDateTimeUtils() { }
+
+    //获取当前时间的LocalDateTime对象
+    //LocalDateTime.now();
+
+    //根据年月日构建LocalDateTime
+    //LocalDateTime.of();
+
+    //比较日期先后
+    //LocalDateTime.now().isBefore(),
+    //LocalDateTime.now().isAfter(),
+
+    //Date转换为LocalDateTime
+    public static LocalDateTime convertDateToLDT(Date date) {
+        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
+    }
+
+    //LocalDateTime转换为Date
+    public static Date convertLDTToDate(LocalDateTime time) {
+        return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+
+    //获取指定日期的毫秒
+    public static Long getMilliByTime(LocalDateTime time) {
+        return time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+    }
+
+    //获取指定日期的秒
+    public static Long getSecondsByTime(LocalDateTime time) {
+        return time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
+    }
+
+    //获取指定时间的指定格式
+    public static String formatTime(LocalDateTime time, String pattern) {
+        return time.format(DateTimeFormatter.ofPattern(pattern));
+    }
+
+    //获取当前时间的指定格式
+    public static String formatNow(String pattern) {
+        return  formatTime(LocalDateTime.now(), pattern);
+    }
+
+    //日期加上一个数,根据field不同加不同值,field为ChronoUnit.*
+    public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) {
+        return time.plus(number, field);
+    }
+
+    //日期减去一个数,根据field不同减不同值,field参数为ChronoUnit.*
+    public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field) {
+        return time.minus(number, field);
+    }
+
+    /**
+     * 获取两个日期的差  field参数为ChronoUnit.*
+     * @param startTime
+     * @param endTime
+     * @param field  单位(年月日时分秒)
+     * @return
+     */
+    public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
+        Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime));
+        if (field == ChronoUnit.YEARS) {
+            return period.getYears();
+        }
+        if (field == ChronoUnit.MONTHS) {
+            return period.getYears() * 12 + period.getMonths();
+        }
+        return field.between(startTime, endTime);
+    }
+
+    //获取一天的开始时间,2017,7,22 00:00
+    public static LocalDateTime getDayStart(LocalDateTime time) {
+        return time.withHour(0)
+                .withMinute(0)
+                .withSecond(0)
+                .withNano(0);
+    }
+
+    //获取一天的结束时间,2017,7,22 23:59:59.999999999
+    public static LocalDateTime getDayEnd(LocalDateTime time) {
+        return time.withHour(23)
+                .withMinute(59)
+                .withSecond(59)
+                .withNano(999999999);
+    }
+
+
+}

+ 11 - 0
src/main/resources/application-dev.yml

@@ -0,0 +1,11 @@
+
+# 当前环境
+spring:
+  profiles: dev
+
+
+
+
+
+
+

+ 83 - 0
src/main/resources/application.yml

@@ -0,0 +1,83 @@
+#---------- Spring Boot 项目 ----------#
+
+
+# 项目配置
+app:
+  name: cus-wms-supervise
+  description: ${app.name} is a Spring Boot application
+
+# 服务配置
+server:
+  address: 127.0.0.1
+  port: 8081
+
+# 使用环境
+spring:
+  profiles:
+    active: dev
+  aop:
+    proxy-target-class: true
+
+  # 数据源
+  datasource:
+    primary:
+      # 数据源zaxxer HikariCP
+      type: com.zaxxer.hikari.HikariDataSource
+      driver-class-name: org.mariadb.jdbc.Driver
+      # url: jdbc:sqlserver://120.24.12.161:60001;DatabaseName=qhwms
+      url: jdbc:mysql://127.0.0.1:3306/wms_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+      username: root
+      password: root
+      # hikari连接池配置
+      hikari:
+        readOnly: true
+        connectionTimeout: 10000
+        validationTimeout: 5000
+        idleTimeout: 600000
+        maxLifetime: 1200000
+        maximumPoolSize: 3
+        minimumIdle: 3
+    second:
+      # 数据源zaxxer HikariCP
+      type: com.zaxxer.hikari.HikariDataSource
+      driver-class-name: org.mariadb.jdbc.Driver
+      url: jdbc:mysql://127.0.0.1:3306/wms_data?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+      username: root
+      password: root
+      # hikari连接池配置
+      hikari:
+        connectionTimeout: 10000
+        validationTimeout: 5000
+        idleTimeout: 600000
+        maxLifetime: 1200000
+        maximumPoolSize: 10
+        minimumIdle: 3
+    third:
+          # 数据源zaxxer HikariCP
+          type: com.zaxxer.hikari.HikariDataSource
+          driver-class-name: org.mariadb.jdbc.Driver
+          url: jdbc:mysql://127.0.0.1/oms_write?useSSL=false&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
+          username: root
+          password: root
+          # hikari连接池配置
+          hikari:
+            connectionTimeout: 10000
+            validationTimeout: 5000
+            idleTimeout: 600000
+            maxLifetime: 1200000
+            maximumPoolSize: 10
+            minimumIdle: 3
+
+
+
+# mybatis config 多数据源
+mybatis:
+  primary:
+      config-location: classpath:mybatis/mybatis-config.xml
+      type-aliases-package: com.emato.cus.supervise.domain
+  second:
+      config-location: classpath:mybatis/mybatis-config-cus.xml
+      type-aliases-package: com.emato.cus.supervise.domainCus
+  third:
+      config-location: classpath:mybatis/mybatis-config-oms.xml
+      type-aliases-package: com.emato.cus.supervise.domainOms

+ 125 - 0
src/main/resources/logback.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration scan="false" scanPeriod="60 seconds" debug="false">
+
+    <property name="LOG_HOME" value="/data_cus_data_supervise/cus_data_supervise/logs"/>
+    <!-- 定义日志的根目录 -->
+    <property name="DEBUG_DIR" value="debug" />
+    <property name="INFO_DIR" value="info" />
+    <property name="WARN_DIR" value="warn" />
+    <property name="ERROR_DIR" value="error" />
+    <!-- 定义日志文件名称 -->
+    <property name="DEBUG_FILE_NAME" value="cus-wms-debug"></property>
+    <property name="INFO_FILE_NAME" value="cus-wms-info"></property>
+    <property name="WARN_FILE_NAME" value="cus-wms-warn"></property>
+    <property name="ERROR_FILE_NAME" value="cus-wms-error"></property>
+
+    <!-- ConsoleAppender 控制台输出 appender -->
+    <appender name="stdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]-[%-5level][%logger{70}: %line] - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+
+    <!-- DEBUG 日志 appender  -->
+    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <file>${LOG_HOME}/${DEBUG_DIR}/${DEBUG_FILE_NAME}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/${DEBUG_DIR}/${DEBUG_FILE_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+            <MaxHistory>365</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]-[%-5level][%logger{70}: %line] - %msg%n</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+        </filter>
+    </appender>
+
+
+    <!-- INFO 日志 appender  -->
+    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <file>${LOG_HOME}/${INFO_DIR}/${INFO_FILE_NAME}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/${INFO_DIR}/${INFO_FILE_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+            <MaxHistory>365</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]-[%-5level][%logger{70}: %line] - %msg%n</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+        </filter>
+    </appender>
+
+
+    <!-- WARN 日志 appender  -->
+    <appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <file>${LOG_HOME}/${WARN_DIR}/${WARN_FILE_NAME}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/${WARN_DIR}/${WARN_FILE_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+            <MaxHistory>365</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]-[%-5level][%logger{70}: %line] - %msg%n</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+        </filter>
+    </appender>
+
+
+    <!-- ERROR 日志 appender  -->
+    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 指定日志文件的名称 -->
+        <file>${LOG_HOME}/${ERROR_DIR}/${ERROR_FILE_NAME}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_HOME}/${ERROR_DIR}/${ERROR_FILE_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
+            <MaxHistory>365</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]-[%-5level][%logger{70}: %line] - %msg%n</pattern>
+        </encoder>
+
+        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
+            <!-- 设置过滤级别 -->
+            <level>ERROR</level>
+        </filter>
+    </appender>
+
+
+    <logger name="org.apache" level="ERROR"/>
+    <logger name="org.mybatis" level="DEBUG"/>
+    <logger name="org.hibernate" level="WARN"/>
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="org.thymeleaf" level="INFO"/>
+    <logger name="com.zaxxer.hikari" level="ERROR" additivity="false">
+        <appender-ref ref="stdoutAppender" />
+        <appender-ref ref="errorAppender" />
+    </logger>
+    <logger name="com.emato.cus.supervise" level="DEBUG"/>
+
+    <root level="DEBUG" >
+        <appender-ref ref="stdoutAppender" />
+        <appender-ref ref="debugAppender" />
+        <!--<appender-ref ref="infoAppender" />
+        <appender-ref ref="warnAppender" />
+        <appender-ref ref="errorAppender" />-->
+    </root>
+</configuration>

+ 30 - 0
src/main/resources/mybatis/mapper/wms-acq-inventory-info.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapper.WmsAcqInventoryInfoMapper">
+
+
+    <!-- 企业库存信息查询 -->
+    <select id="getWmsAcqInventoryInfo" parameterType="java.util.Map"
+            resultType="com.emato.cus.supervise.domain.WmsAcqInventoryInfo">
+		SELECT
+			li.companyCode AS merchSn,
+			li.itemName AS goodsName,
+			li.itemCode AS codeTs,
+			i.unitDesc AS gUnit,
+			SUM(li.onHandQty) AS gQty,
+			CONCAT(i.itemSize,'-',i.itemColor,'-',i.itemStyle) as goodsModel
+		FROM
+			location_inventory li
+		LEFT JOIN item i ON li.itemCode = i. CODE
+		<where>
+			<if test="thisTime != null">
+				li.created &gt;= #{thisTime}
+			</if>
+		</where>
+		GROUP BY
+		li.itemCode
+    </select>
+
+
+</mapper>

+ 60 - 0
src/main/resources/mybatis/mapperCus/cus-acq-goods-move.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperCus.CusAcqGoodsMoveMapper05">
+
+    <resultMap id="cusAcqInventoryInfo" type="com.emato.cus.supervise.domainCus.CusAcqGoodsMove05">
+        <id property="id" column="id"/>
+
+        <result property="shelfLoadTime" column="shelf_load_time"/>
+        <result property="shelfUnloadTime" column="shelf_unload_time"/>
+        <result property="targetSeatNo" column="target_seat_no"/>
+        <result property="originSeatNo" column="origin_seat_no"/>
+
+        <result property="goodsName" column="goods_name"/>
+        <result property="codeTs" column="code_ts"/>
+        <result property="skuNo" column="sku_no"/>
+        <result property="goodsId" column="goods_id"/>
+
+        <result property="gUnit" column="g_unit"/>
+        <result property="gQty" column="g_qyt"/>
+        <result property="legalUnit" column="legal_unit"/>
+        <result property="legalQty" column="legal_qyt"/>
+
+        <result property="goodsModel" column="goods_model"/>
+        <result property="localEmsNo" column="local_ems_no"/>
+
+        <result property="storeCompanyName" column="store_company_name"/>
+        <result property="storeUscCode" column="store_usc_code"/>
+        <result property="storeCustomsCode" column="store_customs_code"/>
+        <result property="storeCode" column="store_code"/>
+
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+    </resultMap>
+
+    <!-- 货物库位移动数据 -->
+    <insert id="addCusAcqGoodsMove05" parameterType="List">
+        INSERT INTO acq_goods_move (
+                  shelf_load_time, shelf_unload_time, target_seat_no, origin_seat_no,
+                  goods_name, code_ts, sku_no, goods_id,
+                  g_unit, g_qyt, legal_unit, legal_qyt,
+                  goods_model, local_ems_no,
+                  store_company_name,store_usc_code, store_customs_code, store_code,
+                  creater_sn, create_time, moder_sn, mod_time)
+        VALUES
+        <foreach collection="list" item="item" index="idx" separator="," close=";">
+            (
+              #{item.shelfLoadTime, jdbcType=DATE}, #{item.shelfUnloadTime, jdbcType=DATE}, #{item.targetSeatNo, jdbcType=VARCHAR}, #{item.originSeatNo, jdbcType=VARCHAR},
+              #{item.goodsName, jdbcType=VARCHAR}, #{item.codeTs, jdbcType=VARCHAR}, #{item.skuNo, jdbcType=VARCHAR}, #{item.goodsId, jdbcType=VARCHAR},
+              #{item.gUnit, jdbcType=VARCHAR}, #{item.gQty, jdbcType=NUMERIC}, #{item.legalUnit, jdbcType=VARCHAR}, #{item.legalQty, jdbcType=NUMERIC},
+              #{item.goodsModel, jdbcType=VARCHAR}, #{item.localEmsNo, jdbcType=VARCHAR},
+              #{item.storeCompanyName, jdbcType=VARCHAR}, #{item.storeUscCode, jdbcType=VARCHAR}, #{item.storeCustomsCode, jdbcType=VARCHAR}, #{item.storeCode, jdbcType=VARCHAR},
+              #{item.createrSn, jdbcType=VARCHAR}, #{item.createTime, jdbcType=DATE}, #{item.moderSn, jdbcType=VARCHAR}, #{item.modTime, jdbcType=DATE}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 65 - 0
src/main/resources/mybatis/mapperCus/cus-acq-goods-seat.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperCus.CusAcqGoodsSeatMapper06">
+
+    <resultMap id="cusAcqGoodsSeat" type="com.emato.cus.supervise.domainCus.CusAcqGoodsSeat06">
+        <id property="id" column="id"/>
+
+        <result property="seatNo" column="seat_no"/>
+
+        <result property="goodsName" column="goods_name"/>
+        <result property="codeTs" column="code_ts"/>
+        <result property="formNoDec" column="form_no_dec"/>
+        <result property="formNo" column="form_no"/>
+
+        <result property="skuNo" column="sku_no"/>
+        <result property="goodsId" column="goods_id"/>
+
+        <result property="gUnit" column="g_unit"/>
+        <result property="gQty" column="g_qyt"/>
+        <result property="legalUnit" column="legal_unit"/>
+        <result property="legalQty" column="legal_qyt"/>
+
+        <result property="goodsModel" column="goods_model"/>
+        <result property="localEmsNo" column="local_ems_no"/>
+        <result property="ownerCode" column="owner_code"/>
+        <result property="ownerName" column="owner_name"/>
+
+        <result property="storeCompanyName" column="store_company_name"/>
+        <result property="storeUscCode" column="store_usc_code"/>
+        <result property="storeCustomsCode" column="store_customs_code"/>
+        <result property="storeCode" column="store_code"/>
+
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+    </resultMap>
+
+    <!-- 库位货物数据 -->
+    <insert id="addCusAcqGoodsSeat06" parameterType="List">
+        INSERT INTO acq_goods_on_seat (
+                    seat_no, goods_name, code_ts,
+                    form_no_dec, form_no, sku_no, goods_id,
+                    g_unit, g_qyt, legal_unit, legal_qyt,
+                    goods_model, local_ems_no, owner_code, owner_name,
+                    store_company_name, store_usc_code, store_customs_code, store_code,
+                    creater_sn, create_time, moder_sn, mod_time)
+        VALUES
+        <foreach collection="list" item="item" index="idx" separator="," close=";">
+            (
+              #{item.seatNo, jdbcType=VARCHAR},
+              #{item.goodsName, jdbcType=VARCHAR}, #{item.codeTs, jdbcType=VARCHAR},
+              #{item.formNoDec, jdbcType=VARCHAR}, #{item.formNo, jdbcType=VARCHAR},
+              #{item.skuNo, jdbcType=VARCHAR}, #{item.goodsId, jdbcType=VARCHAR},
+              #{item.gUnit, jdbcType=VARCHAR}, #{item.gQty, jdbcType=NUMERIC}, #{item.legalUnit, jdbcType=VARCHAR}, #{item.legalQty, jdbcType=NUMERIC},
+              #{item.goodsModel, jdbcType=VARCHAR}, #{item.localEmsNo, jdbcType=VARCHAR},
+              #{item.ownerCode, jdbcType=VARCHAR}, #{item.ownerName, jdbcType=VARCHAR},
+              #{item.storeCompanyName, jdbcType=VARCHAR}, #{item.storeUscCode, jdbcType=VARCHAR}, #{item.storeCustomsCode, jdbcType=VARCHAR}, #{item.storeCode, jdbcType=VARCHAR},
+              #{item.createrSn, jdbcType=VARCHAR}, #{item.createTime, jdbcType=DATE}, #{item.moderSn, jdbcType=VARCHAR}, #{item.modTime, jdbcType=DATE}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 54 - 0
src/main/resources/mybatis/mapperCus/cus-acq-inventory-info.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperCus.CusAcqInventoryInfoMapper03">
+
+    <resultMap id="cusAcqInventoryInfo" type="com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03">
+        <id property="id" column="id"/>
+        <result property="goodsName" column="goods_name"/>
+        <result property="codeTs" column="code_ts"/>
+        <result property="skuNo" column="sku_no"/>
+        <result property="goodsId" column="goods_id"/>
+
+        <result property="gUnit" column="g_unit"/>
+        <result property="gQty" column="g_qyt"/>
+        <result property="legalUnit" column="legal_unit"/>
+        <result property="legalQty" column="legal_qyt"/>
+
+        <result property="goodsModel" column="goods_model"/>
+        <result property="localEmsNo" column="local_ems_no"/>
+        <result property="ownerCode" column="owner_code"/>
+        <result property="ownerName" column="owner_name"/>
+
+        <result property="storeCompanyName" column="store_company_name"/>
+        <result property="storeUscCode" column="store_usc_code"/>
+        <result property="storeCustomsCode" column="store_customs_code"/>
+        <result property="storeCode" column="store_code"/>
+
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+    </resultMap>
+
+    <!-- 库存数据 -->
+    <insert id="addAcqInventoryInfo03" parameterType="List">
+        INSERT INTO acq_inventory_info (goods_name, code_ts, sku_no, goods_id,
+            g_unit, g_qyt, legal_unit, legal_qyt,
+            goods_model, local_ems_no, owner_code, owner_name,
+            store_company_name, store_usc_code, store_customs_code, store_code,
+            creater_sn, create_time, moder_sn, mod_time
+            )
+        VALUES
+        <foreach collection="list" item="item" index="idx" separator="," close=";">
+            (
+              #{item.goodsName, jdbcType=VARCHAR}, #{item.codeTs, jdbcType=VARCHAR}, #{item.skuNo, jdbcType=VARCHAR}, #{item.goodsId, jdbcType=VARCHAR},
+              #{item.gUnit, jdbcType=VARCHAR}, #{item.gQty, jdbcType=NUMERIC}, #{item.legalUnit, jdbcType=VARCHAR}, #{item.legalQty, jdbcType=NUMERIC},
+              #{item.goodsModel, jdbcType=VARCHAR}, #{item.localEmsNo, jdbcType=VARCHAR}, #{item.ownerCode, jdbcType=VARCHAR}, #{item.ownerName, jdbcType=VARCHAR},
+              #{item.storeCompanyName, jdbcType=VARCHAR}, #{item.storeUscCode, jdbcType=VARCHAR}, #{item.storeCustomsCode, jdbcType=VARCHAR}, #{item.storeCode, jdbcType=VARCHAR},
+              #{item.createrSn, jdbcType=VARCHAR}, #{item.createTime, jdbcType=DATE}, #{item.moderSn, jdbcType=VARCHAR}, #{item.modTime, jdbcType=DATE}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 64 - 0
src/main/resources/mybatis/mapperCus/cus-acq-shelf-load.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperCus.CusAcqShelfLoadMapper04">
+
+    <resultMap id="cusAcqInventoryInfo" type="com.emato.cus.supervise.domainCus.CusAcqShelfLoad04">
+        <id property="id" column="id"/>
+        <result property="goodsName" column="goods_name"/>
+        <result property="codeTs" column="code_ts"/>
+
+        <result property="formNoDec" column="form_no_dec"/>
+        <result property="formNo" column="form_no"/>
+
+        <result property="skuNo" column="sku_no"/>
+        <result property="goodsId" column="goods_id"/>
+
+        <result property="gUnit" column="g_unit"/>
+        <result property="gQty" column="g_qyt"/>
+        <result property="legalUnit" column="legal_unit"/>
+        <result property="legalQty" column="legal_qyt"/>
+
+        <result property="goodsModel" column="goods_model"/>
+        <result property="localEmsNo" column="local_ems_no"/>
+
+        <result property="seatNo" column="seat_no"/>
+        <result property="shelfLoadTime" column="shelf_load_time"/>
+        <result property="shelfLoadType" column="shelf_load_type"/>
+
+        <result property="storeCompanyName" column="store_company_name"/>
+        <result property="storeUscCode" column="store_usc_code"/>
+        <result property="storeCustomsCode" column="store_customs_code"/>
+        <result property="storeCode" column="store_code"/>
+
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+    </resultMap>
+
+    <!-- 货物上下架数据 -->
+    <insert id="addCusAcqShelfLoad04" parameterType="List">
+        INSERT INTO acq_shelf_load (goods_name, code_ts,
+                  form_no_dec, form_no,
+                  sku_no, goods_id,
+                  g_unit, g_qyt, legal_unit, legal_qyt,
+                  goods_model, local_ems_no,
+                  seat_no, shelf_load_time, shelf_load_type,
+                  store_company_name,store_usc_code, store_customs_code, store_code,
+                  creater_sn, create_time, moder_sn, mod_time) VALUES
+        <foreach collection="list" item="item" index="idx" separator="," close=";">
+            (
+              #{item.goodsName, jdbcType=VARCHAR}, #{item.codeTs, jdbcType=VARCHAR},
+              #{item.formNoDec, jdbcType=VARCHAR}, #{item.formNo, jdbcType=VARCHAR},
+              #{item.skuNo, jdbcType=VARCHAR}, #{item.goodsId, jdbcType=VARCHAR},
+              #{item.gUnit, jdbcType=VARCHAR}, #{item.gQty, jdbcType=NUMERIC}, #{item.legalUnit, jdbcType=VARCHAR}, #{item.legalQty, jdbcType=NUMERIC},
+              #{item.goodsModel, jdbcType=VARCHAR}, #{item.localEmsNo, jdbcType=VARCHAR},
+              #{item.seatNo, jdbcType=VARCHAR}, #{item.shelfLoadTime, jdbcType=DATE}, #{item.shelfLoadType, jdbcType=VARCHAR},
+              #{item.storeCompanyName, jdbcType=VARCHAR}, #{item.storeUscCode, jdbcType=VARCHAR}, #{item.storeCustomsCode, jdbcType=VARCHAR}, #{item.storeCode, jdbcType=VARCHAR},
+              #{item.createrSn, jdbcType=VARCHAR}, #{item.createTime, jdbcType=DATE}, #{item.moderSn, jdbcType=VARCHAR}, #{item.modTime, jdbcType=DATE}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 58 - 0
src/main/resources/mybatis/mapperCus/emt-record-time.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperCus.EmtRecordTimeMapper">
+
+    <resultMap id="emtRecordTime" type="com.emato.cus.supervise.domainCus.EmtRecordTime">
+        <id property="dataType" column="data_type"/>
+        <result property="lastTime" column="last_time"/>
+        <result property="thisTime" column="this_time"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+    </resultMap>
+
+
+    <select id="selectEmtRecordTime" parameterType="Map" resultMap="emtRecordTime">
+         select * from emt_record_time
+         <where>
+             <if test="dataType != null and dataType != ''">
+                 data_type=#{dataType}
+             </if>
+             <if test="lastTime != null and lastTime != ''">
+                 AND last_time=#{lastTime}
+             </if>
+             <if test="thisTime != null and thisTime != ''">
+                 AND this_time=#{thisTime}
+             </if>
+             <if test="createrSn != null and createrSn != ''">
+                 AND creater_sn=#{createrSn}
+             </if>
+             <if test="moderSn != null and moderSn != ''">
+                 AND moder_sn=#{moderSn}
+             </if>
+         </where>
+    </select>
+
+    <update id="updateEmtRecordTime" parameterType="Map">
+        UPDATE emt_record_time
+        <set>
+            <if test="lastTime != null and lastTime != ''">
+                last_time=#{lastTime},
+            </if>
+            <if test="thisTime != null and thisTime != ''">
+                this_time=#{thisTime},
+            </if>
+            <if test="moderSn != null and moderSn != ''">
+                moder_sn=#{moderSn},
+            </if>
+            <if test="modTime != null">
+                mod_time=#{modTime, jdbcType=DATE}
+            </if>
+        </set>
+        WHERE data_type=#{dataType}
+    </update>
+
+
+</mapper>

+ 23 - 0
src/main/resources/mybatis/mapperOms/oms-acq-inventory-info.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.emato.cus.supervise.mapperOms.OmsAcqInventoryInfoMapper">
+
+
+    <!-- 企业库存信息查询 -->
+    <select id="getOmsAcqInventoryInfoList" parameterType="java.util.List"
+            resultType="com.emato.cus.supervise.domainOms.OmsAcqInventoryInfo">
+		SELECT
+		    merch_sn As merchSn,
+			merch_cst_rec_code AS ownerCode,
+			merch_cst_rec_name AS ownerName
+		FROM
+		merchant_base where merch_sn IN
+		<foreach collection="list" item="merchSn" index="index"
+				 open="(" close=")" separator=",">
+			#{merchSn}
+		</foreach>
+    </select>
+
+
+</mapper>

+ 14 - 0
src/main/resources/mybatis/mybatis-config-cus.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <mappers>
+        <!--使用相对于mybatis-config.xml的路径-->
+        <mapper resource="mybatis/mapperCus/emt-record-time.xml"/>
+        <mapper resource="mybatis/mapperCus/cus-acq-inventory-info.xml"/>
+        <mapper resource="mybatis/mapperCus/cus-acq-shelf-load.xml"/>
+        <mapper resource="mybatis/mapperCus/cus-acq-goods-move.xml"/>
+        <mapper resource="mybatis/mapperCus/cus-acq-goods-seat.xml"/>
+    </mappers>
+</configuration>

+ 11 - 0
src/main/resources/mybatis/mybatis-config-oms.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <mappers>
+        <mapper resource="mybatis/mapperOms/oms-acq-inventory-info.xml"/>
+
+
+    </mappers>
+</configuration>

+ 11 - 0
src/main/resources/mybatis/mybatis-config.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <mappers>
+        <!--使用相对于mybatis-config.xml的路径-->
+        <mapper resource="mybatis/mapper/wms-acq-inventory-info.xml"/>
+
+    </mappers>
+</configuration>

+ 4 - 0
src/sql/emt-record-time-2.0.sql

@@ -0,0 +1,4 @@
+DELETE FROM emt_record_time;
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  'ACQ_INVENTORY_INFO', '2018-02-02 14:11:30', '2018-02-02 14:11:30', '1', now(), '1', now()
+);

+ 19 - 0
src/sql/emt-record-time.sql

@@ -0,0 +1,19 @@
+DELETE FROM emt_record_time;
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '00', '2017-10-30 10:00:00', '2017-10-30 10:05:00', '1', now(), '1', now()
+);
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '01_01', '2017-10-30 10:10:00', '2017-10-30 10:15:00', '1', now(), '1', now()
+);
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '01_02', '2017-10-30 10:10:00', '2017-10-30 10:15:00', '1', now(), '1', now()
+);
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '01_03', '2017-10-30 10:10:00', '2017-10-30 10:15:00', '1', now(), '1', now()
+);
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '02', '2017-10-30 10:15:00', '2017-10-30 10:20:00', '1', now(), '1', now()
+);
+INSERT INTO emt_record_time (data_type, last_time, this_time, creater_sn, create_time, moder_sn, mod_time) VALUES (
+  '03', '2017-10-30 10:20:00', '2017-10-30 10:25:00', '1', now(), '1', now()
+);

+ 13 - 0
src/sql/wms-data-2.0.sql

@@ -0,0 +1,13 @@
+-- 企业库存信息
+	SELECT
+			li.itemName AS goodsName,
+			li.itemCode AS codeTs,
+			i.unitDesc AS gUnit,
+			SUM(li.onHandQty) AS gQty,
+			CONCAT(i.itemSize,'-',i.itemColor,'-',i.itemStyle) as goodsModel
+		FROM
+			location_inventory li
+		LEFT JOIN item i ON li.itemCode = i. CODE
+		GROUP BY
+		li.itemCode
+

+ 212 - 0
src/sql/wms-data.sql

@@ -0,0 +1,212 @@
+
+-- 1 库存信息
+-- ShopStock 表, 不加时间戳, 加监控totalQty的时间字段到ShopStock上
+--SELECT * FROM ShopStock WHERE sku='ISZWKJ001930'
+--UPDATE ShopStock set pendingShipment=0 WHERE id=6911
+-- --增加时间字段
+-- ALTER TABLE qhwms.dbo.ShopStock ADD totQtyChgTime DATETIME NULL
+-- EXEC sp_addextendedproperty 'MS_Description', '总数变化时间', 'SCHEMA', 'dbo', 'TABLE', 'ShopStock', 'COLUMN', 'totQtyChgTime'
+SELECT * from (
+    select t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit,
+           t.totalQty AS gQty, t1.qty1*t.totalQty AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit,  t1.customsDeclaredElements AS goodsModel,
+      t.shopId, t3.compayName AS ownerName, t3.customsCertNo AS ownerCode,
+      '440301111758322' AS storeUscCode,  'I440366000315001' AS localEmsNo,
+      '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode,
+      '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode, t.totQtyChgTime
+    from ShopStock t
+      LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+      LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+      LEFT OUTER JOIN ShopInfo t3 ON t.shopId=t3.ShopID
+      LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+      LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+    where t.qualityType='0' AND t.totalQty <> 0 AND t.totQtyChgTime IS NOT NULL
+  ) tt
+where tt.totQtyChgTime>='2017-09-27 13:40:12.360'
+
+
+-- 2 货物上下架信息, 分开报送
+-- 1) 上架: AsnItem 表, slottingState 状态:WAREHOUSED, 不加时间戳, 直接使用 warehousedTime 上架时间
+-- 2) 下架: (1) 退港: StockWithDrawItem 表, sku, WarehousingEntry 表可用数量必须为0, 不加时间戳, 直接使用 created 创建时间
+--          (2) 出货: 建出货流水表记录出货数
+
+-- 上架
+--SELECT * FROM AsnItem WHERE sku='ISTTGM000047'
+-- 监控数据
+SELECT * from (
+    SELECT t3.id, t.asnItemId, t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit,
+         t.nonDefectQty AS gQty, t1.qty1*t.nonDefectQty AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit, t1.customsDeclaredElements AS goodsModel,
+         t4.label AS seatNo, 'I' AS shelfLoadType, t.warehousedTime AS shelfLoadTime,
+         '440301111758322' AS storeUscCode, 'I440366000315001' AS localEmsNo,
+         '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode, '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode
+    FROM AsnItem t
+      LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+      LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+      LEFT OUTER JOIN WarehousingEntry t3 ON t.asnItemId=t3.id
+      LEFT OUTER JOIN WarehouseSlot t4 ON t3.slotId=t4.id
+      LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+      LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+    WHERE t.slottingState='WAREHOUSED' AND t3.availableQty  <> 0 AND t.nonDefectQty  <> 0 AND t.warehousedTime IS NOT NULL
+          AND t4.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+  ) tt
+where tt.shelfLoadTime>='2017-04-27 13:40:12.360'
+
+
+-- (1)退港
+-- SELECT * FROM StockWithDrawItem WHERE sku='ISMG660000021'
+-- SELECT * FROM WarehousingEntry WHERE id='9968'
+-- SELECT * FROM WarehouseSlot WHERE id='16408'
+-- 监控数据
+SELECT * from (
+    SELECT t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit,
+           t.withdrawQty AS gQty, t1.qty1*t.withdrawQty AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit, t1.customsDeclaredElements AS goodsModel,
+           t4.label AS seatNo, 'E' AS shelfLoadType, t.created AS shelfLoadTime,
+           '440301111758322' AS storeUscCode, 'I440366000315001' AS localEmsNo,
+           '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode, '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode
+    FROM StockWithdrawItem t
+      LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+      LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+      LEFT OUTER JOIN WarehousingEntry t3 ON t.warehousingEntryId=t3.id
+      LEFT OUTER JOIN WarehouseSlot t4 ON t3.slotId=t4.id
+      LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+      LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+    WHERE t3.availableQty  <> 0 AND t.created IS NOT NULL
+          AND t4.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+  ) tt
+where tt.shelfLoadTime>='2017-09-27 13:40:12.360'
+
+-- (2) 出货
+-- 建出货流水表记录出货数
+
+-- 监控数据
+SELECT * from (
+    SELECT t.id, t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit,
+                 t.qty AS gQty, t1.qty1*t.qty AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit, t1.customsDeclaredElements AS goodsModel,
+                 t4.label AS seatNo, 'E' AS shelfLoadType, t.createTime AS shelfLoadTime,
+                 '440301111758322' AS storeUscCode,  'I440366000315001' AS localEmsNo,
+                 '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode, '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode
+    FROM WarehousingEntry_shipment t
+      LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+      LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+      LEFT OUTER JOIN WarehouseSlot t4 ON t.slotId=t4.id
+      LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+      LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+    WHERE t.qty <> 0 AND t.createTime IS NOT NULL
+          AND t4.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+  ) tt
+where tt.shelfLoadTime>='2017-09-27 13:40:12.360'
+
+
+-- 3 货物库位移动信息
+-- StockSlotTransfer 表, 货物库位移动
+-- state, 0:未移仓;1已移仓
+-- qualityType, 0:良,1:次
+-- 下架时间与上架时间一致
+-- SELECT * FROM StockSlotTransfer WHERE sku='ISTTGM000047'
+-- SELECT * FROM WarehouseSlot WHERE id='15817'
+-- --不加时间戳, 直接使用 transferTime 转移时间, transferTime不为空, state='1', qualityType='0'
+-- 监控数据
+SELECT * from (
+  SELECT t.transferTime AS shelfLoadTime, t.transferTime AS shelfUnloadTime, t5.label AS targetSeatNo, t4.label AS originSeatNo,
+         t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit, t.qty AS gQty,
+         t1.qty1*t.qty AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit, t1.customsDeclaredElements AS goodsModel,
+         '440301111758322' AS storeUscCode, 'I440366000315001' AS localEmsNo,
+         '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode, '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode,
+    transferTime
+  FROM StockSlotTransfer t
+    LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+    LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+    LEFT OUTER JOIN WarehouseSlot t4 ON t.sourceSlotId=t4.id
+    LEFT OUTER JOIN WarehouseSlot t5 ON t.destSlotId=t5.id
+    LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+    LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+  WHERE t.state='1' AND t.qualityType='0' AND t.qty &lt;&gt; 0 AND t.transferTime IS NOT NULL
+AND t4.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+AND t5.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+) tt
+where tt.shelfLoadTime>='2017-08-24 11:36:11.317'
+
+-- 4 库位货物信息
+-- 1. .WarehousingEntry 表, 库位, 2.WarehouseSlot 标签
+-- 不增加时间戳,
+-- WarehousingEntryMapper.xml addQtyById, updateTBNum, updateQtyById 增加时间监管可用数量字段变化
+-- WarehousingEntryMapper.java batchUpdateQty
+-- ISTH01001215
+-- type, 0:良,1:次
+-- SELECT * FROM WarehousingEntry WHERE sku='ISTH01001215'
+-- SELECT * FROM WarehouseSlot WHERE id='15892'
+-- --增加时间字段
+-- ALTER TABLE qhwms.dbo.WarehousingEntry ADD avaQtyChgTime DATETIME NULL
+-- EXEC sp_addextendedproperty 'MS_Description', '可用数量变化时间', 'SCHEMA', 'dbo', 'TABLE', 'WarehousingEntry', 'COLUMN', 'avaQtyChgTime'
+-- 监控数据
+SELECT * from (
+  SELECT t4.label AS seatNo, t1.shortName AS goodsName, t2.customsProductCode AS codeTs, t.sku AS skuNo, t.sku AS goodsId, t1.unit AS gUnitName, t10.codeValue AS gUnit,
+         (t.availableQty + t.frozenQty) AS gQty, t1.qty1*(t.availableQty + t.frozenQty) AS legalQty, t1.unit1 AS legalUnitName, t11.codeValue AS legalUnit, t1.customsDeclaredElements AS goodsModel,
+    t.shopId, t3.compayName AS ownerName, t3.customsCertNo AS ownerCode,
+    '440301111758322' AS storeUscCode, 'I440366000315001' AS localEmsNo,
+    '深圳前海电商供应链管理有限公司' AS storeCompanyName, '319489717' AS storeUseCode, '4403660003' AS storeCustomsCode, '534931948971720171102000281725' AS storeCode,
+    t.avaQtyChgTime
+  FROM WarehousingEntry t
+    LEFT OUTER JOIN Product t1 ON t.sku=t1.sku
+    LEFT OUTER JOIN ProductCategory t2 ON t1.productCategoryId=t2.id
+    LEFT OUTER JOIN ShopInfo t3 ON t.shopId=t3.ShopId
+    LEFT OUTER JOIN WarehouseSlot t4 ON t.slotId=t4.id
+    LEFT OUTER JOIN CustomsCode t10 ON t1.unit=t10.codeName AND t10.codeType='4'
+    LEFT OUTER JOIN CustomsCode t11 ON t1.unit1=t11.codeName AND t11.codeType='4'
+  WHERE t.type='0' AND t.availableQty &lt;&gt; 0 AND t.avaQtyChgTime IS NOT NULL
+AND t4.label IN (SELECT seat_no AS seatNo FROM WareHouseSlot_cus_data_supervise)
+) tt
+where tt.avaQtyChgTime>='2017-09-27 13:40:12.360'
+
+
+-- 4 增加正常库位表
+-- 目前正在使用中正常库位信息
+-- 共 16508
+-- 正常状态 16473
+-- 冻结状态    35
+
+-- 使用中 5736
+-- 对使用中的库位建表
+
+
+------------- 建表开始 -------------
+USE [qhwms]
+GO
+
+-- 仓库出货流水,每次写入一条
+
+CREATE TABLE qhwms.dbo.WarehousingEntry_shipment
+(
+  id BIGINT PRIMARY KEY NOT NULL IDENTITY,
+  warehousingEntryId INT,
+  sku VARCHAR(50),
+  qty INT,
+  slotId INT,
+  createTime DATETIME,
+  shopId INT
+)
+
+/****** Object:  Table [dbo].[WarehouseSlot_cus_data_supervise]    Script Date: 11/11/2017 11:01:48 ******/
+
+-- 正常库位表
+
+SET ANSI_NULLS ON
+GO
+SET QUOTED_IDENTIFIER ON
+GO
+SET ANSI_PADDING ON
+GO
+CREATE TABLE [dbo].[WarehouseSlot_cus_data_supervise](
+  [seat_no] [varchar](32) NULL,
+  [is_valid] [char](1) NULL
+) ON [PRIMARY]
+GO
+SET ANSI_PADDING OFF
+GO
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'库位编码,对应WarehouseSlotge表label' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WarehouseSlot_cus_data_supervise', @level2type=N'COLUMN',@level2name=N'seat_no'
+GO
+EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否可用' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WarehouseSlot_cus_data_supervise', @level2type=N'COLUMN',@level2name=N'is_valid'
+GO
+ALTER TABLE [dbo].[WarehouseSlot_cus_data_supervise] ADD  CONSTRAINT [DF_WarehouseSlot_cus_data_supervise_is_valid]  DEFAULT ((1)) FOR [is_valid]
+GO
+
+------------- 建表结束 -------------

+ 77 - 0
src/sql/wms监控数据SQL语句.sql

@@ -0,0 +1,77 @@
+-- (企业库存信息)
+SELECT
+	li.created AS 时间,
+	li.companyCode AS 货主编码,
+	li.itemName AS 商品名称,
+	li.itemCode AS 商品编码,
+	i.unitDesc AS 申报单位,
+	SUM( li.onHandQty ) AS 申报数量,
+	i.itemSize AS 尺码,
+	i.itemColor AS 颜色,
+	i.itemStyle AS 款式 
+FROM
+	location_inventory li
+	LEFT JOIN item i ON li.itemCode = i.CODE 
+GROUP BY
+	li.itemCode 
+--(上架)
+SELECT
+	rc.created AS 时间,
+	rc.itemCode AS SKU,
+	rc.quantity AS 申报数量,
+	rc.toLocation AS 目标库位,
+	i.unitDesc AS 申报单位 
+FROM
+	receipt_container rc
+	LEFT JOIN item i ON rc.itemcode = i.CODE;
+-- ( 下架 )
+SELECT
+	scd.created AS 时间,
+	itemCode AS SKU,
+	quantity AS 申报数量,
+	originalPickLoc AS 库位代码,
+	i.unitDesc AS 申报单位 
+FROM
+	Shipping_container_detail scd
+	LEFT JOIN item i ON scd.itemCode = i.`code`;
+
+-- (企业货物在仓库的移动信息 上架)
+SELECT
+	created AS 时间,
+	toLocation AS 目标库位,
+	fromLocation AS 原库位,
+	itemName AS 商品名称,
+	itemCode AS 商品编码,
+	warehouseCode AS 仓库编码,
+	agingDate AS 货物上架时间 
+FROM
+	receipt_container;
+-- (企业货物在仓库的移动信息 下架)
+SELECT
+	created AS 时间,
+	originalPickLoc AS 原库位,
+	itemName AS 商品名称,
+	itemCode AS 商品编码,
+	warehouseCode AS 仓库编码,
+	created AS 货物下架时间 
+FROM
+	Shipping_container_detail;
+-- (库位上的货物信息)
+SELECT
+	li.created AS 时间,
+	li.locationCode AS 库位代码,
+	li.itemName AS 商品名称,
+	i.unitDesc AS 申报单位,
+	li.itemCode AS 商品 SKU,
+	li.warehouseCode AS 仓库编码,
+	li.onHandQty AS 申报数量,
+	i.itemSize AS 尺码,
+	i.itemColor AS 颜色,
+	i.itemStyle AS 款式 
+FROM
+	location_inventory li
+	LEFT JOIN item i ON li.itemCode = i.CODE;
+
+
+
+