diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index c0560c6..3c1b81d 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,17 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="AnalysisUIOptions">
+    <option name="GROUP_BY_SEVERITY" value="true" />
+  </component>
   <component name="ChangeListManager">
     <list default="true" id="baeae966-16bb-4f97-a411-22fe5a65cefd" name="Default Changelist" comment="">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowHeaderController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowHeaderController.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/filterConfigHeader/add.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/filterConfigHeader/add.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/receiptType/add.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/receiptType/add.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/statusFlowHeader/add.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/statusFlowHeader/add.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/container/print.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/container/print.html" afterDir="false" />
     </list>
+    <ignored path="$PROJECT_DIR$/target/" />
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -29,26 +26,381 @@
     <option name="HIDDEN_KINDS">
       <set />
     </option>
-    <expand />
+    <expand>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="@172.16.29.45" type="feb32156:DbDataSourceImpl" />
+      </path>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="@172.16.29.45" type="feb32156:DbDataSourceImpl" />
+        <item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
+      </path>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="@172.16.29.45" type="feb32156:DbDataSourceImpl" />
+        <item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
+        <item name="wms_v2: schema" type="76f4a085:MysqlImplModel$Schema" />
+      </path>
+    </expand>
     <select />
   </component>
+  <component name="FavoritesManager">
+    <favorites_list name="huaheng" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/container.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1292">
+              <caret line="68" column="44" selection-start-line="68" selection-start-column="35" selection-end-line="68" selection-end-column="44" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="228">
+              <caret line="41" column="29" selection-start-line="41" selection-start-column="29" selection-end-line="41" selection-end-column="38" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/print.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="150">
+              <caret line="21" column="28" lean-forward="true" selection-start-line="21" selection-start-column="28" selection-end-line="21" selection-end-column="28" />
+              <folding>
+                <element signature="n#style#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#span#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#table#0;n#div#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$USER_HOME$/Desktop/boot/boot/打印二维码 - 多个组2.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="241">
+              <caret line="47" column="36" lean-forward="true" selection-start-line="47" selection-start-column="36" selection-end-line="47" selection-end-column="36" />
+              <folding>
+                <element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#caption#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="e#2973#2979#0" expanded="true" />
+                <element signature="e#2979#2985#0" expanded="true" />
+                <element signature="e#2985#2991#0" expanded="true" />
+                <element signature="e#2991#2997#0" expanded="true" />
+                <element signature="e#2997#3003#0" expanded="true" />
+                <element signature="e#3003#3009#0" expanded="true" />
+                <element signature="e#3009#3015#0" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#caption#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="e#3995#4001#0" expanded="true" />
+                <element signature="e#4001#4007#0" expanded="true" />
+                <element signature="e#4007#4013#0" expanded="true" />
+                <element signature="e#4013#4019#0" expanded="true" />
+                <element signature="e#4019#4025#0" expanded="true" />
+                <element signature="e#4025#4031#0" expanded="true" />
+                <element signature="e#4031#4037#0" expanded="true" />
+                <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+                <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
   <component name="FileTemplateManagerImpl">
     <option name="RECENT_TEMPLATES">
       <list>
         <option value="Interface" />
-        <option value="Class" />
         <option value="Enum" />
         <option value="HTML File" />
+        <option value="Class" />
       </list>
     </option>
   </component>
+  <component name="FindBugs-IDEA-Workspace">
+    <toolWindowEditorPreview>false</toolWindowEditorPreview>
+  </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+    <option name="RECENT_BRANCH_BY_REPOSITORY">
+      <map>
+        <entry key="$PROJECT_DIR$" value="rabbitmq" />
+      </map>
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/IUserService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/config/container/container.html" />
+        <option value="$USER_HOME$/Desktop/boot/boot/打印二维码 - 多个组2.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/static/css/style.css" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/config/container/print.html" />
+      </list>
+    </option>
+  </component>
+  <component name="MavenProjectNavigator">
+    <treeState>
+      <expand>
+        <path>
+          <item name="" type="16c1761:MavenProjectsStructure$RootNode" />
+          <item name="huaheng" type="9519ce18:MavenProjectsStructure$ProjectNode" />
+        </path>
+      </expand>
+      <select />
+    </treeState>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="470" />
+    <option name="width" value="980" />
+    <option name="height" value="1030" />
   </component>
   <component name="ProjectId" id="1QOzUtfkdeRmYuw3MIDHXXMLsFH" />
   <component name="ProjectLevelVcsManager">
     <OptionsSetting value="false" id="Update" />
   </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="PackagesPane" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+              <item name="container" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+              <item name="container" type="462c0819:PsiDirectoryNode" />
+              <item name="controller" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="inventory" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="inventory" type="462c0819:PsiDirectoryNode" />
+              <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="huaheng" type="462c0819:PsiDirectoryNode" />
+              <item name="pc" type="462c0819:PsiDirectoryNode" />
+              <item name="inventory" type="462c0819:PsiDirectoryNode" />
+              <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" />
+              <item name="controller" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="config" type="462c0819:PsiDirectoryNode" />
+              <item name="container" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="inventory" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="inventory" type="462c0819:PsiDirectoryNode" />
+              <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="receipt" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="wms2" type="b2602c69:ProjectViewProjectNode" />
+              <item name="wms2" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="resources" type="462c0819:PsiDirectoryNode" />
+              <item name="templates" type="462c0819:PsiDirectoryNode" />
+              <item name="receipt" type="462c0819:PsiDirectoryNode" />
+              <item name="receiptHeader" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
   <component name="PropertiesComponent">
     <property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
     <property name="DefaultHtmlFileTemplate" value="HTML File" />
@@ -58,6 +410,7 @@
     <property name="RequestMappingsPanelWidth1" value="75" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
+    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1577352095697" />
     <property name="full.screen.before.presentation.mode" value="false" />
     <property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable" />
     <property name="node.js.detected.package.eslint" value="true" />
@@ -66,6 +419,7 @@
     <property name="node.js.path.for.package.tslint" value="project" />
     <property name="node.js.selected.package.eslint" value="(autodetect)" />
     <property name="node.js.selected.package.tslint" value="(autodetect)" />
+    <property name="nodejs_package_manager_path" value="npm" />
     <property name="project.structure.last.edited" value="Modules" />
     <property name="project.structure.proportion" value="0.15429688" />
     <property name="project.structure.side.proportion" value="0.2" />
@@ -73,10 +427,22 @@
     <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
   </component>
   <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="E:\code\wms2\src\main\resources\templates\config\configWarning" />
+    </key>
+    <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.huaheng.api.general.domain" />
+    </key>
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\wms2\src\main\resources\templates\config\container" />
       <recent name="E:\code\wms2\src\main\resources\static\ajax\libs\bootstrap-table\extensions\editable" />
     </key>
   </component>
+  <component name="RunAnythingCache">
+    <option name="myCommands">
+      <command value="," />
+    </option>
+  </component>
   <component name="RunDashboard">
     <option name="configurationTypes">
       <set>
@@ -93,17 +459,34 @@
         </RuleState>
       </list>
     </option>
+    <option name="contentProportion" value="0.012987013" />
   </component>
-  <component name="RunManager" selected="Spring Boot.HuaHengApplication">
-    <configuration name="ReceiptContainerHeaderServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderServiceImpl" />
+  <component name="RunManager" selected="Spring Boot.HuaHengApplication (1)">
+    <configuration name="EncryptPassword" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="com.huaheng.test.EncryptPassword" />
+      <module name="huaheng" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.huaheng.test.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="MqTest.send" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
       <module name="huaheng" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="com.huaheng.pc.receipt.receiptContainerHeader.service.*" />
+          <option name="PATTERN" value="com.huaheng.test.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
+      <option name="PACKAGE_NAME" value="com.huaheng.test" />
+      <option name="MAIN_CLASS_NAME" value="com.huaheng.test.MqTest" />
+      <option name="METHOD_NAME" value="send" />
+      <option name="TEST_OBJECT" value="method" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
@@ -124,6 +507,19 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <configuration name="HuaHengApplication (1)" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="wms2" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.huaheng.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.huaheng.HuaHengApplication" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration name="HuaHengApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
       <module name="huaheng" />
       <extension name="coverage">
@@ -134,41 +530,35 @@
       </extension>
       <option name="SPRING_BOOT_MAIN_CLASS" value="com.huaheng.HuaHengApplication" />
       <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="UPDATE_ACTION_UPDATE_POLICY" value="UpdateClassesAndResources" />
+      <option name="UPDATE_ACTION_UPDATE_POLICY" value="UpdateResources" />
       <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
     <list>
-      <item itemvalue="Application.ReceiptContainerHeaderServiceImpl" />
+      <item itemvalue="Application.EncryptPassword" />
+      <item itemvalue="JUnit.MqTest.send" />
       <item itemvalue="JUnit.ServiceTest.sendSimpleMail" />
       <item itemvalue="Spring Boot.HuaHengApplication" />
+      <item itemvalue="Spring Boot.HuaHengApplication (1)" />
     </list>
     <recent_temporary>
       <list>
+        <item itemvalue="Spring Boot.HuaHengApplication (1)" />
         <item itemvalue="Spring Boot.HuaHengApplication" />
-        <item itemvalue="Application.ReceiptContainerHeaderServiceImpl" />
         <item itemvalue="JUnit.ServiceTest.sendSimpleMail" />
+        <item itemvalue="JUnit.MqTest.send" />
+        <item itemvalue="Application.EncryptPassword" />
       </list>
     </recent_temporary>
   </component>
   <component name="ServiceViewManager">
     <option name="allServicesViewState">
       <serviceView>
-        <option name="contentProportion" value="0.1612554" />
+        <option name="contentProportion" value="0.11255411" />
         <treeState>
-          <expand>
-            <path>
-              <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
-              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@c531c3e8" type="7427dc5b:ServiceModel$ServiceGroupNode" />
-            </path>
-            <path>
-              <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
-              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@c531c3e8" type="7427dc5b:ServiceModel$ServiceGroupNode" />
-              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@ef9dc71e" type="7427dc5b:ServiceModel$ServiceGroupNode" />
-            </path>
-          </expand>
+          <expand />
           <select />
         </treeState>
       </serviceView>
@@ -271,154 +661,104 @@
       <workItem from="1569745589865" duration="2739000" />
       <workItem from="1569748443357" duration="438000" />
       <workItem from="1569803438585" duration="13789000" />
-      <workItem from="1570581146682" duration="9295000" />
-    </task>
-    <task id="LOCAL-00001" summary="修改添加物料时使用物料类别生成物料编码">
-      <created>1567664306836</created>
-      <option name="number" value="00001" />
-      <option name="presentableId" value="LOCAL-00001" />
-      <option name="project" value="LOCAL" />
-      <updated>1567664306836</updated>
-    </task>
-    <task id="LOCAL-00002" summary="修改添加物料时使用物料类别生成物料编码">
-      <created>1567936901056</created>
-      <option name="number" value="00002" />
-      <option name="presentableId" value="LOCAL-00002" />
-      <option name="project" value="LOCAL" />
-      <updated>1567936901056</updated>
-    </task>
-    <task id="LOCAL-00003" summary="修改质检页面、添加完成质检">
-      <created>1568025230030</created>
-      <option name="number" value="00003" />
-      <option name="presentableId" value="LOCAL-00003" />
-      <option name="project" value="LOCAL" />
-      <updated>1568025230030</updated>
-    </task>
-    <task id="LOCAL-00004" summary="修改质检页面、添加完成质检">
-      <created>1568110494128</created>
-      <option name="number" value="00004" />
-      <option name="presentableId" value="LOCAL-00004" />
-      <option name="project" value="LOCAL" />
-      <updated>1568110494128</updated>
-    </task>
-    <task id="LOCAL-00005" summary="修复入库质检请求地址冲突">
-      <created>1568162392627</created>
-      <option name="number" value="00005" />
-      <option name="presentableId" value="LOCAL-00005" />
-      <option name="project" value="LOCAL" />
-      <updated>1568162392627</updated>
-    </task>
-    <task id="LOCAL-00006" summary="添加入库单打印">
-      <created>1568174134623</created>
-      <option name="number" value="00006" />
-      <option name="presentableId" value="LOCAL-00006" />
-      <option name="project" value="LOCAL" />
-      <updated>1568174134623</updated>
-    </task>
-    <task id="LOCAL-00007" summary="修改入库单审核移动到入库单头表">
-      <created>1568186231357</created>
-      <option name="number" value="00007" />
-      <option name="presentableId" value="LOCAL-00007" />
-      <option name="project" value="LOCAL" />
-      <updated>1568186231357</updated>
-    </task>
-    <task id="LOCAL-00008" summary="修改任务完成更新库位的错误">
-      <created>1568191139437</created>
-      <option name="number" value="00008" />
-      <option name="presentableId" value="LOCAL-00008" />
-      <option name="project" value="LOCAL" />
-      <updated>1568191139437</updated>
-    </task>
-    <task id="LOCAL-00009" summary="修改入库类型自动判断">
-      <created>1568259182874</created>
-      <option name="number" value="00009" />
-      <option name="presentableId" value="LOCAL-00009" />
-      <option name="project" value="LOCAL" />
-      <updated>1568259182874</updated>
-    </task>
-    <task id="LOCAL-00010" summary="修改入库单页面">
-      <created>1568281128408</created>
-      <option name="number" value="00010" />
-      <option name="presentableId" value="LOCAL-00010" />
-      <option name="project" value="LOCAL" />
-      <updated>1568281128408</updated>
-    </task>
-    <task id="LOCAL-00011" summary="修改入库单页面,入库单审核,质检页面后台跳转接口">
-      <created>1568616697584</created>
-      <option name="number" value="00011" />
-      <option name="presentableId" value="LOCAL-00011" />
-      <option name="project" value="LOCAL" />
-      <updated>1568616697584</updated>
-    </task>
-    <task id="LOCAL-00012" summary="修改 入库收货,生成上架任务自动执行定位">
-      <created>1568692224269</created>
-      <option name="number" value="00012" />
-      <option name="presentableId" value="LOCAL-00012" />
-      <option name="project" value="LOCAL" />
-      <updated>1568692224269</updated>
-    </task>
-    <task id="LOCAL-00013" summary="修复商品管理、物料类别种bug">
-      <created>1568784920330</created>
-      <option name="number" value="00013" />
-      <option name="presentableId" value="LOCAL-00013" />
-      <option name="project" value="LOCAL" />
-      <updated>1568784920330</updated>
-    </task>
-    <task id="LOCAL-00014" summary="修改入库明细添加加载定位规则的错误">
-      <created>1568788287608</created>
-      <option name="number" value="00014" />
-      <option name="presentableId" value="LOCAL-00014" />
-      <option name="project" value="LOCAL" />
-      <updated>1568788287608</updated>
-    </task>
-    <task id="LOCAL-00015" summary="添加入库质检行内编辑">
-      <created>1568857387442</created>
-      <option name="number" value="00015" />
-      <option name="presentableId" value="LOCAL-00015" />
-      <option name="project" value="LOCAL" />
-      <updated>1568857387442</updated>
-    </task>
-    <task id="LOCAL-00016" summary="行内编辑完成后更新数据库">
-      <created>1568875291383</created>
-      <option name="number" value="00016" />
-      <option name="presentableId" value="LOCAL-00016" />
-      <option name="project" value="LOCAL" />
-      <updated>1568875291383</updated>
-    </task>
-    <task id="LOCAL-00017" summary="修改质检登记使用bootstarp boot原生方法初始化">
-      <created>1568885639106</created>
-      <option name="number" value="00017" />
-      <option name="presentableId" value="LOCAL-00017" />
-      <option name="project" value="LOCAL" />
-      <updated>1568885639106</updated>
-    </task>
-    <task id="LOCAL-00018" summary="表单头创建时间添加默认创建时间&#10;开始时间默认提前一周,结束时间默认当天">
-      <created>1569207792528</created>
-      <option name="number" value="00018" />
-      <option name="presentableId" value="LOCAL-00018" />
-      <option name="project" value="LOCAL" />
-      <updated>1569207792528</updated>
-    </task>
-    <task id="LOCAL-00019" summary="配置中所有页面添加重置按钮">
-      <created>1569218224945</created>
-      <option name="number" value="00019" />
-      <option name="presentableId" value="LOCAL-00019" />
-      <option name="project" value="LOCAL" />
-      <updated>1569218224945</updated>
-    </task>
-    <task id="LOCAL-00020" summary="收货添加定位、取消定位、取消组盘按钮">
-      <created>1569232154274</created>
-      <option name="number" value="00020" />
-      <option name="presentableId" value="LOCAL-00020" />
-      <option name="project" value="LOCAL" />
-      <updated>1569232154274</updated>
-    </task>
-    <task id="LOCAL-00021" summary="修改入库单数量使用BigDecimal类型,修改入库单添加、修改、物理类型添加和修改页面">
-      <created>1569318560852</created>
-      <option name="number" value="00021" />
-      <option name="presentableId" value="LOCAL-00021" />
-      <option name="project" value="LOCAL" />
-      <updated>1569318560852</updated>
+      <workItem from="1570581146682" duration="20927000" />
+      <workItem from="1570613992837" duration="3000" />
+      <workItem from="1570667742663" duration="162000" />
+      <workItem from="1570667919475" duration="15928000" />
+      <workItem from="1570754346827" duration="21195000" />
+      <workItem from="1570840100481" duration="23954000" />
+      <workItem from="1571032298609" duration="8129000" />
+      <workItem from="1571043219515" duration="603000" />
+      <workItem from="1571101539586" duration="10573000" />
+      <workItem from="1571187054671" duration="1189000" />
+      <workItem from="1571272889222" duration="603000" />
+      <workItem from="1571273737925" duration="85000" />
+      <workItem from="1571273837562" duration="3768000" />
+      <workItem from="1571300400236" duration="564000" />
+      <workItem from="1571360965270" duration="10015000" />
+      <workItem from="1571618681667" duration="100000" />
+      <workItem from="1571618796133" duration="5393000" />
+      <workItem from="1571650852097" duration="388000" />
+      <workItem from="1571730992859" duration="6211000" />
+      <workItem from="1571793589446" duration="4409000" />
+      <workItem from="1571802162041" duration="1239000" />
+      <workItem from="1571811985419" duration="1151000" />
+      <workItem from="1571813176633" duration="2109000" />
+      <workItem from="1571877928640" duration="88000" />
+      <workItem from="1571883105941" duration="935000" />
+      <workItem from="1571884165422" duration="4991000" />
+      <workItem from="1571898249991" duration="4232000" />
+      <workItem from="1571983100230" duration="4800000" />
+      <workItem from="1572222845790" duration="23000" />
+      <workItem from="1572223191279" duration="31000" />
+      <workItem from="1572241535551" duration="625000" />
+      <workItem from="1572243079374" duration="68000" />
+      <workItem from="1572244739518" duration="7805000" />
+      <workItem from="1572309622449" duration="584000" />
+      <workItem from="1572311557063" duration="1863000" />
+      <workItem from="1572320193751" duration="472000" />
+      <workItem from="1572320671127" duration="1982000" />
+      <workItem from="1572421740780" duration="2214000" />
+      <workItem from="1572508717052" duration="767000" />
+      <workItem from="1572510572527" duration="589000" />
+      <workItem from="1572512185944" duration="8000" />
+      <workItem from="1572589020835" duration="476000" />
+      <workItem from="1572590452229" duration="1502000" />
+      <workItem from="1572592323148" duration="6000" />
+      <workItem from="1572832658949" duration="959000" />
+      <workItem from="1572837775650" duration="12521000" />
+      <workItem from="1572914081530" duration="12074000" />
+      <workItem from="1573434480300" duration="23000" />
+      <workItem from="1573434565742" duration="27000" />
+      <workItem from="1573434609619" duration="5949000" />
+      <workItem from="1573443267924" duration="3068000" />
+      <workItem from="1573451336746" duration="12626000" />
+      <workItem from="1573519499410" duration="1633000" />
+      <workItem from="1573521159413" duration="5332000" />
+      <workItem from="1573634144466" duration="1079000" />
+      <workItem from="1573695391377" duration="439000" />
+      <workItem from="1573695840147" duration="1238000" />
+      <workItem from="1573721771390" duration="57000" />
+      <workItem from="1573803890850" duration="1260000" />
+      <workItem from="1573805176417" duration="3000" />
+      <workItem from="1574037798176" duration="319000" />
+      <workItem from="1574129991269" duration="1422000" />
+      <workItem from="1574149477717" duration="150000" />
+      <workItem from="1574152276042" duration="2135000" />
+      <workItem from="1574211087867" duration="590000" />
+      <workItem from="1574211685051" duration="669000" />
+      <workItem from="1574213648864" duration="15909000" />
+      <workItem from="1574315910239" duration="2919000" />
+      <workItem from="1574320594485" duration="4805000" />
+      <workItem from="1574383470234" duration="1917000" />
+      <workItem from="1574402886027" duration="352000" />
+      <workItem from="1574406573271" duration="10000" />
+      <workItem from="1574413187883" duration="2458000" />
+      <workItem from="1574647559026" duration="1549000" />
+      <workItem from="1574650217287" duration="1426000" />
+      <workItem from="1574663555433" duration="234000" />
+      <workItem from="1574667250107" duration="248000" />
+      <workItem from="1574667819508" duration="853000" />
+      <workItem from="1574668813857" duration="78000" />
+      <workItem from="1574668955593" duration="4842000" />
+      <workItem from="1574734862621" duration="5289000" />
+      <workItem from="1574753109186" duration="1868000" />
+      <workItem from="1574758859383" duration="2324000" />
+      <workItem from="1574816203456" duration="3882000" />
+      <workItem from="1574826942468" duration="1951000" />
+      <workItem from="1574845813928" duration="13000" />
+      <workItem from="1574988822426" duration="270000" />
+      <workItem from="1577065229491" duration="6318000" />
+      <workItem from="1577147586156" duration="4281000" />
+      <workItem from="1577172416745" duration="4156000" />
+      <workItem from="1577234053132" duration="26850000" />
+      <workItem from="1577321748902" duration="21403000" />
+      <workItem from="1577406875935" duration="16374000" />
+      <workItem from="1577436625365" duration="3084000" />
+      <workItem from="1577665795897" duration="4942000" />
+      <workItem from="1577670757674" duration="6000" />
+      <workItem from="1577670887870" duration="8057000" />
+      <workItem from="1577687039415" duration="15130000" />
     </task>
     <task id="LOCAL-00022" summary="修改物料管理中物料类型使用物料类别表,不在使用数据字典">
       <created>1569395439782</created>
@@ -511,9 +851,304 @@
       <option name="project" value="LOCAL" />
       <updated>1570582333467</updated>
     </task>
-    <option name="localTasksCounter" value="35" />
+    <task id="LOCAL-00035" summary="添加流程时自动添加模块和类型&#10;修改入库到货通知">
+      <created>1570590631384</created>
+      <option name="number" value="00035" />
+      <option name="presentableId" value="LOCAL-00035" />
+      <option name="project" value="LOCAL" />
+      <updated>1570590631384</updated>
+    </task>
+    <task id="LOCAL-00036" summary="修改入库单明细中 入库流程和是否质检的显示">
+      <created>1570677316403</created>
+      <option name="number" value="00036" />
+      <option name="presentableId" value="LOCAL-00036" />
+      <option name="project" value="LOCAL" />
+      <updated>1570677316403</updated>
+    </task>
+    <task id="LOCAL-00037" summary="修改流程明细添加时模块可修改的问题">
+      <created>1570680001633</created>
+      <option name="number" value="00037" />
+      <option name="presentableId" value="LOCAL-00037" />
+      <option name="project" value="LOCAL" />
+      <updated>1570680001633</updated>
+    </task>
+    <task id="LOCAL-00038" summary="修改规则配置添加时类型选择项">
+      <created>1570687475164</created>
+      <option name="number" value="00038" />
+      <option name="presentableId" value="LOCAL-00038" />
+      <option name="project" value="LOCAL" />
+      <updated>1570687475164</updated>
+    </task>
+    <task id="LOCAL-00039" summary="修改质检登记查询code">
+      <created>1570778509824</created>
+      <option name="number" value="00039" />
+      <option name="presentableId" value="LOCAL-00039" />
+      <option name="project" value="LOCAL" />
+      <updated>1570778509824</updated>
+    </task>
+    <task id="LOCAL-00040" summary="添加站台表">
+      <created>1570781862179</created>
+      <option name="number" value="00040" />
+      <option name="presentableId" value="LOCAL-00040" />
+      <option name="project" value="LOCAL" />
+      <updated>1570781862179</updated>
+    </task>
+    <task id="LOCAL-00041" summary="修改规则配置">
+      <created>1570782180540</created>
+      <option name="number" value="00041" />
+      <option name="presentableId" value="LOCAL-00041" />
+      <option name="project" value="LOCAL" />
+      <updated>1570782180540</updated>
+    </task>
+    <task id="LOCAL-00042" summary="添加仓位分配接口">
+      <created>1570866304365</created>
+      <option name="number" value="00042" />
+      <option name="presentableId" value="LOCAL-00042" />
+      <option name="project" value="LOCAL" />
+      <updated>1570866304365</updated>
+    </task>
+    <task id="LOCAL-00043" summary="修改入库单头尾状态更新">
+      <created>1570869466088</created>
+      <option name="number" value="00043" />
+      <option name="presentableId" value="LOCAL-00043" />
+      <option name="project" value="LOCAL" />
+      <updated>1570869466088</updated>
+    </task>
+    <task id="LOCAL-00044" summary="添加站台表,入库组盘头表和任务表添加站台,默认为0">
+      <created>1571036164747</created>
+      <option name="number" value="00044" />
+      <option name="presentableId" value="LOCAL-00044" />
+      <option name="project" value="LOCAL" />
+      <updated>1571036164747</updated>
+    </task>
+    <task id="LOCAL-00045" summary="修改任务执行接口">
+      <created>1571039090453</created>
+      <option name="number" value="00045" />
+      <option name="presentableId" value="LOCAL-00045" />
+      <option name="project" value="LOCAL" />
+      <updated>1571039090453</updated>
+    </task>
+    <task id="LOCAL-00046" summary="修改接口实体类&#10;修改仓位分配接口">
+      <created>1571103433656</created>
+      <option name="number" value="00046" />
+      <option name="presentableId" value="LOCAL-00046" />
+      <option name="project" value="LOCAL" />
+      <updated>1571103433656</updated>
+    </task>
+    <task id="LOCAL-00047" summary="修改系统管理参数配置添加和修改页面中的模块和类型">
+      <created>1571108638507</created>
+      <option name="number" value="00047" />
+      <option name="presentableId" value="LOCAL-00047" />
+      <option name="project" value="LOCAL" />
+      <updated>1571108638507</updated>
+    </task>
+    <task id="LOCAL-00048" summary="修改重入和仓位下发接口">
+      <created>1571127851430</created>
+      <option name="number" value="00048" />
+      <option name="presentableId" value="LOCAL-00048" />
+      <option name="project" value="LOCAL" />
+      <updated>1571127851430</updated>
+    </task>
+    <task id="LOCAL-00049" summary="删除质检头表新增按钮">
+      <created>1571300858040</created>
+      <option name="number" value="00049" />
+      <option name="presentableId" value="LOCAL-00049" />
+      <option name="project" value="LOCAL" />
+      <updated>1571300858040</updated>
+    </task>
+    <task id="LOCAL-00050" summary="添加多环境配置文件">
+      <created>1571367987564</created>
+      <option name="number" value="00050" />
+      <option name="presentableId" value="LOCAL-00050" />
+      <option name="project" value="LOCAL" />
+      <updated>1571367987564</updated>
+    </task>
+    <task id="LOCAL-00051" summary="修改收货是是否收完的判断">
+      <created>1571650918354</created>
+      <option name="number" value="00051" />
+      <option name="presentableId" value="LOCAL-00051" />
+      <option name="project" value="LOCAL" />
+      <updated>1571650918355</updated>
+    </task>
+    <task id="LOCAL-00052" summary="修改收货是是否收完的判断">
+      <created>1571651232169</created>
+      <option name="number" value="00052" />
+      <option name="presentableId" value="LOCAL-00052" />
+      <option name="project" value="LOCAL" />
+      <updated>1571651232169</updated>
+    </task>
+    <task id="LOCAL-00053" summary="添加仓库复制">
+      <created>1571799829411</created>
+      <option name="number" value="00053" />
+      <option name="presentableId" value="LOCAL-00053" />
+      <option name="project" value="LOCAL" />
+      <updated>1571799829412</updated>
+    </task>
+    <task id="LOCAL-00054" summary="修改收货是是否手动指定库位,入库单状态的更新">
+      <created>1571884236981</created>
+      <option name="number" value="00054" />
+      <option name="presentableId" value="LOCAL-00054" />
+      <option name="project" value="LOCAL" />
+      <updated>1571884236981</updated>
+    </task>
+    <task id="LOCAL-00055" summary="修改容器已组盘的提示信息&#10;修改库位生成库位编码使用库位类型编码">
+      <created>1571888987512</created>
+      <option name="number" value="00055" />
+      <option name="presentableId" value="LOCAL-00055" />
+      <option name="project" value="LOCAL" />
+      <updated>1571888987512</updated>
+    </task>
+    <task id="LOCAL-00056" summary="修改仓库复制">
+      <created>1571900347581</created>
+      <option name="number" value="00056" />
+      <option name="presentableId" value="LOCAL-00056" />
+      <option name="project" value="LOCAL" />
+      <updated>1571900347582</updated>
+    </task>
+    <task id="LOCAL-00057" summary="修改返回类型">
+      <created>1571901488341</created>
+      <option name="number" value="00057" />
+      <option name="presentableId" value="LOCAL-00057" />
+      <option name="project" value="LOCAL" />
+      <updated>1571901488341</updated>
+    </task>
+    <task id="LOCAL-00058" summary="修改库位监控">
+      <created>1572321206210</created>
+      <option name="number" value="00058" />
+      <option name="presentableId" value="LOCAL-00058" />
+      <option name="project" value="LOCAL" />
+      <updated>1572321206210</updated>
+    </task>
+    <task id="LOCAL-00059" summary="修改库位监控tips">
+      <created>1572322002967</created>
+      <option name="number" value="00059" />
+      <option name="presentableId" value="LOCAL-00059" />
+      <option name="project" value="LOCAL" />
+      <updated>1572322002967</updated>
+    </task>
+    <task id="LOCAL-00060" summary="修改收发送邮件注释">
+      <created>1572510829993</created>
+      <option name="number" value="00060" />
+      <option name="presentableId" value="LOCAL-00060" />
+      <option name="project" value="LOCAL" />
+      <updated>1572510829993</updated>
+    </task>
+    <task id="LOCAL-00061" summary="添加入库下发接口">
+      <created>1572937952886</created>
+      <option name="number" value="00061" />
+      <option name="presentableId" value="LOCAL-00061" />
+      <option name="project" value="LOCAL" />
+      <updated>1572937952886</updated>
+    </task>
+    <task id="LOCAL-00062" summary="修改入库多仓库报错">
+      <created>1573439368497</created>
+      <option name="number" value="00062" />
+      <option name="presentableId" value="LOCAL-00062" />
+      <option name="project" value="LOCAL" />
+      <updated>1573439368497</updated>
+    </task>
+    <task id="LOCAL-00063" summary="添加物料最大量最小量预警、空库位预警">
+      <created>1573526280256</created>
+      <option name="number" value="00063" />
+      <option name="presentableId" value="LOCAL-00063" />
+      <option name="project" value="LOCAL" />
+      <updated>1573526280257</updated>
+    </task>
+    <task id="LOCAL-00064" summary="添加基础数据接口和入库单下发下发接口">
+      <created>1574232706585</created>
+      <option name="number" value="00064" />
+      <option name="presentableId" value="LOCAL-00064" />
+      <option name="project" value="LOCAL" />
+      <updated>1574232706585</updated>
+    </task>
+    <task id="LOCAL-00065" summary="更新消息确认,发生错误后拒绝消息,消息被队列丢弃">
+      <created>1574236213373</created>
+      <option name="number" value="00065" />
+      <option name="presentableId" value="LOCAL-00065" />
+      <option name="project" value="LOCAL" />
+      <updated>1574236213373</updated>
+    </task>
+    <task id="LOCAL-00066" summary="修改时间搜索无效,添加入库单没有明细不可以提交审核">
+      <created>1574750425657</created>
+      <option name="number" value="00066" />
+      <option name="presentableId" value="LOCAL-00066" />
+      <option name="project" value="LOCAL" />
+      <updated>1574750425657</updated>
+    </task>
+    <task id="LOCAL-00067" summary="修复接口bug,新增库存同步物料同步用户同步接口">
+      <created>1577352141668</created>
+      <option name="number" value="00067" />
+      <option name="presentableId" value="LOCAL-00067" />
+      <option name="project" value="LOCAL" />
+      <updated>1577352141668</updated>
+    </task>
+    <task id="LOCAL-00068" summary="托盘条码打印">
+      <created>1577439445441</created>
+      <option name="number" value="00068" />
+      <option name="presentableId" value="LOCAL-00068" />
+      <option name="project" value="LOCAL" />
+      <updated>1577439445443</updated>
+    </task>
+    <task id="LOCAL-00069" summary="托盘条码打印">
+      <created>1577668882647</created>
+      <option name="number" value="00069" />
+      <option name="presentableId" value="LOCAL-00069" />
+      <option name="project" value="LOCAL" />
+      <updated>1577668882648</updated>
+    </task>
+    <task id="LOCAL-00070" summary="托盘条码打印">
+      <created>1577669193189</created>
+      <option name="number" value="00070" />
+      <option name="presentableId" value="LOCAL-00070" />
+      <option name="project" value="LOCAL" />
+      <updated>1577669193189</updated>
+    </task>
+    <option name="localTasksCounter" value="71" />
     <servers />
   </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="110601000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info content_ui="combo" id="Project" order="0" sideWeight="0.4978903" visible="true" weight="0.27680966" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Designer" order="2" />
+      <window_info id="Image Layers" order="3" />
+      <window_info id="Capture Tool" order="4" />
+      <window_info id="UI Designer" order="5" />
+      <window_info id="Favorites" order="6" sideWeight="0.5021097" side_tool="true" weight="0.308311" />
+      <window_info id="Web" order="7" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Spring" order="7" />
+      <window_info anchor="bottom" id="Terminal" order="8" />
+      <window_info anchor="bottom" id="Docker" order="9" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.09048257" side_tool="true" weight="0.44192636" />
+      <window_info anchor="bottom" id="Java Enterprise" order="11" />
+      <window_info anchor="bottom" id="Database Changes" order="12" />
+      <window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.91152817" weight="0.3286119" />
+      <window_info anchor="bottom" id="Run Dashboard" order="14" sideWeight="0.9095174" weight="0.509915" />
+      <window_info anchor="bottom" id="Messages" order="15" sideWeight="0.49932975" weight="0.3286119" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="Maven" order="3" weight="0.3297587" />
+      <window_info anchor="right" id="Palette" order="4" />
+      <window_info anchor="right" id="Capture Analysis" order="5" />
+      <window_info anchor="right" id="Database" order="6" />
+      <window_info anchor="right" id="Palette&#9;" order="7" />
+      <window_info anchor="right" id="Theme Preview" order="8" />
+      <window_info anchor="right" id="Bean Validation" order="9" weight="0.3297587" />
+    </layout>
+  </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="1" />
   </component>
@@ -523,41 +1158,60 @@
         <entry key="MAIN">
           <value>
             <State>
+              <option name="RECENTLY_FILTERED_USER_GROUPS">
+                <collection />
+              </option>
+              <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
+                <collection />
+              </option>
               <option name="COLUMN_ORDER" />
             </State>
           </value>
         </entry>
       </map>
     </option>
+    <option name="RECENT_FILTERS">
+      <map>
+        <entry key="Branch">
+          <value>
+            <list />
+          </value>
+        </entry>
+        <entry key="User">
+          <value>
+            <list />
+          </value>
+        </entry>
+      </map>
+    </option>
   </component>
   <component name="VcsManagerConfiguration">
-    <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
-    <MESSAGE value="修改入库单页面" />
-    <MESSAGE value="修改入库单页面,入库单审核,质检页面后台跳转接口" />
-    <MESSAGE value="修改 入库收货,生成上架任务自动执行定位" />
-    <MESSAGE value="修复商品管理、物料类别种bug" />
-    <MESSAGE value="修改入库明细添加加载定位规则的错误" />
-    <MESSAGE value="添加入库质检行内编辑" />
-    <MESSAGE value="行内编辑完成后更新数据库" />
-    <MESSAGE value="修改质检登记使用bootstarp boot原生方法初始化" />
-    <MESSAGE value="表单头创建时间添加默认创建时间&#10;开始时间默认提前一周,结束时间默认当天" />
-    <MESSAGE value="配置中所有页面添加重置按钮" />
-    <MESSAGE value="收货添加定位、取消定位、取消组盘按钮" />
-    <MESSAGE value="修改入库单数量使用BigDecimal类型,修改入库单添加、修改、物理类型添加和修改页面" />
-    <MESSAGE value="修改物料管理中物料类型使用物料类别表,不在使用数据字典" />
-    <MESSAGE value="修改波次主表、波次流程头表、波次流程明细页面" />
-    <MESSAGE value="修改入库首选项修改添加模块为select" />
-    <MESSAGE value="修改任务取消入库组盘状态不回滚,修改任务完成入库单状态不完成" />
-    <MESSAGE value="添加自动生成容器编码" />
-    <MESSAGE value="修改入库首选项页面,规则查询使用数据字典值,表格值显示修改" />
-    <MESSAGE value="入库单添加重置按钮,入库单历史添加上游单号搜索" />
-    <MESSAGE value="添加取消入库组盘时容器为临时容器,删除容器" />
-    <MESSAGE value="出库完成时删除临时容器" />
-    <MESSAGE value="修改容器新增时容器enable状态" />
-    <MESSAGE value="修改入库组盘页面中任务类型的显示问题&#10;修改任务完成不修改入库组盘状态的问题" />
-    <MESSAGE value="添加根据code查询物料" />
-    <MESSAGE value="添加根据容器编码查找容器的方法&#10;配置规则添加自动添加模块类型&#10;添加是否自动生成临时容器" />
-    <option name="LAST_COMMIT_MESSAGE" value="添加根据容器编码查找容器的方法&#10;配置规则添加自动添加模块类型&#10;添加是否自动生成临时容器" />
+    <MESSAGE value="添加站台表,入库组盘头表和任务表添加站台,默认为0" />
+    <MESSAGE value="修改任务执行接口" />
+    <MESSAGE value="修改接口实体类" />
+    <MESSAGE value="修改接口实体类&#10;修改仓位分配接口" />
+    <MESSAGE value="修改系统管理参数配置添加和修改页面中的模块和类型" />
+    <MESSAGE value="修改重入和仓位下发接口" />
+    <MESSAGE value="删除质检头表新增按钮" />
+    <MESSAGE value="添加多环境配置文件" />
+    <MESSAGE value="修改收货是是否收完的判断" />
+    <MESSAGE value="添加仓库复制" />
+    <MESSAGE value="修改收货是是否手动指定库位,入库单状态的更新" />
+    <MESSAGE value="修改容器已组盘的提示信息&#10;修改库位生成库位编码使用库位类型编码" />
+    <MESSAGE value="修改仓库复制" />
+    <MESSAGE value="修改返回类型" />
+    <MESSAGE value="修改库位监控" />
+    <MESSAGE value="修改库位监控tips" />
+    <MESSAGE value="修改收发送邮件注释" />
+    <MESSAGE value="添加入库下发接口" />
+    <MESSAGE value="修改入库多仓库报错" />
+    <MESSAGE value="添加物料最大量最小量预警、空库位预警" />
+    <MESSAGE value="添加基础数据接口和入库单下发下发接口" />
+    <MESSAGE value="更新消息确认,发生错误后拒绝消息,消息被队列丢弃" />
+    <MESSAGE value="修改时间搜索无效,添加入库单没有明细不可以提交审核" />
+    <MESSAGE value="修复接口bug,新增库存同步物料同步用户同步接口" />
+    <MESSAGE value="托盘条码打印" />
+    <option name="LAST_COMMIT_MESSAGE" value="托盘条码打印" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
@@ -565,42 +1219,94 @@
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java</url>
           <line>164</line>
+          <properties />
           <option name="timeStamp" value="24" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java</url>
-          <line>150</line>
+          <line>165</line>
+          <properties />
           <option name="timeStamp" value="26" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java</url>
-          <line>174</line>
+          <line>179</line>
+          <properties />
           <option name="timeStamp" value="28" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configValue/controller/ConfigValueController.java</url>
+          <line>141</line>
+          <properties />
+          <option name="timeStamp" value="66" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java</url>
-          <line>631</line>
-          <option name="timeStamp" value="48" />
+          <line>190</line>
+          <properties />
+          <option name="timeStamp" value="87" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java</url>
-          <line>56</line>
-          <option name="timeStamp" value="49" />
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java</url>
+          <line>35</line>
+          <properties />
+          <option name="timeStamp" value="101" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java</url>
-          <line>84</line>
-          <option name="timeStamp" value="51" />
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java</url>
+          <line>194</line>
+          <properties>
+            <option name="lambda-ordinal" value="-1" />
+          </properties>
+          <option name="timeStamp" value="112" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowHeaderController.java</url>
-          <line>86</line>
-          <option name="timeStamp" value="57" />
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java</url>
+          <line>107</line>
+          <properties />
+          <option name="timeStamp" value="121" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java</url>
-          <line>145</line>
-          <option name="timeStamp" value="62" />
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java</url>
+          <line>312</line>
+          <properties />
+          <option name="timeStamp" value="123" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url>
+          <line>110</line>
+          <properties />
+          <option name="timeStamp" value="124" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url>
+          <line>140</line>
+          <properties />
+          <option name="timeStamp" value="125" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url>
+          <line>118</line>
+          <properties />
+          <option name="timeStamp" value="126" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url>
+          <line>109</line>
+          <properties />
+          <option name="timeStamp" value="127" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java</url>
+          <line>709</line>
+          <properties />
+          <option name="timeStamp" value="135" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java</url>
+          <line>198</line>
+          <properties />
+          <option name="timeStamp" value="139" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="javascript">
           <url>file://$PROJECT_DIR$/src/main/resources/templates/check/checkingRegister/checkingRegister.html</url>
@@ -621,8 +1327,431 @@
     </watches-manager>
   </component>
   <component name="com.intellij.coverage.CoverageDataManagerImpl">
-    <SUITE FILE_PATH="coverage/huaheng$HuaHengApplication.ic" NAME="HuaHengApplication Coverage Results" MODIFIED="1568251952497" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false">
+    <SUITE FILE_PATH="coverage/huaheng$HuaHengApplication.ic" NAME="HuaHengApplication Coverage Results" MODIFIED="1570677350612" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false">
       <FILTER>com.huaheng.*</FILTER>
     </SUITE>
   </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/ReceiptDomain.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="209">
+          <caret line="16" column="46" selection-start-line="16" selection-start-column="32" selection-end-line="16" selection-end-column="46" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/LoginApi.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="186">
+          <caret line="31" column="32" selection-start-line="31" selection-start-column="24" selection-end-line="31" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="89" column="9" lean-forward="true" selection-start-line="89" selection-start-column="9" selection-end-line="89" selection-end-column="9" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/ShipmentDomain.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="152">
+          <caret line="12" column="48" selection-start-line="12" selection-start-column="33" selection-end-line="12" selection-end-column="48" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentHeader/service/ShipmentHeaderService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="126">
+          <caret line="15" column="11" selection-start-line="15" selection-start-column="11" selection-end-line="15" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/shipment/ShipmentDetailMapper.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="160">
+          <caret line="140" column="2" selection-start-line="140" selection-start-column="2" selection-end-line="140" selection-end-column="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentDetail/mapper/ShipmentDetailMapper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="214">
+          <caret line="24" column="8" selection-start-line="24" selection-start-column="8" selection-end-line="24" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="290">
+          <caret line="38" column="62" selection-start-line="38" selection-start-column="47" selection-end-line="38" selection-end-column="62" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="233">
+          <caret line="304" column="21" lean-forward="true" selection-start-line="304" selection-start-column="21" selection-end-line="304" selection-end-column="21" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="230">
+          <caret line="136" column="52" selection-start-line="136" selection-start-column="34" selection-end-line="136" selection-end-column="52" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ShipmentApi.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="266">
+          <caret line="31" column="55" lean-forward="true" selection-start-line="31" selection-start-column="55" selection-end-line="31" selection-end-column="55" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="236">
+          <caret line="111" column="56" selection-start-line="111" selection-start-column="43" selection-end-line="111" selection-end-column="56" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="247">
+          <caret line="32" column="52" selection-start-line="32" selection-start-column="52" selection-end-line="32" selection-end-column="52" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/domain/User.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="209">
+          <caret line="23" column="13" selection-start-line="23" selection-start-column="13" selection-end-line="23" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-extension/3.1.2/mybatis-plus-extension-3.1.2.jar!/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="114">
+          <caret line="36" column="13" selection-start-line="36" selection-start-column="13" selection-end-line="36" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/system/UserMapper.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="149">
+          <caret line="43" column="4" selection-start-line="43" selection-start-column="4" selection-end-line="43" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/IUserService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="171">
+          <caret line="18" column="29" lean-forward="true" selection-start-line="18" selection-start-column="29" selection-end-line="18" selection-end-column="29" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-152">
+          <caret line="8" column="60" lean-forward="true" selection-start-line="8" selection-start-column="60" selection-end-line="8" selection-end-column="60" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="95">
+          <caret line="27" column="89" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="89" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/controller/UserController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="206">
+          <caret line="71" column="46" selection-start-line="71" selection-start-column="46" selection-end-line="71" selection-end-column="46" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/mapper/UserMapper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="149">
+          <caret line="23" column="22" selection-start-line="23" selection-start-column="22" selection-end-line="23" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="19">
+          <caret line="42" column="28" lean-forward="true" selection-start-line="42" selection-start-column="28" selection-end-line="42" selection-end-column="28" />
+          <folding>
+            <element signature="e#5266#5267#0" expanded="true" />
+            <element signature="e#5320#5321#0" expanded="true" />
+            <element signature="e#5486#5487#0" expanded="true" />
+            <element signature="e#5551#5552#0" expanded="true" />
+            <element signature="e#5726#5727#0" expanded="true" />
+            <element signature="e#5796#5797#0" expanded="true" />
+            <element signature="e#5950#5951#0" expanded="true" />
+            <element signature="e#6008#6009#0" expanded="true" />
+            <element signature="e#6166#6167#0" expanded="true" />
+            <element signature="e#6222#6223#0" expanded="true" />
+            <element signature="e#8470#8471#0" expanded="true" />
+            <element signature="e#8520#8521#0" expanded="true" />
+            <element signature="e#17198#17199#0" expanded="true" />
+            <element signature="e#17266#17267#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/Receipt.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="171">
+          <caret line="13" column="13" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2907">
+          <caret line="170" column="1" selection-start-line="170" selection-start-column="1" selection-end-line="170" selection-end-column="1" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="114">
+          <caret line="13" column="57" selection-start-line="13" selection-start-column="57" selection-end-line="13" selection-end-column="57" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="105">
+          <caret line="657" column="76" selection-start-line="657" selection-start-column="76" selection-end-line="657" selection-end-column="76" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus-extension/3.1.2/mybatis-plus-extension-3.1.2.jar!/com/baomidou/mybatisplus/extension/service/IService.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="171">
+          <caret line="70" column="6" selection-start-line="70" selection-start-column="6" selection-end-line="70" selection-end-column="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/service/ContainerService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="76">
+          <caret line="9" column="17" selection-start-line="9" selection-start-column="17" selection-end-line="9" selection-end-column="17" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/service/InventoryTransactionService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="57">
+          <caret line="4" column="17" selection-start-line="4" selection-start-column="17" selection-end-line="4" selection-end-column="17" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="391">
+          <caret line="322" column="10" lean-forward="true" selection-start-line="310" selection-start-column="7" selection-end-line="322" selection-end-column="10" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/lib.es5.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="140">
+          <caret line="472" column="4" selection-start-line="472" selection-start-column="4" selection-end-line="472" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="128">
+          <caret line="101" column="8" selection-start-line="101" selection-start-column="8" selection-end-line="101" selection-end-column="8" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/lib.dom.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="128">
+          <caret line="10712" column="13" selection-start-line="10712" selection-start-column="13" selection-end-line="10712" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/qrcode/qrcode.min.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="4" selection-start-column="4" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-872">
+          <caret line="41" column="33" lean-forward="true" selection-start-line="41" selection-start-column="33" selection-end-line="41" selection-end-column="33" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="152">
+          <caret line="675" column="43" lean-forward="true" selection-start-line="675" selection-start-column="43" selection-end-line="675" selection-end-column="43" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/add.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-962" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/echarts/echarts.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="19">
+          <caret line="30207" selection-start-line="30207" selection-end-line="30207" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/report.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="70" column="4" lean-forward="true" selection-start-line="70" selection-start-column="4" selection-end-line="70" selection-end-column="22" />
+          <folding>
+            <element signature="n#style#0;n#span#1;n#td#0;n#tr#0;n#thead#0;n#table#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/Desktop/长沙华恒企网2.0_new/答题HTML/答题HTML/answer.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-171" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/container.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1292">
+          <caret line="68" column="44" selection-start-line="68" selection-start-column="35" selection-end-line="68" selection-end-column="44" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="228">
+          <caret line="41" column="29" selection-start-line="41" selection-start-column="29" selection-end-line="41" selection-end-column="38" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/jquery.jqprint-0.3.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-316">
+          <caret line="43" column="118" selection-start-line="43" selection-start-column="113" selection-end-line="43" selection-end-column="118" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/browser.d.ts">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="155">
+          <caret line="46" column="4" selection-start-line="46" selection-start-column="4" selection-end-line="46" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/inventory/inventoryTransaction/report.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="147">
+          <caret line="98" column="13" selection-start-line="98" selection-start-column="13" selection-end-line="98" selection-end-column="13" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#span#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$USER_HOME$/Desktop/boot/boot/打印二维码 - 多个组2.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="241">
+          <caret line="47" column="36" lean-forward="true" selection-start-line="47" selection-start-column="36" selection-end-line="47" selection-end-column="36" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#caption#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="e#2973#2979#0" expanded="true" />
+            <element signature="e#2979#2985#0" expanded="true" />
+            <element signature="e#2985#2991#0" expanded="true" />
+            <element signature="e#2991#2997#0" expanded="true" />
+            <element signature="e#2997#3003#0" expanded="true" />
+            <element signature="e#3003#3009#0" expanded="true" />
+            <element signature="e#3009#3015#0" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#caption#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="e#3995#4001#0" expanded="true" />
+            <element signature="e#4001#4007#0" expanded="true" />
+            <element signature="e#4007#4013#0" expanded="true" />
+            <element signature="e#4013#4019#0" expanded="true" />
+            <element signature="e#4019#4025#0" expanded="true" />
+            <element signature="e#4025#4031#0" expanded="true" />
+            <element signature="e#4031#4037#0" expanded="true" />
+            <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$MAVEN_REPOSITORY$/com/alibaba/druid/1.1.18/druid-1.1.18.jar!/support/http/resources/css/bootstrap.min.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="152">
+          <caret line="8" column="25402" selection-start-line="8" selection-start-column="25402" selection-end-line="8" selection-end-column="25402" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/main/style.min862f.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="49663" selection-start-column="49663" selection-end-column="49663" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/bootstrap.min.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="127">
+          <caret line="2721" column="1" selection-start-line="2721" selection-start-column="1" selection-end-line="2721" selection-end-column="1" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/style.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="241">
+          <caret line="3360" column="17" lean-forward="true" selection-start-line="3360" selection-start-column="17" selection-end-line="3360" selection-end-column="17" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/print.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="150">
+          <caret line="21" column="28" lean-forward="true" selection-start-line="21" selection-start-column="28" selection-end-line="21" selection-end-column="28" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#span#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#table#0;n#div#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d1bdcb9..ccefba9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -249,6 +249,43 @@
 			<version>3.17</version>
 		</dependency>
 
+		<!--jasperreports-->
+        <dependency>
+            <groupId>net.sf.jasperreports</groupId>
+            <artifactId>jasperreports</artifactId>
+            <version>6.10.0</version>
+        </dependency>
+		<dependency>
+			<groupId>net.sf.jasperreports</groupId>
+			<artifactId>jasperreports-fonts</artifactId>
+			<version>6.10.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itextpdf</artifactId>
+			<version>5.5.7</version>
+		</dependency>
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itext-pdfa</artifactId>
+			<version>5.5.7</version>
+		</dependency>
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itext-asian</artifactId>
+			<version>5.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.lesper</groupId>
+			<artifactId>iTextAsian</artifactId>
+			<version>3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.codehaus.groovy</groupId>
+			<artifactId>groovy-all</artifactId>
+			<version>2.4.11</version>
+		</dependency>
+
 		<!--activiti工作流-->
 		<!--<dependency>-->
 		<!--<groupId>org.activiti</groupId>-->
diff --git a/src/main/java/com/huaheng/api/acs/controller/StateInfoUp.java b/src/main/java/com/huaheng/api/acs/controller/StateInfoUp.java
new file mode 100644
index 0000000..af16f20
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/controller/StateInfoUp.java
@@ -0,0 +1,36 @@
+package com.huaheng.api.acs.controller;
+
+import com.huaheng.api.acs.domain.StateInfoUploadModel;
+import com.huaheng.api.acs.service.AcsService;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+@RestController
+@RequestMapping("/api/ACS/v1")
+@Api(tags = {"ACS"}, description = "登陆接口")
+public class StateInfoUp extends BaseController {
+    @Resource
+    private AcsService acsService;
+
+    /**
+     * AGV 信息上传
+     */
+//    @RequiresPermissions("api:acs:StateInfoUpload")
+    @Log(title = "AGV 信息上传", action = BusinessType.INSERT)
+    @PostMapping("/StateInfoUpload")
+    @ApiOperation("AGV 信息上传接口")
+    @ResponseBody
+    public AjaxResult StateInfoUpload(@RequestBody StateInfoUploadModel model)
+    {
+        return acsService.StateInfoUpload(model);
+    }
+
+}
diff --git a/src/main/java/com/huaheng/api/acs/controller/TaskConfirm.java b/src/main/java/com/huaheng/api/acs/controller/TaskConfirm.java
new file mode 100644
index 0000000..b1136f1
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/controller/TaskConfirm.java
@@ -0,0 +1,37 @@
+package com.huaheng.api.acs.controller;
+
+import com.huaheng.api.acs.domain.AgvTask;
+import com.huaheng.api.acs.service.AcsService;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+@RestController
+@RequestMapping("/api/ACS/v1")
+@Api(tags = {"ACS"}, description = "登陆接口")
+public class TaskConfirm extends BaseController {
+    @Resource
+    private AcsService acsService;
+
+    /**
+     * AGV 任务回传
+     */
+//    @RequiresPermissions("api:acs:TaskConfirm")
+    @Log(title = "AGV 任务回传", action = BusinessType.UPDATE)
+    @PostMapping("/TaskConfirm")
+    @ApiOperation("AGV 任务回传接口")
+    @ResponseBody
+    public AjaxResult TaskConfirm(@RequestBody AgvTask model)
+    {
+        return acsService.TaskConfirm(model);
+    }
+
+
+}
diff --git a/src/main/java/com/huaheng/api/acs/domain/AgvTask.java b/src/main/java/com/huaheng/api/acs/domain/AgvTask.java
new file mode 100644
index 0000000..dbe3150
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/domain/AgvTask.java
@@ -0,0 +1,243 @@
+package com.huaheng.api.acs.domain;
+
+import com.huaheng.framework.web.domain.BaseEntity;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * AGV任务实体
+ *
+ */
+public class AgvTask extends BaseEntity {
+
+
+    private Integer id;
+    //交互标识
+    private String interactionId;
+    //任务头标识
+    private Integer taskHeaderId;
+    //任务子标识
+    private  Integer taskDetailId;
+    //任务类型
+    private String taskType;
+    //货架编码
+    private  String shelfNo;
+    //站台编码
+    private String station;
+    //源位置编码
+    private  String fromLocationNo;
+    //目的位置编码
+    private String toLocationNo;
+    //方向
+    private String orientation;
+    //平台
+    private String platform;
+    //小车编号
+    private  String carNo;
+    //状态
+    private String state;
+    //优先级
+    private Integer status;
+    //仓库ID
+    private Integer warehouseId;
+    //仓库编码
+    private String warehouseCode;
+    //货主ID
+    private Integer companyId;
+    //货主编码
+    private String companyCode;
+    //货主ID list
+    private List<Integer> companyIdList;
+    //货主list
+    private List<String> companyCodeList;
+
+    private Date date;
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public List<Integer> getCompanyIdList() {
+        return companyIdList;
+    }
+
+    public void setCompanyIdList(List<Integer> companyIdList) {
+        this.companyIdList = companyIdList;
+    }
+
+    public Integer getWarehouseId() {
+        return warehouseId;
+    }
+
+    public void setWarehouseId(Integer warehouseId) {
+        this.warehouseId = warehouseId;
+    }
+
+    public String getWarehouseCode() {
+        return warehouseCode;
+    }
+
+    public void setWarehouseCode(String warehouseCode) {
+        this.warehouseCode = warehouseCode;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getCompanyCode() {
+        return companyCode;
+    }
+
+    public void setCompanyCode(String companyCode) {
+        this.companyCode = companyCode;
+    }
+
+    public List<String> getCompanyCodeList() {
+        return companyCodeList;
+    }
+
+    public void setCompanyCodeList(List<String> companyCodeList) {
+        this.companyCodeList = companyCodeList;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getInteractionId() {
+        return interactionId;
+    }
+
+    public void setInteractionId(String interactionId) {
+        this.interactionId = interactionId;
+    }
+
+    public Integer getTaskHeaderId() {
+        return taskHeaderId;
+    }
+
+    public void setTaskHeaderId(Integer taskHeaderId) {
+        this.taskHeaderId = taskHeaderId;
+    }
+
+    public Integer getTaskDetailId() {
+        return taskDetailId;
+    }
+
+    public void setTaskDetailId(Integer taskDetailId) {
+        this.taskDetailId = taskDetailId;
+    }
+
+    public String getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(String taskType) {
+        this.taskType = taskType;
+    }
+
+    public String getShelfNo() {
+        return shelfNo;
+    }
+
+    public void setShelfNo(String shelfNo) {
+        this.shelfNo = shelfNo;
+    }
+
+    public String getStation() {
+        return station;
+    }
+
+    public void setStation(String station) {
+        this.station = station;
+    }
+
+    public String getFromLocationNo() {
+        return fromLocationNo;
+    }
+
+    public void setFromLocationNo(String fromLocationNo) {
+        this.fromLocationNo = fromLocationNo;
+    }
+
+    public String getToLocationNo() {
+        return toLocationNo;
+    }
+
+    public void setToLocationNo(String toLocationNo) {
+        this.toLocationNo = toLocationNo;
+    }
+
+    public String getOrientation() {
+        return orientation;
+    }
+
+    public void setOrientation(String orientation) {
+        this.orientation = orientation;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    public String getCarNo() {
+        return carNo;
+    }
+
+    public void setCarNo(String carNo) {
+        this.carNo = carNo;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return "AgvTask{" +
+                "id=" + id +
+                ", interactionId='" + interactionId + '\'' +
+                ", taskHeaderId=" + taskHeaderId +
+                ", taskDetailId=" + taskDetailId +
+                ", taskType='" + taskType + '\'' +
+                ", shelfNo='" + shelfNo + '\'' +
+                ", station='" + station + '\'' +
+                ", fromLocationNo='" + fromLocationNo + '\'' +
+                ", toLocationNo='" + toLocationNo + '\'' +
+                ", orientation='" + orientation + '\'' +
+                ", platform='" + platform + '\'' +
+                ", carNo='" + carNo + '\'' +
+                ", state='" + state + '\'' +
+                '}';
+    }
+}
diff --git a/src/main/java/com/huaheng/api/acs/domain/StateInfoUploadModel.java b/src/main/java/com/huaheng/api/acs/domain/StateInfoUploadModel.java
new file mode 100644
index 0000000..5f7fa99
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/domain/StateInfoUploadModel.java
@@ -0,0 +1,161 @@
+package com.huaheng.api.acs.domain;
+
+import java.util.Date;
+
+/**
+ * 小车信息实体
+ *
+ */
+public class StateInfoUploadModel {
+
+    private String carNo;   // 小车编号,string(50),唯一 ,必填
+    private String interactionId;   // 交互标识,int,默认 0,必填"
+    private String taskType;   // 任务类型,string (50),putway 上架 pick 拣货,必填
+    private String shelfNo;   // 货架编码,string (50),默认 0,必填
+    private String station;   // 站台编码,string (50),默认 0,必填
+    private String currentLocationNo;   // 当前位置编码,string (50),默认 0 必填
+    private String fromLocationNo;   // 源位置编码,string (50),默认 0 必填
+    private String toLocationNo;   // 目的位置编码,string (50),默认 0 必填
+    private String orientation;   // 方向,string (50),N,S,E,W,必填
+    private Integer percentCapacity;   // 电量,int【0-100】,必填
+    private Integer exceptionFlag;   // 异常标志 0 正常 1 异常,int,默认 0 必填
+    private String state;   // 状态,string (50),0 空闲 1 预定 2 任务中 -1 充电,必填
+    private String exceptionInfo;   // 异常信息 string(200)
+    //仓库ID
+    private Integer warehouseId;
+    //仓库编码
+    private String warehouseCode;
+
+    private Date date;
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Integer getWarehouseId() {
+        return warehouseId;
+    }
+
+    public void setWarehouseId(Integer warehouseId) {
+        this.warehouseId = warehouseId;
+    }
+
+    public String getWarehouseCode() {
+        return warehouseCode;
+    }
+
+    public void setWarehouseCode(String warehouseCode) {
+        this.warehouseCode = warehouseCode;
+    }
+
+    public String getCarNo() {
+        return carNo;
+    }
+
+    public void setCarNo(String carNo) {
+        this.carNo = carNo;
+    }
+
+    public String getInteractionId() {
+        return interactionId;
+    }
+
+    public void setInteractionId(String interactionId) {
+        this.interactionId = interactionId;
+    }
+
+    public String getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(String taskType) {
+        this.taskType = taskType;
+    }
+
+    public String getShelfNo() {
+        return shelfNo;
+    }
+
+    public void setShelfNo(String shelfNo) {
+        this.shelfNo = shelfNo;
+    }
+
+    public String getStation() {
+        return station;
+    }
+
+    public void setStation(String station) {
+        this.station = station;
+    }
+
+    public String getCurrentLocationNo() {
+        return currentLocationNo;
+    }
+
+    public void setCurrentLocationNo(String currentLocationNo) {
+        this.currentLocationNo = currentLocationNo;
+    }
+
+    public String getFromLocationNo() {
+        return fromLocationNo;
+    }
+
+    public void setFromLocationNo(String fromLocationNo) {
+        this.fromLocationNo = fromLocationNo;
+    }
+
+    public String getToLocationNo() {
+        return toLocationNo;
+    }
+
+    public void setToLocationNo(String toLocationNo) {
+        this.toLocationNo = toLocationNo;
+    }
+
+    public String getOrientation() {
+        return orientation;
+    }
+
+    public void setOrientation(String orientation) {
+        this.orientation = orientation;
+    }
+
+    public Integer getPercentCapacity() {
+        return percentCapacity;
+    }
+
+    public void setPercentCapacity(Integer percentCapacity) {
+        this.percentCapacity = percentCapacity;
+    }
+
+    public Integer getExceptionFlag() {
+        return exceptionFlag;
+    }
+
+    public void setExceptionFlag(Integer exceptionFlag) {
+        this.exceptionFlag = exceptionFlag;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getExceptionInfo() {
+        return exceptionInfo;
+    }
+
+    public void setExceptionInfo(String exceptionInfo) {
+        this.exceptionInfo = exceptionInfo;
+    }
+
+
+
+}
diff --git a/src/main/java/com/huaheng/api/acs/service/AcsService.java b/src/main/java/com/huaheng/api/acs/service/AcsService.java
new file mode 100644
index 0000000..ce9bd92
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/service/AcsService.java
@@ -0,0 +1,16 @@
+package com.huaheng.api.acs.service;
+
+import com.huaheng.api.acs.domain.AgvTask;
+import com.huaheng.api.acs.domain.StateInfoUploadModel;
+import com.huaheng.framework.web.domain.AjaxResult;
+
+public interface AcsService {
+
+
+    //AGV 信息上传
+    AjaxResult StateInfoUpload(StateInfoUploadModel model);
+
+
+    //AGV 任务回传
+    AjaxResult TaskConfirm(AgvTask agvTask);
+}
diff --git a/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java b/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
new file mode 100644
index 0000000..ea85102
--- /dev/null
+++ b/src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
@@ -0,0 +1,25 @@
+package com.huaheng.api.acs.service;
+
+import com.huaheng.api.acs.domain.AgvTask;
+import com.huaheng.api.acs.domain.StateInfoUploadModel;
+import com.huaheng.framework.web.domain.AjaxResult;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName AcsServiceImpl
+ * @Description TODO
+ * @Author Administrator
+ * @Date 2019/12/2615:38
+ */
+@Service
+public class AcsServiceImpl implements AcsService {
+    @Override
+    public AjaxResult StateInfoUpload(StateInfoUploadModel model) {
+        return null;
+    }
+
+    @Override
+    public AjaxResult TaskConfirm(AgvTask agvTask) {
+        return null;
+    }
+}
diff --git a/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java b/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
index 90aafdc..d415421 100644
--- a/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
+++ b/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java
@@ -5,10 +5,12 @@ import com.huaheng.framework.aspectj.lang.annotation.Log;
 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
 import com.huaheng.framework.web.controller.BaseController;
 import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.containerCapacity.domain.ContainerCapacity;
 import com.huaheng.pc.config.customer.domain.Customer;
 import com.huaheng.pc.config.material.domain.Material;
 import com.huaheng.pc.config.supplier.domain.Supplier;
 import com.huaheng.pc.config.warehouse.domain.Warehouse;
+import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.system.dept.domain.Dept;
 import com.huaheng.pc.system.dict.domain.DictData;
 import com.huaheng.pc.system.user.domain.User;
@@ -38,6 +40,17 @@ public class BasicDataApi extends BaseController {
         return ajaxResult;
     }
 
+
+    @Log(title = "物料查询", action = BusinessType.INSERT)
+    @PostMapping("/queryMaterialApi")
+    @ApiOperation("物料查询公共接口")
+    @ResponseBody
+    public AjaxResult QueryMaterialApi(@RequestBody Material material)
+    {
+        AjaxResult ajaxResult = basicDataApiService.queryMaterial(material);
+        return ajaxResult;
+    }
+
     /**
      * 同步字典
      */
@@ -105,6 +118,29 @@ public class BasicDataApi extends BaseController {
         return ajaxResult;
     }
 
+
+    @Log(title = "用户同步", action = BusinessType.INSERT)
+    @PostMapping("/queryUserApi")
+    @ApiOperation("用户查询公共接口")
+    @ResponseBody
+    public AjaxResult queryUserApi(@RequestBody User user)
+    {
+        AjaxResult ajaxResult = basicDataApiService.queryUser(user);
+        return ajaxResult;
+    }
+
+    /**
+     * 同步容器容量
+     */
+    @Log(title = "容器容量添加", action = BusinessType.INSERT)
+    @PostMapping("/containerCapacity")
+    @ApiOperation("容器容量添加公共接口")
+    @ResponseBody
+    public AjaxResult containerCapacityApi(@RequestBody ContainerCapacity containerCapacity){
+        AjaxResult ajaxResult = basicDataApiService.containerCapacity(containerCapacity);
+        return ajaxResult;
+    }
+
     /**
      * 同步供应商档案
      */
@@ -119,5 +155,17 @@ public class BasicDataApi extends BaseController {
 
 
 
+    @Log(title = "库存同步", action = BusinessType.INSERT)
+    @PostMapping("/queryInventoryApi")
+    @ApiOperation("库存查询公共接口")
+    @ResponseBody
+    public AjaxResult queryInventoryApi(@RequestBody InventoryDetail inventoryDetail)
+    {
+        AjaxResult ajaxResult = basicDataApiService.queryInventoryApi(inventoryDetail);
+        return ajaxResult;
+    }
+
+
+
 
 }
diff --git a/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java b/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java
new file mode 100644
index 0000000..d39993d
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java
@@ -0,0 +1,37 @@
+package com.huaheng.api.general.controller;
+
+
+import com.huaheng.api.general.domain.ReceiptDomain;
+import com.huaheng.api.general.service.ReceiptApiService;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/api/receiptApi")
+@Api(tags = {"receipt"}, description = "入库单接口")
+public class ReceiptApi {
+
+    @Resource
+    private ReceiptApiService receiptApiService;
+
+
+    /**
+     * 同步入库单
+     */
+    @Log(title = "入库单添加", action = BusinessType.INSERT)
+    @PostMapping("/receipt")
+    @ApiOperation("入库单添加公共接口")
+    @ResponseBody
+    public AjaxResult Receipt(@RequestBody ReceiptDomain receiptDomain)
+    {
+        AjaxResult ajaxResult = receiptApiService.receipt(receiptDomain);
+        return ajaxResult;
+    }
+
+}
diff --git a/src/main/java/com/huaheng/api/general/controller/ShipmentApi.java b/src/main/java/com/huaheng/api/general/controller/ShipmentApi.java
new file mode 100644
index 0000000..c230958
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/controller/ShipmentApi.java
@@ -0,0 +1,35 @@
+package com.huaheng.api.general.controller;
+
+
+import com.huaheng.api.general.domain.ShipmentDomain;
+import com.huaheng.api.general.service.ShipmentApiService;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/api/shipmentApi")
+@Api(tags = {"shipment"}, description = "出库单接口")
+public class ShipmentApi {
+
+    @Resource
+    private ShipmentApiService shipmentApiService;
+
+    /**
+     * 同步出库单
+     */
+    @Log(title = "出库单添加", action = BusinessType.INSERT)
+    @PostMapping("/shipment")
+    @ApiOperation("出库单添加公共接口")
+    @ResponseBody
+    public AjaxResult Shipment(@RequestBody ShipmentDomain shipmentDomain)
+    {
+        AjaxResult ajaxResult = shipmentApiService.shipment(shipmentDomain);
+        return ajaxResult;
+    }
+}
diff --git a/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java b/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java
new file mode 100644
index 0000000..1f2c5b5
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java
@@ -0,0 +1,17 @@
+package com.huaheng.api.general.domain;
+
+import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
+import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
+import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
+import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class InventoryDomain {
+    private Map<Integer,InventoryHeader> inventoryHeader;
+
+    private List<InventoryDetail> inventoryDetails;
+}
diff --git a/src/main/java/com/huaheng/api/general/domain/ReceiptDomain.java b/src/main/java/com/huaheng/api/general/domain/ReceiptDomain.java
new file mode 100644
index 0000000..eba1ae1
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/domain/ReceiptDomain.java
@@ -0,0 +1,18 @@
+package com.huaheng.api.general.domain;
+
+import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
+import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
+import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReceiptDomain {
+
+    //入库主单
+    private ReceiptHeader receiptHeader;
+
+    //入库子单列
+    private List<ReceiptDetail> receiptDetails;
+}
diff --git a/src/main/java/com/huaheng/api/general/domain/ShipmentDomain.java b/src/main/java/com/huaheng/api/general/domain/ShipmentDomain.java
new file mode 100644
index 0000000..6828786
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/domain/ShipmentDomain.java
@@ -0,0 +1,14 @@
+package com.huaheng.api.general.domain;
+
+import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
+import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ShipmentDomain {
+    private ShipmentHeader shipmentHeader;
+
+    private List<ShipmentDetail> shipmentDetails;
+}
diff --git a/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java b/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
index 16920ea..e8f0210 100644
--- a/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
+++ b/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java
@@ -2,11 +2,16 @@ package com.huaheng.api.general.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.api.general.domain.InventoryDomain;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.config.company.domain.Company;
 import com.huaheng.pc.config.company.service.CompanyService;
+import com.huaheng.pc.config.containerCapacity.domain.ContainerCapacity;
+import com.huaheng.pc.config.containerCapacity.service.ContainerCapacityService;
+import com.huaheng.pc.config.containerType.domain.ContainerType;
+import com.huaheng.pc.config.containerType.service.ContainerTypeService;
 import com.huaheng.pc.config.customer.domain.Customer;
 import com.huaheng.pc.config.customer.service.CustomerServiceImpl;
 import com.huaheng.pc.config.material.domain.Material;
@@ -15,6 +20,10 @@ import com.huaheng.pc.config.supplier.domain.Supplier;
 import com.huaheng.pc.config.supplier.service.SupplierService;
 import com.huaheng.pc.config.warehouse.domain.Warehouse;
 import com.huaheng.pc.config.warehouse.service.WarehouseService;
+import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
+import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
+import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
+import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
 import com.huaheng.pc.system.dept.domain.Dept;
 import com.huaheng.pc.system.dept.service.IDeptService;
 import com.huaheng.pc.system.dict.domain.DictData;
@@ -30,8 +39,11 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Component
 @Transactional
@@ -42,7 +54,12 @@ public class BasicDataApiService {
     IDictDataService dictDataService;
     @Autowired
     MaterialService materialService;
-
+    @Autowired
+    ContainerTypeService containerTypeService;
+    @Autowired
+    InventoryDetailService inventoryDetailService;
+    @Autowired
+    InventoryHeaderService inventoryHeaderService;
     @Resource
     private DictTypeMapper dictTypeMapper;
     @Resource
@@ -66,6 +83,9 @@ public class BasicDataApiService {
     @Autowired
     CompanyService companyService;
 
+    @Autowired
+    private ContainerCapacityService containerCapacityService;
+
     //检查仓库
     public Warehouse checkWarehouse(String code) {
         LambdaQueryWrapper<Warehouse> warehouseLam = Wrappers.lambdaQuery();
@@ -221,6 +241,25 @@ public class BasicDataApiService {
         return AjaxResult.success("新增物料成功");
     }
 
+    /**
+    1,物料同步
+    2,条件查询
+     * @param material
+     * @return
+     */
+    @Transactional
+    public AjaxResult queryMaterial(Material material)    {
+        if (StringUtils.isEmpty(material.getWarehouseCode())){
+            return AjaxResult.error("仓库编码不能为空!!");
+        }
+        if (StringUtils.isEmpty(material.getCompanyCode())){
+            return AjaxResult.error("货主编码不能为空!!");
+        }
+        LambdaQueryWrapper<Material> lambdaQueryWrapper =Wrappers.lambdaQuery(material);
+        materialService.list(lambdaQueryWrapper);
+        return AjaxResult.success(materialService.list(lambdaQueryWrapper));
+    }
+
 
 
     /**
@@ -292,6 +331,20 @@ public class BasicDataApiService {
 
 
     /**
+     1,用户同步
+     2,条件查询
+     * @param user
+     * @return
+     */
+    @Transactional
+    public AjaxResult queryUser(User user)    {
+        iUserService.selectUserList(user);
+        return AjaxResult.success(iUserService.selectUserList(user));
+    }
+
+
+
+    /**
      * 部门档案通用接口
      * 1、判断必填字段是否为空
      * 2、部门编码长度应是双数
@@ -507,4 +560,114 @@ public class BasicDataApiService {
             throw new ServiceException("供应商数据问题。。。");
         }
     }
+
+
+    /**
+     * 容器容量通用接口
+     * 1、判断必填字段是否为空
+     * 2、检查仓库、物料和容器类型
+     * 3、检查此容器容量是否存在,不存在则添加
+     * @param containerCapacity
+     * @return
+     */
+    public AjaxResult containerCapacity(ContainerCapacity containerCapacity){
+        Boolean flag = false;
+        //1、判断必填字段是否为空
+        if(StringUtils.isEmpty(containerCapacity.getContainerType())){
+            return AjaxResult.error("没有容器类型");
+        }
+        if(StringUtils.isEmpty(containerCapacity.getWarehouseCode())){
+            return AjaxResult.error("没有仓库编号");
+        }
+        if(StringUtils.isEmpty(containerCapacity.getMaterialCode())){
+            return AjaxResult.error("没有物料编号");
+        }
+        if(StringUtils.isNull(containerCapacity.getQty())){
+            return AjaxResult.error("没有容量上限");
+        }
+
+        // 2、检查仓库、物料和容器类型
+        this.checkWarehouse(containerCapacity.getWarehouseCode());
+
+        //物料检查
+        LambdaQueryWrapper<Material> materialLam = Wrappers.lambdaQuery();
+        materialLam.eq(Material::getCode,containerCapacity.getMaterialCode())
+                .eq(Material::getWarehouseCode,containerCapacity.getWarehouseCode());
+        Material material = materialService.getOne(materialLam);
+        if(material == null){
+            return AjaxResult.error("系统没有此物料编号");
+        }
+
+        //容器类型检查
+        LambdaQueryWrapper<ContainerType> containerTypeLamb = Wrappers.lambdaQuery();
+        containerTypeLamb.eq(ContainerType::getCode,containerCapacity.getContainerType())
+                .eq(ContainerType::getWarehouseCode,containerCapacity.getWarehouseCode());
+        ContainerType containerType = containerTypeService.getOne(containerTypeLamb);
+        if(containerType == null){
+            return AjaxResult.error("系统没有此容器类型");
+        }
+
+        //3、检查此容器容量是否存在,不存在则添加
+        LambdaQueryWrapper<ContainerCapacity> containerCapacityLambd = Wrappers.lambdaQuery();
+        containerCapacityLambd.eq(ContainerCapacity::getContainerType,containerCapacity.getContainerType())
+                .eq(ContainerCapacity::getWarehouseCode,containerCapacity.getWarehouseCode())
+                .eq(ContainerCapacity::getMaterialCode,containerCapacity.getMaterialCode());
+        ContainerCapacity capacity = containerCapacityService.getOne(containerCapacityLambd);
+        if(capacity == null){
+            flag = containerCapacityService.save(containerCapacity);
+            if(flag == false){
+                return AjaxResult.error("新增容器容量失败");
+            }
+        }else {
+            if(capacity.getQty().compareTo(containerCapacity.getQty()) != 0){
+                capacity.setQty(containerCapacity.getQty());
+                flag = containerCapacityService.updateById(capacity);
+                if(flag == false){
+                    return AjaxResult.error("修改容器容量失败");
+                }
+            }
+        }
+        return AjaxResult.success("新增容器容量成功");
+    }
+
+
+
+    /**
+     1,库存同步
+     2,条件查询
+     * @param inventoryDetail
+     * @return
+     */
+    @Transactional
+    public AjaxResult queryInventoryApi(InventoryDetail inventoryDetail)    {
+        if (StringUtils.isEmpty(inventoryDetail.getWarehouseCode())){
+            return AjaxResult.error("仓库编码不能为空!!");
+        }
+        if (StringUtils.isEmpty(inventoryDetail.getCompanyCode())){
+            return AjaxResult.error("货主编码不能为空!!");
+        }
+        //查询库存明细
+        LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper =Wrappers.lambdaQuery(inventoryDetail);
+        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(lambdaQueryWrapper);
+
+        //查询库存Header表
+        Map<Integer,InventoryHeader> inventoryHeaderList = new HashMap<>();//map防止出现数据重复
+        for (InventoryDetail inventoryDetail1:inventoryDetailList) {
+            LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper =Wrappers.lambdaQuery();
+            inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getId,inventoryDetail1.getInventoryHeaderId());
+            inventoryHeaderList.put(inventoryDetail1.getInventoryHeaderId(),inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper));
+        }
+
+        InventoryDomain inventoryDomain =new InventoryDomain();
+        inventoryDomain.setInventoryHeader(inventoryHeaderList);
+        inventoryDomain.setInventoryDetails(inventoryDetailList);
+        return AjaxResult.success(inventoryDomain);
+    }
+
+
+
+
+
+
+
 }
diff --git a/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java b/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java
new file mode 100644
index 0000000..3bb80f7
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java
@@ -0,0 +1,221 @@
+package com.huaheng.api.general.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.api.general.controller.ReceiptApi;
+import com.huaheng.api.general.domain.ReceiptDomain;
+import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
+import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
+import com.huaheng.pc.config.company.domain.Company;
+import com.huaheng.pc.config.company.service.CompanyService;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
+import com.huaheng.pc.config.receiptType.domain.ReceiptType;
+import com.huaheng.pc.config.receiptType.service.ReceiptTypeService;
+import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader;
+import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService;
+import com.huaheng.pc.config.supplier.domain.Supplier;
+import com.huaheng.pc.config.supplier.service.SupplierService;
+import com.huaheng.pc.config.warehouse.domain.Warehouse;
+import com.huaheng.pc.config.warehouse.service.WarehouseService;
+import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
+import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
+import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
+import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@Transactional
+public class ReceiptApiService {
+    @Resource
+    private ReceiptHeaderService receiptHeaderService;
+    @Resource
+    private ReceiptDetailService receiptDetailService;
+    @Resource
+    private ReceiptTypeService receiptTypeService;
+    @Resource
+    private WarehouseService warehouseService;
+    @Resource
+    private CompanyService companyService;
+    @Resource
+    private MaterialService materialService;
+    @Resource
+    private SupplierService supplierService;
+    @Resource
+    private FilterConfigDetailService filterConfigDetailService;
+    @Resource
+    private StatusFlowHeaderService statusFlowHeaderService;
+    /**
+     * 入库单下发
+     * @param receipt 入库单
+     * @return 是否下发成功
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult receipt(ReceiptDomain receipt){
+
+        /* 0.step 获取入库头表,获取入库明细*/
+        ReceiptHeader receiptHeader = receipt.getReceiptHeader();
+        List<ReceiptDetail> receiptDetails = receipt.getReceiptDetails();
+        /* 1.step 校验入库单是否为空*/
+        if (receiptHeader == null || receiptDetails.isEmpty()){
+            throw new ServiceException("入库主单或入库子单为空");
+        }
+        /* 2.step 检查入库头表合法性*/
+        AjaxResult checkReceiptHeaderResult = checkReceiptHeader(receiptHeader);
+        if (checkReceiptHeaderResult.hasErr() ){
+            return AjaxResult.error(checkReceiptHeaderResult.getMsg());
+        }
+
+        /* 3.step 检查入库明细合法性*/
+        AjaxResult checkReceiptDetailResult = checkReceiptDetail(receiptDetails);
+        if (checkReceiptDetailResult.hasErr() ){
+            return AjaxResult.error(checkReceiptDetailResult.getMsg());
+        }
+
+        /* 4.step 计算入库明细总行数、总数量*/
+        BigDecimal totalQty = new BigDecimal(0);
+        for (ReceiptDetail receiptDetail: receiptDetails) {
+            totalQty.add(receiptDetail.getTotalQty());
+        }
+        receiptHeader.setTotalLines(receiptDetails.size());
+        receiptHeader.setTotalQty(totalQty);
+
+        /* 5.step 保存的入库头表*/
+        if (!receiptHeaderService.save(receiptHeader)){
+            throw new ServiceException("保存入库头表失败");
+        }
+
+        /* 6.step 保存入库明细*/
+        LambdaQueryWrapper<ReceiptHeader> lambda = Wrappers.lambdaQuery();
+        lambda.eq(ReceiptHeader::getWarehouseCode, receiptHeader.getWarehouseCode())
+                .eq(ReceiptHeader::getCode, receiptHeader.getCode());
+        receiptHeader = receiptHeaderService.getOne(lambda);
+        List<ReceiptDetail> jsonListDetail= new ArrayList<ReceiptDetail>();
+        for (ReceiptDetail receiptDetail : receiptDetails) {
+            receiptDetail.setReceiptId(receiptHeader.getId());
+            receiptDetail.setReceiptCode(receiptHeader.getCode());
+            receiptDetail.setWarehouseCode(receiptHeader.getWarehouseCode());
+            receiptDetail.setCompanyCode(receiptHeader.getWarehouseCode());
+            Material material = materialService.findAllByCode(receiptDetail.getMaterialCode());
+            receiptDetail.setMaterialName(material.getName());
+            receiptDetail.setMaterialSpec(material.getSpec());
+            receiptDetail.setMaterialUnit(material.getUnit());
+            if (!receiptDetailService.save(receiptDetail)){
+                throw new ServiceException("保存入库明细失败");
+            }
+                jsonListDetail.add(receiptDetail);
+
+        }
+        /* 6.step回传入库单和入库明细单 */
+        ReceiptDomain receiptDomain =new ReceiptDomain();
+        receiptDomain.setReceiptHeader(receiptHeader);
+        receiptDomain.setReceiptDetails(jsonListDetail);
+
+        return AjaxResult.success(receiptDomain);
+    }
+
+    /**
+     * 检查入库头表合法性
+     * @param receiptHeader 入库头表
+     * @return 检查结果
+     */
+    private AjaxResult checkReceiptHeader(ReceiptHeader receiptHeader){
+        /* 0.step 必填项是否为空*/
+        if (StringUtils.isEmpty(receiptHeader.getCode()) || StringUtils.isEmpty(receiptHeader.getCompanyCode()) ||
+                StringUtils.isEmpty(receiptHeader.getWarehouseCode()) || StringUtils.isEmpty(receiptHeader.getReceiptType())){
+            return AjaxResult.error("入库主单字段有误");
+        }
+
+        /* 1.step 查询该单据编码是否已存在*/
+        LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambda = Wrappers.lambdaQuery(receiptHeader);
+        if (receiptHeaderService.getOne(receiptHeaderLambda) != null){
+            return AjaxResult.error("该单据已存在:"+receiptHeader.getCode());
+        }
+
+        /* 2.step 判断入库类型是否匹配*/
+        LambdaQueryWrapper<ReceiptType> receiptTypeLambda = Wrappers.lambdaQuery();
+        receiptTypeLambda.eq(ReceiptType::getCode, receiptHeader.getReceiptType())
+                         .eq(ReceiptType::getWarehouseCode,receiptHeader.getWarehouseCode())
+                          .eq(ReceiptType::getCompanyCode,receiptHeader.getCompanyCode());
+        if (receiptTypeService.getOne(receiptTypeLambda) == null){
+            return AjaxResult.error("没有对应的入库单类型");
+        }
+
+        /* 3.step 判断仓库是否存在*/
+        LambdaQueryWrapper<Warehouse> warehouseLambda = Wrappers.lambdaQuery();
+        warehouseLambda.eq(Warehouse::getCode, receiptHeader.getWarehouseCode());
+        if (warehouseService.getOne(warehouseLambda) == null){
+            return AjaxResult.error("该仓库不存在");
+        }
+
+        /* 4.step 判断货主是否存在*/
+        LambdaQueryWrapper<Company> companyLambda = Wrappers.lambdaQuery();
+        companyLambda.eq(Company::getCode, receiptHeader.getCompanyCode());
+        if (companyService.getOne(companyLambda) == null){
+            return AjaxResult.error("该货主不存在");
+        }
+
+        return AjaxResult.success("");
+    }
+
+    /**
+     * 检查入库明细合法性
+     * @param receiptDetails 入库明细
+     * @return 检查结果
+     */
+    private AjaxResult checkReceiptDetail(List<ReceiptDetail> receiptDetails){
+
+        for (ReceiptDetail receiptDetail: receiptDetails) {
+            /* 0.step 判断必填字段是否为空且总数量不能为0*/
+            if (receiptDetail.getMaterialCode() == null ||
+                    new BigDecimal(0).compareTo(receiptDetail.getTotalQty() != null ?
+                            receiptDetail.getTotalQty() : new BigDecimal(0)) == 0 ){
+                return AjaxResult.error("入库明细字段有误");
+            }
+
+            /* 1.step 判断供应商是否存在*/
+            if (receiptDetail.getSupplierCode() != null){
+                LambdaQueryWrapper<Supplier> supplierLambda = Wrappers.lambdaQuery();
+                supplierLambda.eq(Supplier::getCode, receiptDetail.getSupplierCode());
+                if (supplierService.getOne(supplierLambda) == null) {
+                    return AjaxResult.error("供应商不存在");
+                }
+            }
+
+            /* 2.step 判断定位规则是否存在*/
+            if (receiptDetail.getLocatingRule() != null){
+                LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
+                filterConfigDetailLambda.eq(FilterConfigDetail::getCode, receiptDetail.getLocatingRule())
+                        .eq(FilterConfigDetail::getModuleType, "receipt")
+                        .eq(FilterConfigDetail::getRecordType, "locationRule");
+                FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
+                if (filterConfigDetail == null){
+                    return AjaxResult.error(receiptDetail.getLocatingRule()+"定位规则不存在");
+                }
+            }
+
+            /* 3.step 判断流程编码是否存在*/
+            if (receiptDetail.getStatusFlowCode() != null){
+                LambdaQueryWrapper<StatusFlowHeader> statusFlowHeaderLambda = Wrappers.lambdaQuery();
+                statusFlowHeaderLambda.eq(StatusFlowHeader::getCode, receiptDetail.getStatusFlowCode())
+                        .eq(StatusFlowHeader::getModuleType, "receipt")
+                        .eq(StatusFlowHeader::getRecordType, "receivingFlow");
+                StatusFlowHeader statusFlowHeader = statusFlowHeaderService.getOne(statusFlowHeaderLambda);
+                if (statusFlowHeader == null){
+                    return AjaxResult.error(receiptDetail.getLocatingRule()+"该流程不存在");
+                }
+            }
+        }
+
+        return AjaxResult.success("");
+    }
+}
diff --git a/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java b/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java
new file mode 100644
index 0000000..d76c60a
--- /dev/null
+++ b/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java
@@ -0,0 +1,229 @@
+package com.huaheng.api.general.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.api.general.domain.ShipmentDomain;
+import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.company.domain.Company;
+import com.huaheng.pc.config.company.service.CompanyService;
+import com.huaheng.pc.config.customer.domain.Customer;
+import com.huaheng.pc.config.customer.service.CustomerServiceImpl;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
+import com.huaheng.pc.config.shipmentType.domain.ShipmentType;
+import com.huaheng.pc.config.shipmentType.service.ShipmentTypeService;
+import com.huaheng.pc.config.warehouse.domain.Warehouse;
+import com.huaheng.pc.config.warehouse.service.WarehouseService;
+import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
+import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
+import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
+import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author ricard
+ * @time   19/11/11
+ *
+ */
+
+
+@Component
+@Transactional
+public class ShipmentApiService {
+
+    @Autowired
+    private ShipmentHeaderService shipmentHeaderService;
+
+    @Autowired
+    private ShipmentDetailService shipmentDetailService;
+
+    @Autowired
+    private WarehouseService warehouseService;
+
+    @Autowired
+    private CompanyService companyService;
+
+    @Autowired
+    private CustomerServiceImpl customerService;
+
+    @Autowired
+    private ShipmentTypeService shipmentTypeService;
+
+    @Autowired
+    private MaterialService materialService;
+
+    /**
+     *  出库单下发
+     *
+     * @param shipmentDomain
+     * @return
+     */
+    @Transactional
+    public AjaxResult shipment(ShipmentDomain shipmentDomain){
+
+        //1、判断出库主单和子单列是否为空
+        ShipmentHeader shipmentHeader = shipmentDomain.getShipmentHeader();
+        List<ShipmentDetail> shipmentDetails = shipmentDomain.getShipmentDetails();
+        if(shipmentHeader == null){
+            return AjaxResult.error("出库主单为空");
+        }
+        if(shipmentDetails.size() < 1 || shipmentDetails == null ){
+            return AjaxResult.error("出库子单为空");
+        }
+
+        //2、检查出库主单的合法性
+        AjaxResult ajaxResult = this.checkShipmentHeader(shipmentHeader);
+
+        //3、检查出库子单的合法性
+        shipmentDetails =this.checkShipmentDetail(shipmentDetails,shipmentHeader);
+
+        //4、保存出库主表
+        BigDecimal totalQty = new BigDecimal(0);
+        for (ShipmentDetail item: shipmentDetails) {
+            totalQty.add(item.getShipQty());
+        }
+        shipmentHeader.setTotalLines(shipmentDetails.size());
+        shipmentHeader.setTotalQty(totalQty);
+        shipmentHeader.setCode(shipmentHeaderService.createCode(shipmentHeader.getShipmentType()));
+
+        if(!shipmentHeaderService.save(shipmentHeader)){
+            throw new ServiceException("保存出库主表失败");
+        }
+
+        //5、保存出库子表
+        List<ShipmentDetail> shipmentDetailList = new ArrayList<>();
+        for(ShipmentDetail shipmentDetail : shipmentDetails){
+            shipmentDetail.setShipmentId(shipmentHeader.getId());
+            shipmentDetail.setShipmentCode(shipmentHeader.getCode());
+            shipmentDetail.setWarehouseCode(shipmentHeader.getWarehouseCode());
+            shipmentDetail.setCompanyCode(shipmentHeader.getCompanyCode());
+        }
+
+        int num = 0;
+        if(shipmentDetails.size() >500 ){
+            for(ShipmentDetail item : shipmentDetails){
+                num++;
+                shipmentDetailList.add(item);
+                if(num % 500 ==0 || num == shipmentDetails.size()){
+                    if(!shipmentDetailService.insertDetails(shipmentDetailList)){
+                        throw new ServiceException("保存出库子表失败");
+                    }
+                    shipmentDetailList=new ArrayList<>();
+                }
+            }
+        }else {
+            if(!shipmentDetailService.insertDetails(shipmentDetails)){
+                throw new ServiceException("保存出库子表失败");
+            }
+        }
+
+        //6回传添加对象
+        LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper =Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(ShipmentDetail::getShipmentId ,shipmentHeader.getId());
+
+        ShipmentDomain jsonShipmentDomain =new ShipmentDomain();
+        jsonShipmentDomain.setShipmentHeader(shipmentHeader);
+        jsonShipmentDomain.setShipmentDetails(shipmentDetailService.list(lambdaQueryWrapper));
+
+        return AjaxResult.success(jsonShipmentDomain);
+    }
+
+
+    /**
+     * 检查出库主单的合法性
+     * @param shipmentHeader
+     * @return
+     */
+    public  AjaxResult checkShipmentHeader(ShipmentHeader shipmentHeader){
+        //1、判断仓库和货主
+        if(StringUtils.isEmpty(shipmentHeader.getWarehouseCode())){
+            return AjaxResult.error("仓库为空");
+        }
+        if(StringUtils.isEmpty(shipmentHeader.getCompanyCode())){
+            return AjaxResult.error("货主为空");
+        }
+
+
+        LambdaQueryWrapper<Warehouse> warehouseLamb = Wrappers.lambdaQuery();
+        warehouseLamb.eq(Warehouse::getCode,shipmentHeader.getWarehouseCode());
+        Warehouse warehouse =warehouseService.getOne(warehouseLamb);
+        if(warehouse == null){
+            return AjaxResult.error("wms没有此仓库");
+        }
+
+        LambdaQueryWrapper<Company> companyLamb = Wrappers.lambdaQuery();
+        companyLamb.eq(Company::getCode,shipmentHeader.getCompanyCode());
+        Company company =companyService.getOne(companyLamb);
+        if(company == null){
+            return AjaxResult.error("wms没有此货主");
+        }
+
+        //2、判断出库类型
+        LambdaQueryWrapper<ShipmentType> shipmentTypeLamb = Wrappers.lambdaQuery();
+        shipmentTypeLamb.eq(ShipmentType::getCode,shipmentHeader.getShipmentType())
+                    .eq(ShipmentType::getWarehouseCode,shipmentHeader.getWarehouseCode());
+        ShipmentType shipmentType =shipmentTypeService.getOne(shipmentTypeLamb);
+        if(shipmentType == null){
+            return AjaxResult.error("wms没有此出库类型");
+        }
+
+        //3、检查上游单号是否存在
+        LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLamb = Wrappers.lambdaQuery();
+        shipmentHeaderLamb.eq(ShipmentHeader::getWarehouseCode,shipmentHeader.getWarehouseCode())
+                .eq(ShipmentHeader::getReferCode,shipmentHeader.getReferCode());
+        List<ShipmentHeader> shipmentHeaders = shipmentHeaderService.list(shipmentHeaderLamb);
+        if(shipmentHeaders.size() > 0 || shipmentHeaders != null){
+            return AjaxResult.success("出库单已经下发");
+        }
+
+        //4、检查客户
+        if(StringUtils.isNotEmpty(shipmentHeader.getCustomerCode())){
+            LambdaQueryWrapper<Customer> customerLamb = Wrappers.lambdaQuery();
+            customerLamb.eq(Customer::getWarehouseCode,shipmentHeader.getWarehouseCode())
+                    .eq(Customer::getCode,shipmentHeader.getCustomerCode());
+            Customer customer = customerService.getOne(customerLamb);
+            if(customer == null){
+                return AjaxResult.error("wms没有此客户");
+            }
+        }
+        return AjaxResult.success(shipmentHeader);
+    }
+
+
+    /**
+     * 检查出库子单的合法性
+     * @param shipmentDetails
+     * @return
+     */
+    public  List<ShipmentDetail> checkShipmentDetail(List<ShipmentDetail> shipmentDetails,ShipmentHeader shipmentHeader){
+
+        for(ShipmentDetail shipmentDetail : shipmentDetails) {
+            //1、检查物料
+            if(StringUtils.isEmpty(shipmentDetail.getMaterialCode())){
+               throw new ServiceException("物料为空");
+            }
+            LambdaQueryWrapper<Material> materialLamb = Wrappers.lambdaQuery();
+            materialLamb.eq(Material::getCode,shipmentDetail.getMaterialCode())
+                .eq(Material::getWarehouseCode,shipmentHeader.getWarehouseCode());
+            Material material = materialService.getOne(materialLamb);
+            if(material == null){
+                throw new ServiceException("wms没有此物料");
+            }
+
+            //2、赋值物料属性
+            shipmentDetail.setMaterialName(material.getName());
+            shipmentDetail.setMaterialSpec(material.getSpec());
+            shipmentDetail.setMaterialUnit(material.getUnit());
+        }
+        return shipmentDetails;
+    }
+}
diff --git a/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java b/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
index e93e298..4acc564 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
@@ -1,15 +1,15 @@
 package com.huaheng.api.wcs.controller;
 
-import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.api.wcs.service.emptyOutHandle.EmptyOutHandleService;
-import com.huaheng.api.wcs.service.overrideHandle.OverrideHandleService;
 import com.huaheng.framework.aspectj.lang.annotation.Log;
 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
 import com.huaheng.framework.web.controller.BaseController;
 import com.huaheng.framework.web.domain.AjaxResult;
-import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/api/WCS/v2")
+@RequestMapping("/API/WMS/v2")
 public class EmptyOutHandle extends BaseController {
 
     @Resource
@@ -31,9 +31,9 @@ public class EmptyOutHandle extends BaseController {
     @PostMapping("/EmptyOutHandle")
     @ApiOperation("wcs空出处理")
     @ResponseBody
-    public AjaxResult EmptyOutHandle(@RequestBody WcsTask wcsTask)
+    public AjaxResult EmptyOutHandle(String taskNo)
     {
-        AjaxResult ajaxResult =emptyOutHandleService.EmptyOutHandle(wcsTask) ;
+        AjaxResult ajaxResult =emptyOutHandleService.EmptyOutHandle(taskNo) ;
         return ajaxResult;
     }
 
diff --git a/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java b/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
index c778985..1d3acd6 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
@@ -20,20 +20,18 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/api/WCS/v2")
+@RequestMapping("/API/WMS/v2")
 public class OverrideHandle extends BaseController {
 
     @Resource
     private OverrideHandleService overrideHandleService;
 
     @Log(title = "wcs重入处理", action = BusinessType.INSERT)
-    @PostMapping("/OverrideHandle")
+    @PostMapping("/ReenterHandle")
     @ApiOperation("wcs重入处理")
     @ResponseBody
-    public AjaxResult OverrideHandle(@RequestBody TaskFinishDomain taskFinishDomain)
-    {
-        AjaxResult ajaxResult =overrideHandleService.OverrideHandle(taskFinishDomain) ;
-        return ajaxResult;
+    public AjaxResult ReenterHandle(@RequestBody TaskFinishDomain taskFinishDomain) {
+        return overrideHandleService.OverrideHandle(taskFinishDomain);
     }
 
 
diff --git a/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java b/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
index 1806259..53f9194 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/api/WCS/v2")
+@RequestMapping("/API/WCS/v2")
 public class TaskFinish extends BaseController {
 
     @Resource
diff --git a/src/main/java/com/huaheng/api/wcs/controller/TaskInfoController.java b/src/main/java/com/huaheng/api/wcs/controller/TaskInfoController.java
new file mode 100644
index 0000000..24166ef
--- /dev/null
+++ b/src/main/java/com/huaheng/api/wcs/controller/TaskInfoController.java
@@ -0,0 +1,27 @@
+package com.huaheng.api.wcs.controller;
+
+import com.huaheng.api.wcs.service.taskCancel.TaskCancelService;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * Created by Enzo Cotter on 2019/12/6.
+ */
+@RestController
+@RequestMapping("/API/taskInfo")
+public class TaskInfoController extends BaseController {
+
+    @Resource
+    private TaskCancelService taskCancelService;
+
+
+    @GetMapping
+    public AjaxResult info(Integer id) {
+        return taskCancelService.TaskCance(id);
+    }
+}
diff --git a/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java b/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
index 9dcbb1c..eec6fe0 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/api/WCS/v2")
+@RequestMapping("/API/WMS/v2")
 public class WarecellAllocation extends BaseController {
 
     @Resource
@@ -31,10 +31,30 @@ public class WarecellAllocation extends BaseController {
     @PostMapping("/WarecellAllocation")
     @ApiOperation(value="wcs仓位分配", notes="wcs仓位分配", httpMethod = "POST")
     @ResponseBody
-    public AjaxResult WarecellAllocation(@RequestBody WcsTask wcsTask)
-    {
-        AjaxResult ajaxResult =warecellAllocationService.WarecellAllocation(wcsTask) ;
-        return ajaxResult;
+    public AjaxResult WarecellAllocation(String taskNo, String length, String width, String height, String weight, String destination) {
+        WcsTask wcsTask = new WcsTask();
+        wcsTask.setTaskNo(taskNo);
+        wcsTask.setLength(length);
+        wcsTask.setWidth(width);
+        wcsTask.setHeight(height);
+        wcsTask.setWeight(weight);
+        wcsTask.setDestination(destination);
+        return warecellAllocationService.warecellAllocation(wcsTask);
+    }
+
+
+    @Log(title = "wcs去向分配", action = BusinessType.INSERT)
+    @PostMapping("/DestinationAllocation")
+    @ApiOperation(value="wcs去向分配", notes="wcs去向分配", httpMethod = "POST")
+    @ResponseBody
+    public AjaxResult DestinationAllocation(String taskNo, String length, String width, String height, String weight) {
+        WcsTask wcsTask = new WcsTask();
+        wcsTask.setTaskNo(taskNo);
+        wcsTask.setLength(length);
+        wcsTask.setWidth(width);
+        wcsTask.setHeight(height);
+        wcsTask.setWeight(weight);
+        return warecellAllocationService.destinationAllocation(wcsTask);
     }
 
 
diff --git a/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java b/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java
index 2ba3544..7cacfe2 100644
--- a/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java
+++ b/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java
@@ -18,9 +18,10 @@ public class TaskFinishDomain {
     //空出,int,1:空出  0:正常,必填
     private Integer isEmptyOut;
 
+    //取货错,int,1:取货错  0:正常 必填
+    private Integer isForkError;
+
     //重入的库位编码,string (50),默认0,必填
     private String redirectionLocationCode;
 
-    //目的位置编码,string (50),默认0 ",必填
-    private String toLocationCode;
 }
diff --git a/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java b/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
index 3176255..837183a 100644
--- a/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
+++ b/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
@@ -30,6 +30,8 @@ public class WcsTask implements Serializable {
     //平台
     private String platform;
 
+    private String warehouseCode;
+
     //容器编码
     private String containerCode;
 
@@ -51,8 +53,8 @@ public class WcsTask implements Serializable {
     //优先级,int,默认100 ,数字越小优先级越高",必填
     private Integer priority;
 
-    //巷道
-    private String roadWay;
+    //目标
+    private String destination;
 
     //长
     private String length;
diff --git a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleService.java b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleService.java
index 069839a..7acda24 100644
--- a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleService.java
@@ -5,5 +5,5 @@ import com.huaheng.framework.web.domain.AjaxResult;
 
 public interface EmptyOutHandleService {
     //空出处理
-    AjaxResult EmptyOutHandle(WcsTask wcsTask);
+    AjaxResult EmptyOutHandle(String taskNo);
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
index ff615fb..edb095c 100644
--- a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
@@ -21,20 +21,20 @@ public class EmptyOutHandleServiceImpl implements EmptyOutHandleService {
      * 1、判断非空字段
      * 2、根据任务号查找任务
      * 3、修改该任务为空出,过后处理
-     * @param wcsTask
+     * @param taskNo
      * @return
      */
     @Override
     @Transactional
-    public AjaxResult EmptyOutHandle(WcsTask wcsTask) {
+    public AjaxResult EmptyOutHandle(String taskNo) {
 
         //1、判断非空字段
-        if(StringUtils.isEmpty(wcsTask.getTaskNo())){
+        if(StringUtils.isEmpty(taskNo)){
             return AjaxResult.error("任务号为空");
         }
 
         //2、根据任务号查找任务
-        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(wcsTask.getTaskNo()));
+        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(taskNo));
         if(taskHeader == null){
             return AjaxResult.error("任务号错误,没有找到该任务");
         }
diff --git a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
index 91f2b1e..07a89f7 100644
--- a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
@@ -3,7 +3,6 @@ package com.huaheng.api.wcs.service.overrideHandle;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.api.wcs.domain.TaskFinishDomain;
-import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.api.wcs.service.warecellAllocation.WarecellAllocationService;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
@@ -64,9 +63,6 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
         if(StringUtils.isEmpty(taskFinishDomain.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
-        if(StringUtils.isEmpty(taskFinishDomain.getToLocationCode())){
-            return AjaxResult.error("目的库位为空");
-        }
         if(StringUtils.isEmpty(taskFinishDomain.getRedirectionLocationCode())){
             return AjaxResult.error("重入的库位编码为空");
         }
diff --git a/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleService.java b/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleService.java
new file mode 100644
index 0000000..5303c4c
--- /dev/null
+++ b/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleService.java
@@ -0,0 +1,9 @@
+package com.huaheng.api.wcs.service.pickupErrorHandle;
+
+import com.huaheng.framework.web.domain.AjaxResult;
+
+public interface PickupErrorHandleService {
+
+    //取货错处理
+    AjaxResult PickupErrorHandle(String taskNo);
+}
diff --git a/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleServiceImpl.java
new file mode 100644
index 0000000..c6177e8
--- /dev/null
+++ b/src/main/java/com/huaheng/api/wcs/service/pickupErrorHandle/PickupErrorHandleServiceImpl.java
@@ -0,0 +1,52 @@
+package com.huaheng.api.wcs.service.pickupErrorHandle;
+
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class PickupErrorHandleServiceImpl implements PickupErrorHandleService {
+
+
+    @Autowired
+    private TaskHeaderService taskHeaderService;
+
+
+    /**
+     * 取货错处理
+     * 1、判断非空字段
+     * 2、根据任务号查找任务
+     * 3、修改该任务为取货错,过后处理
+     * @param taskNo
+     * @return
+     */
+    @Override
+    @Transactional
+    public AjaxResult PickupErrorHandle(String taskNo) {
+        //1、判断非空字段
+        if(StringUtils.isEmpty(taskNo)){
+            return AjaxResult.error("任务号为空");
+        }
+
+        //2、根据任务号查找任务
+        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(taskNo));
+        if(taskHeader == null){
+            return AjaxResult.error("任务号错误,没有找到该任务");
+        }
+        if(taskHeader.getStatus() == 100){
+            return AjaxResult.error("任务已完成");
+        }
+
+        //3、修改该任务为取货错,过后处理
+        taskHeader.setExceptionCode("取货错误");
+        Boolean flag = taskHeaderService.updateById(taskHeader);
+        if(flag == false){
+            return AjaxResult.error("修改任务失败,取货错处理失败");
+        }
+        return AjaxResult.success("取货错处理成功");
+    }
+}
diff --git a/src/main/java/com/huaheng/api/wcs/service/stationInfo/StationInfoServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/stationInfo/StationInfoServiceImpl.java
index 4292c3e..9b645f5 100644
--- a/src/main/java/com/huaheng/api/wcs/service/stationInfo/StationInfoServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/stationInfo/StationInfoServiceImpl.java
@@ -11,6 +11,11 @@ import com.huaheng.pc.config.address.service.AddressService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class StationInfoServiceImpl implements StationInfoService {
 
@@ -34,13 +39,15 @@ public class StationInfoServiceImpl implements StationInfoService {
         }
 
         //2、实体转换
-        WcsTask wcsTask =new WcsTask();
-        wcsTask.setStation(station);
+        Map<String , List> map =new HashMap<>();
+        List list = new ArrayList();
+        list.add(station);
+        map.put("port",list);
 
         //3、发送数据
         String param="wcs";
         String url=addressService.selectAddress(param)+"StationInfo";
-        String JsonParam = JSON.toJSONString(wcsTask);
+        String JsonParam = JSON.toJSONString(map);
         String result = HttpUtils.bodypost(url, JsonParam);
         if(StringUtils.isEmpty(result)){
             throw new ServiceException("接口地址错误");
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
index bde0822..19b4ab0 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
@@ -9,6 +9,7 @@ import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.http.HttpUtils;
+import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.config.address.service.AddressService;
 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
@@ -89,7 +90,9 @@ public class TaskAssignServiceImpl implements TaskAssignService {
 
         //3、转换实体,初始化wcs任务实体
         WcsTask wcsTask = new WcsTask();
+//        wcsTask.setWarehouseCode(ShiroUtils.getWarehouseCode());
         wcsTask.setTaskNo(taskHeader.getId().toString());
+        wcsTask.setWarehouseCode("XT0001");
         wcsTask.setPreTaskNo("0");
         wcsTask.setTaskType(taskHeader.getTaskType().toString());
         wcsTask.setFromPort("1000");
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
index 5bf9238..b53f6ee 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
@@ -1,6 +1,5 @@
 package com.huaheng.api.wcs.service.taskCancel;
 
-import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.framework.web.domain.AjaxResult;
 
 public interface TaskCancelService {
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
index 027dd51..12a37ef 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
@@ -34,13 +34,13 @@ public class TaskCancelServiceImpl implements TaskCancelService {
 
 
         //2、转换实体
-        WcsTask wcsTask = new WcsTask();
-        wcsTask.setTaskNo(id.toString());
+//        WcsTask wcsTask = new WcsTask();
+//        wcsTask.setTaskNo(id.toString());
 
         //3、发送数据
         String param="wcs";
         String url=addressService.selectAddress(param)+"TaskCancel";
-        String JsonParam = JSON.toJSONString(wcsTask);
+        String JsonParam = JSON.toJSONString(id.toString());
         String result = HttpUtils.bodypost(url, JsonParam);
         if(StringUtils.isEmpty(result)){
             throw new ServiceException("接口地址错误");
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
index 6355658..832e478 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
@@ -3,6 +3,8 @@ package com.huaheng.api.wcs.service.taskFinish;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.api.wcs.domain.TaskFinishDomain;
+import com.huaheng.api.wcs.service.emptyOutHandle.EmptyOutHandleService;
+import com.huaheng.api.wcs.service.overrideHandle.OverrideHandleService;
 import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
@@ -16,6 +18,10 @@ public class TaskFinishServiceImpl implements TaskFinishService {
 
     @Autowired
     private TaskHeaderService taskHeaderService;
+    @Autowired
+    private EmptyOutHandleService emptyOutHandleService;
+    @Autowired
+    private OverrideHandleService overrideHandleService;
 
     //任务完成
     @Override
@@ -24,22 +30,23 @@ public class TaskFinishServiceImpl implements TaskFinishService {
         if(StringUtils.isEmpty(taskFinishDomain.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
+
+        //1、空出处理
         if(taskFinishDomain.getIsEmptyOut() == 1){
-            LambdaQueryWrapper<TaskHeader> lam = Wrappers.lambdaQuery();
-            lam.eq(TaskHeader::getId,Integer.valueOf(taskFinishDomain.getTaskNo()));
-            TaskHeader taskHeader = taskHeaderService.getOne(lam);
-            if(taskHeader == null){
-                return AjaxResult.error("wms系统没有此任务号");
-            }
-            if(StringUtils.isEmpty(taskHeader.getExceptionCode())) {
-                taskHeader.setExceptionCode("空托出库");
-                Boolean flag = taskHeaderService.updateById(taskHeader);
-                if (flag == false) {
-                    return AjaxResult.error("修改任务失败,空出处理失败");
-                }
-            }
-            return AjaxResult.success("成功");
+            ajaxResult = emptyOutHandleService.EmptyOutHandle(taskFinishDomain.getTaskNo());
+        }
+
+        //2、重入处理
+        if(taskFinishDomain.getIsDoubleIn() == 1){
+            ajaxResult = overrideHandleService.OverrideHandle(taskFinishDomain);
         }
+
+        //3、取货错
+        if(taskFinishDomain.getIsForkError() == 1){
+
+        }
+
+        //任务完成
         try{
             ajaxResult=taskHeaderService.completeTaskByWMS(Convert.toIntArray(taskFinishDomain.getTaskNo()));
         } catch (Exception e) {
diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationService.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationService.java
index 5527afd..7f0ac35 100644
--- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationService.java
@@ -6,8 +6,11 @@ import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDeta
 
 public interface WarecellAllocationService {
 
-    //仓位分配
-    AjaxResult WarecellAllocation(WcsTask wcsTask);
+    /**仓位分配*/
+    AjaxResult warecellAllocation(WcsTask wcsTask);
 
     String taskPositioning(ReceiptContainerDetail receiptContainerDetail);
+
+    //去向分配
+    AjaxResult destinationAllocation(WcsTask wcsTask);
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
index c874a1e..dc811a8 100644
--- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
@@ -2,7 +2,6 @@ package com.huaheng.api.wcs.service.warecellAllocation;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
@@ -31,7 +30,8 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
 import org.springframework.stereotype.Service;
-
+import org.springframework.transaction.annotation.Transactional;
+import com.huaheng.api.wcs.domain.WcsTask;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
@@ -74,14 +74,15 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
      * @return
      */
     @Override
-    public AjaxResult WarecellAllocation(WcsTask wcsTask) {
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult warecellAllocation(WcsTask wcsTask) {
 
         //1、判断非空字段
         if(StringUtils.isEmpty(wcsTask.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
-        if(StringUtils.isEmpty(wcsTask.getRoadWay())){
-            return AjaxResult.error("巷道为空");
+        if(StringUtils.isEmpty(wcsTask.getDestination())){
+            return AjaxResult.error("目的为空");
         }
         if(StringUtils.isNull(wcsTask.getLength())){
             return AjaxResult.error("长为空");
@@ -114,6 +115,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
         taskDetailLambda.eq(TaskDetail::getTaskId, wcsTask.getTaskNo());
         List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambda);
 
+        /* 循环查询入库组盘明细*/
         List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
         for (TaskDetail taskDetail : taskDetailList) {
             receiptContainerDetailList.add(receiptContainerDetailService.getById(taskDetail.getAllocationId()));
@@ -121,13 +123,15 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
         //去重
         receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList());
 
+        /* 循环入库组盘明细,重新分配库位*/
         for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
             ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId());
 
             String locatingRule = this.taskPositioning(receiptContainerDetail);
 
             LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
-            filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule);
+            filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule)
+                .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
             FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
             String[] locatingRules = filterConfigDetail.getStatement().split("limit");
 
@@ -136,7 +140,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
             locationLambda.last(locatingRules[0]);
             List<Location> locationList = locationService.list(locationLambda);
 //            locationList.stream().filter(location -> location.getLocationType().equals(locationTypeList.get(0)));
-            locationCode = filter(locationList, locationTypeList, wcsTask.getRoadWay());
+            locationCode = filter(locationList, locationTypeList, wcsTask.getDestination());
             if (StringUtils.isEmpty(locationCode)){
                 throw new ServiceException("没有库位可分配");
             }
@@ -155,13 +159,13 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
 
             //把库位编码赋到该入库组盘头表下的所有明细
             LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery();
-            lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId());
+            lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId())
+                .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
             List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda);
             for (ReceiptContainerDetail receiptContainerDetail2: receiptContainerDetails) {
                 receiptContainerDetail2.setLocationCode(locationCode);
                 if (!receiptContainerDetailService.updateById(receiptContainerDetail2)){throw new ServiceException("更新库位编码到入库组盘明细");}
             }
-
         }
 
         if (StringUtils.isNotEmpty(locationCode)){
@@ -175,9 +179,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
 
             taskHeader.setToLocation(locationCode);
             if (!taskHeaderService.updateById(taskHeader)){throw new ServiceException("更新任务头表目标库位失败");}
-            WcsTask wcsTaskResult = new WcsTask();
-            wcsTaskResult.setToLocationCode(locationCode);
-            return AjaxResult.success(wcsTaskResult);
+            return AjaxResult.success(locationCode);
         }
 
         return AjaxResult.error("错误");
@@ -233,7 +235,8 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
                                 .eq(ConfigValue::getRecordType, "入库首选项");
                         ConfigValue configValue = configValueService.getOne(configValueLambda);
                         LambdaQueryWrapper<ReceiptPreference> receiptPreferenceLambda = Wrappers.lambdaQuery();
-                        receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue());
+                        receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue())
+                                .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode());
                         ReceiptPreference receiptPreference = receiptPreferenceService.getOne(receiptPreferenceLambda);
                         locatingRule = receiptPreferenceService.getOne(receiptPreferenceLambda).getLocationRule();
                     }
@@ -247,4 +250,90 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
 
         return locatingRule;
     }
-}
+
+
+    /**
+     *  去向分配
+     */
+    @Override
+    public AjaxResult destinationAllocation(WcsTask wcsTask) {
+
+        //1、判断非空字段
+        if(StringUtils.isEmpty(wcsTask.getTaskNo())){
+            return AjaxResult.error("任务号为空");
+        }
+        if(StringUtils.isNull(wcsTask.getLength())){
+            return AjaxResult.error("长为空");
+        }
+        if(StringUtils.isNull(wcsTask.getWidth())){
+            return AjaxResult.error("宽为空");
+        }
+        if(StringUtils.isNull(wcsTask.getHeight())){
+            return AjaxResult.error("高为空");
+        }
+        if(StringUtils.isNull(wcsTask.getWeight())){
+            return AjaxResult.error("重为空");
+        }
+
+        //查询满足条件的库位类型
+        LambdaQueryWrapper<LocationType> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.gt(LocationType::getLength,wcsTask.getLength())
+                .gt(LocationType::getWidth, wcsTask.getWidth())
+                .gt(LocationType::getHeight, wcsTask.getHeight())
+                .gt(LocationType::getMaxWeight, wcsTask.getWidth());
+        List<LocationType> locationTypeList = locationTypeService.list(lambdaQueryWrapper);
+
+        if (locationTypeList.isEmpty()){
+            return AjaxResult.error("没有区域可分配");
+        }
+        List<String> codeList = new ArrayList<>();
+        for (LocationType locationType: locationTypeList) {
+            codeList.add(locationType.getCode());
+        }
+
+        //定位库位List
+        List<String> positioningLocationCodeList = null;
+        //查询任务明细
+        LambdaQueryWrapper<TaskDetail> taskDetailLambda = Wrappers.lambdaQuery();
+        taskDetailLambda.eq(TaskDetail::getTaskId, wcsTask.getTaskNo());
+        List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambda);
+
+        /* 循环查询入库组盘明细*/
+        List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
+        for (TaskDetail taskDetail : taskDetailList) {
+            receiptContainerDetailList.add(receiptContainerDetailService.getById(taskDetail.getAllocationId()));
+        }
+        //去重
+        receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList());
+
+        for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
+            String locatingRule = this.taskPositioning(receiptContainerDetail);
+
+            LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
+            filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule)
+                    .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
+            FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
+            String[] locatingRules = filterConfigDetail.getStatement().split("limit");
+
+            //根据定位规则查询库位编码
+            LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
+            locationLambda.last(locatingRules[0]);
+            List<Location> locationList = locationService.list(locationLambda);
+            List<String> locationCodeList = locationTypeList.stream().map(t-> t.getCode()).collect(Collectors.toList());
+            List<Location> newLocation = locationList.stream().filter(t-> locationCodeList.contains(t.getLocationType())).collect(Collectors.toList());
+            if (!newLocation.isEmpty()){
+                positioningLocationCodeList.add(newLocation.get(0).getCode());
+            }
+
+            if (StringUtils.isEmpty(positioningLocationCodeList)){
+                throw new ServiceException("没有区域可分配");
+            }
+        }
+
+        LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
+        locationLambdaQueryWrapper.eq(Location::getCode, positioningLocationCodeList.get(0));
+        Location location = locationService.getOne(locationLambdaQueryWrapper);
+        String destinationArea = location.getRoadway();
+        return AjaxResult.success(destinationArea);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/common/constant/QuantityConstant.java b/src/main/java/com/huaheng/common/constant/QuantityConstant.java
index 252a0fe..c5cfcd0 100644
--- a/src/main/java/com/huaheng/common/constant/QuantityConstant.java
+++ b/src/main/java/com/huaheng/common/constant/QuantityConstant.java
@@ -348,5 +348,9 @@ public class QuantityConstant {
     //在库抽检
     public static final Integer CHECK_TYPE_SELECT = 300;
 
+    //空货架
+    public static final Integer POINTS_EMPTY = 0;
 
+    //非空货架
+    public static final Integer POINTS_SOME = 1;
 }
diff --git a/src/main/java/com/huaheng/common/jasper/DocType.java b/src/main/java/com/huaheng/common/jasper/DocType.java
new file mode 100644
index 0000000..6956c15
--- /dev/null
+++ b/src/main/java/com/huaheng/common/jasper/DocType.java
@@ -0,0 +1,14 @@
+package com.huaheng.common.jasper;
+
+/**
+ *  定义了报表输出类型,固定了可输出类型
+ * @author ricard
+ * @date    19/11/21
+ *
+ */
+
+public enum DocType {
+
+    PDF, HTML, XLS, XLSX, XML, RTF, CSV, TXT, DOC
+
+}
diff --git a/src/main/java/com/huaheng/common/jasper/DocTypeUtil.java b/src/main/java/com/huaheng/common/jasper/DocTypeUtil.java
new file mode 100644
index 0000000..a2749dd
--- /dev/null
+++ b/src/main/java/com/huaheng/common/jasper/DocTypeUtil.java
@@ -0,0 +1,42 @@
+package com.huaheng.common.jasper;
+
+
+/**
+ *  格式工具类
+ * @author ricard
+ * @date   19/11/21
+ *
+ */
+public class DocTypeUtil {
+    /**
+     * 默认类型PDF
+     * @param  docType
+     * @return
+     *
+     */
+
+    public  static DocType getEnumDocType(String docType){
+        //默认PDF
+        DocType type = DocType.PDF;
+        docType = docType.toUpperCase();
+
+        if(docType.equals("DOC")){
+            type =DocType.DOC;
+        } else if (docType.equals("XLS")) {
+            type = DocType.XLS;
+        } else if(docType.equals("XLSX")) {
+            type = DocType.XLSX;
+        }else if (docType.equals("XML")) {
+            type = DocType.XML;
+        } else if (docType.equals("RTF")) {
+            type = DocType.RTF;
+        } else if (docType.equals("CSV")) {
+            type = DocType.CSV;
+        } else if (docType.equals("HTML")) {
+            type = DocType.HTML;
+        } else if (docType.equals("TXT")) {
+            type = DocType.TXT;
+        }
+        return type;
+    }
+}
diff --git a/src/main/java/com/huaheng/common/jasper/JasperreportUtils.java b/src/main/java/com/huaheng/common/jasper/JasperreportUtils.java
new file mode 100644
index 0000000..62b9a61
--- /dev/null
+++ b/src/main/java/com/huaheng/common/jasper/JasperreportUtils.java
@@ -0,0 +1,497 @@
+package com.huaheng.common.jasper;
+
+import net.sf.jasperreports.engine.*;
+import net.sf.jasperreports.engine.export.*;
+import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
+import net.sf.jasperreports.engine.fill.JRFileVirtualizer;
+import net.sf.jasperreports.export.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.*;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *  报表工具类
+ * @author ricard
+ * @date   19/11/21
+ *
+ */
+public class JasperreportUtils {
+
+
+
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(JasperreportUtils.class);
+    private HttpServletRequest request;
+    private HttpServletResponse response;
+    private HttpSession session;
+
+    public JasperreportUtils(HttpServletRequest request, HttpServletResponse response, HttpSession session){
+        super();
+        this.request = request;
+        this.response =response;
+        this.session =request.getSession();
+    }
+
+
+
+    /**
+     * datasource与parameters填充报表
+     *
+     * @param jasperPath
+     * @param dataSource
+     * @param parameters
+     * @return
+     * @throws JRException
+     */
+    public JasperPrint getJasperPrint(String jasperPath, Map<String, Object> parameters, JRDataSource dataSource)
+            throws JRException {
+
+        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, dataSource);
+        return jasperPrint;
+    }
+
+    /**
+     * connection与parameters填充报表
+     *
+     * @param jasperPath
+     * @param conn
+     * @param parameters
+     * @return
+     * @throws JRException
+     */
+    public JasperPrint getJasperPrint(String jasperPath, Map<String, Object> parameters, Connection conn)
+            throws JRException {
+
+        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, conn);
+        return jasperPrint;
+    }
+
+    /**
+     * 传入list获取jasperPrint
+     *
+     * @param jasperPath
+     * @param parameters
+     * @param list
+     * @return
+     * @throws JRException
+     */
+//    public JasperPrint getJasperPrintWithBeanList(String jasperPath, Map<String, Object> parameters, List<?> list)
+//            throws JRException,SQLException {
+//        JRDataSource jrDataSource = null;
+//        JasperPrint jasperPrint =new JasperPrint();
+//        if(null != list && list.size()> 0) {
+//            jrDataSource = new JRBeanCollectionDataSource(list);
+//            jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, jrDataSource);
+//        }else {
+//            jasperPrint = JasperFillManager.fillReport(jasperPath, parameters, connection);
+//        }
+//        return jasperPrint;
+//    }
+
+
+
+    /**
+     * 获得相应类型的Content type
+     *
+     * @param docType
+     * @return
+     */
+    public String getContentType(DocType docType) {
+        String contentType = "text/html";
+        switch (docType) {
+            case PDF:
+                contentType = "application/pdf";
+                break;
+            case XLS:
+                contentType = "application/vnd.ms-excel";
+                break;
+            case XLSX:
+                contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+                break;
+            case XML:
+                contentType = "text/xml";
+                break;
+            case RTF:
+                contentType = "application/rtf";
+                break;
+            case CSV:
+                contentType = "text/plain";
+                break;
+            case DOC:
+                contentType = "application/msword";
+                break;
+        }
+        return contentType;
+    }
+
+    /**
+     * jrxml文件 编译为 jasper文件
+     *
+     * @param jrxmlPath
+     * @param jasperPath
+     * @throws JRException
+     */
+    public void jrxmlToJsper(String jrxmlPath, String jasperPath) throws JRException {
+
+        JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
+
+    }
+
+
+    /**
+     * 生成html文件
+     * @param response
+     * @param connection
+     * @param jasperPath
+     * @param fileName
+     * @param parameters
+     * @return
+     */
+    public String createHtml(HttpServletResponse response, Connection connection, String jasperPath, String fileName,
+                             Map<String, Object> parameters, String folder) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
+        String dpath = sdf.format(new Date());
+        String path = "D:"+"/reportHtml" + folder + "/" + dpath;
+        File file = new File(path);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        String htmlFilePath = path + "/" + fileName;
+        try {
+
+            JasperPrint jasperPrint = this.getJasperPrint(jasperPath,parameters,connection);
+            JasperExportManager.exportReportToHtmlFile(jasperPrint, htmlFilePath);
+
+        } catch (Exception ex) {
+            LOGGER.error("生成html文件错误"+ex.getMessage(),ex);
+        }
+        return folder + "/" + dpath + "/" + fileName;
+    }
+
+    /**
+     * 传入类型,获取输出器
+     *
+     * @param docType
+     * @return
+     */
+    @SuppressWarnings("deprecation")
+    public JRAbstractExporter getJRExporter(DocType docType) {
+        JRAbstractExporter exporter = null;
+        switch (docType) {
+            case PDF:
+                exporter = new JRPdfExporter();
+                break;
+            case HTML:
+                exporter = new HtmlExporter();
+                break;
+            case XLS:
+                exporter = new JRXlsExporter();
+                break;
+            case XLSX:
+                exporter = new JRXlsxExporter();
+                break;
+            case XML:
+                exporter = new JRXmlExporter();
+                break;
+            case RTF:
+                exporter = new JRRtfExporter();
+                break;
+            case CSV:
+                exporter = new JRCsvExporter();
+                break;
+            case DOC:
+                exporter = new JRRtfExporter();
+                break;
+            case TXT:
+                exporter = new JRTextExporter();
+                break;
+        }
+        return exporter;
+    }
+
+
+    /**
+     * 生成不同格式报表文档(带缓存)
+     *
+     * @param docType
+     *            文档类型
+     * @param jasperPath
+     */
+    @SuppressWarnings("deprecation")
+    public void createExportDocument(DocType docType, String jasperPath, Map<String, Object> parameters,
+                                     String fileName,Connection connection) throws JRException, IOException, ServletException, SQLException {
+
+        //1、传入类型,获取输出器
+        JRAbstractExporter exporter = getJRExporter(docType);
+
+        // 2、获取后缀
+        String ext = docType.toString().toLowerCase();
+
+        if (!fileName.toLowerCase().endsWith(ext)) {
+            fileName += "." + ext;
+        }
+
+
+        // 3、判断资源类型
+        if (ext.equals("xls")) {
+            SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
+            // 删除记录最下面的空行
+            configuration.setRemoveEmptySpaceBetweenRows(Boolean.TRUE);
+            // 一页一个sheet
+            configuration.setOnePagePerSheet(Boolean.FALSE);
+            // 显示边框  背景白色
+            configuration.setWhitePageBackground(Boolean.FALSE);
+            exporter.setConfiguration(configuration);
+        }
+        if(ext.equals("xlsx")) {
+            SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
+            configuration.setRemoveEmptySpaceBetweenRows(Boolean.TRUE);
+            configuration.setRemoveEmptySpaceBetweenColumns(Boolean.TRUE);
+            configuration.setWhitePageBackground(Boolean.FALSE);
+            //自动选择格式
+            configuration.setDetectCellType(Boolean.TRUE);
+            exporter.setConfiguration(configuration);
+        }
+        if (ext.equals("txt")) {
+            SimpleTextReportConfiguration configuration = new SimpleTextReportConfiguration();
+            configuration.setCharWidth((float)8);
+            configuration.setCharHeight((float)15);
+            exporter.setConfiguration(configuration);
+        }
+
+        //4、设置格式和头
+        response.setContentType(getContentType(docType));
+        response.setHeader("Content-Disposition",
+                "attachment; filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
+
+        //5、加缓存
+        JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "D:/temp");
+        parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
+        virtualizer.setReadOnly(true);
+
+        //6、连接数据库获取jasperPrint
+        exporter.setExporterInput(new SimpleExporterInput(getJasperPrint(jasperPath, parameters, connection)));
+		/*exporter.setParameter(JRExporterParameter.JASPER_PRINT,
+				getJasperPrintWithBeanList(jasperPath, parameters, list));*/
+
+        OutputStream outStream = null;
+        PrintWriter outWriter = null;
+
+        // 7、解决中文乱码问题
+        response.setCharacterEncoding("UTF-8");
+        if (ext.equals("csv") || ext.equals("doc") || ext.equals("rtf") || ext.equals("txt")) {
+            outWriter = response.getWriter();
+            SimpleWriterExporterOutput outPut = new SimpleWriterExporterOutput(outWriter);
+            exporter.setExporterOutput(outPut);
+            //exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, outWriter);
+        } else {
+            if(ext.equals("xml")) {
+                outWriter = response.getWriter();
+                XmlExporterOutput outPut  = new SimpleXmlExporterOutput(outWriter);
+                exporter.setExporterOutput(outPut);
+            }else if(ext.equals("html")){
+                outWriter = response.getWriter();
+                HtmlExporterOutput outPut = new SimpleHtmlExporterOutput(outWriter);
+                exporter.setExporterOutput(outPut);
+            }else {
+                outStream = response.getOutputStream();
+                exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outStream));
+            }
+        }
+        try {
+            exporter.exportReport();
+            virtualizer.cleanup();
+        } catch (JRException e) {
+            throw new ServletException(e);
+        } finally {
+            if (outStream != null) {
+                try {
+                    outStream.close();
+                } catch (IOException ex) {
+                }
+            }
+            if(outWriter != null) {
+                outWriter.close();
+            }
+        }
+    }
+
+
+    /**
+     * 输出以分页的形式输出html
+     * @param jasperPrint
+     * @param pageStr
+     * @throws JRException
+     * @throws IOException
+     */
+
+    public void createHtmlByPage(JasperPrint jasperPrint,String pageStr) throws JRException, IOException {
+        int pageIndex = 0;
+        int lastPageIndex = 0;
+
+        HtmlExporter exporter = new HtmlExporter();
+        if(null != jasperPrint.getPages()) {
+            lastPageIndex = jasperPrint.getPages().size() - 1;
+        }
+
+        if(null == pageStr) {
+            pageStr = "0";
+        }
+        try {
+            pageIndex = Integer.valueOf(pageStr);
+            if(pageIndex > 0) {
+                pageIndex = pageIndex -1 ;
+            }
+        } catch (Exception e) {
+            // 如果得到的非数字字符串
+            if("lastPage".equals(pageStr)) {
+                pageIndex = lastPageIndex;
+            }
+        }
+
+        if (pageIndex < 0) {
+            pageIndex = 0;
+        }
+        if (pageIndex > lastPageIndex) {
+            pageIndex = lastPageIndex;
+        }
+        response.setCharacterEncoding("UTF-8");
+        try {
+            PrintWriter out = response.getWriter();
+            exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
+
+            SimpleHtmlReportConfiguration configuration =  new SimpleHtmlReportConfiguration();
+            configuration.setPageIndex(pageIndex);
+            exporter.setConfiguration(configuration);
+            //exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
+
+            HtmlExporterOutput outPut = new SimpleHtmlExporterOutput(out);
+            exporter.setExporterOutput(outPut);
+
+            exporter.exportReport();
+        } catch (Exception e) {
+
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 批量打印pdf文件
+     */
+    public void exportBatchPdf(List<JasperPrint> jasperPrintList,String fileName) {
+
+        JRPdfExporter exporter =  new JRPdfExporter();
+        try {
+            /**
+             * 注入打印模板
+             */
+            exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
+
+            OutputStream outStream = null;
+
+            response.setContentType(getContentType(DocType.PDF));
+            response.setHeader("Content-Disposition",
+                    "attachment; filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
+            outStream = response.getOutputStream();
+
+            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outStream));
+            //配置项
+            SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
+            // 是否批量打印
+            configuration.setCreatingBatchModeBookmarks(true);
+            // 是否加密
+            configuration.setEncrypted(false);
+            exporter.setConfiguration(configuration);
+
+            exporter.exportReport();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+
+    /**
+     * 千分位格式化数据 保留两位小数,且 ‘0 ’ 转为 ‘--’
+     *
+     * @param obj
+     * @param fieldNames
+     *            需转化的属性
+     * @return
+     */
+    public Object toFormatNumber(Object obj, String[] fieldNames) {
+        Class clazz = (Class) obj.getClass();
+        Field[] fs = clazz.getDeclaredFields();
+        for (int i = 0; i < fs.length; i++) {
+            Field f = fs[i];
+            // 设置些属性是可以访问的
+            f.setAccessible(true);
+            String type = f.getType().toString();
+            Object val = null;
+
+            try {
+                for (String str : fieldNames) {
+                    if (f.getName() == str) {
+                        val = f.get(obj);
+                    }
+                }
+                if (null != val) {
+                    if (type.endsWith("String")) {
+                        if (val.equals("0")) {
+                            f.set(obj, "--");
+                        } else {
+                            /*
+                             * ; BigDecimal str=new BigDecimal((String) val); DecimalFormat df=new
+                             * DecimalFormat(",###,##0.00");
+                             */ // 保留两位小数
+                            f.set(obj, this.toNumeber((String) val));
+                        }
+
+                    } else if (type.endsWith("int") || type.endsWith("Integer")) {
+                        // System.out.println(f.getType()+"\t");
+                    } else {
+                        // System.out.println(f.getType()+"\t");
+                    }
+                }
+
+            } catch (Exception ex) {
+                LOGGER.error("千分位格式化数据错误"+ex.getMessage(), ex);
+            }
+        }
+        return obj;
+    }
+
+    /**
+     * 转为万元保留小数点后两位
+     *
+     * @param value
+     * @return
+     */
+    private String toNumeber(String value) {
+        Double number = Double.valueOf(value) / 10000.00;
+        BigDecimal str = new BigDecimal(number);
+        DecimalFormat df = new DecimalFormat(",###,##0.00");
+
+        return df.format(str);
+    }
+
+
+}
diff --git a/src/main/java/com/huaheng/framework/config/SwaggerConfig.java b/src/main/java/com/huaheng/framework/config/SwaggerConfig.java
index bb00761..fc53cb5 100644
--- a/src/main/java/com/huaheng/framework/config/SwaggerConfig.java
+++ b/src/main/java/com/huaheng/framework/config/SwaggerConfig.java
@@ -36,7 +36,7 @@ public class SwaggerConfig
                 .apiInfo(apiInfo())
                 .select()
                 // 指定当前包路径
-                .apis(RequestHandlerSelectors.basePackage("com.huaheng.pc"))
+                .apis(RequestHandlerSelectors.basePackage("com.huaheng.api"))
                 // 扫描所有 .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 .build();
diff --git a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
index 5de586f..74ab44f 100644
--- a/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
+++ b/src/main/java/com/huaheng/pc/config/FilterConfigHeader/service/FilterConfigHeaderService.java
@@ -9,6 +9,7 @@ import com.huaheng.pc.config.FilterConfigDetail.mapper.FilterConfigDetailMapper;
 import com.huaheng.pc.config.FilterConfigHeader.domain.FilterConfigHeader;
 import com.huaheng.pc.config.FilterConfigHeader.mapper.FilterConfigHeaderMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -34,6 +35,7 @@ public class FilterConfigHeaderService extends ServiceImpl<FilterConfigHeaderMap
 
 
     //复制规则配置
+    @Transactional
     public Boolean filterConfigCopy(String code,String newCode){
         int i = 0;
         //复制规则配置主表
diff --git a/src/main/java/com/huaheng/pc/config/address/domain/Address.java b/src/main/java/com/huaheng/pc/config/address/domain/Address.java
index 5ee9376..bfc3157 100644
--- a/src/main/java/com/huaheng/pc/config/address/domain/Address.java
+++ b/src/main/java/com/huaheng/pc/config/address/domain/Address.java
@@ -33,6 +33,13 @@ public class Address implements Serializable {
     private String warehouseCode;
 
     /**
+     * 编号
+     */
+    @TableField(value = "number")
+    @ApiModelProperty(value="编号")
+    private Integer number;
+
+    /**
      * 参数
      */
     @TableField(value = "param")
@@ -62,6 +69,14 @@ public class Address implements Serializable {
         this.warehouseCode = warehouseCode;
     }
 
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
     public String getParam() {
         return param;
     }
diff --git a/src/main/java/com/huaheng/pc/config/address/service/AddressServiceImpl.java b/src/main/java/com/huaheng/pc/config/address/service/AddressServiceImpl.java
index 9d36f2f..d46ce7f 100644
--- a/src/main/java/com/huaheng/pc/config/address/service/AddressServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/address/service/AddressServiceImpl.java
@@ -10,6 +10,7 @@ import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.pc.config.address.domain.Address;
 import com.huaheng.pc.config.address.mapper.AddressMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -42,6 +43,7 @@ public class AddressServiceImpl extends ServiceImpl<AddressMapper, Address> impl
      * @return 是否复制成功
      */
     @Override
+    @Transactional
     public Boolean addressCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复制地址表");
         LambdaQueryWrapper<Address> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java b/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java
index 656e44d..4236fff 100644
--- a/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java
+++ b/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java
@@ -72,7 +72,7 @@ public class BomHeaderController extends BaseController {
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), BomHeader::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), BomHeader::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(bomHeader.getMaterialCode()), BomHeader::getMaterialCode, bomHeader.getMaterialCode())
-                .eq(StringUtils.isNotEmpty(bomHeader.getMaterialName()), BomHeader::getMaterialName, bomHeader.getMaterialName())
+                .like(StringUtils.isNotEmpty(bomHeader.getMaterialName()), BomHeader::getMaterialName, bomHeader.getMaterialName())
                 .eq(StringUtils.isNotEmpty(bomHeader.getCompanyCode()), BomHeader::getCompanyCode, bomHeader.getCompanyCode());
 
         if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
diff --git a/src/main/java/com/huaheng/pc/config/carrier/controller/CarrierController.java b/src/main/java/com/huaheng/pc/config/carrier/controller/CarrierController.java
index ed8e2ca..46306fd 100644
--- a/src/main/java/com/huaheng/pc/config/carrier/controller/CarrierController.java
+++ b/src/main/java/com/huaheng/pc/config/carrier/controller/CarrierController.java
@@ -64,7 +64,7 @@ public class CarrierController extends BaseController {
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Carrier::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), Carrier::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(carrier.getCode()), Carrier::getCode, carrier.getCode())
-                .eq(StringUtils.isNotEmpty(carrier.getName()), Carrier::getName, carrier.getName())
+                .like(StringUtils.isNotEmpty(carrier.getName()), Carrier::getName, carrier.getName())
                 .eq(Carrier::getWarehouseCode, ShiroUtils.getWarehouseCode());
 
         if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
diff --git a/src/main/java/com/huaheng/pc/config/company/service/CompanyServiceImpl.java b/src/main/java/com/huaheng/pc/config/company/service/CompanyServiceImpl.java
index 11159fb..2825761 100644
--- a/src/main/java/com/huaheng/pc/config/company/service/CompanyServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/company/service/CompanyServiceImpl.java
@@ -87,11 +87,11 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         warehouseCompanyService.remove(lambdaQueryWrapper.eq(WarehouseCompany::getCompanyId, company.getId()));
         //添加货主仓库关联
         WarehouseCompany record = new WarehouseCompany();
-        for (int i=0; i<warehouse.length-1; i++)
+        for (int i=0; i<warehouse.length; i++)
         {
             record.setCompanyId(company.getId());
             record.setCompanyCode(company.getCode());
-            record.setWarehouseCode(warehouse[i+1]);
+            record.setWarehouseCode(warehouse[i]);
             warehouseCompanyService.save(record);
         }
         //更新货主
diff --git a/src/main/java/com/huaheng/pc/config/configValue/service/ConfigValueService.java b/src/main/java/com/huaheng/pc/config/configValue/service/ConfigValueService.java
index fb70d79..19761a8 100644
--- a/src/main/java/com/huaheng/pc/config/configValue/service/ConfigValueService.java
+++ b/src/main/java/com/huaheng/pc/config/configValue/service/ConfigValueService.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import com.huaheng.pc.config.configValue.mapper.ConfigValueMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 @Service
@@ -17,6 +18,7 @@ public class ConfigValueService extends ServiceImpl<ConfigValueMapper, ConfigVal
      * @param newWarehouseCode 新仓库编码
      * @return 是否复制成功
      */
+    @Transactional
     public boolean configValueCopy(String warehouseCode, String newWarehouseCode){
         log.trace("开始复制系统参数配置表");
         LambdaQueryWrapper<ConfigValue> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java b/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java
index 24f5182..b1cd00d 100644
--- a/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java
+++ b/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java
@@ -17,6 +17,7 @@ import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.framework.web.page.TableSupport;
 import com.huaheng.pc.config.container.domain.Container;
 import com.huaheng.pc.config.container.service.ContainerService;
+import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 @Api(tags={"容器操作类"})
@@ -175,4 +177,21 @@ public class ContainerController extends BaseController {
         ExcelUtil<Container> util = new ExcelUtil<>(Container.class);
         return util.importTemplateExcel("容器");
     }
+
+
+    @RequiresPermissions("iconfig:container:print")
+    @Log(title = "容器条码", operating = "容器条码打印", action = BusinessType.OTHER)
+    @GetMapping("/print/{ids}")
+    public String print(@PathVariable("ids") Integer[] ids, ModelMap mmap)
+    {
+        List<Container> list = new ArrayList<>();
+        for(Integer id:ids){
+            if(id != null) {
+                Container container = containerService.getById(id);
+                list.add(container);
+            }
+            mmap.put("container", list);
+        }
+        return prefix + "/print";
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/config/container/domain/Container.java b/src/main/java/com/huaheng/pc/config/container/domain/Container.java
index 210358f..7a4e5c0 100644
--- a/src/main/java/com/huaheng/pc/config/container/domain/Container.java
+++ b/src/main/java/com/huaheng/pc/config/container/domain/Container.java
@@ -65,6 +65,15 @@ public class Container implements Serializable {
     @Excel(name = "容器类型")
     private String containerType;
 
+
+    /**
+     * 容器类型
+     */
+    @TableField(value = "goodsShelfNo")
+    @ApiModelProperty(value="AGV货架编码")
+    @Excel(name = "AGV货架编码")
+    private String goodsShelfNo;
+
     /**
      * 创建时间
      */
@@ -199,6 +208,8 @@ public class Container implements Serializable {
 
     public static final String COL_CONTAINERTYPE = "containerType";
 
+    public static final String COL_GOODSSHELFNO = "goodsShelfNo";
+
     public static final String COL_CREATED = "created";
 
     public static final String COL_CREATEDBY = "createdBy";
@@ -245,6 +256,7 @@ public class Container implements Serializable {
         sb.append(", warehouseCode=").append(warehouseCode);
         sb.append(", companyCode=").append(companyCode);
         sb.append(", containerType=").append(containerType);
+        sb.append(", goodsShelfNo=").append(goodsShelfNo);
         sb.append(", created=").append(created);
         sb.append(", createdBy=").append(createdBy);
         sb.append(", lastUpdated=").append(lastUpdated);
diff --git a/src/main/java/com/huaheng/pc/config/container/mapper/ContainerMapper.java b/src/main/java/com/huaheng/pc/config/container/mapper/ContainerMapper.java
index a479caa..b6dcc81 100644
--- a/src/main/java/com/huaheng/pc/config/container/mapper/ContainerMapper.java
+++ b/src/main/java/com/huaheng/pc/config/container/mapper/ContainerMapper.java
@@ -16,5 +16,9 @@ public interface ContainerMapper extends BaseMapper<Container> {
 
     Container findAllByCode(@Param("code") String code);
 
+    int addList(@Param("containers") List<Container> containers);
 
+
+    //获得空货架编号
+    List<Container> selectListShelf();
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/container/service/ContainerService.java b/src/main/java/com/huaheng/pc/config/container/service/ContainerService.java
index 3bbed8d..86825c9 100644
--- a/src/main/java/com/huaheng/pc/config/container/service/ContainerService.java
+++ b/src/main/java/com/huaheng/pc/config/container/service/ContainerService.java
@@ -22,4 +22,8 @@ public interface ContainerService extends IService<Container>{
     void removeByCode(String containCode);
 
     Container findAllByCode(String containCode);
+
+
+    //获得空货架编号
+    List<Container> selectListShelf();
 }
diff --git a/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java b/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java
index 4c795fe..0d08e35 100644
--- a/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java
@@ -31,6 +31,7 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container
     @Override
     public AjaxResult<List<Container>> insertContainer(String type, Integer quantity) {
         List<Container>  containerList = new ArrayList<>();
+        List<Container> containers =new ArrayList<>();
         Integer number = getNumber(type);
         for(int i=0; i<quantity; i++) {
             number++;
@@ -45,10 +46,13 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container
             container.setEnable(true);
             container.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
             container.setWarehouseCode(ShiroUtils.getWarehouseCode());
-            this.save(container);
-            containerList.add(container);
+            containers.add(container);
+            if( i>0 && (i%1000==0 || i == quantity-1)){
+                containerMapper.addList(containers);
+                containers = new ArrayList<>();
+            }
         }
-        return AjaxResult.success(containerList);
+        return AjaxResult.success(containers);
     }
 
     private Integer getNumber(String type) {
@@ -167,4 +171,10 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container
     public Container findAllByCode(String code) {
         return containerMapper.findAllByCode(code);
     }
+
+
+    @Override
+    public List<Container> selectListShelf() {
+        return containerMapper.selectListShelf();
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/config/containerType/controller/ContainerTypeController.java b/src/main/java/com/huaheng/pc/config/containerType/controller/ContainerTypeController.java
index 0b206f0..0b1c9af 100644
--- a/src/main/java/com/huaheng/pc/config/containerType/controller/ContainerTypeController.java
+++ b/src/main/java/com/huaheng/pc/config/containerType/controller/ContainerTypeController.java
@@ -63,6 +63,7 @@ public class ContainerTypeController extends BaseController
 		lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin),ContainerType::getCreated, createdBegin)
 				.le(StringUtils.isNotEmpty(createdEnd), ContainerType::getCreated, createdEnd)
 				.eq(ContainerType::getWarehouseCode,ShiroUtils.getWarehouseCode())
+				.in(ContainerType::getCompanyCode,ShiroUtils.getCompanyCodeList())
 				.eq(StringUtils.isNotEmpty(containerType.getCode()),ContainerType::getCode,containerType.getCode())
 				.like(StringUtils.isNotEmpty(containerType.getName()),ContainerType::getName,containerType.getName());;
 
diff --git a/src/main/java/com/huaheng/pc/config/containerType/service/ContainerTypeServiceImpl.java b/src/main/java/com/huaheng/pc/config/containerType/service/ContainerTypeServiceImpl.java
index 38c1059..d7e05e3 100644
--- a/src/main/java/com/huaheng/pc/config/containerType/service/ContainerTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/containerType/service/ContainerTypeServiceImpl.java
@@ -3,14 +3,17 @@ package com.huaheng.pc.config.containerType.service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import org.springframework.stereotype.Service;
-
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.config.containerType.domain.ContainerType;
 import com.huaheng.pc.config.containerType.mapper.ContainerTypeMapper;
+import com.huaheng.pc.config.containerType.service.ContainerTypeService;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service("containerType")
 public class ContainerTypeServiceImpl extends ServiceImpl<ContainerTypeMapper, ContainerType> implements ContainerTypeService{
diff --git a/src/main/java/com/huaheng/pc/config/customer/controller/CustomerController.java b/src/main/java/com/huaheng/pc/config/customer/controller/CustomerController.java
index c290431..930af17 100644
--- a/src/main/java/com/huaheng/pc/config/customer/controller/CustomerController.java
+++ b/src/main/java/com/huaheng/pc/config/customer/controller/CustomerController.java
@@ -66,7 +66,7 @@ public class CustomerController extends BaseController {
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Customer::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), Customer::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(customer.getCode()), Customer::getCode, customer.getCode())
-                .eq(StringUtils.isNotEmpty(customer.getName()), Customer::getName, customer.getName())
+                .like(StringUtils.isNotEmpty(customer.getName()), Customer::getName, customer.getName())
                 .eq(Customer::getDeleted, false)
                 .eq(Customer::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .orderByDesc(Customer::getCreated);
diff --git a/src/main/java/com/huaheng/pc/config/cycleCountPreference/service/CycleCountPreferenceService.java b/src/main/java/com/huaheng/pc/config/cycleCountPreference/service/CycleCountPreferenceService.java
index f0585c3..fd6d235 100644
--- a/src/main/java/com/huaheng/pc/config/cycleCountPreference/service/CycleCountPreferenceService.java
+++ b/src/main/java/com/huaheng/pc/config/cycleCountPreference/service/CycleCountPreferenceService.java
@@ -73,6 +73,7 @@ public class CycleCountPreferenceService extends ServiceImpl<CycleCountPreferenc
      * @param newWarehouseCode 新仓库编码
      * @return 是否复制成功
      */
+    @Transactional
     public boolean cycleCountPreferenceCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复盘点首选项表");
         LambdaQueryWrapper<CycleCountPreference> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/excelTemplate/controller/excelTemplateController.java b/src/main/java/com/huaheng/pc/config/excelTemplate/controller/excelTemplateController.java
index a608404..18fd556 100644
--- a/src/main/java/com/huaheng/pc/config/excelTemplate/controller/excelTemplateController.java
+++ b/src/main/java/com/huaheng/pc/config/excelTemplate/controller/excelTemplateController.java
@@ -59,7 +59,7 @@ public class excelTemplateController extends BaseController {
         Integer pageSize = pageDomain.getPageSize();
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), ExcelTemplate::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), ExcelTemplate::getCreated, createdEnd)
-                .eq(StringUtils.isNotEmpty(excelTemplate.getName()), ExcelTemplate::getName, excelTemplate.getName())
+                .like(StringUtils.isNotEmpty(excelTemplate.getName()), ExcelTemplate::getName, excelTemplate.getName())
                 .eq(ExcelTemplate::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .in(ExcelTemplate::getCompanyCode, ShiroUtils.getCompanyCodeList());
 
diff --git a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
index e874571..4e6771f 100644
--- a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
+++ b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
@@ -76,6 +76,7 @@ public class LocationController extends BaseController {
         Integer pageSize = pageDomain.getPageSize();
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Location::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), Location::getCreated, createdEnd)
+                .eq(Location::getWarehouseCode,ShiroUtils.getWarehouseCode())
                 .eq(StringUtils.isNotEmpty(location.getCode()), Location::getCode, location.getCode())
                 .eq(StringUtils.isNotEmpty(location.getName()), Location::getName,location.getName())
                 .eq(StringUtils.isNotEmpty(location.getContainerCode()), Location::getContainerCode, location.getContainerCode())
diff --git a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java
index e69bc74..efae305 100644
--- a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java
+++ b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java
@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
 import java.util.LinkedHashMap;
 import java.util.List;
 
+import java.util.List;
+
 public interface LocationMapper extends BaseMapper<Location> {
 
     void updateStatus(@Param("warehouseCode") String warehouseCode, @Param("code") String code, @Param("status") String status);
@@ -15,8 +17,11 @@ public interface LocationMapper extends BaseMapper<Location> {
 
     Location position(String locatingRule);
 
+    int addList(@Param("locations") List<Location> locations);
+
     Location getAllLocation(@Param("warehouseCode") String warehouseCode, @Param("type") String type);
 
     //库位利用率
     List<LinkedHashMap<String, Object>> getLocationProp();
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java
index 930e16a..3278ce9 100644
--- a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java
@@ -142,7 +142,21 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i
                 }
             }
         }
-        return locationService.saveBatch(locations);
+        int num =0;
+        List<Location> locations1 = new ArrayList<>();
+        if(locations.size() >1000 ){
+            for(Location item : locations){
+                num++;
+                locations1.add(item);
+                if(num % 1000 ==0 || num == locations.size()){
+                    locationMapper.addList(locations1);
+                    locations1=new ArrayList<>();
+                }
+            }
+        }else {
+            locationMapper.addList(locations);
+        }
+        return true;
     }
 
     @Override
diff --git a/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java b/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java
index 0c7e42a..3242e65 100644
--- a/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java
+++ b/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java
@@ -39,19 +39,19 @@ public class LocationType implements Serializable {
      * 长
      */
     @TableField(value = "length")
-    private Integer length;
+    private String length;
 
     /**
      * 宽
      */
     @TableField(value = "width")
-    private Integer width;
+    private String width;
 
     /**
      * 高
      */
     @TableField(value = "height")
-    private Integer height;
+    private String height;
 
     /**
      * 最大重量
diff --git a/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java b/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java
index 8633ff2..1b222d3 100644
--- a/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java
@@ -8,6 +8,7 @@ import com.huaheng.pc.config.cycleCountPreference.domain.CycleCountPreference;
 import com.huaheng.pc.config.locationType.domain.LocationType;
 import com.huaheng.pc.config.locationType.mapper.LocationTypeMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -31,6 +32,7 @@ public class LocationTypeServiceImpl extends ServiceImpl<LocationTypeMapper, Loc
      * @return 是否复制成功
      */
     @Override
+    @Transactional
     public boolean locationTypeCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复盘点首选项表");
         LambdaQueryWrapper<LocationType> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java b/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java
index 3333c42..74d5ddd 100644
--- a/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java
+++ b/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.poi.ExcelUtil;
 import com.huaheng.common.utils.security.ShiroUtils;
@@ -16,6 +18,8 @@ import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.framework.web.page.TableSupport;
 import com.huaheng.pc.config.material.domain.Material;
 import com.huaheng.pc.config.material.service.MaterialService;
+import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
+import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -37,6 +41,8 @@ public class MaterialController extends BaseController {
 
     @Resource
     private MaterialService materialService;
+    @Resource
+    private InventoryDetailService inventoryDetailService;
 
     @RequiresPermissions("config:material:view")
     @GetMapping()
@@ -66,11 +72,10 @@ public class MaterialController extends BaseController {
         lambda.gt(StringUtils.isNotEmpty(createdBegin), Material::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), Material::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(material.getCode()), Material::getCode, material.getCode())
-                .eq(StringUtils.isNotEmpty(material.getName()), Material::getName, material.getName())
+                .like(StringUtils.isNotEmpty(material.getName()), Material::getName, material.getName())
                 .eq(StringUtils.isNotEmpty(material.getType()), Material::getType, material.getType())
                 .like(StringUtils.isNotEmpty(material.getSpec()), Material::getSpec, material.getSpec())
                 .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode())
-                .in(Material::getCompanyCode, ShiroUtils.getCompanyCodeList())
                 .eq(Material::getDeleted, false);
 
         if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
@@ -139,6 +144,16 @@ public class MaterialController extends BaseController {
         if (StringUtils.isEmpty(ids)){
             return AjaxResult.error("id不能为空");
         } else {
+            for(Integer id :Convert.toIntArray(ids)){
+                Material material = materialService.getById(id);
+                LambdaQueryWrapper<InventoryDetail> lamb = Wrappers.lambdaQuery();
+                lamb.eq(InventoryDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
+                        .eq(InventoryDetail::getMaterialCode,material.getCode());
+                List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lamb);
+                if(inventoryDetails != null || inventoryDetails.size() > 0){
+                    throw new ServiceException("id为"+id+"的物料有库存");
+                }
+            }
             return materialService.removeByIds(ids);
         }
     }
diff --git a/src/main/java/com/huaheng/pc/config/materialMultiple/controller/MaterialMultipleController.java b/src/main/java/com/huaheng/pc/config/materialMultiple/controller/MaterialMultipleController.java
index b7514e0..92905ef 100644
--- a/src/main/java/com/huaheng/pc/config/materialMultiple/controller/MaterialMultipleController.java
+++ b/src/main/java/com/huaheng/pc/config/materialMultiple/controller/MaterialMultipleController.java
@@ -14,6 +14,8 @@ import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.framework.web.page.PageDomain;
 import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.framework.web.page.TableSupport;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
 import com.huaheng.pc.config.materialMultiple.domain.MaterialMultiple;
 import com.huaheng.pc.config.materialMultiple.service.MaterialMultipleServiceImpl;
 import io.swagger.annotations.ApiOperation;
@@ -33,6 +35,8 @@ public class MaterialMultipleController extends BaseController {
 
     @Resource
     private MaterialMultipleServiceImpl materialMultipleService;
+    @Resource
+    private MaterialService materialService;
 
     private String prefix = "config/materialMultiple";
 
@@ -60,7 +64,7 @@ public class MaterialMultipleController extends BaseController {
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), MaterialMultiple::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), MaterialMultiple::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(materialMultiple.getMaterialCode()), MaterialMultiple::getMaterialCode, materialMultiple.getMaterialCode())
-                .eq(StringUtils.isNotEmpty(materialMultiple.getMaterialName()), MaterialMultiple::getMaterialName, materialMultiple.getMaterialName())
+                .like(StringUtils.isNotEmpty(materialMultiple.getMaterialName()), MaterialMultiple::getMaterialName, materialMultiple.getMaterialName())
                 .in(MaterialMultiple::getCompanyCode, ShiroUtils.getCompanyCodeList())
                 .eq(MaterialMultiple::getWarehouseCode, ShiroUtils.getWarehouseCode());
 
@@ -92,15 +96,25 @@ public class MaterialMultipleController extends BaseController {
     @PostMapping("/add")
     @ResponseBody
     public AjaxResult addSave(MaterialMultiple materialMultiple) {
+        LambdaQueryWrapper<Material> lam = Wrappers.lambdaQuery();
+        lam.eq(Material::getCode,materialMultiple.getMaterialCode())
+                .eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
+        Material material = materialService.getOne(lam);
+        if(material ==null){
+            return AjaxResult.error("物料编码错误,系统没有此物料");
+        }
         LambdaQueryWrapper<MaterialMultiple> lambda = Wrappers.lambdaQuery();
         lambda.eq(MaterialMultiple::getCompanyCode,materialMultiple.getCompanyCode())
                 .eq(MaterialMultiple::getMaterialCode, materialMultiple)
                 .eq(MaterialMultiple::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .eq(MaterialMultiple::getUnitId1, materialMultiple.getUnitId1())
                 .eq(MaterialMultiple::getUnitId2, materialMultiple.getUnitId2());
-        if (materialMultipleService.list(lambda) == null){
+        if (materialMultipleService.list(lambda) != null){
             return AjaxResult.error("该信息已存在");
         }
+        materialMultiple.setMaterialName(material.getName());
+        materialMultiple.setMaterialSpec(material.getSpec());
+        materialMultiple.setWarehouseCode(ShiroUtils.getWarehouseCode());
         materialMultiple.setCreatedBy(ShiroUtils.getLoginName());
         materialMultiple.setLastUpdatedBy(ShiroUtils.getLoginName());
         return toAjax(materialMultipleService.save(materialMultiple));
diff --git a/src/main/java/com/huaheng/pc/config/materialType/controller/MaterialTypeController.java b/src/main/java/com/huaheng/pc/config/materialType/controller/MaterialTypeController.java
index e1ebe45..a14427a 100644
--- a/src/main/java/com/huaheng/pc/config/materialType/controller/MaterialTypeController.java
+++ b/src/main/java/com/huaheng/pc/config/materialType/controller/MaterialTypeController.java
@@ -71,7 +71,7 @@ public class MaterialTypeController extends BaseController {
                 .eq(MaterialType::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .eq(StringUtils.isNotEmpty(materialType.getCode()),
                         MaterialType::getCode, materialType.getCode())
-                .eq(StringUtils.isNotEmpty(materialType.getName()), MaterialType::getName, materialType.getName());
+                .like(StringUtils.isNotEmpty(materialType.getName()), MaterialType::getName, materialType.getName());
 
         if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
             /**
diff --git a/src/main/java/com/huaheng/pc/config/materialUnit/controller/MaterialUnitController.java b/src/main/java/com/huaheng/pc/config/materialUnit/controller/MaterialUnitController.java
index 111fa2d..44e5b64 100644
--- a/src/main/java/com/huaheng/pc/config/materialUnit/controller/MaterialUnitController.java
+++ b/src/main/java/com/huaheng/pc/config/materialUnit/controller/MaterialUnitController.java
@@ -101,7 +101,8 @@ public class MaterialUnitController extends BaseController {
     @ResponseBody
     public AjaxResult addSave(MaterialUnit materialUnit) {
         LambdaQueryWrapper<Material> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(Material::getCode, materialUnit.getMaterialCode());
+        lambdaQueryWrapper.eq(Material::getCode, materialUnit.getMaterialCode())
+        .eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
         Material material = materialService.getOne(lambdaQueryWrapper);
         if (material == null){
             return AjaxResult.error(" 该物料编码不存在");
@@ -110,12 +111,13 @@ public class MaterialUnitController extends BaseController {
         LambdaQueryWrapper<MaterialUnit> lambda = Wrappers.lambdaQuery();
         lambda.eq(MaterialUnit::getWarehouseCode, ShiroUtils.getWarehouseCode())
             .eq(MaterialUnit::getCompanyCode, materialUnit.getCompanyCode())
-            .eq(MaterialUnit::getMaterialCode, materialUnit.getMaterialCode())
-            .eq(MaterialUnit::getUnit, materialUnit.getUnit());
+                .eq(MaterialUnit::getWarehouseCode,ShiroUtils.getWarehouseCode())
+                .eq(MaterialUnit::getMaterialCode, materialUnit.getMaterialCode())
+                .eq(MaterialUnit::getUnit, materialUnit.getUnit());
         if (materialUnitService.getOne(lambda) != null){
             return AjaxResult.error("当前新增记录已存在");
         }
-
+        materialUnit.setWarehouseCode(ShiroUtils.getWarehouseCode());
         materialUnit.setMaterialName(material.getName());
         materialUnit.setMaterialSpec(material.getSpec());
         materialUnit.setCreatedBy(ShiroUtils.getLoginName());
diff --git a/src/main/java/com/huaheng/pc/config/points/controller/PointController.java b/src/main/java/com/huaheng/pc/config/points/controller/PointController.java
new file mode 100644
index 0000000..c945480
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/points/controller/PointController.java
@@ -0,0 +1,158 @@
+package com.huaheng.pc.config.points.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.framework.web.page.PageDomain;
+import com.huaheng.framework.web.page.TableDataInfo;
+import com.huaheng.framework.web.page.TableSupport;
+import com.huaheng.pc.config.company.domain.Company;
+import com.huaheng.pc.config.company.service.CompanyService;
+import com.huaheng.pc.config.container.domain.Container;
+import com.huaheng.pc.config.container.service.ContainerService;
+import com.huaheng.pc.config.points.domain.Points;
+import com.huaheng.pc.config.points.service.PointsService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 货架 信息操作处理
+ * 
+ * @author huaheng
+ * @date 2019-07-11
+ */
+@Controller
+@RequestMapping("/config/point")
+public class PointController extends BaseController
+{
+    private String prefix = "config/point";
+	
+	@Autowired
+	private PointsService pointsService;
+	@Autowired
+	private CompanyService companyService;
+	@Autowired
+	private ContainerService containerService;
+	
+	@RequiresPermissions("config:point:view")
+	@GetMapping()
+	public String point()
+	{
+	    return prefix + "/point";
+	}
+	
+	/**
+	 * 查询货架列表
+	 */
+	@RequiresPermissions("config:point:list")
+	@Log(title = "配置-货架设置", operating = "货架查看列表", action = BusinessType.GRANT)
+	@PostMapping("/list")
+	@ResponseBody
+	public TableDataInfo list(Points points)
+	{
+
+		LambdaQueryWrapper<Points> lambdaQueryWrapper = Wrappers.lambdaQuery();
+		PageDomain pageDomain = TableSupport.buildPageRequest();
+		Integer pageNum = pageDomain.getPageNum();
+		Integer pageSize = pageDomain.getPageSize();
+		lambdaQueryWrapper
+				.eq(StringUtils.isNotEmpty(points.getGoodsShelfNo()), Points::getGoodsShelfNo, points.getGoodsShelfNo())
+				.eq(StringUtils.isNotEmpty(points.getCompanyCode()),Points::getCompanyCode, points.getCompanyCode())
+				.eq(Points::getWarehouseCode, ShiroUtils.getWarehouseCode());
+
+		if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
+			/*使用分页查询*/
+			Page<Points> page = new Page<>(pageNum, pageSize);
+			IPage<Points> iPage = pointsService.page(page, lambdaQueryWrapper);
+			return getMpDataTable(iPage.getRecords(), iPage.getTotal());
+		} else {
+			List<Points> list = pointsService.list(lambdaQueryWrapper);
+			list.forEach(t->{
+				LambdaQueryWrapper<Company> companyLamb = Wrappers.lambdaQuery();
+				companyLamb.eq(Company::getCode,t.getCompanyCode());
+				Company company= companyService.getOne(companyLamb);
+				if(company!=null) {
+					t.setCompanyName(company.getName());
+				}
+			});
+			return getDataTable(list);
+		}
+	}
+
+	/**
+	 * 修改货架
+	 */
+	@GetMapping("/edit/{id}")
+	public String edit(@PathVariable("id") Integer id, ModelMap mmap)
+	{
+
+		Points points = pointsService.getById(id);
+		mmap.put("points", points);
+	    return prefix + "/edit";
+	}
+	
+	/**
+	 * 修改保存货架
+	 */
+	@RequiresPermissions("config:point:edit")
+	@Log(title = "配置-货架设置", operating = "修改货架", action = BusinessType.UPDATE)
+	@PostMapping("/edit")
+	@ResponseBody
+	public AjaxResult editSave(Points points)
+	{
+		LambdaQueryWrapper<Container> containerLamb = Wrappers.lambdaQuery();
+		containerLamb.eq(Container::getGoodsShelfNo,points.getGoodsShelfNo())
+				.eq(Container::getWarehouseCode,ShiroUtils.getWarehouseCode());
+		List<Container> containerList=containerService.list(containerLamb);
+		for(Container item:containerList){
+			item.setCompanyCode(points.getCompanyCode());
+			if(containerService.saveOrUpdate(item) == false){
+				return AjaxResult.error("修改失败");
+			}
+		}
+		if(pointsService.saveOrUpdate(points) == false){
+			return AjaxResult.error("修改失败");
+		}
+		return AjaxResult.success("修改成功");
+	}
+
+
+	/**
+	 * 恢复货架状态
+	 */
+	@RequiresPermissions("config:point:edit")
+	@Log(title = "配置-货架设置", operating = "恢复货架状态", action = BusinessType.UPDATE)
+	@PostMapping("/restore")
+	@ResponseBody
+	public AjaxResult restore(){
+		if(pointsService.updateAll() >0){
+			return AjaxResult.success("货架状态恢复成功");
+		}else {
+			return AjaxResult.error("失败");
+		}
+	}
+
+	/**
+	 * 检测货架装货状态
+	 */
+	@RequiresPermissions("config:point:edit")
+	@Log(title = "配置-货架设置", operating = "检测货架装货状态", action = BusinessType.UPDATE)
+	@PostMapping("/detectShelf")
+	@ResponseBody
+	public AjaxResult detectShelf(){
+		return pointsService.detectShelf();
+	}
+}
diff --git a/src/main/java/com/huaheng/pc/config/points/domain/Points.java b/src/main/java/com/huaheng/pc/config/points/domain/Points.java
new file mode 100644
index 0000000..bd4e63e
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/points/domain/Points.java
@@ -0,0 +1,183 @@
+package com.huaheng.pc.config.points.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.huaheng.framework.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author ricard
+ * @time 2019/12/26
+ * 货架实体
+ */
+
+@ApiModel(value="com.huaheng.pc.config.points.domain.Points")
+@Data
+@TableName(value = "points")
+public class Points extends BaseEntity {
+    //id
+    @TableId(value = "id", type = IdType.AUTO )
+    private Integer id;
+
+    //仓库编码
+    @TableField(value = "warehouseCode")
+    private String warehouseCode;
+
+   //货架号
+   @TableField(value = "goodsShelfNo")
+    private String goodsShelfNo;
+    private Integer companyId;
+
+    //货主
+    @TableField(value = "companyCode")
+    private String companyCode;
+    //货主名称
+    private String companyName;
+
+    //货架调动次数
+    @TableField(value = "num")
+    private Integer num;
+
+    //是否为空
+    @TableField(value = "isEmpty")
+    private Integer isEmpty;
+
+    //是否可用
+    @TableField(value = "isEnable")
+    private Integer isEnable;
+
+    //货架状态
+    @TableField(value = "isLocked")
+    private Integer isLocked;
+
+    //回库后X轴位置
+    @TableField(value = "intX")
+    private String intX;
+
+    //回库后Y轴位置
+    @TableField(value = "intY")
+    private String intY;
+
+    //出库前x位置
+    @TableField(value = "oIntX")
+    private String oIntX;
+
+    //出库前Y位置
+    @TableField(value = "oIntY")
+    private String oIntY;
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getCompanyCode() {
+        return companyCode;
+    }
+
+    public void setCompanyCode(String companyCode) {
+        this.companyCode = companyCode;
+    }
+
+    public String getCompanyName() {
+        return companyName;
+    }
+
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    public String getoIntX() {
+        return oIntX;
+    }
+
+    public void setoIntX(String oIntX) {
+        this.oIntX = oIntX;
+    }
+
+    public String getoIntY() {
+        return oIntY;
+    }
+
+    public void setoIntY(String oIntY) {
+        this.oIntY = oIntY;
+    }
+
+    public String getWarehouseCode() {
+        return warehouseCode;
+    }
+
+    public void setWarehouseCode(String warehouseCode) {
+        this.warehouseCode = warehouseCode;
+    }
+
+    public String getIntX() {
+        return intX;
+    }
+
+    public void setIntX(String intX) {
+        this.intX = intX;
+    }
+
+    public String getIntY() {
+        return intY;
+    }
+
+    public void setIntY(String intY) {
+        this.intY = intY;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getGoodsShelfNo() {
+        return goodsShelfNo;
+    }
+
+    public void setGoodsShelfNo(String goodsShelfNo) {
+        this.goodsShelfNo = goodsShelfNo;
+    }
+
+    public Integer getIsEnable() {
+        return isEnable;
+    }
+
+    public void setIsEnable(Integer isEnable) {
+        this.isEnable = isEnable;
+    }
+
+    public Integer getIsLocked() {
+        return isLocked;
+    }
+
+    public void setIsLocked(Integer isLocked) {
+        this.isLocked = isLocked;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getIsEmpty() {
+        return isEmpty;
+    }
+
+    public void setIsEmpty(Integer isEmpty) {
+        this.isEmpty = isEmpty;
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/config/points/mapper/PointsMapper.java b/src/main/java/com/huaheng/pc/config/points/mapper/PointsMapper.java
new file mode 100644
index 0000000..d0387d3
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/points/mapper/PointsMapper.java
@@ -0,0 +1,25 @@
+package com.huaheng.pc.config.points.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaheng.pc.config.points.domain.Points;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 货架 数据层
+ *
+ * @author ricard
+ * @date 2019-12-26
+ */
+public interface PointsMapper extends BaseMapper<Points> {
+
+    //修改货架位置信息
+    int updatePoints(Points points);
+
+    //修改所有货架的状态为初始状态
+    int updateAll();
+
+    int updateIsEmpty(@Param("list") List<String> list, @Param("isEmpty") Integer isEmpty);
+}
diff --git a/src/main/java/com/huaheng/pc/config/points/service/PointsService.java b/src/main/java/com/huaheng/pc/config/points/service/PointsService.java
new file mode 100644
index 0000000..40af2f5
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/points/service/PointsService.java
@@ -0,0 +1,26 @@
+package com.huaheng.pc.config.points.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.points.domain.Points;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 货架 服务层
+ *
+ * @author ricard
+ * @date 2019-02-26
+ */
+
+public interface PointsService extends IService<Points> {
+
+    //修改所有货架的状态为初始状态
+    int updateAll();
+
+    //检查货架是否是空货架,并修改
+    AjaxResult detectShelf();
+
+}
diff --git a/src/main/java/com/huaheng/pc/config/points/service/PointsServiceImpl.java b/src/main/java/com/huaheng/pc/config/points/service/PointsServiceImpl.java
new file mode 100644
index 0000000..c86e7ba
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/points/service/PointsServiceImpl.java
@@ -0,0 +1,81 @@
+package com.huaheng.pc.config.points.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.constant.QuantityConstant;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.container.domain.Container;
+import com.huaheng.pc.config.container.service.ContainerService;
+import com.huaheng.pc.config.points.domain.Points;
+import com.huaheng.pc.config.points.mapper.PointsMapper;
+import org.apache.commons.collections.ListUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 货架 服务层实现
+ *
+ * @author ricard
+ * @date 2019-12-26
+ */
+@Service
+public class PointsServiceImpl extends ServiceImpl<PointsMapper,Points> implements PointsService{
+
+    @Resource
+    private PointsMapper pointsMapper;
+    @Resource
+    private ContainerService containerService;
+
+    @Override
+    public int updateAll() {
+        return pointsMapper.updateAll();
+    }
+
+
+
+    @Override
+    public AjaxResult detectShelf() {
+        //查找为空的货架
+        List<Container> containers =containerService.selectListShelf();
+        List<String> stringList = new ArrayList<>();
+        for(Container item : containers){
+            stringList.add(item.getGoodsShelfNo());
+        }
+        Integer flag = 1;
+
+        //修改空货架状态
+        flag = pointsMapper.updateIsEmpty(stringList, QuantityConstant.POINTS_SOME);
+        if(flag < 1){
+            return AjaxResult.error("修改空货架状态失败");
+        }
+
+
+        //查找所以货架
+        LambdaQueryWrapper<Points> pointsLamb = Wrappers.lambdaQuery();
+        pointsLamb.eq(Points::getWarehouseCode,ShiroUtils.getWarehouseCode());
+        List<Points> pointsList = this.list(pointsLamb);
+
+        //去重
+        List<String> list =new ArrayList<>();
+        for(Points item : pointsList){
+            list.add(item.getGoodsShelfNo());
+        }
+
+        List<String> list1 = ListUtils.subtract(list,stringList);
+
+        //修改非空货架
+        flag = pointsMapper.updateIsEmpty(list1,QuantityConstant.POINTS_EMPTY);
+        if(flag < 1){
+            return AjaxResult.error("修改空货架状态失败");
+        }
+
+        return AjaxResult.success("成功");
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java b/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java
index 0a1f21b..03ad15d 100644
--- a/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java
+++ b/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java
@@ -61,7 +61,7 @@ public class ReceiptPreferenceController extends BaseController {
                 .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .eq(StringUtils.isNotEmpty(receiptPreference.getCode()),
                         ReceiptPreference::getCode, receiptPreference.getCode())
-                .eq(StringUtils.isNotEmpty(receiptPreference.getName()),
+                .like(StringUtils.isNotEmpty(receiptPreference.getName()),
                         ReceiptPreference::getName, receiptPreference.getName())
                 .like(StringUtils.isNotEmpty(receiptPreference.getReceivingFlow()),
                         ReceiptPreference::getReceivingFlow, receiptPreference.getReceivingFlow());
diff --git a/src/main/java/com/huaheng/pc/config/receiptPreference/service/ReceiptPreferenceService.java b/src/main/java/com/huaheng/pc/config/receiptPreference/service/ReceiptPreferenceService.java
index 96ea6e8..f18831f 100644
--- a/src/main/java/com/huaheng/pc/config/receiptPreference/service/ReceiptPreferenceService.java
+++ b/src/main/java/com/huaheng/pc/config/receiptPreference/service/ReceiptPreferenceService.java
@@ -9,6 +9,8 @@ import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.config.receiptPreference.mapper.ReceiptPreferenceMapper;
 import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
+import org.springframework.transaction.annotation.Transactional;
+
 @Service
 public class ReceiptPreferenceService extends ServiceImpl<ReceiptPreferenceMapper, ReceiptPreference> {
 
@@ -19,6 +21,7 @@ public class ReceiptPreferenceService extends ServiceImpl<ReceiptPreferenceMappe
      * @param newWarehouseCode 新仓库编码
      * @return 是否复制成功
      */
+    @Transactional
     public boolean receiptPreferenceCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始入库首选项表");
         LambdaQueryWrapper<ReceiptPreference> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/receiptType/service/ReceiptTypeServiceImpl.java b/src/main/java/com/huaheng/pc/config/receiptType/service/ReceiptTypeServiceImpl.java
index 08d10c3..b37cd61 100644
--- a/src/main/java/com/huaheng/pc/config/receiptType/service/ReceiptTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/receiptType/service/ReceiptTypeServiceImpl.java
@@ -3,11 +3,13 @@ package com.huaheng.pc.config.receiptType.service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.pc.config.address.domain.Address;
 import com.huaheng.pc.config.receiptType.domain.ReceiptType;
 import com.huaheng.pc.config.receiptType.mapper.ReceiptTypeMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -17,8 +19,8 @@ public class ReceiptTypeServiceImpl extends ServiceImpl<ReceiptTypeMapper, Recei
 
     public List<Map<String, Object>> getType(){
         LambdaQueryWrapper<ReceiptType> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(ReceiptType::getWarehouseCode, ShiroUtils.getWarehouseCode())
-                .in(ReceiptType::getCompanyCode, ShiroUtils.getCompanyCodeList());
+        lambdaQueryWrapper.eq(StringUtils.isNotEmpty(ShiroUtils.getWarehouseCode()),ReceiptType::getWarehouseCode, ShiroUtils.getWarehouseCode())
+                .in(StringUtils.isNotEmpty(ShiroUtils.getCompanyCodeList()),ReceiptType::getCompanyCode, ShiroUtils.getCompanyCodeList());
         return this.listMaps(lambdaQueryWrapper);
     }
 
@@ -30,6 +32,7 @@ public class ReceiptTypeServiceImpl extends ServiceImpl<ReceiptTypeMapper, Recei
      * @return 是否复制成功
      */
     @Override
+    @Transactional
     public Boolean receiptTypeCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复制入库类型表");
         LambdaQueryWrapper<ReceiptType> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
index c8ba0e7..d404f6c 100644
--- a/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/shipmentPreference/service/ShipmentPreferenceServiceImpl.java
@@ -19,6 +19,7 @@ import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
 import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -118,6 +119,7 @@ public class ShipmentPreferenceServiceImpl extends ServiceImpl<ShipmentPreferenc
      * @return 是否复制成功
      */
     @Override
+    @Transactional
     public boolean shipmentPreferenceCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复制出库首选项表");
         LambdaQueryWrapper<ShipmentPreference> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/shipmentType/service/ShipmentTypeServiceImpl.java b/src/main/java/com/huaheng/pc/config/shipmentType/service/ShipmentTypeServiceImpl.java
index 2302a20..2e0d821 100644
--- a/src/main/java/com/huaheng/pc/config/shipmentType/service/ShipmentTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/shipmentType/service/ShipmentTypeServiceImpl.java
@@ -7,6 +7,7 @@ import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
 import com.huaheng.pc.config.shipmentType.domain.ShipmentType;
 import com.huaheng.pc.config.shipmentType.mapper.ShipmentTypeMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -21,6 +22,7 @@ public class ShipmentTypeServiceImpl extends ServiceImpl<ShipmentTypeMapper, Shi
      * @return 是否复制成功
      */
     @Override
+    @Transactional
     public boolean ShipmentTypeCopy(String warehouseCode, String newWarehouseCode) {
         log.trace("开始复制出库类型表");
         LambdaQueryWrapper<ShipmentType> lambdaQueryWrapper = Wrappers.lambdaQuery();
diff --git a/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java b/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
index 6d84c76..a772b5e 100644
--- a/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
+++ b/src/main/java/com/huaheng/pc/config/statusFlow/service/StatusFlowHeaderService.java
@@ -26,6 +26,7 @@ public class StatusFlowHeaderService extends ServiceImpl<StatusFlowHeaderMapper,
     public List<Map<String, Object>> flowList(String recordType){
         LambdaQueryWrapper<StatusFlowHeader> lambda = Wrappers.lambdaQuery();
         lambda.select(StatusFlowHeader::getCode, StatusFlowHeader::getName)
+                .eq(StatusFlowHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
             .eq(StatusFlowHeader::getRecordType, recordType);
         return this.listMaps(lambda);
     }
diff --git a/src/main/java/com/huaheng/pc/config/supplier/controller/SupplierController.java b/src/main/java/com/huaheng/pc/config/supplier/controller/SupplierController.java
index a1cf593..6bcaf55 100644
--- a/src/main/java/com/huaheng/pc/config/supplier/controller/SupplierController.java
+++ b/src/main/java/com/huaheng/pc/config/supplier/controller/SupplierController.java
@@ -66,7 +66,7 @@ public class SupplierController extends BaseController {
         lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Supplier::getCreated, createdBegin)
                 .lt(StringUtils.isNotEmpty(createdEnd), Supplier::getCreated, createdEnd)
                 .eq(StringUtils.isNotEmpty(supplier.getCode()), Supplier::getCode, supplier.getCode())
-                .eq(StringUtils.isNotEmpty(supplier.getName()), Supplier::getName, supplier.getName())
+                .like(StringUtils.isNotEmpty(supplier.getName()), Supplier::getName, supplier.getName())
                 .eq(Supplier::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .eq(Supplier::getDeleted,false)
                 .orderByDesc(Supplier::getCreated);
diff --git a/src/main/java/com/huaheng/pc/config/table/service/TableService.java b/src/main/java/com/huaheng/pc/config/table/service/TableService.java
new file mode 100644
index 0000000..256168f
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/table/service/TableService.java
@@ -0,0 +1,18 @@
+package com.huaheng.pc.config.table.service;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by Enzo Cotter on 2019/11/25.
+ */
+@Service("table")
+public class TableService {
+
+    public boolean getVisible(String value){
+        if ("t".equals(value)){
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/config/warehouse/controller/WareHouseController.java b/src/main/java/com/huaheng/pc/config/warehouse/controller/WareHouseController.java
index 8fbe3b7..0be7ac4 100644
--- a/src/main/java/com/huaheng/pc/config/warehouse/controller/WareHouseController.java
+++ b/src/main/java/com/huaheng/pc/config/warehouse/controller/WareHouseController.java
@@ -169,7 +169,7 @@ public class WareHouseController extends BaseController {
         return prefix+"/copy";
     }
     /**
-     * 修改保存仓库
+     * 复制仓库
      */
     @RequiresPermissions("config:warehouse:copy")
     @Log(title = "通用-仓库管理", operating = "复制仓库", action = BusinessType.INSERT)
diff --git a/src/main/java/com/huaheng/pc/config/warehouse/mapper/WarehouseMapper.java b/src/main/java/com/huaheng/pc/config/warehouse/mapper/WarehouseMapper.java
index 0ac4e66..b5f2f9d 100644
--- a/src/main/java/com/huaheng/pc/config/warehouse/mapper/WarehouseMapper.java
+++ b/src/main/java/com/huaheng/pc/config/warehouse/mapper/WarehouseMapper.java
@@ -17,6 +17,9 @@ public interface WarehouseMapper extends BaseMapper<Warehouse> {
 
     int companyCopy(@Param("warehouseCode") String warehouseCode, @Param("newWarehouseCode")String newWarehouseCode);
 
+    int userCopy(@Param("warehouseCode") String warehouseCode, @Param("newWarehouseCode")String newWarehouseCode);
+
+
     List<Warehouse> selectListEntityByEqual(Warehouse condition);
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java b/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
index 1d2d1b9..06a9000 100644
--- a/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/warehouse/service/WarehouseServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.pc.config.FilterConfigHeader.service.FilterConfigHeaderService;
+import com.huaheng.pc.config.address.domain.Address;
 import com.huaheng.pc.config.address.service.AddressService;
 import com.huaheng.pc.config.configValue.service.ConfigValueService;
 import com.huaheng.pc.config.containerType.service.ContainerTypeService;
@@ -20,6 +21,7 @@ import com.huaheng.pc.config.warehouse.mapper.WarehouseMapper;
 import com.huaheng.pc.config.warehouseCompany.domain.WarehouseCompany;
 import com.huaheng.pc.config.warehouseCompany.service.WarehouseCompanyService;
 import com.huaheng.pc.config.waveMaster.service.WaveMasterService;
+import com.huaheng.pc.config.zone.service.ZoneService;
 import com.huaheng.pc.system.dict.service.IDictTypeService;
 import com.huaheng.pc.system.menu.service.IMenuService;
 import com.huaheng.pc.system.role.service.IRoleService;
@@ -68,6 +70,8 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
     private StatusFlowHeaderService statusFlowHeaderService;
     @Autowired
     private WaveMasterService waveMasterService;
+    @Autowired
+    private ZoneService zoneService;
 
     @Override
     public List<Map<String, Object>> getWarehouseList(Integer id) {
@@ -79,15 +83,15 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         List<Map<String, Object>> warehouseList = warehouseMapper.selectMaps(lambdaQueryWrapper);
 
         LambdaQueryWrapper<WarehouseCompany> lambdaQueryWrapper1 = Wrappers.lambdaQuery();
-        lambdaQueryWrapper1.select(WarehouseCompany::getCompanyCode, WarehouseCompany::getWarehouseCode)
+        lambdaQueryWrapper1.select(WarehouseCompany::getCompanyCode,WarehouseCompany::getWarehouseCode)
                 .eq(WarehouseCompany::getCompanyId,id);
         List<Map<String, Object>> warehouseCompanies = warehouseCompanyService.listMaps(lambdaQueryWrapper1);
 
         for(Map<String, Object> item : warehouseList){
             item.put("flag",false);
             item.put("value", item.get("code").toString());
-            for (Map<String, Object> warehouseId:warehouseCompanies)           {
-                if (item.get("code").toString().equals(warehouseId.get("warehouseCode").toString()))               {
+            for (Map<String, Object> warehouseI:warehouseCompanies)           {
+                if (item.get("code").toString().equals(warehouseI.get("warehouseCode").toString()))               {
                     item.put("flag",true);
                     break;
                 }
@@ -139,6 +143,10 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         if (!locationTypeService.locationTypeCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制库位类型表失败");
         }
+        /* 复制库区表*/
+        if (!zoneService.zoneCopy(warehouseCode, newWarehouseCode)){
+            throw new ServiceException("复制库区类型表失败");
+        }
         /* 复制盘点首选项表*/
         if (!cycleCountPreferenceService.cycleCountPreferenceCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制盘点首选项表失败");
@@ -163,6 +171,10 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         if (warehouseMapper.companyCopy(warehouseCode, newWarehouseCode) < 1){
             throw new ServiceException("复制仓库货主关系表失败");
         }
+        /* 复制仓库用户关系*/
+        if (warehouseMapper.userCopy(warehouseCode, newWarehouseCode) < 1){
+            throw new ServiceException("复制仓库货主关系表失败");
+        }
         /* 复制角色*/
         if (!roleService.roleCopy(warehouseCode, newWarehouseCode)){
             throw new ServiceException("复制角色表失败");
diff --git a/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java b/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
index 6a38c5e..6de5049 100644
--- a/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
+++ b/src/main/java/com/huaheng/pc/config/waveMaster/service/WaveMasterService.java
@@ -9,6 +9,7 @@ import com.huaheng.pc.config.waveFlowHeader.mapper.WaveFlowHeaderMapper;
 import com.huaheng.pc.config.waveMaster.domain.WaveMaster;
 import com.huaheng.pc.config.waveMaster.mapper.WaveMasterMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 
@@ -25,6 +26,7 @@ public class WaveMasterService extends ServiceImpl<WaveMasterMapper, WaveMaster>
 
 
     //复制波次配置
+    @Transactional
     public Boolean waveMasterCopy(String code,String newCode){
         int i = 0;
         //复制波次配置
diff --git a/src/main/java/com/huaheng/pc/config/zone/mapper/ZoneMapper.java b/src/main/java/com/huaheng/pc/config/zone/mapper/ZoneMapper.java
index f058229..274ea5d 100644
--- a/src/main/java/com/huaheng/pc/config/zone/mapper/ZoneMapper.java
+++ b/src/main/java/com/huaheng/pc/config/zone/mapper/ZoneMapper.java
@@ -2,6 +2,10 @@ package com.huaheng.pc.config.zone.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.config.zone.domain.Zone;
+import org.apache.ibatis.annotations.Param;
 
 public interface ZoneMapper extends BaseMapper<Zone> {
+
+    /* 复制库区表*/
+    int zoneCopy(@Param("code") String code,@Param("newCode") String newCode);
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/config/zone/service/ZoneService.java b/src/main/java/com/huaheng/pc/config/zone/service/ZoneService.java
index 2663920..990b7a3 100644
--- a/src/main/java/com/huaheng/pc/config/zone/service/ZoneService.java
+++ b/src/main/java/com/huaheng/pc/config/zone/service/ZoneService.java
@@ -9,4 +9,7 @@ import java.util.Map;
 public interface ZoneService extends IService<Zone>{
     public List<Map<String, Object>> getZoneCodeList();
 
+    /* 复制库区表*/
+    boolean zoneCopy(String warehouseCode, String newWarehouseCode);
+
 }
diff --git a/src/main/java/com/huaheng/pc/config/zone/service/ZoneServiceImpl.java b/src/main/java/com/huaheng/pc/config/zone/service/ZoneServiceImpl.java
index 19ead5f..daee573 100644
--- a/src/main/java/com/huaheng/pc/config/zone/service/ZoneServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/config/zone/service/ZoneServiceImpl.java
@@ -3,20 +3,39 @@ package com.huaheng.pc.config.zone.service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.pc.config.zone.domain.Zone;
 import com.huaheng.pc.config.zone.mapper.ZoneMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
 @Service("zone")
 public class ZoneServiceImpl extends ServiceImpl<ZoneMapper, Zone> implements ZoneService {
 
+    @Resource
+    private ZoneMapper zoneMapper;
+
     @Override
+    @Transactional
     public List<Map<String, Object>> getZoneCodeList() {
         LambdaQueryWrapper<Zone> lambda = Wrappers.lambdaQuery();
         lambda.select(Zone::getId, Zone::getCode, Zone::getName);
         return this.listMaps(lambda);
     }
+
+    @Override
+    @Transactional
+    public boolean zoneCopy(String warehouseCode, String newWarehouseCode) {
+        int i = 0;
+        //复制流程主表
+        i = zoneMapper.zoneCopy(warehouseCode,newWarehouseCode);
+        if(i < 1){
+            throw new ServiceException("复制菜单数据失败");
+        }
+        return true;
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/jasper/JasperController.java b/src/main/java/com/huaheng/pc/jasper/JasperController.java
new file mode 100644
index 0000000..3ed4864
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/jasper/JasperController.java
@@ -0,0 +1,100 @@
+package com.huaheng.pc.jasper;
+
+import com.huaheng.common.jasper.DocType;
+import com.huaheng.common.jasper.DocTypeUtil;
+import com.huaheng.common.jasper.JasperreportUtils;
+import net.sf.jasperreports.engine.*;
+import net.sf.jasperreports.engine.util.JRLoader;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/jasper")
+public class JasperController {
+
+    @Resource
+    private DataSource dataSource;
+
+
+
+    /**
+     * 转换为pdf在浏览器上展示
+     *
+     * @param reportName
+     * @param parameters
+     * @param response
+     * @throws SQLException
+     * @throws ClassNotFoundException
+     * @throws JRException
+     * @throws IOException
+     */
+//    @GetMapping("/{reportName}")
+    public void getReportByParam(
+            @PathVariable("reportName") final String reportName,
+            @RequestParam(required = false) Map<String, Object> parameters,
+            HttpServletResponse response) throws Exception {
+
+        parameters = parameters == null ? new HashMap<>() : parameters;
+        //获取文件流
+        ClassPathResource resource = new ClassPathResource("jaspers" + File.separator + reportName + ".jasper");
+        InputStream jasperStream = resource.getInputStream();
+
+        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
+        Connection connection =dataSource.getConnection();
+        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
+        response.setContentType("application/pdf");
+        response.setHeader("Content-Disposition", "inline;");
+        final OutputStream outputStream = response.getOutputStream();
+        JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
+    }
+
+
+
+
+    /**
+     * 转换为多种格式导出
+     *
+     * @param reportName
+     * @param parameters
+     * @param response
+     * @throws SQLException
+     * @throws ClassNotFoundException
+     * @throws JRException
+     * @throws IOException
+     */
+    @GetMapping("/{reportName}")
+    public void getReportByExcel(
+            @PathVariable("reportName") final String reportName,
+            @RequestParam(required = false) Map<String, Object> parameters,
+            HttpServletRequest request,
+            HttpServletResponse response) throws Exception {
+
+        parameters = parameters == null ? new HashMap<>() : parameters;
+        String jasperPath ="C:/Users/Administrator/JaspersoftWorkspace/MyReports/" + reportName + ".jasper";
+        String docType="pdf";
+        DocType type = DocTypeUtil.getEnumDocType(docType);
+        String fileName =reportName;
+        List list =new ArrayList();
+        Connection connection =dataSource.getConnection();
+        JasperreportUtils jasperreportUtils =new JasperreportUtils(request,response,request.getSession());
+        jasperreportUtils.createExportDocument(type,jasperPath,parameters,reportName,connection);
+
+    }
+
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/errorlog/domain/ErrorLog.java b/src/main/java/com/huaheng/pc/monitor/errorlog/domain/ErrorLog.java
index a42d842..e9437fb 100644
--- a/src/main/java/com/huaheng/pc/monitor/errorlog/domain/ErrorLog.java
+++ b/src/main/java/com/huaheng/pc/monitor/errorlog/domain/ErrorLog.java
@@ -1,5 +1,9 @@
 package com.huaheng.pc.monitor.errorlog.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.huaheng.framework.web.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -11,40 +15,58 @@ import java.util.Date;
  * @author huaheng
  * @date 2018-12-4
  */
+
+@TableName(value = "logging_event")
 public class ErrorLog extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
     //错误编号
+    @TableId(value = "event_id", type = IdType.AUTO)
     private Integer event_id;
     //时间戳
+    @TableField(value = "timestmp")
     private Long timestmp;
     //格式化错误信息
+    @TableField(value = "formatted_message")
     private String formatted_message;
     //日志名
+    @TableField(value = "logger_name")
     private String logger_name;
     //级别
+    @TableField(value = "level_string")
     private String level_string;
     //线程名
+    @TableField(value = "thread_name")
     private String thread_name;
     //参数标志
+    @TableField(value = "reference_flag")
     private String reference_flag;
     //arg0参数
+    @TableField(value = "arg0")
     private String arg0;
     //arg1参数
+    @TableField(value = "arg1")
     private String arg1;
     //arg2参数
+    @TableField(value = "arg2")
     private String arg2;
     //arg3参数
+    @TableField(value = "arg3")
     private String arg3;
     //来电名称
+    @TableField(value = "caller_filename")
     private String caller_filename;
     //来电类
+    @TableField(value = "caller_class")
     private String caller_class;
     //来电方法
+    @TableField(value = "caller_method")
     private String caller_method;
     //来电线程
+    @TableField(value = "caller_line")
     private String caller_line;
     //发生时间
+    @TableField(value = "creatTime")
     private Date creatTime;
 
     public Integer getEvent_id() {
diff --git a/src/main/java/com/huaheng/pc/monitor/job/controller/JobController.java b/src/main/java/com/huaheng/pc/monitor/job/controller/JobController.java
new file mode 100644
index 0000000..1952167
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/controller/JobController.java
@@ -0,0 +1,153 @@
+package com.huaheng.pc.monitor.job.controller;
+
+import com.huaheng.common.utils.poi.ExcelUtil;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.framework.web.page.TableDataInfo;
+import com.huaheng.pc.monitor.job.domain.Job;
+import com.huaheng.pc.monitor.job.service.IJobService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 调度任务信息操作处理
+ * 
+ * @author huaheng
+ */
+@Controller
+@RequestMapping("/monitor/job")
+public class JobController extends BaseController
+{
+    private String prefix = "monitor/job";
+
+    @Autowired
+    private IJobService jobService;
+
+    @RequiresPermissions("monitor:job:view")
+    @GetMapping()
+    public String job()
+    {
+        return prefix + "/job";
+    }
+
+    @RequiresPermissions("monitor:job:list")
+    @Log(title = "系统监控-定时任务", operating = "查看定时任务", action = BusinessType.GRANT)
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(Job job)
+    {
+        startPage();
+        List<Job> list = jobService.selectJobList(job);
+        return getDataTable(list);
+    }
+
+    @Log(title = "系统监控-定时任务", operating = "导出定时任务", action = BusinessType.EXPORT)
+    @RequiresPermissions("monitor:job:export")
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(Job job) throws Exception
+    {
+        try
+        {
+            List<Job> list = jobService.selectJobList(job);
+            ExcelUtil<Job> util = new ExcelUtil<Job>(Job.class);
+            return util.exportExcel(list, "job");
+        }
+        catch (Exception e)
+        {
+            return error("导出Excel失败,请联系网站管理员!");
+        }
+    }
+
+    @Log(title = "系统监控-定时任务", operating = "删除定时任务", action = BusinessType.DELETE)
+    @RequiresPermissions("monitor:job:remove")
+    @PostMapping("/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids)
+    {
+        try
+        {
+            jobService.deleteJobByIds(ids);
+            return success();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return error(e.getMessage());
+        }
+    }
+
+    /**
+     * 任务调度状态修改
+     */
+    @Log(title = "系统监控-定时任务", operating = "启用或暂停定时任务", action = BusinessType.UPDATE)
+    @RequiresPermissions("monitor:job:changeStatus")
+    @PostMapping("/changeStatus")
+    @ResponseBody
+    public AjaxResult changeStatus(Job job)
+    {
+        return toAjax(jobService.changeStatus(job));
+    }
+
+    /**
+     * 任务调度立即执行一次
+     */
+    @Log(title = "系统监控-定时任务", operating = "执行定时任务", action = BusinessType.UPDATE)
+    @RequiresPermissions("monitor:job:start")
+    @PostMapping("/run")
+    @ResponseBody
+    public AjaxResult run(Job job)
+    {
+        return toAjax(jobService.run(job));
+    }
+
+    /**
+     * 新增调度
+     */
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+
+    /**
+     * 新增保存调度
+     */
+    @Log(title = "系统监控-定时任务", operating = "新增定时任务", action = BusinessType.INSERT)
+    @RequiresPermissions("monitor:job:add")
+    @PostMapping("/add")
+    @ResponseBody
+    public AjaxResult addSave(Job job)
+    {
+        return toAjax(jobService.insertJobCron(job));
+    }
+
+    /**
+     * 修改调度
+     */
+    @GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Long id, ModelMap mmap)
+    {
+        mmap.put("job", jobService.selectJobById(id));
+        return prefix + "/edit";
+    }
+
+    /**
+     * 修改保存调度
+     */
+    @Log(title = "系统监控-定时任务", operating = "修改定时任务", action = BusinessType.UPDATE)
+    @RequiresPermissions("monitor:job:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(Job job)
+    {
+        return toAjax(jobService.updateJobCron(job));
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/controller/JobLogController.java b/src/main/java/com/huaheng/pc/monitor/job/controller/JobLogController.java
new file mode 100644
index 0000000..9ea8e89
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/controller/JobLogController.java
@@ -0,0 +1,78 @@
+package com.huaheng.pc.monitor.job.controller;
+
+import com.huaheng.common.utils.poi.ExcelUtil;
+import com.huaheng.framework.aspectj.lang.annotation.Log;
+import com.huaheng.framework.aspectj.lang.constant.BusinessType;
+import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.framework.web.page.TableDataInfo;
+import com.huaheng.pc.monitor.job.domain.JobLog;
+import com.huaheng.pc.monitor.job.service.IJobLogService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 调度日志操作处理
+ * 
+ * @author huaheng
+ */
+@Controller
+@RequestMapping("/monitor/jobLog")
+public class JobLogController extends BaseController
+{
+    private String prefix = "monitor/job";
+
+    @Autowired
+    private IJobLogService jobLogService;
+
+    @RequiresPermissions("monitor:jobLog:view")
+    @GetMapping()
+    public String jobLog()
+    {
+        return prefix + "/jobLog";
+    }
+
+    @RequiresPermissions("monitor:jobLog:list")
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(JobLog jobLog)
+    {
+        startPage();
+        List<JobLog> list = jobLogService.selectJobLogList(jobLog);
+        return getDataTable(list);
+    }
+
+    @Log(title = "系统监控-定时任务", operating = "导出调度日志", action = BusinessType.EXPORT)
+    @RequiresPermissions("monitor:jobLog:export")
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(JobLog jobLog) throws Exception
+    {
+        try
+        {
+            List<JobLog> list = jobLogService.selectJobLogList(jobLog);
+            ExcelUtil<JobLog> util = new ExcelUtil<JobLog>(JobLog.class);
+            return util.exportExcel(list, "jobLog");
+        }
+        catch (Exception e)
+        {
+            return error("导出Excel失败,请联系网站管理员!");
+        }
+    }
+
+    @Log(title = "系统监控-定时任务", operating = "删除调度日志", action = BusinessType.DELETE)
+    @RequiresPermissions("monitor:jobLog:remove")
+    @PostMapping("/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids)
+    {
+        return toAjax(jobLogService.deleteJobLogByIds(ids));
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/domain/Job.java b/src/main/java/com/huaheng/pc/monitor/job/domain/Job.java
new file mode 100644
index 0000000..f010498
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/domain/Job.java
@@ -0,0 +1,249 @@
+package com.huaheng.pc.monitor.job.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Maps;
+import com.huaheng.common.constant.ScheduleConstants;
+import com.huaheng.framework.aspectj.lang.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 定时任务调度信息 sys_job
+ * 
+ * @author huaheng
+ */
+@TableName(value = "sys_job")
+public class Job implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 任务ID */
+    @Excel(name = "任务序号")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /** 任务名称 */
+    @Excel(name = "任务名称")
+    @TableField(value = "jobName")
+    private String jobName;
+
+    /** 任务组名 */
+    @Excel(name = "任务组名")
+    @TableField(value = "jobGroup")
+    private String jobGroup;
+
+    /** 任务方法 */
+    @Excel(name = "任务方法")
+    @TableField(value = "methodName")
+    private String methodName;
+
+    /** 方法参数 */
+    @Excel(name = "方法参数")
+    @TableField(value = "methodParams")
+    private String methodParams;
+
+    /** cron执行表达式 */
+    @Excel(name = "执行表达式 ")
+    @TableField(value = "cronExpression")
+    private String cronExpression;
+
+    /** cron计划策略 */
+    @Excel(name = "计划策略 ")
+    @TableField(value = "misfirePolicy")
+    private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT;
+
+    /** 任务状态(0正常 1暂停) */
+    @Excel(name = "任务状态")
+    @TableField(value = "status")
+    private String status;
+
+    /** 搜索值 */
+    private String searchValue;
+
+    /** 创建者 */
+    @TableField(value = "createBy")
+    private String createBy;
+
+    /** 创建时间 */
+    @TableField(value = "createTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新者 */
+    @TableField(value = "updateBy")
+    private String updateBy;
+
+    /** 更新时间 */
+    @TableField(value = "updateTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 备注 */
+    @TableField(value = "remark")
+//    @TableField(exist=false)
+    private String remark;
+
+    /** 请求参数 */
+    private Map<String, Object> params;
+
+    public Long getId()
+    {
+        return id;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public String getJobName()
+    {
+        return jobName;
+    }
+
+    public void setJobName(String jobName)
+    {
+        this.jobName = jobName;
+    }
+
+    public String getJobGroup()
+    {
+        return jobGroup;
+    }
+
+    public void setJobGroup(String jobGroup)
+    {
+        this.jobGroup = jobGroup;
+    }
+
+    public String getMethodName()
+    {
+        return methodName;
+    }
+
+    public void setMethodName(String methodName)
+    {
+        this.methodName = methodName;
+    }
+
+    public String getMethodParams()
+    {
+        return methodParams;
+    }
+
+    public void setMethodParams(String methodParams)
+    {
+        this.methodParams = methodParams;
+    }
+
+    public String getCronExpression()
+    {
+        return cronExpression;
+    }
+
+    public void setCronExpression(String cronExpression)
+    {
+        this.cronExpression = cronExpression;
+    }
+
+    public String getMisfirePolicy()
+    {
+        return misfirePolicy;
+    }
+
+    public void setMisfirePolicy(String misfirePolicy)
+    {
+        this.misfirePolicy = misfirePolicy;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getSearchValue()
+    {
+        return searchValue;
+    }
+
+    public void setSearchValue(String searchValue)
+    {
+        this.searchValue = searchValue;
+    }
+
+    public String getCreateBy()
+    {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy)
+    {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime()
+    {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime)
+    {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateBy()
+    {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy)
+    {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime()
+    {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime)
+    {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark()
+    {
+        return remark;
+    }
+
+    public void setRemark(String remark)
+    {
+        this.remark = remark;
+    }
+
+    public Map<String, Object> getParams()     {         if (params == null) {             params = Maps.newHashMap();         }         return params;     }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "Job [id=" + id + ", jobName=" + jobName + ", jobGroup=" + jobGroup + ", methodName=" + methodName
+                + ", methodParams=" + methodParams + ", cronExpression=" + cronExpression + ", status=" + status + "]";
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/domain/JobLog.java b/src/main/java/com/huaheng/pc/monitor/job/domain/JobLog.java
new file mode 100644
index 0000000..79d6910
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/domain/JobLog.java
@@ -0,0 +1,248 @@
+package com.huaheng.pc.monitor.job.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Maps;
+import com.huaheng.framework.aspectj.lang.annotation.Excel;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 定时任务调度日志信息 sys_job_log
+ * 
+ * @author huaheng
+ */
+@TableName(value = "sys_job_log")
+public class JobLog
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @Excel(name = "日志序号")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /** 任务名称 */
+    @Excel(name = "任务名称")
+    @TableField(value = "jobName")
+    private String jobName;
+
+    /** 任务组名 */
+    @Excel(name = "任务组名")
+    @TableField(value = "jobGroup")
+    private String jobGroup;
+
+    /** 任务方法 */
+    @Excel(name = "任务方法")
+    @TableField(value = "methodName")
+    private String methodName;
+
+    /** 方法参数 */
+    @Excel(name = "方法参数")
+    @TableField(value = "methodParams")
+    private String methodParams;
+
+    /** 日志信息 */
+    @Excel(name = "日志信息")
+    @TableField(value = "jobMessage")
+    private String jobMessage;
+
+    /** 执行状态(0正常 1失败) */
+    @Excel(name = "执行状态")
+    @TableField(value = "status")
+    private String status;
+
+    /** 异常信息 */
+    @Excel(name = "异常信息")
+    @TableField(value = "exceptionInfo")
+    private String exceptionInfo;
+
+    /** 搜索值 */
+    private String searchValue;
+
+    /** 创建者 */
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "createTime")
+    private Date createTime;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 备注 */
+//    @TableField(exist=false)
+    private String remark;
+
+    /** 请求参数 */
+    private Map<String, Object> params;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getJobName()
+    {
+        return jobName;
+    }
+
+    public void setJobName(String jobName)
+    {
+        this.jobName = jobName;
+    }
+
+    public String getJobGroup()
+    {
+        return jobGroup;
+    }
+
+    public void setJobGroup(String jobGroup)
+    {
+        this.jobGroup = jobGroup;
+    }
+
+    public String getMethodName()
+    {
+        return methodName;
+    }
+
+    public void setMethodName(String methodName)
+    {
+        this.methodName = methodName;
+    }
+
+    public String getMethodParams()
+    {
+        return methodParams;
+    }
+
+    public void setMethodParams(String methodParams)
+    {
+        this.methodParams = methodParams;
+    }
+
+    public String getJobMessage()
+    {
+        return jobMessage;
+    }
+
+    public void setJobMessage(String jobMessage)
+    {
+        this.jobMessage = jobMessage;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getExceptionInfo()
+    {
+        return exceptionInfo;
+    }
+
+    public void setExceptionInfo(String exceptionInfo)
+    {
+        this.exceptionInfo = exceptionInfo;
+    }
+
+    public String getSearchValue()
+    {
+        return searchValue;
+    }
+
+    public void setSearchValue(String searchValue)
+    {
+        this.searchValue = searchValue;
+    }
+
+    public String getCreateBy()
+    {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy)
+    {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime()
+    {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime)
+    {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateBy()
+    {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy)
+    {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime()
+    {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime)
+    {
+        this.updateTime = updateTime;
+    }
+
+    public String getRemark()
+    {
+        return remark;
+    }
+
+    public void setRemark(String remark)
+    {
+        this.remark = remark;
+    }
+
+    public Map<String, Object> getParams()
+    {
+        if (params == null) {
+            params = Maps.newHashMap();
+        }
+        return params;
+    }
+
+    public void setParams(Map<String, Object> params)
+    {
+        this.params = params;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "JobLog [id=" + id + ", jobName=" + jobName + ", jobGroup=" + jobGroup + ", methodName="
+                + methodName + ", methodParams=" + methodParams + ", jobMessage=" + jobMessage + ", status=" + status
+                + ", exceptionInfo=" + exceptionInfo + "]";
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/mapper/JobLogMapper.java b/src/main/java/com/huaheng/pc/monitor/job/mapper/JobLogMapper.java
new file mode 100644
index 0000000..c965838
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/mapper/JobLogMapper.java
@@ -0,0 +1,61 @@
+package com.huaheng.pc.monitor.job.mapper;
+
+import com.huaheng.pc.monitor.job.domain.JobLog;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 调度任务日志信息 数据层
+ * 
+ * @author huaheng
+ */
+@Service
+public interface JobLogMapper
+{
+
+    /**
+     * 获取quartz调度器日志的计划任务
+     * 
+     * @param jobLog 调度日志信息
+     * @return 调度任务日志集合
+     */
+    public List<JobLog> selectJobLogList(JobLog jobLog);
+
+    /**
+     * 通过调度任务日志ID查询调度信息
+     * 
+     * @param id 调度任务日志ID
+     * @return 调度任务日志对象信息
+     */
+    public JobLog selectJobLogById(Integer id);
+
+    /**
+     * 新增任务日志
+     * 
+     * @param jobLog 调度日志信息
+     * @return 结果
+     */
+    public int insertJobLog(JobLog jobLog);
+
+    /**
+     * 批量删除调度日志信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteJobLogByIds(String[] ids);
+
+    /**
+     * 删除任务日志
+     * 
+     * @param id 调度日志ID
+     * @return 结果
+     */
+    public int deleteJobLogById(Integer id);
+
+
+    //清空任务日志
+    public int truncateTable();
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/mapper/JobMapper.java b/src/main/java/com/huaheng/pc/monitor/job/mapper/JobMapper.java
new file mode 100644
index 0000000..740ffca
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/mapper/JobMapper.java
@@ -0,0 +1,72 @@
+package com.huaheng.pc.monitor.job.mapper;
+
+import com.huaheng.pc.monitor.job.domain.Job;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 调度任务信息 数据层
+ * 
+ * @author huaheng
+ */
+@Service
+public interface JobMapper
+{
+
+    /**
+     * 查询调度任务日志集合
+     * 
+     * @param job 调度信息
+     * @return 操作日志集合
+     */
+    public List<Job> selectJobList(Job job);
+
+    /**
+     * 查询所有调度任务
+     * 
+     * @return 调度任务列表
+     */
+    public List<Job> selectJobAll();
+
+    /**
+     * 通过调度ID查询调度任务信息
+     * 
+     * @param id 调度ID
+     * @return 角色对象信息
+     */
+    public Job selectJobById(Long id);
+
+    /**
+     * 通过调度ID删除调度任务信息
+     * 
+     * @param job 调度
+     * @return 结果
+     */
+    public int deleteJobById(Job job);
+
+    /**
+     * 批量删除调度任务信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteJobByIds(Integer[] ids);
+
+    /**
+     * 修改调度任务信息
+     * 
+     * @param job 调度任务信息
+     * @return 结果
+     */
+    public int updateJob(Job job);
+
+    /**
+     * 新增调度任务信息
+     * 
+     * @param job 调度任务信息
+     * @return 结果
+     */
+    public int insertJob(Job job);
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/service/IJobLogService.java b/src/main/java/com/huaheng/pc/monitor/job/service/IJobLogService.java
new file mode 100644
index 0000000..1b8cb56
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/service/IJobLogService.java
@@ -0,0 +1,57 @@
+package com.huaheng.pc.monitor.job.service;
+
+import com.huaheng.pc.monitor.job.domain.JobLog;
+
+import java.util.List;
+
+/**
+ * 定时任务调度日志信息信息 服务层
+ * 
+ * @author huaheng
+ */
+public interface IJobLogService
+{
+
+    /**
+     * 获取quartz调度器日志的计划任务
+     * 
+     * @param jobLog 调度日志信息
+     * @return 调度任务日志集合
+     */
+    public List<JobLog> selectJobLogList(JobLog jobLog);
+
+    /**
+     * 通过调度任务日志ID查询调度信息
+     * 
+     * @param id 调度任务日志ID
+     * @return 调度任务日志对象信息
+     */
+    public JobLog selectJobLogById(Integer id);
+
+    /**
+     * 新增任务日志
+     * 
+     * @param jobLog 调度日志信息
+     */
+    public void addJobLog(JobLog jobLog);
+
+    /**
+     * 批量删除调度日志信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteJobLogByIds(String ids);
+
+    /**
+     * 删除任务日志
+     * 
+     * @param id 调度日志ID
+     * @return 结果
+     */
+    public int deleteJobLogById(Integer id);
+
+    //清空任务日志
+    public int truncateTable();
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/service/IJobService.java b/src/main/java/com/huaheng/pc/monitor/job/service/IJobService.java
new file mode 100644
index 0000000..cf72edb
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/service/IJobService.java
@@ -0,0 +1,95 @@
+package com.huaheng.pc.monitor.job.service;
+
+import com.huaheng.pc.monitor.job.domain.Job;
+
+import java.util.List;
+
+/**
+ * 定时任务调度信息信息 服务层
+ * 
+ * @author huaheng
+ */
+public interface IJobService
+{
+
+    /**
+     * 获取quartz调度器的计划任务
+     * 
+     * @param job 调度信息
+     * @return 调度任务集合
+     */
+    public List<Job> selectJobList(Job job);
+
+    /**
+     * 通过调度任务ID查询调度信息
+     * 
+     * @param id 调度任务ID
+     * @return 调度任务对象信息
+     */
+    public Job selectJobById(Long id);
+
+    /**
+     * 暂停任务
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int pauseJob(Job job);
+
+    /**
+     * 恢复任务
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int resumeJob(Job job);
+
+    /**
+     * 删除任务后,所对应的trigger也将被删除
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int deleteJob(Job job);
+
+    /**
+     * 批量删除调度信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public void deleteJobByIds(String ids);
+
+    /**
+     * 任务调度状态修改
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int changeStatus(Job job);
+
+    /**
+     * 立即运行任务
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int run(Job job);
+
+    /**
+     * 新增任务表达式
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int insertJobCron(Job job);
+
+    /**
+     * 更新任务的时间表达式
+     * 
+     * @param job 调度信息
+     * @return 结果
+     */
+    public int updateJobCron(Job job);
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/service/JobLogServiceImpl.java b/src/main/java/com/huaheng/pc/monitor/job/service/JobLogServiceImpl.java
new file mode 100644
index 0000000..5c21549
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/service/JobLogServiceImpl.java
@@ -0,0 +1,86 @@
+package com.huaheng.pc.monitor.job.service;
+
+import com.huaheng.common.support.Convert;
+import com.huaheng.pc.monitor.job.domain.JobLog;
+import com.huaheng.pc.monitor.job.mapper.JobLogMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 定时任务调度日志信息 服务层
+ * 
+ * @author huaheng
+ */
+@Service
+public class JobLogServiceImpl implements IJobLogService
+{
+
+    @Autowired
+    private JobLogMapper jobLogMapper;
+
+    /**
+     * 获取quartz调度器日志的计划任务
+     * 
+     * @param jobLog 调度日志信息
+     * @return 调度任务日志集合
+     */
+    @Override
+    public List<JobLog> selectJobLogList(JobLog jobLog)
+    {
+        return jobLogMapper.selectJobLogList(jobLog);
+    }
+
+    /**
+     * 通过调度任务日志ID查询调度信息
+     * 
+     * @param id 调度任务日志ID
+     * @return 调度任务日志对象信息
+     */
+    @Override
+    public JobLog selectJobLogById(Integer id)
+    {
+        return jobLogMapper.selectJobLogById(id);
+    }
+
+    /**
+     * 新增任务日志
+     * 
+     * @param jobLog 调度日志信息
+     */
+    @Override
+    public void addJobLog(JobLog jobLog)
+    {
+        jobLogMapper.insertJobLog(jobLog);
+    }
+
+    /**
+     * 批量删除调度日志信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public int deleteJobLogByIds(String ids)
+    {
+        return jobLogMapper.deleteJobLogByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除任务日志
+     * 
+     * @param id 调度日志ID
+     */
+    @Override
+    public int deleteJobLogById(Integer id)
+    {
+        return jobLogMapper.deleteJobLogById(id);
+    }
+
+    @Override
+    public int truncateTable() {
+        return jobLogMapper.truncateTable();
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/service/JobServiceImpl.java b/src/main/java/com/huaheng/pc/monitor/job/service/JobServiceImpl.java
new file mode 100644
index 0000000..a66d9d7
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/service/JobServiceImpl.java
@@ -0,0 +1,213 @@
+package com.huaheng.pc.monitor.job.service;
+
+import com.huaheng.common.constant.ScheduleConstants;
+import com.huaheng.common.support.Convert;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.pc.monitor.job.domain.Job;
+import com.huaheng.pc.monitor.job.mapper.JobMapper;
+import com.huaheng.pc.monitor.job.util.ScheduleUtils;
+import org.quartz.CronTrigger;
+import org.quartz.Scheduler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * 定时任务调度信息 服务层
+ * 
+ * @author huaheng
+ */
+@Service
+public class JobServiceImpl implements IJobService
+{
+    @Autowired
+    private Scheduler scheduler;
+
+    @Autowired
+    private JobMapper jobMapper;
+
+    /**
+     * 项目启动时,初始化定时器
+     */
+    @PostConstruct
+    public void init()
+    {
+        List<Job> jobList = jobMapper.selectJobAll();
+        for (Job job : jobList)
+        {
+            CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, job.getId());
+            // 如果不存在,则创建
+            if (cronTrigger == null)
+            {
+                ScheduleUtils.createScheduleJob(scheduler, job);
+            }
+            else
+            {
+                ScheduleUtils.updateScheduleJob(scheduler, job);
+            }
+        }
+    }
+
+    /**
+     * 获取quartz调度器的计划任务列表
+     * 
+     * @param job 调度信息
+     * @return
+     */
+    @Override
+    public List<Job> selectJobList(Job job)
+    {
+        return jobMapper.selectJobList(job);
+    }
+
+    /**
+     * 通过调度任务ID查询调度信息
+     * 
+     * @param id 调度任务ID
+     * @return 调度任务对象信息
+     */
+    @Override
+    public Job selectJobById(Long id)
+    {
+        return jobMapper.selectJobById(id);
+    }
+
+    /**
+     * 暂停任务
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int pauseJob(Job job)
+    {
+        job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
+        job.setUpdateBy(ShiroUtils.getLoginName());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.pauseJob(scheduler, job.getId());
+        }
+        return rows;
+    }
+
+    /**
+     * 恢复任务
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int resumeJob(Job job)
+    {
+        job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
+        job.setUpdateBy(ShiroUtils.getLoginName());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.resumeJob(scheduler, job.getId());
+        }
+        return rows;
+    }
+
+    /**
+     * 删除任务后,所对应的trigger也将被删除
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int deleteJob(Job job)
+    {
+        int rows = jobMapper.deleteJobById(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.deleteScheduleJob(scheduler, job.getId());
+        }
+        return rows;
+    }
+
+    /**
+     * 批量删除调度信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    @Override
+    public void deleteJobByIds(String ids)
+    {
+        Long[] jobIds = Convert.toLongArray(ids);
+        for (Long id : jobIds)
+        {
+            Job job = jobMapper.selectJobById(id);
+            deleteJob(job);
+        }
+    }
+
+    /**
+     * 任务调度状态修改
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int changeStatus(Job job)
+    {
+        int rows = 0;
+        String status = job.getStatus();
+        if (ScheduleConstants.Status.NORMAL.getValue().equals(status))
+        {
+            rows = resumeJob(job);
+        }
+        else if (ScheduleConstants.Status.PAUSE.getValue().equals(status))
+        {
+            rows = pauseJob(job);
+        }
+        return rows;
+    }
+
+    /**
+     * 立即运行任务
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int run(Job job)
+    {
+        return ScheduleUtils.run(scheduler, selectJobById(job.getId()));
+    }
+
+    /**
+     * 新增任务
+     * 
+     * @param job 调度信息 调度信息
+     */
+    @Override
+    public int insertJobCron(Job job)
+    {
+        job.setCreateBy(ShiroUtils.getLoginName());
+        job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
+        int rows = jobMapper.insertJob(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.createScheduleJob(scheduler, job);
+        }
+        return rows;
+    }
+
+    /**
+     * 更新任务的时间表达式
+     * 
+     * @param job 调度信息
+     */
+    @Override
+    public int updateJobCron(Job job)
+    {
+        job.setUpdateBy(ShiroUtils.getLoginName());
+        int rows = jobMapper.updateJob(job);
+        if (rows > 0)
+        {
+            ScheduleUtils.updateScheduleJob(scheduler, job);
+        }
+        return rows;
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java b/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java
new file mode 100644
index 0000000..6dafb28
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java
@@ -0,0 +1,36 @@
+package com.huaheng.pc.monitor.job.task;
+
+
+import com.huaheng.pc.monitor.job.service.IJobLogService;
+import com.huaheng.pc.monitor.operlog.service.IOperLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 定时任务调度测试
+ * 
+ * @author huaheng
+ */
+@Component("ryTask")
+public class RyTask
+{
+
+
+    @Autowired
+    private IJobLogService jobLogService;
+    @Autowired
+    private IOperLogService operLogService;
+
+
+
+    public void deleted(){
+        operLogService.truncateTable();
+        jobLogService.truncateTable();
+        System.out.println("===============================清空log表===========" + new Date().toString());
+    }
+
+
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleJob.java b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleJob.java
new file mode 100644
index 0000000..9cd950d
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleJob.java
@@ -0,0 +1,79 @@
+package com.huaheng.pc.monitor.job.util;
+
+import com.huaheng.common.constant.Constants;
+import com.huaheng.common.constant.ScheduleConstants;
+import com.huaheng.common.utils.bean.BeanUtils;
+import com.huaheng.common.utils.spring.SpringUtils;
+import com.huaheng.pc.monitor.job.domain.Job;
+import com.huaheng.pc.monitor.job.domain.JobLog;
+import com.huaheng.pc.monitor.job.service.IJobLogService;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.Date;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+/**
+ * 定时任务
+ * 
+ * @author huaheng
+ *
+ */
+public class ScheduleJob extends QuartzJobBean
+{
+    private static final Logger log = LoggerFactory.getLogger(ScheduleJob.class);
+
+    private ExecutorService service = Executors.newSingleThreadExecutor();
+
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException
+    {
+        Job job = new Job();
+        BeanUtils.copyBeanProp(job, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
+
+        IJobLogService jobLogService = (IJobLogService) SpringUtils.getBean(IJobLogService.class);
+
+        JobLog jobLog = new JobLog();
+        jobLog.setJobName(job.getJobName());
+        jobLog.setJobGroup(job.getJobGroup());
+        jobLog.setMethodName(job.getMethodName());
+        jobLog.setMethodParams(job.getMethodParams());
+        jobLog.setCreateTime(new Date());
+
+        Long startTime = System.currentTimeMillis();
+
+        try
+        {
+            // 执行任务
+            log.info("任务开始执行 - 名称:{} 方法:{}", job.getJobName(), job.getMethodName());
+            ScheduleRunnable task = new ScheduleRunnable(job.getJobName(), job.getMethodName(), job.getMethodParams());
+            Future<?> future = service.submit(task);
+            future.get();
+            Long times = System.currentTimeMillis() - startTime;
+            // 任务状态 0:成功 1:失败
+            jobLog.setStatus(Constants.SUCCESS);
+            jobLog.setJobMessage(job.getJobName() + " 总共耗时:" + times + "毫秒");
+
+            log.info("任务执行结束 - 名称:{} 耗时:{} 毫秒", job.getJobName(), times);
+        }
+        catch (Exception e)
+        {
+            log.info("任务执行失败 - 名称:{} 方法:{}", job.getJobName(), job.getMethodName());
+            log.error("任务执行异常  - :", e);
+            Long times = System.currentTimeMillis() - startTime;
+            jobLog.setJobMessage(job.getJobName() + " 总共耗时:" + times + "毫秒");
+            // 任务状态 0:成功 1:失败
+            jobLog.setStatus(Constants.FAIL);
+            jobLog.setExceptionInfo(e.toString());
+        }
+        finally
+        {
+            jobLogService.addJobLog(jobLog);
+        }
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleRunnable.java b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleRunnable.java
new file mode 100644
index 0000000..6b9b40f
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleRunnable.java
@@ -0,0 +1,58 @@
+package com.huaheng.pc.monitor.job.util;
+
+import com.huaheng.common.utils.StringUtils;
+import com.huaheng.common.utils.spring.SpringUtils;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Method;
+
+/**
+ * 执行定时任务
+ * 
+ * @author huaheng
+ *
+ */
+public class ScheduleRunnable implements Runnable
+{
+    private Object target;
+    private Method method;
+    private String params;
+
+    public ScheduleRunnable(String beanName, String methodName, String params)
+            throws NoSuchMethodException, SecurityException
+    {
+        this.target = SpringUtils.getBean(beanName);
+        this.params = params;
+
+        if (StringUtils.isNotEmpty(params))
+        {
+            this.method = target.getClass().getDeclaredMethod(methodName, String.class);
+        }
+        else
+        {
+            this.method = target.getClass().getDeclaredMethod(methodName);
+        }
+    }
+
+    @Override
+    public void run()
+    {
+        try
+        {
+            ReflectionUtils.makeAccessible(method);
+            if (StringUtils.isNotEmpty(params))
+            {
+                method.invoke(target, params);
+            }
+            else
+            {
+                method.invoke(target);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleUtils.java b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleUtils.java
new file mode 100644
index 0000000..f66c5eb
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/monitor/job/util/ScheduleUtils.java
@@ -0,0 +1,216 @@
+package com.huaheng.pc.monitor.job.util;
+
+import com.huaheng.common.constant.ScheduleConstants;
+import com.huaheng.common.exception.job.TaskException;
+import com.huaheng.common.exception.job.TaskException.Code;
+import com.huaheng.pc.monitor.job.domain.Job;
+import org.quartz.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 定时任务工具类
+ * 
+ * @author huaheng
+ *
+ */
+public class ScheduleUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(ScheduleUtils.class);
+
+    /**
+     * 获取触发器key
+     */
+    public static TriggerKey getTriggerKey(Long id)
+    {
+        return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + id);
+    }
+
+    /**
+     * 获取jobKey
+     */
+    public static JobKey getJobKey(Long id)
+    {
+        return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + id);
+    }
+
+    /**
+     * 获取表达式触发器
+     */
+    public static CronTrigger getCronTrigger(Scheduler scheduler, Long id)
+    {
+        try
+        {
+            return (CronTrigger) scheduler.getTrigger(getTriggerKey(id));
+        }
+        catch (SchedulerException e)
+        {
+            log.error("getCronTrigger 异常:", e);
+        }
+        return null;
+    }
+
+    /**
+     * 创建定时任务
+     */
+    public static void createScheduleJob(Scheduler scheduler, Job job)
+    {
+        try
+        {
+            // 构建job信息
+            JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(job.getId())).build();
+
+            // 表达式调度构建器
+            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
+            cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder);
+
+            // 按新的cronExpression表达式构建一个新的trigger
+            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(job.getId())).withSchedule(cronScheduleBuilder).build();
+
+            // 放入参数,运行时的方法可以获取
+            jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);
+
+            scheduler.scheduleJob(jobDetail, trigger);
+
+            // 暂停任务
+            if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue()))
+            {
+                pauseJob(scheduler, job.getId());
+            }
+        }
+        catch (SchedulerException e)
+        {
+            log.error("createScheduleJob 异常:", e);
+        }
+        catch (TaskException e)
+        {
+            log.error("createScheduleJob 异常:", e);
+        }
+    }
+
+    /**
+     * 更新定时任务
+     */
+    public static void updateScheduleJob(Scheduler scheduler, Job job)
+    {
+        try
+        {
+            TriggerKey triggerKey = getTriggerKey(job.getId());
+
+            // 表达式调度构建器
+            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
+            cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder);
+
+            CronTrigger trigger = getCronTrigger(scheduler, job.getId());
+
+            // 按新的cronExpression表达式重新构建trigger
+            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
+
+            // 参数
+            trigger.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);
+
+            scheduler.rescheduleJob(triggerKey, trigger);
+
+            // 暂停任务
+            if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue()))
+            {
+                pauseJob(scheduler, job.getId());
+            }
+
+        }
+        catch (SchedulerException e)
+        {
+            log.error("SchedulerException 异常:", e);
+        }
+        catch (TaskException e)
+        {
+            log.error("SchedulerException 异常:", e);
+        }
+    }
+
+    /**
+     * 立即执行任务
+     */
+    public static int run(Scheduler scheduler, Job job)
+    {
+        int rows = 0;
+        try
+        {
+            // 参数
+            JobDataMap dataMap = new JobDataMap();
+            dataMap.put(ScheduleConstants.TASK_PROPERTIES, job);
+
+            scheduler.triggerJob(getJobKey(job.getId()), dataMap);
+            rows = 1;
+        }
+        catch (SchedulerException e)
+        {
+            log.error("run 异常:", e);
+        }
+        return rows;
+    }
+
+    /**
+     * 暂停任务
+     */
+    public static void pauseJob(Scheduler scheduler, Long id)
+    {
+        try
+        {
+            scheduler.pauseJob(getJobKey(id));
+        }
+        catch (SchedulerException e)
+        {
+            log.error("pauseJob 异常:", e);
+        }
+    }
+
+    /**
+     * 恢复任务
+     */
+    public static void resumeJob(Scheduler scheduler, Long id)
+    {
+        try
+        {
+            scheduler.resumeJob(getJobKey(id));
+        }
+        catch (SchedulerException e)
+        {
+            log.error("resumeJob 异常:", e);
+        }
+    }
+
+    /**
+     * 删除定时任务
+     */
+    public static void deleteScheduleJob(Scheduler scheduler, Long id)
+    {
+        try
+        {
+            scheduler.deleteJob(getJobKey(id));
+        }
+        catch (SchedulerException e)
+        {
+            log.error("deleteScheduleJob 异常:", e);
+        }
+    }
+
+    public static CronScheduleBuilder handleCronScheduleMisfirePolicy(Job job, CronScheduleBuilder cb)
+            throws TaskException
+    {
+        switch (job.getMisfirePolicy())
+        {
+            case ScheduleConstants.MISFIRE_DEFAULT:
+                return cb;
+            case ScheduleConstants.MISFIRE_IGNORE_MISFIRES:
+                return cb.withMisfireHandlingInstructionIgnoreMisfires();
+            case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED:
+                return cb.withMisfireHandlingInstructionFireAndProceed();
+            case ScheduleConstants.MISFIRE_DO_NOTHING:
+                return cb.withMisfireHandlingInstructionDoNothing();
+            default:
+                throw new TaskException("The task misfire policy '" + job.getMisfirePolicy()
+                        + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR);
+        }
+    }
+}
diff --git a/src/main/java/com/huaheng/pc/monitor/logininfor/domain/Logininfor.java b/src/main/java/com/huaheng/pc/monitor/logininfor/domain/Logininfor.java
index b6dec09..256c854 100644
--- a/src/main/java/com/huaheng/pc/monitor/logininfor/domain/Logininfor.java
+++ b/src/main/java/com/huaheng/pc/monitor/logininfor/domain/Logininfor.java
@@ -1,5 +1,9 @@
 package com.huaheng.pc.monitor.logininfor.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.google.common.collect.Maps;
 import com.huaheng.framework.aspectj.lang.annotation.Excel;
@@ -11,35 +15,52 @@ import java.util.Map;
  * 
  * @author huaheng
  */
+@TableName(value = "sys_logininfor")
 public class Logininfor
 {
     private static final long serialVersionUID = 1L;
     /** ID */
     @Excel(name = "序号")
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
     /** 用户账号 */
     @Excel(name = "用户账号")
+    @TableField(value = "loginName")
     private String loginName;
+
     /** 登录状态 0成功 1失败 */
     @Excel(name = "登录状态")
+    @TableField(value = "status")
     private String status;
+
     /** 登录IP地址 */
+    @TableField(value = "ipaddr")
     @Excel(name = "登录地址")
     private String ipaddr;
+
     /** 登录地点 */
     @Excel(name = "登录地点")
+    @TableField(value = "loginLocation")
     private String loginLocation;
+
     /** 浏览器类型 */
     @Excel(name = "浏览器")
+    @TableField(value = "browser")
     private String browser;
+
     /** 操作系统 */
     @Excel(name = "操作系统 ")
+    @TableField(value = "os")
     private String os;
     /** 提示消息 */
+
     @Excel(name = "提示消息")
+    @TableField(value = "msg")
     private String msg;
+
     /** 访问时间 */
     @Excel(name = "访问时间")
+    @TableField(value = "loginTime")
     private Date loginTime;
 
     /** 搜索值 */
diff --git a/src/main/java/com/huaheng/pc/monitor/online/domain/UserOnline.java b/src/main/java/com/huaheng/pc/monitor/online/domain/UserOnline.java
index 6ba2b9c..a663699 100644
--- a/src/main/java/com/huaheng/pc/monitor/online/domain/UserOnline.java
+++ b/src/main/java/com/huaheng/pc/monitor/online/domain/UserOnline.java
@@ -1,5 +1,9 @@
 package com.huaheng.pc.monitor.online.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.google.common.collect.Maps;
 import com.huaheng.common.utils.AddressUtils;
@@ -12,44 +16,57 @@ import java.util.Map;
  * 
  * @author huaheng
  */
+@TableName(value = "sys_user_online")
 public class UserOnline
 {
     private static final long serialVersionUID = 1L;
 
     /** ID */
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /** 用户会话id */
+    @TableField(value = "sessionId")
     private String sessionId;
 
     /** 部门名称 */
+    @TableField(value = "deptName")
     private String deptName;
 
     /** 登录名称 */
+    @TableField(value = "loginName")
     private String loginName;
 
     /** 登录IP地址 */
+    @TableField(value = "ipaddr")
     private String ipaddr;
 
     /** 登录地址 */
+    @TableField(value = "longinLocation")
     private String longinLocation;
 
     /** 浏览器类型 */
+    @TableField(value = "browser")
     private String browser;
 
     /** 操作系统 */
+    @TableField(value = "os")
     private String os;
 
     /** session创建时间 */
+    @TableField(value = "startTimestamp")
     private Date startTimestamp;
 
     /** session最后访问时间 */
+    @TableField(value = "lastAccessTime")
     private Date lastAccessTime;
 
     /** 超时时间,单位为分钟 */
+    @TableField(value = "expireTime")
     private Long expireTime;
 
     /** 在线状态 */
+    @TableField(value = "status")
     private OnlineStatus status = OnlineStatus.on_line;
 
     /** 备份的当前用户会话 */
diff --git a/src/main/java/com/huaheng/pc/monitor/operlog/domain/OperLog.java b/src/main/java/com/huaheng/pc/monitor/operlog/domain/OperLog.java
index b716db2..ffb8083 100644
--- a/src/main/java/com/huaheng/pc/monitor/operlog/domain/OperLog.java
+++ b/src/main/java/com/huaheng/pc/monitor/operlog/domain/OperLog.java
@@ -2,6 +2,11 @@ package com.huaheng.pc.monitor.operlog.domain;
 
 import java.util.Date;
 import java.util.Map;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.google.common.collect.Maps;
 import com.huaheng.framework.aspectj.lang.annotation.Excel;
@@ -12,68 +17,84 @@ import com.huaheng.framework.aspectj.lang.annotation.Excel;
  * 
  * @author huaheng
  */
+@TableName(value = "sys_oper_log")
 public class OperLog
 {
     private static final long serialVersionUID = 1L;
 
     /** 日志主键 */
     @Excel(name = "操作序号")
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /** 操作模块 */
     @Excel(name = "操作模块")
+    @TableField(value = "title")
     private String title;
 
     /** 具体操作 */
     @Excel(name = "具体操作")
+    @TableField(value = "operating")
     private  String operating;
 
     /** 操作类型 */
     @Excel(name = "操作类型")
+    @TableField(value = "action")
     private String action;
 
     /** 请求方法 */
     @Excel(name = "请求方法")
+    @TableField(value = "method")
     private String method;
 
     /** 来源渠道 */
     @Excel(name = "来源渠道")
+    @TableField(value = "channel")
     private String channel;
 
     /** 操作人员 */
     @Excel(name = "操作人员")
+    @TableField(value = "operName")
     private String operName;
 
     /** 部门名称 */
     @Excel(name = "部门名称")
+    @TableField(value = "deptName")
     private String deptName;
 
     /** 请求url */
     @Excel(name = "请求地址")
+    @TableField(value = "operUrl")
     private String operUrl;
 
     /** 操作地址 */
     @Excel(name = "操作地址")
+    @TableField(value = "operIp")
     private String operIp;
 
     /** 操作地点 */
     @Excel(name = "操作地点")
+    @TableField(value = "operLocation")
     private String operLocation;
 
     /** 请求参数 */
     @Excel(name = "请求参数")
+    @TableField(value = "operParam")
     private String operParam;
 
     /** 状态0正常 1异常 */
     @Excel(name = "状态")
+    @TableField(value = "status")
     private String status;
 
     /** 错误消息 */
     @Excel(name = "错误消息")
+    @TableField(value = "errorMsg")
     private String errorMsg;
 
     /** 操作时间 */
     @Excel(name = "操作时间")
+    @TableField(value = "operTime")
     private Date operTime;
 
     /** 搜索值 */
diff --git a/src/main/java/com/huaheng/pc/monitor/operlog/mapper/OperLogMapper.java b/src/main/java/com/huaheng/pc/monitor/operlog/mapper/OperLogMapper.java
index ec359d4..b21df39 100644
--- a/src/main/java/com/huaheng/pc/monitor/operlog/mapper/OperLogMapper.java
+++ b/src/main/java/com/huaheng/pc/monitor/operlog/mapper/OperLogMapper.java
@@ -43,4 +43,7 @@ public interface OperLogMapper
      * @return 操作日志对象
      */
     public OperLog selectOperLogById(Integer id);
+
+    //清空日志
+    public int truncateTable();
 }
diff --git a/src/main/java/com/huaheng/pc/monitor/operlog/service/IOperLogService.java b/src/main/java/com/huaheng/pc/monitor/operlog/service/IOperLogService.java
index 63c9b18..81a202a 100644
--- a/src/main/java/com/huaheng/pc/monitor/operlog/service/IOperLogService.java
+++ b/src/main/java/com/huaheng/pc/monitor/operlog/service/IOperLogService.java
@@ -40,4 +40,8 @@ public interface IOperLogService
      * @return 操作日志对象
      */
     public OperLog selectOperLogById(Integer id);
+
+
+    //清空日志
+    public int truncateTable();
 }
diff --git a/src/main/java/com/huaheng/pc/monitor/operlog/service/OperLogServiceImpl.java b/src/main/java/com/huaheng/pc/monitor/operlog/service/OperLogServiceImpl.java
index 24e0577..dadb134 100644
--- a/src/main/java/com/huaheng/pc/monitor/operlog/service/OperLogServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/monitor/operlog/service/OperLogServiceImpl.java
@@ -64,4 +64,9 @@ public class OperLogServiceImpl implements IOperLogService
     {
         return operLogMapper.selectOperLogById(id);
     }
+
+    @Override
+    public int truncateTable() {
+        return operLogMapper.truncateTable();
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
index 79c7c51..cce67eb 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
@@ -24,15 +24,19 @@ import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail;
 import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService;
 import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
 import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
+import com.huaheng.pc.system.config.domain.Config;
 import com.huaheng.pc.system.dict.domain.DictData;
 import com.huaheng.pc.system.dict.service.IDictDataService;
 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import io.swagger.models.auth.In;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
 import com.huaheng.pc.receipt.receiptDetail.mapper.ReceiptDetailMapper;
+import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -89,6 +93,7 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R
             throw new ServiceException("物料不存在");
         }
         receiptDetail.setCompanyCode(material.getCompanyCode());
+        receiptDetail.setMaterialCode(material.getCode());
         receiptDetail.setMaterialName(material.getName());
         receiptDetail.setMaterialSpec(material.getSpec());
         receiptDetail.setMaterialUnit(material.getUnit());
@@ -198,7 +203,7 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R
         //查询头表中绑定的入库类型中的入库流程
         LambdaQueryWrapper<ReceiptType> lambdaReceiptType = Wrappers.lambdaQuery();
         lambdaReceiptType.eq(ReceiptType::getCode,  receiptHeader.getReceiptType())
-                        .eq(ReceiptType::getWarehouseCode, ShiroUtils.getWarehouseCode());
+                .eq(ReceiptType::getWarehouseCode,ShiroUtils.getWarehouseCode());
         ReceiptType receiptType = receiptTypeService.getOne(lambdaReceiptType);
 
 
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/AdminReceiptHeaderController.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/AdminReceiptHeaderController.java
index 6f4bc92..6779acf 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/AdminReceiptHeaderController.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/AdminReceiptHeaderController.java
@@ -57,7 +57,7 @@ public class AdminReceiptHeaderController extends BaseController
         startPage();
 		LambdaQueryWrapper<ReceiptHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
 		lambdaQueryWrapper
-				.in(StringUtils.isNotEmpty(receiptHeader.getCompanyCode()),ReceiptHeader::getCompanyCode, receiptHeader.getCompanyCode())
+				.eq(StringUtils.isNotEmpty(receiptHeader.getCompanyCode()),ReceiptHeader::getCompanyCode, receiptHeader.getCompanyCode())
 				.eq(StringUtils.isNotEmpty(receiptHeader.getWarehouseCode()),ReceiptHeader::getWarehouseCode, receiptHeader.getWarehouseCode())
 				.eq(StringUtils.isNotEmpty(receiptHeader.getReceiptType()),
 						ReceiptHeader::getReceiptType, receiptHeader.getReceiptType())
@@ -69,7 +69,7 @@ public class AdminReceiptHeaderController extends BaseController
 				.orderByDesc(ReceiptHeader::getCreated);
 		List<ReceiptHeader> list = new ArrayList<>();
         if(StringUtils.isEmpty(time)) {
-			list=receiptHeaderService.list();
+			list=receiptHeaderService.list(lambdaQueryWrapper);
 		}else {
         	list=receiptHeaderService.selectListByCreated();
 		}
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java
index f24608c..d8d069d 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java
@@ -79,9 +79,9 @@ public class ReceiptHeaderController extends BaseController {
                 .eq(StringUtils.isNotEmpty(receiptHeader.getReceiptType()),
                         ReceiptHeader::getReceiptType, receiptHeader.getReceiptType())
                 .eq(StringUtils.isNotEmpty(receiptHeader.getCode()), ReceiptHeader::getCode, receiptHeader.getCode())
-                .eq(StringUtils.isNotNull(receiptHeader.getFirstStatus()),
+                .ge(StringUtils.isNotNull(receiptHeader.getFirstStatus()),
                         ReceiptHeader::getFirstStatus, receiptHeader.getFirstStatus())
-                .eq(StringUtils.isNotNull(receiptHeader.getLastStatus()),
+                .le(StringUtils.isNotNull(receiptHeader.getLastStatus()),
                         ReceiptHeader::getLastStatus, receiptHeader.getLastStatus())
                 .orderByDesc(ReceiptHeader::getCreated);
 
@@ -195,7 +195,7 @@ public class ReceiptHeaderController extends BaseController {
     @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE)
     @PostMapping("/remove")
     @ResponseBody
-    public AjaxResult remove(@ApiParam(name = "id", value = "入库头表id字符串")Integer ids){
+    public AjaxResult remove(@ApiParam(name = "id", value = "入库头表id字符串")String ids){
         if (StringUtils.isNull(ids)){
             return AjaxResult.error("id为空");
         }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
index 29f1d02..cfb3e56 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
@@ -58,7 +58,7 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
     public AjaxResult saveReceiptHeader(ReceiptHeader receiptHeader){
         LambdaQueryWrapper<ReceiptType> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(ReceiptType::getCode, receiptHeader.getReceiptType())
-                    .eq(ReceiptType::getWarehouseCode, ShiroUtils.getWarehouseCode());
+        .eq(ReceiptType::getWarehouseCode,ShiroUtils.getWarehouseCode());
         ReceiptType receiptType = receiptTypeService.getOne(lambdaQueryWrapper);
 
         //流程详情查询
@@ -219,6 +219,7 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
     /**
      * 提交审核入库单
      */
+    @Transactional
     public AjaxResult submitReview(String ids){
         if (StringUtils.isEmpty(ids)){
             return AjaxResult.error("id不能为空");
@@ -229,12 +230,16 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
             if (receiptHeader.getFirstStatus()>QuantityConstant.RECEIPT_HEADER_MODERATED ||receiptHeader.getLastStatus()>QuantityConstant.RECEIPT_HEADER_MODERATED){
                 return AjaxResult.error("单据号为"+receiptHeader.getCode()+"入库单不需要审核");
             }
+            LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
+            lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, idArray[i]);
+            List<ReceiptDetail> receiptDetailList = receiptDetailService.list(lambdaQueryWrapper);
+            if (receiptDetailList.isEmpty()){
+                return AjaxResult.error("单据号为"+receiptHeader.getCode()+"入库单没有明细");
+            }
             receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_MODERATED);
             receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_MODERATED);
             if (!this.updateById(receiptHeader)){
                 throw new ServiceException("更新入库头表失败");
-            } else {
-                return AjaxResult.success("提交审核成功,请等待审核");
             }
         }
         return AjaxResult.success("提交审核成功");
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/service/ReceiptHeaderHistoryService.java b/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/service/ReceiptHeaderHistoryService.java
index ec1111e..d9b02d8 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/service/ReceiptHeaderHistoryService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/service/ReceiptHeaderHistoryService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.common.constant.QuantityConstant;
 import com.huaheng.common.exception.service.ServiceException;
+import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
@@ -18,6 +19,7 @@ import javax.annotation.Resource;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 
+import java.util.Arrays;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory;
@@ -35,51 +37,61 @@ public class ReceiptHeaderHistoryService extends ServiceImpl<ReceiptHeaderHistor
     private ReceiptDetailHistoryService receiptDetailHistoryService;
 
     @Transactional
-    public AjaxResult add(Integer id){
-        ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
-        if (receiptHeader == null)  return AjaxResult.success("");
-        if((receiptHeader.getFirstStatus()>= QuantityConstant.RECEIPT_HEADER_POSTING && receiptHeader.getLastStatus()>=QuantityConstant.RECEIPT_HEADER_POSTING)||
-                (receiptHeader.getFirstStatus()<QuantityConstant.RECEIPT_HEADER_POOL &receiptHeader.getLastStatus()<QuantityConstant.RECEIPT_HEADER_POOL)){
-            ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory();
-            List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>();
-            //查询入库单明细
-            LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
-            lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, id);
-            List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper);
-            try {
-                //复制到入库历史实体
-                BeanUtils.copyProperties(receiptHeaderHistory, receiptHeader);
-                for (ReceiptDetail receiptDetail: list) {
-                    ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory();
-                    BeanUtils.copyProperties(receiptDetailHistory, receiptDetail);
-                    receiptDetailHistoryList.add(receiptDetailHistory);
-                }
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            } catch (InvocationTargetException e) {
-                e.printStackTrace();
+    public AjaxResult add(String ids){
+        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
+        for (Integer id : idList) {
+            ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
+            if (receiptHeader == null)  {
+                return AjaxResult.success("");
             }
+            if((receiptHeader.getFirstStatus()>= QuantityConstant.RECEIPT_HEADER_POSTING && receiptHeader.getLastStatus()>=QuantityConstant.RECEIPT_HEADER_POSTING)||
+                    (receiptHeader.getFirstStatus()<QuantityConstant.RECEIPT_HEADER_POOL &receiptHeader.getLastStatus()<QuantityConstant.RECEIPT_HEADER_POOL)){
+                ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory();
+                List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>();
+                //查询入库单明细
+                LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
+                lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, id);
+                List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper);
+                try {
+                    //复制到入库历史实体
+                    BeanUtils.copyProperties(receiptHeaderHistory, receiptHeader);
+                    for (ReceiptDetail receiptDetail: list) {
+                        ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory();
+                        BeanUtils.copyProperties(receiptDetailHistory, receiptDetail);
+                        receiptDetailHistoryList.add(receiptDetailHistory);
+                    }
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                } catch (InvocationTargetException e) {
+                    e.printStackTrace();
+                }
 
-            receiptHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName());
-            if (!receiptHeaderService.removeById(receiptHeader.getId())){
-                throw new ServiceException("删除头表失败");
-            }
-            // 当存在明细时删除
-            if (list.size()!= 0){
-                //删除入库明细
-                List<Integer> ids = new ArrayList<>();
-                for (int i=0; i<receiptDetailHistoryList.size();i++){
-                    receiptDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName());
-                    ids.add(receiptDetailHistoryList.get(i).getId());
+                receiptHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName());
+                if (!receiptHeaderService.removeById(receiptHeader.getId())){
+                    throw new ServiceException("删除头表失败");
                 }
-                if (!receiptDetailService.removeByIds(ids)) {
-                    throw new ServiceException("删除明细表失败");
+                if(!this.save(receiptHeaderHistory)){
+                    throw new ServiceException("新增历史入库单失败");
                 }
-                receiptDetailHistoryService.saveBatch(receiptDetailHistoryList);
+                // 当存在明细时删除
+                if (list.size()!= 0){
+                    //删除入库明细
+                    List<Integer> receiptDetailIds = new ArrayList<>();
+                    for (int i=0; i<receiptDetailHistoryList.size();i++){
+                        receiptDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName());
+                        receiptDetailHistoryList.get(i).setReceiptId(receiptHeaderHistory.getId());
+                        receiptDetailIds.add(receiptDetailHistoryList.get(i).getId());
+                    }
+                    if (!receiptDetailService.removeByIds(receiptDetailIds)) {
+                        throw new ServiceException("删除明细表失败");
+                    }
+                    if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)){
+                        throw new ServiceException("新增明细失败");
+                    }                }
+
+            }else {
+                return AjaxResult.success("入库单没有完成,无法删除");
             }
-            this.save(receiptHeaderHistory);
-        }else {
-            return AjaxResult.success("入库单没有完成,无法删除");
         }
         return AjaxResult.success("删除成功");
     }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java b/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
index a45bbb9..1902e6b 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
@@ -9,6 +9,7 @@ import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
 import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
+import com.huaheng.pc.config.FilterConfigHeader.domain.FilterConfigHeader;
 import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import com.huaheng.pc.config.configValue.service.ConfigValueService;
 import com.huaheng.pc.config.location.domain.Location;
@@ -25,6 +26,7 @@ import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHead
 import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
 import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -83,27 +85,28 @@ public class ReceivingService {
     @Transactional
     public Boolean position(ReceiptContainerDetail receiptContainerDetail){
         ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId());
-        if (0 != receiptContainerHeader.getStatus()){
+        if (!(0 ==receiptContainerHeader.getStatus())){
             throw new ServiceException("该入库组盘已生成任务不能重新定位");
         }
         //如果入库组盘表中有目标库位说明已经指定
         if (StringUtils.isNotEmpty(receiptContainerHeader.getToLocation())){return true;}
-        //定位规则
-        String locatingRule = receiptContainerHeader.getLocatingRule();
+        String locatingRule = receiptContainerHeader.getLocatingRule(); //定位规则
         if (StringUtils.isEmpty(locatingRule)){
             locatingRule = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()).getLocatingRule();
             //入库单明细定位规则不为空时执行
             if (StringUtils.isEmpty(locatingRule)){
                 //入库单明细为空时,查询物料表中是否含有定位规则
                 LambdaQueryWrapper<Material> materialLambda = Wrappers.lambdaQuery();
-                materialLambda.eq(Material::getCode, receiptContainerDetail.getMaterialCode());
+                materialLambda.eq(Material::getCode, receiptContainerDetail.getMaterialCode())
+                    .eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
                 Material material = materialService.getOne(materialLambda);
                 locatingRule = material.getLocatingRule();
 
                 if (StringUtils.isEmpty(locatingRule)){
                     //物料表中定位规则为空时,查询物料类别
                     LambdaQueryWrapper<MaterialType> materialTypeLambda = Wrappers.lambdaQuery();
-                    materialTypeLambda.eq(MaterialType::getCode, material.getType());
+                    materialTypeLambda.eq(MaterialType::getCode, material.getType())
+                    .eq(MaterialType::getWarehouseCode,ShiroUtils.getWarehouseCode());
                     MaterialType materialType = materialTypeService.getOne(materialTypeLambda);
                     locatingRule = materialType.getLocatingRule();
                     if (StringUtils.isEmpty(locatingRule)){
@@ -115,7 +118,7 @@ public class ReceivingService {
                         ConfigValue configValue = configValueService.getOne(configValueLambda);
                         LambdaQueryWrapper<ReceiptPreference> lambdaQueryWrapper = Wrappers.lambdaQuery();
                         lambdaQueryWrapper.eq(ReceiptPreference::getCode, configValue.getValue())
-                                .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode());
+                        .eq(ReceiptPreference::getWarehouseCode,ShiroUtils.getWarehouseCode());
                         ReceiptPreference receiptPreference = preferenceService.getOne(lambdaQueryWrapper);
                         locatingRule = preferenceService.getOne(lambdaQueryWrapper).getLocationRule();
                     }
@@ -127,14 +130,13 @@ public class ReceivingService {
             throw new ServiceException("未绑定定位规则");
         }
         LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
-                .eq(FilterConfigDetail::getCode, locatingRule);
+        lambdaQueryWrapper.eq(FilterConfigDetail::getCode, locatingRule)
+        .eq(FilterConfigDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
         FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper);
 
         //根据定位规则查询库位编码
         LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
-        locationLambda.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode())
-                .last(filterConfigDetail.getStatement());
+        locationLambda.last(filterConfigDetail.getStatement());
         String locationCode = locationService.getOne(locationLambda).getCode();
         if (locationCode == null){
             throw new ServiceException("没有库位可分配");
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
index 8b94a72..e750674 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
@@ -535,7 +535,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             }
         }
         if(num==shipmentDetailList.size()){
-            throw new ServiceException("单据物料在此库区没有库存,无法出库");
+            throw new ServiceException("单据物料的库存分配规则在此库区没有库存,无法出库");
         }
         return AjaxResult.success("成功",list);
     }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/mapper/ShipmentDetailMapper.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/mapper/ShipmentDetailMapper.java
index a27684b..dc0f350 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/mapper/ShipmentDetailMapper.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/mapper/ShipmentDetailMapper.java
@@ -3,6 +3,7 @@ package com.huaheng.pc.shipment.shipmentDetail.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -21,6 +22,8 @@ public interface ShipmentDetailMapper extends BaseMapper<ShipmentDetail> {
 
     //获取7天内的出库量
     List<TaskDetail> getShipmentQtyLast7Days();
+    int insertDetails(@Param("shipmentDetails") List<ShipmentDetail> shipmentDetails);
+
 
     //以仓库维度获取入库量
     List<TaskDetail> getWarehouseShipment();
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailService.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailService.java
index 2a20547..2aa7f81 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailService.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailService.java
@@ -36,5 +36,7 @@ public interface ShipmentDetailService extends IService<ShipmentDetail>{
     //以货主维度获取入库量
     List<TaskDetail> getCompanyShipment();
 
+    Boolean insertDetails(List<ShipmentDetail> shipmentDetails);
+
 
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
index 56e06a5..838fcc7 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java
@@ -298,4 +298,14 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper,
     public List<TaskDetail> getCompanyShipment() {
         return shipmentDetailMapper.getCompanyShipment();
     }
+
+    @Override
+    public Boolean insertDetails(List<ShipmentDetail> shipmentDetails) {
+        int flag = shipmentDetailMapper.insertDetails(shipmentDetails);
+        if(flag > 0){
+            return true;
+        }else {
+            return false;
+        }
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
index 46c3106..b9518af 100644
--- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
@@ -19,6 +19,8 @@ import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailServiceImpl;
 import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
 import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
 import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService;
+import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -46,6 +48,8 @@ public class ShippingCombinationController extends BaseController {
     ShipmentHeaderService shipmentHeaderService;
     @Autowired
     ShipmentPreferenceService shipmentPreferenceService;
+    @Autowired
+    TaskHeaderService taskHeaderService;
 
 
     /**
diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
index 5307e99..63c5023 100644
--- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
+++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
@@ -11,6 +11,8 @@ import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import com.huaheng.pc.config.configValue.service.ConfigValueService;
 import com.huaheng.pc.config.material.domain.Material;
 import com.huaheng.pc.config.material.service.MaterialServiceImpl;
+import com.huaheng.pc.config.materialType.domain.MaterialType;
+import com.huaheng.pc.config.materialType.service.MaterialTypeService;
 import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
 import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
@@ -40,6 +42,8 @@ public class ShippingCombinationService {
     ShipmentPreferenceService shipmentPreferenceService;
     @Autowired
     MaterialServiceImpl materialService;
+    @Autowired
+    MaterialTypeService materialTypeService;
 
 
 
@@ -101,6 +105,23 @@ public class ShippingCombinationService {
             return list;
         }
 
+        //物料的分配规则没有时,优先物料种类的分配规则
+        LambdaQueryWrapper<MaterialType> materialTypelam=Wrappers.lambdaQuery();
+        materialTypelam.eq(MaterialType::getCode,material.getType())
+                .eq(MaterialType::getWarehouseCode,shipmentDetail.getWarehouseCode());
+        MaterialType materialType=materialTypeService.getOne(materialTypelam);
+        if(StringUtils.isNotEmpty(materialType.getAllocationRule())){
+            filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,materialType.getAllocationRule());
+            filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
+            if(filterConfigDetail==null){
+                throw new ServiceException("物料种类出库规则配置不存在");
+            }
+
+            //根据sql查库存
+            list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail,filterConfigDetail.getStatements(),shipmentPreference);
+            return list;
+        }
+
         //都没有时,默认仓库的分配规则
 
         //查找分配规则
diff --git a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
index 02b28c3..87f2aab 100644
--- a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
+++ b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
@@ -59,7 +59,8 @@ public class WaveService extends ServiceImpl<WaveMapper, Wave> {
 
             //1、查看此波次的状态,状态不为o时,无法开始波次
             Wave wave = this.getById(id);
-            if(wave == null || wave.getStatus() != QuantityConstant.WAVE_STATUS_BUILD){
+            if(wave == null || (wave.getStatus()> QuantityConstant.WAVE_STATUS_BUILD &&
+                    wave.getStatus() < QuantityConstant.WAVE_STATUS_FAILED)){
                 return AjaxResult.error("id为"+id+"的波次找不到,或者状态不能做开始操作");
             }
             waves.add(wave);
diff --git a/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java b/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
index a7d79bc..a34c930 100644
--- a/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/dict/service/DictTypeServiceImpl.java
@@ -11,6 +11,7 @@ import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.pc.system.dict.domain.DictType;
 import com.huaheng.pc.system.dict.mapper.DictDataMapper;
 import com.huaheng.pc.system.dict.mapper.DictTypeMapper;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -180,6 +181,7 @@ public class DictTypeServiceImpl  implements IDictTypeService
 
     //复制字典数据
     @Override
+    @Transactional
     public Boolean dictTypeCopy(String code, String newCode) {
         int i = 0;
         //1、先复制字典主表数据
diff --git a/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java b/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
index 85d71fa..897523c 100644
--- a/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/menu/service/MenuServiceImpl.java
@@ -22,6 +22,7 @@ import com.huaheng.pc.system.menu.domain.Menu;
 import com.huaheng.pc.system.menu.mapper.MenuMapper;
 import com.huaheng.pc.system.role.domain.Role;
 import com.huaheng.pc.system.role.mapper.RoleMenuMapper;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 
@@ -357,6 +358,7 @@ public class MenuServiceImpl implements IMenuService
 
     //复制菜单
     @Override
+    @Transactional
     public Boolean menuCopy(String code, String newCode) {
         int i = 0;
         //复制菜单数据
diff --git a/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java b/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
index fdf75f6..8057795 100644
--- a/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
+++ b/src/main/java/com/huaheng/pc/system/role/mapper/RoleMapper.java
@@ -94,7 +94,7 @@ public interface RoleMapper
 
     public int roleCopy(@Param("code")String code, @Param("newCode")String newCode);
 
+    public int roleUserCopy(@Param("code")String code,@Param("id") Integer id);
 
-    public int roleUserCopy(@Param("code")String code);
 
 }
diff --git a/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java b/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
index 1e4ce65..8da8a03 100644
--- a/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/role/service/RoleServiceImpl.java
@@ -18,8 +18,7 @@ import com.huaheng.pc.system.role.domain.RoleMenu;
 import com.huaheng.pc.system.role.mapper.RoleMapper;
 import com.huaheng.pc.system.role.mapper.RoleMenuMapper;
 import com.huaheng.pc.system.user.mapper.UserRoleMapper;
-
-import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 角色 业务层处理
@@ -30,13 +29,13 @@ import javax.annotation.Resource;
 public class RoleServiceImpl implements IRoleService
 {
 
-    @Resource
+    @Autowired
     private RoleMapper roleMapper;
 
     @Autowired
     private RoleMenuMapper roleMenuMapper;
 
-    @Resource
+    @Autowired
     private UserRoleMapper userRoleMapper;
 
     /**
@@ -266,16 +265,17 @@ public class RoleServiceImpl implements IRoleService
 
     //复制角色
     @Override
+    @Transactional
     public Boolean roleCopy(String code, String newCode) {
         int i = 0;
         i = roleMapper.roleCopy(code,newCode);
         if(i < 1){
             throw new ServiceException("复制角色表失败");
         }
-        if(i < 1){
-            throw new ServiceException("复制角色菜单关系表失败");
-        }
-        i = roleMapper.roleUserCopy(newCode);
+//        if(i < 1){
+//            throw new ServiceException("复制角色菜单关系表失败");
+//        }
+        i = roleMapper.roleUserCopy(newCode,ShiroUtils.getUserId());
         if(i < 1){
             throw new ServiceException("复制用户角色关系表失败");
         }
diff --git a/src/main/java/com/huaheng/pc/system/user/controller/HomeController.java b/src/main/java/com/huaheng/pc/system/user/controller/HomeController.java
index fb987eb..5e50814 100644
--- a/src/main/java/com/huaheng/pc/system/user/controller/HomeController.java
+++ b/src/main/java/com/huaheng/pc/system/user/controller/HomeController.java
@@ -218,6 +218,7 @@ public class HomeController extends BaseController {
                 }
             }
         }
+        System.out.println(list);
         return AjaxResult.success(list);
     }
 
diff --git a/src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java b/src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java
index 94e2740..88cb153 100644
--- a/src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java
+++ b/src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java
@@ -50,8 +50,10 @@ public class TaskDetail implements Serializable {
     @ApiModelProperty(value="仓库")
     private String warehouseCode;
 
+    @TableField(exist = false)
     private String warehouseName;
 
+    @TableField(exist = false)
     private String companyName;
 
     /**
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
index fe8783f..a051ebe 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -382,9 +382,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             if (task.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
                 return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止");
             }
-
             // 给wcs传递任务
             taskAssignService.wcsTaskAssign(task);
+
             //修改任务头表
             task.setId(taskId);
             task.setStatus(QuantityConstant.TASK_STATUS_RELEASE);
@@ -706,7 +706,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         Location temp1 = new Location();
         temp1.setCode(sourceLocation);
         temp1.setWarehouseCode(ShiroUtils.getWarehouseCode());
-        LambdaQueryWrapper<Location> lambda1 = Wrappers.lambdaQuery();
+        LambdaQueryWrapper<Location> lambda1 = Wrappers.lambdaQuery(temp1);
         Location loc1 = locationService.getOne(lambda1);
         if (loc1 == null) {
             return AjaxResult.error("源库位:" + sourceLocation + "未找到");
@@ -750,7 +750,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
         taskHeader.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));//获取第一个货主
-        taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_CHECK);
+        taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_TRANSFER);
         taskHeader.setTaskType(QuantityConstant.TASK_TYPE_TRANSFER);
         taskHeader.setContainerCode(loc1.getContainerCode());
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f699ea0..7b9ead6 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -66,4 +66,4 @@ logging:
 server:
   port: 8888
   servlet:
-    context-path: /twms/
+    context-path: /twms/
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index ed7db5d..8ae63d0 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -33,6 +33,11 @@ user:
 
 # Spring配置
 spring:
+  http:
+    encoding:
+      charset: utf-8
+      enabled: true
+      force: true
   # 模板引擎
   thymeleaf:
     mode: HTML
diff --git a/src/main/resources/fonts/STSONG.TTF b/src/main/resources/fonts/STSONG.TTF
new file mode 100644
index 0000000..3870605
--- /dev/null
+++ b/src/main/resources/fonts/STSONG.TTF
diff --git a/src/main/resources/fonts/fonts.xml b/src/main/resources/fonts/fonts.xml
new file mode 100644
index 0000000..8ce8f55
--- /dev/null
+++ b/src/main/resources/fonts/fonts.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fontFamilies>
+    <fontFamily name="华文宋体">
+        <normal>fonts/STSONG.TTF</normal>
+        <bold>fonts/STSONG.TTF</bold>
+        <italic>fonts/STSONG.TTF</italic>
+        <boldItalic>fonts/STSONG.TTF</boldItalic>
+        <pdfEncoding>Identity-H</pdfEncoding>
+        <pdfEmbedded>true</pdfEmbedded>
+        <exportFonts>
+            <export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
+            <export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
+        </exportFonts>
+    </fontFamily>
+</fontFamilies>
diff --git a/src/main/resources/jasperreports_extension.properties b/src/main/resources/jasperreports_extension.properties
new file mode 100644
index 0000000..e0ac0bf
--- /dev/null
+++ b/src/main/resources/jasperreports_extension.properties
@@ -0,0 +1,2 @@
+net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
+net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
diff --git a/src/main/resources/jaspers/mypage.jasper b/src/main/resources/jaspers/mypage.jasper
new file mode 100644
index 0000000..8f79e55
--- /dev/null
+++ b/src/main/resources/jaspers/mypage.jasper
diff --git a/src/main/resources/jaspers/mypage.jrxml b/src/main/resources/jaspers/mypage.jrxml
new file mode 100644
index 0000000..67a6792
--- /dev/null
+++ b/src/main/resources/jaspers/mypage.jrxml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown  -->
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="mypage" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="269017e1-91e2-41c1-8c72-e94c48e4265a">
+	<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
+	<property name="com.jaspersoft.studio.data.defaultdataadapter" value="myAdapter"/>
+	<queryString language="SQL">
+		<![CDATA[select id,
+materialCode,
+locationCode,
+qty,
+inventorySts,
+TIMESTAMPDIFF(DAY,created,NOW()) as time 
+from
+inventory_detail]]>
+	</queryString>
+	<field name="id" class="java.lang.Integer">
+		<property name="com.jaspersoft.studio.field.label" value="id"/>
+		<property name="com.jaspersoft.studio.field.tree.path" value="inventory_detail"/>
+	</field>
+	<field name="materialCode" class="java.lang.String">
+		<property name="com.jaspersoft.studio.field.label" value="materialCode"/>
+		<property name="com.jaspersoft.studio.field.tree.path" value="inventory_detail"/>
+	</field>
+	<field name="locationCode" class="java.lang.String">
+		<property name="com.jaspersoft.studio.field.label" value="locationCode"/>
+		<property name="com.jaspersoft.studio.field.tree.path" value="inventory_detail"/>
+	</field>
+	<field name="qty" class="java.math.BigDecimal">
+		<property name="com.jaspersoft.studio.field.label" value="qty"/>
+		<property name="com.jaspersoft.studio.field.tree.path" value="inventory_detail"/>
+	</field>
+	<field name="inventorySts" class="java.lang.String">
+		<property name="com.jaspersoft.studio.field.label" value="inventorySts"/>
+		<property name="com.jaspersoft.studio.field.tree.path" value="inventory_detail"/>
+	</field>
+	<field name="time" class="java.lang.Long">
+		<property name="com.jaspersoft.studio.field.label" value="time"/>
+	</field>
+	<background>
+		<band splitType="Stretch"/>
+	</background>
+	<title>
+		<band height="79" splitType="Stretch">
+			<staticText>
+				<reportElement x="220" y="30" width="100" height="30" isRemoveLineWhenBlank="true" uuid="8b09e723-8b9c-4cf0-8797-cadf3e5b6af5"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="20"/>
+				</textElement>
+				<text><![CDATA[库存报表]]></text>
+			</staticText>
+		</band>
+	</title>
+	<pageHeader>
+		<band height="40" splitType="Stretch">
+			<staticText>
+				<reportElement x="-10" y="6" width="100" height="30" isRemoveLineWhenBlank="true" uuid="3255876e-83de-41f7-ac80-c0e0002183d8"/>
+				<textElement textAlignment="Right" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[公司:]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="90" y="6" width="100" height="30" isRemoveLineWhenBlank="true" uuid="d7fe09d1-e13b-4c2c-8370-8ab5f4fe27e0"/>
+				<textElement textAlignment="Left" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[华恒机器人]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="340" y="5" width="100" height="30" isRemoveLineWhenBlank="true" uuid="129192ee-63ff-42ac-bad8-6ea886aa7df1"/>
+				<textElement textAlignment="Right" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[时间:]]></text>
+			</staticText>
+			<textField pattern="MMMMM dd, yyyy">
+				<reportElement x="440" y="5" width="100" height="30" isRemoveLineWhenBlank="true" uuid="0e9b0a78-271c-46c3-a9a5-ada603e1d586"/>
+				<textElement textAlignment="Left" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageHeader>
+	<columnHeader>
+		<band height="40" splitType="Stretch">
+			<staticText>
+				<reportElement x="-20" y="10" width="90" height="30" isRemoveLineWhenBlank="true" uuid="a46711b9-185c-4f72-8ba4-3913cf7ffa36"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[序号]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="70" y="10" width="100" height="30" isRemoveLineWhenBlank="true" uuid="316c901d-5d62-4cf9-96b0-9292282b83d4"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[物料]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="170" y="10" width="100" height="30" isRemoveLineWhenBlank="true" uuid="d2889df8-acf6-42f3-baf8-cee479d95744"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[库位]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="270" y="10" width="100" height="30" isRemoveLineWhenBlank="true" uuid="648755a4-c6e4-4d43-842f-cbbcccf3b602"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[数量]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="370" y="10" width="100" height="30" isRemoveLineWhenBlank="true" uuid="7400f621-cdcc-4c01-affc-b5247c64c279"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[状态]]></text>
+			</staticText>
+			<staticText>
+				<reportElement x="470" y="10" width="100" height="30" isRemoveLineWhenBlank="true" uuid="445b4f01-fe14-4433-a239-3a9ce548b9a2"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<text><![CDATA[距今时间]]></text>
+			</staticText>
+		</band>
+	</columnHeader>
+	<detail>
+		<band height="31" splitType="Stretch">
+			<textField>
+				<reportElement x="-20" y="0" width="90" height="30" isRemoveLineWhenBlank="true" uuid="8c955db5-fc66-441b-863c-92d5f92120b3"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="70" y="0" width="100" height="30" isRemoveLineWhenBlank="true" uuid="a45ff2e7-b85b-42d3-a2e6-30e5e78e4979"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{materialCode}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="170" y="0" width="100" height="30" isRemoveLineWhenBlank="true" uuid="5225baa7-39e2-4e37-8905-f0be6c22383e"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{locationCode}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="270" y="0" width="100" height="30" isRemoveLineWhenBlank="true" uuid="9db2444d-b495-40aa-bee9-cd5b86b709b2"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{qty}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="370" y="0" width="100" height="30" isRemoveLineWhenBlank="true" uuid="13b8f525-a4f3-4d10-9056-934b6ceb8baa"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{inventorySts}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="470" y="0" width="100" height="30" isRemoveLineWhenBlank="true" uuid="17b64d38-bd90-49e7-9547-356eec6efb1f"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle">
+					<font fontName="华文宋体" size="10"/>
+				</textElement>
+				<textFieldExpression><![CDATA[$F{time}]]></textFieldExpression>
+			</textField>
+		</band>
+	</detail>
+	<columnFooter>
+		<band height="45" splitType="Stretch"/>
+	</columnFooter>
+	<pageFooter>
+		<band height="54" splitType="Stretch"/>
+	</pageFooter>
+	<summary>
+		<band height="42" splitType="Stretch"/>
+	</summary>
+</jasperReport>
diff --git a/src/main/resources/mybatis/config/AddressMapper.xml b/src/main/resources/mybatis/config/AddressMapper.xml
index 6d76e05..20b9b48 100644
--- a/src/main/resources/mybatis/config/AddressMapper.xml
+++ b/src/main/resources/mybatis/config/AddressMapper.xml
@@ -5,11 +5,12 @@
     <!--@mbg.generated-->
     <id column="id" jdbcType="INTEGER" property="id" />
     <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+    <result column="number" jdbcType="INTEGER" property="number" />
     <result column="param" jdbcType="VARCHAR" property="param" />
     <result column="url" jdbcType="VARCHAR" property="url" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, warehouseCode, param,url
+    id, warehouseCode,number, param,url
   </sql>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/ContainerMapper.xml b/src/main/resources/mybatis/config/ContainerMapper.xml
index e6a0a48..886541a 100644
--- a/src/main/resources/mybatis/config/ContainerMapper.xml
+++ b/src/main/resources/mybatis/config/ContainerMapper.xml
@@ -55,4 +55,36 @@
     <select id="findAllByCode" resultMap="BaseResultMap" parameterType="java.lang.String">
         SELECT * FROM container WHERE code = #{code,jdbcType=VARCHAR}
     </select>
+
+    <insert id="addList" parameterType="com.huaheng.pc.config.container.domain.Container" keyProperty="id" useGeneratedKeys="true" >
+        INSERT INTO container(
+        code,
+        warehouseCode,
+        companyCode,
+        containerType,
+        createdBy,
+        status,
+        enable
+        )values
+        <foreach collection="containers" item="item" index="index" separator=",">
+            (
+            #{item.code},
+            #{item.warehouseCode},
+            #{item.companyCode},
+            #{item.containerType},
+            #{item.createdBy},
+            #{item.status},
+            #{item.enable}
+            )
+        </foreach>
+    </insert>
+
+    <select id="selectListShelf" resultType="com.huaheng.pc.config.container.domain.Container">
+    SELECT
+	g.goodsShelfNo
+    FROM
+	( SELECT DISTINCT ( goodsShelfNo ) goodsShelfNo, COUNT( * ) cunt FROM container WHERE `status` = 'empty' AND type = 'A' GROUP BY goodsShelfNo ) g
+	INNER JOIN ( SELECT DISTINCT ( goodsShelfNo ) goodsShelfNo, COUNT( * ) cunt FROM container WHERE type = 'A' GROUP BY goodsShelfNo ) s ON g.goodsShelfNo = s.goodsShelfNo
+	AND g.cunt = s.cunt
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/LocationMapper.xml b/src/main/resources/mybatis/config/LocationMapper.xml
index ebff61c..6c8e3e4 100644
--- a/src/main/resources/mybatis/config/LocationMapper.xml
+++ b/src/main/resources/mybatis/config/LocationMapper.xml
@@ -50,6 +50,39 @@
     UPDATE location set `status`=#{status},containerCode=#{containerCode} WHERE warehouseCode=#{warehouseCode} AND `code`=#{locationCode}
   </update>
 
+  <insert id="addList" parameterType="com.huaheng.pc.config.location.domain.Location" keyProperty="id" useGeneratedKeys="true" >
+    INSERT INTO location(
+    code,
+    warehouseCode,
+    zoneCode,
+    locationType,
+    iRow,
+    iColumn,
+    iLayer,
+    iGrid,
+    roadway,
+    createdBy,
+    lastUpdatedBy,
+    status
+    )values
+    <foreach collection="locations" item="item" index="index" separator=",">
+      (
+      #{item.code},
+      #{item.warehouseCode},
+      #{item.zoneCode},
+      #{item.locationType},
+      #{item.iRow},
+      #{item.iColumn},
+      #{item.iLayer},
+      #{item.iGrid},
+      #{item.roadway},
+      #{item.createdBy},
+      #{item.lastUpdatedBy},
+      #{item.status}
+      )
+    </foreach>
+  </insert>
+
   <select id="getAllLocation" resultType="com.huaheng.pc.config.location.domain.Location">
     select  max(iRow) as iRow,max(iColumn) as iColumn,max(iLayer) as iLayer,max(iGrid) as iGrid from location l where l.warehouseCode=#{warehouseCode} AND l.locationType=#{type}
   </select>
diff --git a/src/main/resources/mybatis/config/LocationTypeMapper.xml b/src/main/resources/mybatis/config/LocationTypeMapper.xml
index 274d8bb..98a007f 100644
--- a/src/main/resources/mybatis/config/LocationTypeMapper.xml
+++ b/src/main/resources/mybatis/config/LocationTypeMapper.xml
@@ -7,9 +7,9 @@
     <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
     <result column="name" jdbcType="VARCHAR" property="name" />
-    <result column="length" jdbcType="INTEGER" property="length" />
-    <result column="width" jdbcType="INTEGER" property="width" />
-    <result column="height" jdbcType="INTEGER" property="height" />
+    <result column="length" jdbcType="VARCHAR" property="length" />
+    <result column="width" jdbcType="VARCHAR" property="width" />
+    <result column="height" jdbcType="VARCHAR" property="height" />
     <result column="maxWeight" jdbcType="INTEGER" property="maxWeight" />
     <result column="minQtyUm" jdbcType="VARCHAR" property="minQtyUm" />
     <result column="checkDigit" jdbcType="VARCHAR" property="checkDigit" />
diff --git a/src/main/resources/mybatis/config/PointsMapper.xml b/src/main/resources/mybatis/config/PointsMapper.xml
new file mode 100644
index 0000000..ee036d5
--- /dev/null
+++ b/src/main/resources/mybatis/config/PointsMapper.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.huaheng.pc.config.points.mapper.PointsMapper">
+    <resultMap id="BaseResultMap" type="com.huaheng.pc.config.points.domain.Points">
+        <!--@mbg.generated-->
+        <id column="id" jdbcType="INTEGER" property="id" />
+        <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+        <result column="companyCode" jdbcType="VARCHAR" property="companyCode" />
+        <result column="goodsShelfNo" jdbcType="VARCHAR" property="goodsShelfNo" />
+        <result column="intX" jdbcType="VARCHAR" property="intX" />
+        <result column="intY" jdbcType="VARCHAR" property="intY" />
+        <result column="oIntX" jdbcType="VARCHAR" property="oIntX" />
+        <result column="oIntY" jdbcType="VARCHAR" property="oIntY" />
+        <result column="num" jdbcType="INTEGER" property="num" />
+        <result column="isEmpty" jdbcType="INTEGER" property="isEmpty" />
+        <result column="isEnable" jdbcType="INTEGER" property="isEnable" />
+        <result column="isLocked" jdbcType="INTEGER" property="isLocked" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        warehouseCode,companyCode,goodsShelfNo,intX,intY,oIntX,oIntY,num,isEmpty,isEnable,isLocked
+    </sql>
+
+
+    <update id="updatePoints">
+         UPDATE points
+         <set>
+        <if test="isLocked != null">
+            isLocked = #{isLocked, jdbcType=INTEGER},
+        </if>
+        <if test="intX != null">
+            intX = #{intX, jdbcType=VARCHAR},
+        </if>
+        <if test="intY != null">
+            intY = #{intY, jdbcType=VARCHAR},
+        </if>
+        <if test="oIntX != null">
+            oIntX = #{oIntX, jdbcType=VARCHAR},
+        </if>
+        <if test="oIntY != null">
+              oIntY = #{oIntY, jdbcType=VARCHAR},
+        </if>
+        <if test="num != null">
+            num = #{num, jdbcType=INTEGER},
+        </if>
+        </set>
+        where goodsShelfNo=#{goodsShelfNo} and warehouseCode=#{warehouseCode}
+    </update>
+
+
+
+    <update id="updateAll">
+        update points set isLocked = 0
+    </update>
+
+
+    <update id="updateIsEmpty">
+        update points set isEmpty = #{isEmpty}
+        WHERE goodsShelfNo IN
+        <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+
+    </update>
+</mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/WarehouseMapper.xml b/src/main/resources/mybatis/config/WarehouseMapper.xml
index 28661bf..023b9bd 100644
--- a/src/main/resources/mybatis/config/WarehouseMapper.xml
+++ b/src/main/resources/mybatis/config/WarehouseMapper.xml
@@ -147,4 +147,9 @@
     </where>
   </select>
 
+
+  <insert id="userCopy">
+    insert into sys_user_warehouse(userId,warehouseCode)
+    select userId,#{newWarehouseCode} from sys_user_warehouse where warehouseCode=#{warehouseCode}
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/config/ZoneMapper.xml b/src/main/resources/mybatis/config/ZoneMapper.xml
index b64b465..65103c5 100644
--- a/src/main/resources/mybatis/config/ZoneMapper.xml
+++ b/src/main/resources/mybatis/config/ZoneMapper.xml
@@ -26,8 +26,15 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, code, warehouseId, warehouseCode, companyCode, `name`, locationType, created, 
+    id, code, warehouseCode, companyCode, `name`, locationType, created,
     createdBy, lastUpdated, lastUpdatedBy, version, userDef1, userDef2, userDef3, userDef4, 
     userDef5, userDef6, userDef7, userDef8, processStamp
   </sql>
+
+  <insert id="zoneCopy">
+    insert into zone(code, warehouseCode, companyCode, `name`, locationType, createdBy, lastUpdatedBy)
+    select code, #{newCode}, companyCode, `name`, locationType, createdBy, lastUpdatedBy from zone
+    where warehouseCode=#{code}
+
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/monitor/ErrorLogMapper.xml b/src/main/resources/mybatis/monitor/ErrorLogMapper.xml
index 30b1e33..ec0d784 100644
--- a/src/main/resources/mybatis/monitor/ErrorLogMapper.xml
+++ b/src/main/resources/mybatis/monitor/ErrorLogMapper.xml
@@ -3,10 +3,26 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huaheng.pc.monitor.errorlog.mapper.ErrorLogMapper">
+	<resultMap type="com.huaheng.pc.monitor.errorlog.domain.ErrorLog" id="ErrorLogResult">
+		<id     property="event_id"        		column="event_id"           />
+		<result property="timestmp"     		column="timestmp"        />
+		<result property="formatted_message"    column="formatted_message"            />
+		<result property="logger_name"        	column="logger_name"            />
+		<result property="level_string" 		column="level_string"    />
+		<result property="thread_name"       	column="thread_name"           />
+		<result property="reference_flag"       column="reference_flag"                />
+		<result property="arg0"           		column="arg0"               />
+		<result property="arg1"     			column="arg1"        />
+		<result property="arg3"        			column="arg3"            />
+		<result property="caller_filename" 		column="caller_filename"    />
+		<result property="caller_class"       	column="caller_class"           />
+		<result property="caller_method"        column="caller_method"                />
+		<result property="caller_line"          column="caller_line"               />
+		<result property="creatTime"     		column="creatTime"        />
+	</resultMap>
 
 	<select id="selectListEntity" parameterType="com.huaheng.pc.monitor.errorlog.domain.ErrorLog" resultType="com.huaheng.pc.monitor.errorlog.domain.ErrorLog">
-		select event_id, timestmp, formatted_message, logger_name, level_string, thread_name, reference_flag, arg0,arg1,arg2,arg3,caller_filename,caller_class,caller_method,caller_line,creatTime
-			from logging_event
+		select * from logging_event
 		<where>
 				AND level_string = 'ERROR'
 			<if test="caller_method != null and caller_method != ''">
diff --git a/src/main/resources/mybatis/monitor/JobLogMapper.xml b/src/main/resources/mybatis/monitor/JobLogMapper.xml
new file mode 100644
index 0000000..cbad957
--- /dev/null
+++ b/src/main/resources/mybatis/monitor/JobLogMapper.xml
@@ -0,0 +1,89 @@
+<?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.huaheng.pc.monitor.job.mapper.JobLogMapper">
+
+	<resultMap type="com.huaheng.pc.monitor.job.domain.JobLog" id="JobLogResult">
+		<id     property="id"       column="id"      />
+		<result property="jobName"        column="jobName"        />
+		<result property="jobGroup"       column="jobGroup"       />
+		<result property="methodName"     column="methodName"     />
+		<result property="methodParams"   column="methodParams"   />
+		<result property="jobMessage"     column="jobMessage"     />
+		<result property="status"         column="status"          />
+		<result property="exceptionInfo"  column="exceptionInfo"  />
+		<result property="createTime"     column="createTime"     />
+	</resultMap>
+	
+	<sql id="selectJobLogVo">
+        select id, jobName, jobGroup, methodName, methodParams, jobMessage, status, exceptionInfo, createTime  from sys_job_log
+    </sql>
+	
+	<select id="selectJobLogList" parameterType="com.huaheng.pc.monitor.job.domain.JobLog" resultMap="JobLogResult">
+		<include refid="selectJobLogVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND jobName like concat('%', #{jobName}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="methodName != null and methodName != ''">
+				AND methodName like concat('%', #{methodName}, '%')
+			</if>
+			<if test="params != null and params.beginTime != null"><!-- 开始时间检索 -->
+				and date_format(createTime,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+			</if>
+			<if test="params != null and params.endTime != null"><!-- 结束时间检索 -->
+				and date_format(createTime,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+			</if>
+		</where>
+	</select>
+	
+
+	<select id="selectJobLogById" parameterType="Integer" resultMap="JobLogResult">
+		<include refid="selectJobLogVo"/>
+		where id = #{id}
+	</select>
+	
+	<delete id="deleteJobLogById" parameterType="Integer">
+ 		delete from sys_job_log where id = #{id}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobLogByIds" parameterType="String">
+ 		delete from sys_job_log where id in
+ 		<foreach collection="array" item="id" open="(" separator="," close=")">
+ 			#{id}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<insert id="insertJobLog" parameterType="com.huaheng.pc.monitor.job.domain.JobLog">
+ 		insert into sys_job_log(
+ 			<if test="id != null and id != 0">id,</if>
+ 			<if test="jobName != null and jobName != ''">jobName,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">jobGroup,</if>
+ 			<if test="methodName != null and methodName != ''">methodName,</if>
+ 			<if test="methodParams != null and methodParams != ''">methodParams,</if>
+ 			<if test="jobMessage != null and jobMessage != ''">jobMessage,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">exceptionInfo,</if>
+ 			createTime
+ 		)values(
+ 			<if test="id != null and id != 0">#{id},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="methodName != null and methodName != ''">#{methodName},</if>
+ 			<if test="methodParams != null and methodParams != ''">#{methodParams},</if>
+ 			<if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if>
+ 			sysdate()
+ 		)
+	</insert>
+
+	<update id="truncateTable" >
+		truncate table sys_job_log
+	</update>
+
+</mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/monitor/JobMapper.xml b/src/main/resources/mybatis/monitor/JobMapper.xml
new file mode 100644
index 0000000..7c9e7bb
--- /dev/null
+++ b/src/main/resources/mybatis/monitor/JobMapper.xml
@@ -0,0 +1,107 @@
+<?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.huaheng.pc.monitor.job.mapper.JobMapper">
+
+	<resultMap type="com.huaheng.pc.monitor.job.domain.Job" id="JobResult">
+		<id     property="id"          column="id"          />
+		<result property="jobName"        column="jobName"        />
+		<result property="jobGroup"       column="jobGroup"       />
+		<result property="methodName"     column="methodName"     />
+		<result property="methodParams"   column="methodParams"   />
+		<result property="cronExpression" column="cronExpression" />
+		<result property="misfirePolicy"  column="misfirePolicy"  />
+		<result property="status"         column="status"          />
+		<result property="createBy"       column="createBy"       />
+		<result property="createTime"     column="createTime"     />
+		<result property="updateBy"       column="updateBy"       />
+		<result property="updateTime"     column="updateTime"     />
+		<result property="remark"         column="remark"          />
+	</resultMap>
+	
+	<sql id="selectJobVo">
+        select id, jobName, jobGroup, methodName, methodParams, cronExpression, misfirePolicy, status, createBy, createTime, remark from sys_job
+    </sql>
+	
+	<select id="selectJobList" resultMap="JobResult">
+		<include refid="selectJobVo"/>
+		<where>
+			<if test="jobName != null and jobName != ''">
+				AND jobName like concat('%', #{jobName}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="methodName != null and methodName != ''">
+				AND methodName like concat('%', #{methodName}, '%')
+			</if>
+		</where>
+	</select>
+	
+	<select id="selectJobAll" resultMap="JobResult">
+		<include refid="selectJobVo"/>
+	</select>
+	
+	<select id="selectJobById" resultMap="JobResult">
+		<include refid="selectJobVo"/>
+		where id = #{id}
+	</select>
+	
+	<delete id="deleteJobById">
+ 		delete from sys_job where id = #{id}
+ 	</delete>
+ 	
+ 	<delete id="deleteJobByIds">
+ 		delete from sys_job where id in
+ 		<foreach collection="array" item="id" open="(" separator="," close=")">
+ 			#{id}
+        </foreach> 
+ 	</delete>
+ 	
+ 	<update id="updateJob">
+ 		update sys_job
+ 		<set>
+ 			<if test="jobName != null and jobName != ''">jobName = #{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">jobGroup = #{jobGroup},</if>
+ 			<if test="methodName != null and methodName != ''">methodName = #{methodName},</if>
+ 			<if test="methodParams != null and methodParams != ''">methodParams = #{methodParams},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cronExpression = #{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfirePolicy = #{misfirePolicy},</if>
+ 			<if test="status !=null">status = #{status},</if>
+ 			<if test="remark != null and remark != ''">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">updateBy = #{updateBy},</if>
+ 			updateTime = sysdate()
+ 		</set>
+ 		where id = #{id}
+	</update>
+ 	
+ 	<insert id="insertJob" useGeneratedKeys="true" keyProperty="id">
+ 		insert into sys_job(
+ 			<if test="id != null and id != 0">id,</if>
+ 			<if test="jobName != null and jobName != ''">jobName,</if>
+ 			<if test="jobGroup != null and jobGroup != ''">jobGroup,</if>
+ 			<if test="methodName != null and methodName != ''">methodName,</if>
+ 			<if test="methodParams != null and methodParams != ''">methodParams,</if>
+ 			<if test="cronExpression != null and cronExpression != ''">cronExpression,</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">misfirePolicy,</if>
+ 			<if test="status != null and status != ''">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">createBy,</if>
+ 			createTime
+ 		)values(
+ 			<if test="id != null and id != 0">#{id},</if>
+ 			<if test="jobName != null and jobName != ''">#{jobName},</if>
+ 			<if test="jobGroup != null and jobGroup != ''">#{jobGroup},</if>
+ 			<if test="methodName != null and methodName != ''">#{methodName},</if>
+ 			<if test="methodParams != null and methodParams != ''">#{methodParams},</if>
+ 			<if test="cronExpression != null and cronExpression != ''">#{cronExpression},</if>
+ 			<if test="misfirePolicy != null and misfirePolicy != ''">#{misfirePolicy},</if>
+ 			<if test="status != null and status != ''">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			sysdate()
+ 		)
+	</insert>
+
+</mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/monitor/LogininforMapper.xml b/src/main/resources/mybatis/monitor/LogininforMapper.xml
index 1cd82a1..673caaf 100644
--- a/src/main/resources/mybatis/monitor/LogininforMapper.xml
+++ b/src/main/resources/mybatis/monitor/LogininforMapper.xml
@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.huaheng.pc.monitor.logininfor.mapper.LogininforMapper">
 
-	<resultMap type="Logininfor" id="LogininforResult">
+	<resultMap type="com.huaheng.pc.monitor.logininfor.domain.Logininfor" id="LogininforResult">
 		<id     property="id"        column="id"           />
 		<result property="loginName"     column="loginName"        />
 		<result property="status"        column="status"            />
@@ -16,12 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="loginTime"     column="loginTime"        />
 	</resultMap>
 
-	<insert id="insertLogininfor" parameterType="Logininfor">
+	<insert id="insertLogininfor" parameterType="com.huaheng.pc.monitor.logininfor.domain.Logininfor">
 		insert into sys_logininfor (loginName, status, ipaddr, loginLocation, browser, os, msg, loginTime)
 		values (#{loginName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
 	</insert>
 	
-	<select id="selectLogininforList" parameterType="Logininfor" resultMap="LogininforResult">
+	<select id="selectLogininforList" parameterType="com.huaheng.pc.monitor.logininfor.domain.Logininfor" resultMap="LogininforResult">
 		select id,loginName,ipaddr,loginLocation,browser,os,status,msg,loginTime from sys_logininfor
 		<where>
 			<if test="ipaddr != null and ipaddr != ''">
diff --git a/src/main/resources/mybatis/monitor/OperLogMapper.xml b/src/main/resources/mybatis/monitor/OperLogMapper.xml
index dd660e6..b4850fa 100644
--- a/src/main/resources/mybatis/monitor/OperLogMapper.xml
+++ b/src/main/resources/mybatis/monitor/OperLogMapper.xml
@@ -70,4 +70,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		where id = #{id}
 	</select>
 
+	<update id="truncateTable">
+		truncate table sys_oper_log
+	</update>
+
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/shipment/ShipmentDetailMapper.xml b/src/main/resources/mybatis/shipment/ShipmentDetailMapper.xml
index 50a46dd..be9b17d 100644
--- a/src/main/resources/mybatis/shipment/ShipmentDetailMapper.xml
+++ b/src/main/resources/mybatis/shipment/ShipmentDetailMapper.xml
@@ -137,4 +137,26 @@ ORDER BY
     left JOIN task_detail r on r.companyCode=c.code and r.status>90 and r.taskType =200
     and date(r.lastUpdated)=CURDATE()  group by c.code
     </select>
+
+  <insert id="insertDetails">
+    insert into shipment_detail(
+    shipmentId, warehouseCode, companyCode, shipmentCode, referCode, referId, referLineNum,
+    materialCode, materialName, materialSpec, materialUnit, shipQty, allocationRule,
+    replenishmentRule, pickLocs, attribute1, attribute2, attribute3, attribute4, batch,
+    lot, projectNo, manufactureDate, expirationDate, agingDate, inventorySts, dockLoc,
+    packingClass, waveId, created, createdBy, lastUpdatedBy
+    )
+    values
+    <foreach collection="shipmentDetails" item="item" index="index" separator=",">
+    (
+      #{item.shipmentId}, #{item.warehouseCode}, #{item.companyCode}, #{item.shipmentCode}, #{item.referCode},
+      #{item.referId}, #{item.referLineNum},#{item.materialCode}, #{item.materialName}, #{item.materialSpec},
+      #{item.materialUnit}, #{item.shipQty}, #{item.allocationRule},#{item.replenishmentRule},
+      #{item.pickLocs}, #{item.attribute1}, #{item.attribute2}, #{item.attribute3}, #{item.attribute4}, #{item.batch},
+      #{item.lot}, #{item.projectNo}, #{item.manufactureDate}, #{item.expirationDate}, #{item.agingDate},
+      #{item.inventorySts}, #{item.dockLoc},#{item.packingClass}, #{item.waveId}, #{item.created}, #{item.createdBy},
+      #{item.lastUpdatedBy}
+    )
+    </foreach>
+  </insert>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/MenuMapper.xml b/src/main/resources/mybatis/system/MenuMapper.xml
index f69871e..7b4365d 100644
--- a/src/main/resources/mybatis/system/MenuMapper.xml
+++ b/src/main/resources/mybatis/system/MenuMapper.xml
@@ -190,7 +190,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 	<update id="updateParentId">
 	update sys_menu s
-	inner join sys_menu m on s.warehouseCode=#{code} and s.parentName=m.menuName set s.parentId=m.id
+	inner join sys_menu m on s.warehouseCode=#{code} and s.warehouseCode=m.warehouseCode and s.parentName=m.menuName set s.parentId=m.id
 
 	</update>
 
diff --git a/src/main/resources/mybatis/system/RoleMapper.xml b/src/main/resources/mybatis/system/RoleMapper.xml
index 0b9e098..a8c2238 100644
--- a/src/main/resources/mybatis/system/RoleMapper.xml
+++ b/src/main/resources/mybatis/system/RoleMapper.xml
@@ -131,16 +131,10 @@
 	</insert>
 
 
-	<update id="updateRoleMenu">
-		update sys_role_menu r inner join sys_menu m
-		on r.roleId = (select id from sys_role where warehouseCode = #{code} limit 1)
-		set r.
-	</update>
 
 	<insert id="roleUserCopy">
 	insert into sys_user_role(userId,roleId)
-	values(1,(select id from sys_role where warehouseCode = #{code} limit 1))
+	values(#{id},(select id from sys_role where warehouseCode = #{code} limit 1))
 
 	</insert>
-	
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/task/TaskDetailMapper.xml b/src/main/resources/mybatis/task/TaskDetailMapper.xml
index 05c3675..330a0ea 100644
--- a/src/main/resources/mybatis/task/TaskDetailMapper.xml
+++ b/src/main/resources/mybatis/task/TaskDetailMapper.xml
@@ -21,7 +21,6 @@
     <result column="toZone" jdbcType="VARCHAR" property="toZone" />
     <result column="attributeId" jdbcType="INTEGER" property="attributeId" />
     <result column="referenceCode" jdbcType="VARCHAR" property="referenceCode" />
-    <result column="referenceId" jdbcType="INTEGER" property="referenceId" />
     <result column="referenceLineId" jdbcType="INTEGER" property="referenceLineId" />
     <result column="assignedUser" jdbcType="VARCHAR" property="assignedUser" />
     <result column="attribute1" jdbcType="VARCHAR" property="attribute1" />
diff --git a/src/main/resources/mybatis/task/TaskHeaderMapper.xml b/src/main/resources/mybatis/task/TaskHeaderMapper.xml
index a71b78a..e05533d 100644
--- a/src/main/resources/mybatis/task/TaskHeaderMapper.xml
+++ b/src/main/resources/mybatis/task/TaskHeaderMapper.xml
@@ -60,7 +60,7 @@
 
     <select id="getTasksStatus" resultType="com.huaheng.pc.task.taskHeader.domain.TaskHeader">
     select *
-     FROM task
+     FROM task_header
      where lastStatus &lt; 100
     </select>
 
diff --git a/src/main/resources/static/img/profiles.jpg b/src/main/resources/static/img/profiles.jpg
new file mode 100644
index 0000000..ad2e639
--- /dev/null
+++ b/src/main/resources/static/img/profiles.jpg
diff --git a/src/main/resources/templates/admin/inventory/inventory.html b/src/main/resources/templates/admin/inventory/inventory.html
index 0f02fc7..1ed1197 100644
--- a/src/main/resources/templates/admin/inventory/inventory.html
+++ b/src/main/resources/templates/admin/inventory/inventory.html
@@ -9,61 +9,59 @@
 				<form id="inventory-form">
 					<div class="select-list">
 						<ul>
-                            <li>
-                                库位编号:<input type="text" name="locationCode"/>
-                            </li>
 							<li>
-								容器编号:<input type="text" name="containerCode"/>
+								库存头ID:<input id="inventoryHeaderId" type="text" name="inventoryHeaderId"/>
 							</li>
 							<li>
-								仓库编码:<input type="text" name="warehouseCode"/>
+								库位编号:<input id="locationCode" type="text" name="locationCode"/>
 							</li>
 							<li>
-								u8仓库:<select name="uWarehouseCode" th:with="warehouse=${@warehouse.selectList()}">
-								<option value="">所有</option>
-								<option th:each="e : ${warehouse}" th:text="${e['uWarehouseName']}" th:value="${e['uWarehouseCode']}"></option></select>
+								容器编号:<input id="containerCode" type="text" name="containerCode"/>
 							</li>
-                            <li>
-                                储货库区:<input type="text" name="zoneCode"/>
-                            </li>
 							<li>
-								存货编码:<input type="text" name="materialCode"/>
+								物料编码:<input type="text" name="materialCode"/>
 							</li>
-                            <li>
-                                存货代码:<input type="text" name="materialOldCode"/>
-                            </li>
 							<li>
 								物料名称:<input type="text" name="materialName"/>
 							</li>
-                            <li>
-                                库存状态:
-                                <select name="status" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}">
-                                    <option value="">所有</option>
-                                    <option th:each="e : ${inventoryStatus}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
-                                </select>
-                            </li>
-							<li class="time" style="height:30px">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+							<li>
+								物料规格:<input type="text" name="materialSpec"/>
 							</li>
-							<!--<li>
-								物料类型:
-								<select name="materialType" th:with="type=${@dict.getType('materialType')}">
+							<li>
+								库存状态:
+								<select name="inventorySts" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}">
 									<option value="">所有</option>
-									<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
+									<option th:each="e : ${inventoryStatus}" th:text="${e['dictLabel']}"
+											th:value="${e['dictValue']}"></option>
 								</select>
-							</li>-->
+							</li>
 							<li>
 								供应商编码:<input type="text" name="supplierCode"/>
 							</li>
+							<li>
+								货主编码:<input type="text" name="companyCode"/>
+							</li>
+							<li>
+								上游单号:<input type="text" name="referCode"/>
+							</li>
+							<li>
+								上游行号:<input type="text" name="referDetailId"/>
+							</li>
+							<li>
+								入库编码:<input type="text" name="receiptCode"/>
+							</li>
+							<li>
+								入库明细ID:<input type="text" name="receiptDetailId"/>
+							</li>
 
 							<li>
-								项 目 号:<input type="text" name="project"/>
+								项 目 号:<input type="text" name="projectNo"/>
 							</li>
 							<li>
-								物料规格:<input type="text" name="materialSpec"/>
+								批&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;次:<input type="text" name="batch"/>
+							</li>
+							<li>
+								批&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:<input type="text" name="lot"/>
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
@@ -98,189 +96,190 @@
                 columns: [{
 		            checkbox: true
 		        },
-				{
-					field : 'id', 
-					title : '库存ID',
-                    sortable:true
-				},
-				/*{
-					field : 'locationId',
-					title : '库位Id' ,
-					visible:false
-				},*/
-				{
-					field : 'locationCode',
-					title : '库位编号'
-				},
-                {
-                    field : 'containerCode',
-                    title : '容器编号'
-                },
-                {
-                    field : 'zoneCode',
-                    title : '储货库区' ,
-                },
-                {
-                    field : 'materialCode',
-                    title : '存货编码'
-                },
-                {
-                    field : 'materialOldCode',
-                    title : '存货代码'
-                },
-                {
-                    field : 'materialName',
-                    title : '物料名称'
-                },
-                {
-                    field : 'materialSpec',
-                    title : '物料规格'
-                },
-                {
-                    field : 'qty',
-                    title : '数量'
-                },
-                {
-                    field : 'taskQty',
-                    title : '预定执行数量'
-                },
-					// {
-					// 	field : 'zoneCode',
-					// 	title : '物料库区',
-					// 	visible:true
-					// },
-				{
-					field : 'sourceCode', 
-					title : '上游系统单号',
-                    visible:true
-				},
-				{
-					field : 'uWarehouseCode',
-					title : 'u8仓库',
-					visible:true
-				},
-				{
-					field : 'sourceLine', 
-					title : '上游系统行号',
-					visible:true
-				},
-				/*{
-					field : 'companyId',
-					title : '货主Id',
-                    visible:false
-				},*/
-				{
-					field : 'companyCode', 
-					title : '货主编码'
-				},
+					{
+						field: 'id',
+						title: '明细ID',
+						sortable: true
+					},
+					{
+						field: 'inventoryHeaderId',
+						title: '库存头ID'
+					},
+					{
+						field: 'locationCode',
+						title: '库位编号'
+					},
+					{
+						field: 'containerCode',
+						title: '容器编号'
+					},
+
+					{
+						field: 'materialCode',
+						title: '存货编码'
+					},
 
-				{
-					field : 'receiptId',
-					title : '入库单标识' ,
-                    visible:false
-				},
-				{
-					field : 'receiptCode', 
-					title : '入库单编码' 
-				},
-				{
-					field : 'receiptDetailId',
-					title : '入库单明细标识'  ,
-                    visible:false
-				},
-				{
-					field : 'batch', 
-					title : '批次' ,
-                    sortable:false,
-                    visible:false
-				},
-				{
-					field : 'lot', 
-					title : '批号' ,
-                    sortable:false,
-                    visible:false
-				},
-				{
-					field : 'project', 
-					title : '项目号' ,
-                    sortable:true
-				},
-                    {
-                        field : 'supplierCode',
-                        title : '供应商编码',
-                        visible:true
-                    },
-				{
-					field : 'manufactureDate', 
-					title : '生产日期' ,
-                    sortable:true ,
-                    visible:false
-				},
-				{
-					field : 'expirationDate', 
-					title : '失效日期' ,
-                    sortable:true ,
-                    visible:false
-				},
-				{
-					field : 'status', 
-					title : '库存状态' ,
-                    align: 'center',
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(inventoryStatus, value);
-                    }
-				},
+					{
+						field: 'materialName',
+						title: '物料名称'
+					},
+					{
+						field: 'materialSpec',
+						title: '物料规格'
+					},
+					{
+						field: 'materialUnit',
+						title: '物料单位'
+					},
+					{
+						field: 'qty',
+						title: '库存数量'
+					},
+					{
+						field: 'inventorySts',
+						title: '库存状态',
+						align: 'center',
+						formatter: function (value, row, index) {
+							return $.table.selectDictLabel(inventoryStatus, value);
+						}
+					},
+					{
+						field: 'taskQty',
+						title: '预定执行数量'
+					},
+					{
+						field: 'lockedQty',
+						title: '冻结数量'
+					},
+					{
+						field: 'companyCode',
+						title: '货主编码'
+					},
+					{
+						field: 'receiptCode',
+						title: '入库单编码'
+					},
+					{
+						field: 'receiptDetailId',
+						title: '入库单明细ID',
+						visible: true
+					},
+					{
+						field: 'batch',
+						title: '批次',
+						sortable: false,
+						visible: false
+					},
+					{
+						field: 'lot',
+						title: '批号',
+						sortable: false,
+						visible: false
+					},
+					{
+						field: 'projectNo',
+						title: '项目号',
+						sortable: true
+					},
+					{
+						field: 'supplierCode',
+						title: '供应商编码',
+						visible: true
+					},
+					{
+						field: 'manufactureDate',
+						title: '生产日期',
+						sortable: true,
+						visible: false
+					},
+					{
+						field: 'expirationDate',
+						title: '失效日期',
+						sortable: true,
+						visible: false
+					},
 
-				{
-					field : 'costPrice', 
-					title : '成本' ,
-                    visible:false
-				},
-				{
-					field : 'listPrice', 
-					title : '标价' ,
-                    visible:false
-				},
-				{
-					field : 'netPrice', 
-					title : '净价' ,
-                    visible:false
-				},
-				{
-					field : 'created', 
-					title : '入库时间',
-                    sortable:true
-				},
-				{
-					field : 'createdBy', 
-					title : '创建用户' ,
-                    visible:false
-				},
-				{
-					field : 'lastUpdated', 
-					title : '最后修改时间',
-                    sortable:true
-				},
-				{
-					field : 'lastUpdatedBy', 
-					title : '更新用户' 
-				},
-				{
-					field : 'userDef1', 
-					title : '自定义字段1' ,
-                    visible:false
-				},
-				{
-					field : 'userDef2', 
-					title : '自定义字段2' ,
-                    visible:false
-				},
-				{
-					field : 'userDef3', 
-					title : '自定义字段3' ,
-                    visible:false
-				}
-		        ]
+					{
+						field: 'referCode',
+						title: '上游单号'
+					},
+					{
+						field: 'referDetailId',
+						title: '上游单号行号'
+					},
+					{
+						field: 'qcCheck',
+						title: '质检'
+					},
+					{
+						field: 'weight',
+						title: '重量'
+					},
+					{
+						field: 'attributeId',
+						title: '属性号',
+						visible: false
+					},
+					{
+						field: 'attribute1',
+						title: '属性1',
+						visible: false
+					},
+					{
+						field: 'attribute2',
+						title: '属性2',
+						visible: false
+					},
+					{
+						field: 'attribute3',
+						title: '属性3',
+						visible: false
+					},
+					{
+						field: 'lockCode',
+						title: '锁',
+					},
+					{
+						field: 'lastCycleCountDate',
+						title: '上次盘点日期',
+						visible: false,
+						sortable: true
+					},
+					{
+						field: 'created',
+						title: '入库日期',
+						sortable: true
+					},
+					{
+						field: 'createdBy',
+						title: '创建用户',
+						visible: false
+					},
+					{
+						field: 'lastUpdated',
+						title: '最后修改时间',
+						sortable: true
+					},
+					{
+						field: 'lastUpdatedBy',
+						title: '更新用户'
+					},
+					{
+						field: 'userDef1',
+						title: '自定义字段1',
+						visible: false
+					},
+					{
+						field: 'userDef2',
+						title: '自定义字段2',
+						visible: false
+					},
+					{
+						field: 'userDef3',
+						title: '自定义字段3',
+						visible: false
+					}
+				]
             };
             $.table.init(options);
         });
diff --git a/src/main/resources/templates/admin/main.html b/src/main/resources/templates/admin/main.html
index 6af7c2d..868a462 100644
--- a/src/main/resources/templates/admin/main.html
+++ b/src/main/resources/templates/admin/main.html
@@ -414,7 +414,13 @@
                         option.series.push({type:'bar',stack:'总量',data:[]});
                     }
                     for(let i=0;i<length;i++){
-                        for (let j = 0; j < 10; j++) {
+                        let showLine = 0;
+                        if (value.data[i].list1.length < 10){
+                            showLine = value.data[i].list1.length;
+                        } else {
+                            showLine = 10;
+                        }
+                        for (let j = 0; j < showLine; j++) {
                             option.series[j].data.push({value:value.data[i].list1[j].total,name:value.data[i].list1[j].name});
                         }
                     }
diff --git a/src/main/resources/templates/admin/receiptHeader/receiptHeader.html b/src/main/resources/templates/admin/receiptHeader/receiptHeader.html
index 544377b..c2978d4 100644
--- a/src/main/resources/templates/admin/receiptHeader/receiptHeader.html
+++ b/src/main/resources/templates/admin/receiptHeader/receiptHeader.html
@@ -33,45 +33,23 @@
 										入库单号:<input type="text" name="code"/>
 									</li>
 									<li>
-										仓库:<input type="text" name="warehouseCode"/>
-									</li>
-									<li>
-										<!--入库类型:<input type="text" name="sourceCode"/>-->
-										入库类型:<select name="type" th:with="type=${@dict.getType('receiptType')}">
-										<option value="">所有</option>
-										<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
+										上游单号:<input type="text" name="referCode"/>
 									</li>
 									<li>
-										供 应 商:<input type="text" name="supplierCode"/>
+										仓库:<input type="text" name="warehouseCode"/>
 									</li>
 									<li>
-										<!--头 状 态:<input type="text" name="firstStatus"/>-->
-										头 状 态:<select name="firstStatus" th:with="firstStatus=${@dict.getType('receiptHeaderStatus')}">
-										<option value="">所有</option>
-										<option th:each="e : ${firstStatus}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
-									</li>
+										货主:<select id="companyCode" name="companyCode" th:with="list=${@companyService.getCode()}">
+										<option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option>
+									</select>
 									<li>
-										<!--尾 状 态:<input type="text" name="lastStatus"/>-->
-										尾 状 态:<select name="lastStatus" th:with="lastStatus=${@dict.getType('receiptHeaderStatus')}">
+										<!--入库类型:<input type="text" name="sourceCode"/>-->
+										入库类型:<select name="type" th:with="type=${@receiptTypeService.getType()}">
 										<option value="">所有</option>
-										<option th:each="e : ${lastStatus}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
-									</li>
-									<li>
-										上游单号:<input type="text" name="sourceCode"/>
+										<option th:each="e : ${type}" th:text="${e['name']}" th:value="${e['code']}"></option></select>
 									</li>
 									<li>
-										上游平台:<input type="text" name="sourcePlatform"/>
-									</li>
-									<li class="time">
-										<label>创建时间: </label>
-										<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-										<span>-</span>
-										<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-									</li>
-									<li>
-										u8仓库:<select name="uWarehouseCode" th:with="warehouse=${@warehouse.selectList()}">
-										<option value="">所有</option>
-										<option th:each="e : ${warehouse}" th:text="${e['uWarehouseName']}" th:value="${e['uWarehouseCode']}"></option></select>
+										供 应 商:<input type="text" name="supplierCode"/>
 									</li>
 									<li>
 										<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
@@ -106,8 +84,7 @@
                                                 <input type="text" name="receiptCompanyCode" id="receiptCompanyCode">
                                                 <input type="hidden" name="receiptCompanyId" id="receiptCompanyId">
                                             </li>
-											<li>上游系统单号:<input type="text" name="receiptSourceCode" id="receiptSourceCode"></li>
-											<li>上游平台:<input type="text" name="receiptSourcePlatform" id="receiptSourcePlatform"></li>
+											<li>上游系统单号:<input type="text" name="receiptReferCode" id="receiptReferCode"></li>
 											<li>入库单类型:<input type="text" name="receiptType" id = "receiptType"></li>
 											<li>总数量:<input type="text" name="receiptTotalQty" id="receiptTotalQty"></li>
 											<li>总行数:<input type="text" name="receiptTotalLines" id="receiptTotalLines"></li>
@@ -136,7 +113,7 @@
 								<div class="tab-pane fade" id="tabOther">
 									<div class="select-list">
 										<ul>
-											<li>备注:<input type="text" name="receiptRemark" id="receiptRemark"></li>
+											<li>备注:<input type="text" name="receiptNote" id="receiptNote"></li>
 											<li>扩展属性1:<input type="text" name="receiptUserDef1" id="receiptUserDef1"></li>
 											<li>扩展属性2:<input type="text" name="receiptUserDef2" id="receiptUserDef2"></li>
 											<li>扩展属性3:<input type="text" name="receiptUserDef3" id="receiptUserDef3"></li>
@@ -177,7 +154,7 @@
         var prefix = ctx + "admin/receiptHeader";
         var detailPrefix = ctx + "admin/receiptDetail";
         var datas = [[${@dict.getType('sys_normal_disable')}]];
-        var receiptTypes = [[${@dict.getType('receiptType')}]];
+        var receiptTypes = [[${@receiptTypeService.getType()}]];
         var receiptHeaderStatus = [[${@dict.getType('receiptHeaderStatus')}]];
         var uploadStatus = [[${@dict.getType('uploadStatus')}]];
         var inventoryStatus = [[${@dict.getType('inventoryStatus')}]];
@@ -226,11 +203,6 @@
 					field : 'warehouseCode',
 					title : '仓库',
 				},
-				{
-					field : 'uWarehouseCode',
-					title : 'U8仓库',
-					sortable:true
-				},
                 {
                     field : 'companyId',
                     title : '货主ID',
@@ -250,16 +222,11 @@
                     }
                 },
                 {
-                    field : 'sourceCode',
+                    field : 'referCode',
                     title : '上游单号',
                     sortable:true
                 },
                 {
-                    field : 'sourcePlatform',
-                    title : '上游平台',
-                    visible:false
-                },
-                {
                     field : 'supplierId',
                     title : '供应商id',
                     visible:false
@@ -297,18 +264,6 @@
                     visible:false
                 },
                 {
-                    field : 'uploadTime',
-                    title : '上传时间',
-                    visible:false,
-                    sortable:true
-                },
-                {
-                    field : 'appointmentTime',
-                    title : '入库预约时间',
-                    visible:false,
-                    sortable:true
-                },
-                {
                     field : 'firstStatus',
                     title : '头状态',
                     align: 'center',
@@ -343,14 +298,6 @@
                     title : '更新用户'
                 },
                 {
-                    field : 'enable',
-                    title : '是否有效',
-                    align: 'center',
-                        formatter: function(value, row, index) {
-                            return $.table.selectDictLabel(datas, value);
-                        }
-                },
-                {
                     field : 'userDef1',
                     title : '自定义字段1',
                     visible: false
@@ -418,81 +365,159 @@
                 title : '入库单号',
                 visible:false
             },
-			{
-				field : 'zoneCode',
-				title : '库区编码'
-			},
-            {
-                field : 'materialCode',
-                title : '存货编码'
-            },
-            {
-                field : 'materialName',
-                title : '物料名称'
-            },
-            {
-                field : 'specification',
-                title : '规格'
-            },
-            {
-                field : 'batch',
-                title : '批次'
-            },
-            {
-                field : 'lot',
-                title : '批号'
-            },
-            {
-                field : 'project',
-                title : '项目号'
-            },
-            {
-                field : 'manufactureDate',
-                title : '生产日期'
-            },
-            {
-                field : 'expirationDate',
-                title : '失效日期'
-            },
-            {
-                field : 'inventoryStatus',
-                title : '库存状态',
-                formatter: function(value, row, index) {
-                    return $.table.selectDictLabel(inventoryStatus, value);
-                },
-            },
-            {
-                field : 'qty',
-                title : '单据数量'
-            },
-            {
-                field : 'qtyCompleted',
-                title : '已收数量'
-            },
-            {
-                field : 'status',
-                title : '单据状态',
-                align: 'center',
-                formatter: function(value, row, index) {
-                    return $.table.selectDictLabel(receiptHeaderStatus, value);
-                }
-            },
-            {
-                field : 'created',
-                title : '创建时间'
-            },
-            {
-                field : 'createdBy',
-                title : '创建用户'
-            },
-            {
-                field : 'lastUpdated',
-                title : '最后修改时间'
-            },
-            {
-                field : 'lastUpdatedBy',
-                title : '更新用户'
-            },
+				{
+					field : 'materialCode',
+					title : '物料编码'
+				},
+				{
+					field : 'materialName',
+					title : '物料名称'
+				},
+				{
+					field : 'materialSpec',
+					title : '物料规格'
+				},
+				{
+					field : 'materialUnit',
+					title : '物料单位'
+				},
+				{
+					field : 'supplierCode',
+					title : '供应商编码'
+				},
+				{
+					field : 'batch',
+					title : '批次'
+				},
+				{
+					field : 'lot',
+					title : '批号' ,
+					visible:false
+				},
+				{
+					field : 'qcCheck',
+					title : '是否质检',
+					align : "center",
+					formatter: function(value, row, index) {
+						var actions = [];
+						if (value == 0) {
+							actions.push("<span class='badge badge-info'>是</span>");
+						} else {
+							actions.push("<span class='badge badge-info'>否</span>");
+						}
+						return actions.join('');
+					}
+				},
+				{
+					field : 'projectNo',
+					title : '项目号'
+				},
+				{
+					field : 'manufactureDate',
+					title : '生产日期' ,
+					visible:false
+				},
+				{
+					field : 'expirationDate',
+					title : '失效日期' ,
+					visible:false
+				},
+				{
+					field : 'agingDate',
+					title : '入库日期' ,
+					visible:false
+				},
+				{
+					field : 'totalQty',
+					title : '总数量'
+				},
+				{
+					field : 'openQty',
+					title : '未收数量'
+				},
+				{
+					field : 'referCode',
+					title : 'ERP单号',
+					visible : false
+				},
+				{
+					field : 'referId',
+					title : 'ERP内部号',
+					visible : false
+				},
+				{
+					field : 'referLineNum',
+					title : 'ERP行号',
+					visible : false
+				},
+				{
+					field : 'locatingRule',
+					title : '定位规则'
+				},
+				{
+					field : 'inventorySts',
+					title : '库存状态',
+					visible : false
+				},
+				{
+					field : 'itemListPrice',
+					title : '标价'
+				},
+				{
+					field : 'itemNetPrice',
+					title : '净价'
+				},
+				{
+					field : 'price',
+					title : '单价' ,
+					visible:false
+				},
+				{
+					field : 'statusFlowCode',
+					title : '流程编码'
+				},
+				{
+					field : 'isVirtualBom',
+					title : '是否虚拟套件',
+					align : "center",
+					formatter: function(value, row, index) {
+						return $.table.selectDictLabel(isVirtualBoms, value);
+					}
+				},
+				{
+					field : 'created',
+					title : '创建时间'
+				},
+				{
+					field : 'createdBy',
+					title : '创建用户',
+					visible:false
+				},
+				{
+					field : 'lastUpdated',
+					title : '最后修改时间',
+					visible:false
+				},
+				{
+					field : 'lastUpdatedBy',
+					title : '更新用户' ,
+					visible:false
+				},
+				{
+					field : 'userDef1',
+					title : '自定义字段1' ,
+					visible:false
+				},
+				{
+					field : 'userDef2',
+					title : '自定义字段2' ,
+					visible:false
+				},
+				{
+					field : 'userDef3',
+					title : '自定义字段3' ,
+					visible:false
+				},
             {
                 title: '操作',
                 align: 'center',
@@ -540,8 +565,7 @@
                     receiptCode=value.data.code
                     $('#receiptCompanyId').val(value.data.companyId);
                     $('#receiptCompanyCode').val(value.data.companyCode);
-                    $('#receiptSourceCode').val(value.data.sourceCode);
-                    $('#receiptSourcePlatform').val(value.data.sourcePlatform);
+                    $('#receiptReferCode').val(value.data.referCode);
                     $('#receiptType').val(receiptTypes.filter(function (e) {return e.dictValue==value.data.type})[0].dictLabel);
                     $('#receiptTotalQty').val(value.data.totalQty);
                     $('#receiptTotalLines').val(value.data.totalLines);
diff --git a/src/main/resources/templates/admin/shipmentHeader/shipmentHeader.html b/src/main/resources/templates/admin/shipmentHeader/shipmentHeader.html
index 09aa7a1..d16e743 100644
--- a/src/main/resources/templates/admin/shipmentHeader/shipmentHeader.html
+++ b/src/main/resources/templates/admin/shipmentHeader/shipmentHeader.html
@@ -27,17 +27,20 @@
                                         出库单号:<input type="text" name="code"/>
                                     </li>
                                     <li>
-                                    仓库:<input type="text" name="warehouseCode"/>
-                                </li>
-                                    <li>
                                         <!--入库类型:<input type="text" name="sourceCode"/>-->
-                                        出库类型:<select name="type" th:with="type=${@dict.getType('shipmentType')}">
+                                        出库类型:<select name="shipmentType" th:with="shipmentType=${@dict.getType('shipmentType')}">
                                         <option value="">所有</option>
-                                        <option th:each="e : ${type}" th:text="${e['dictLabel']}"
+                                        <option th:each="e : ${shipmentType}" th:text="${e['dictLabel']}"
                                                 th:value="${e['dictValue']}"></option>
                                     </select>
                                     </li>
                                     <li>
+                                        上游单号:<input type="text" name="referCode"/>
+                                    </li>
+                                    <li>
+                                        上游订单类型:<input type="text" name="referCodeType"/>
+                                    </li>
+                                    <li>
                                         客户编码:<input type="text" name="sourceCode"/>
                                     </li>
                                     <li>
@@ -58,24 +61,13 @@
                                                 th:value="${e['dictValue']}"></option>
                                     </select>
                                     </li>
-                                    <li>
-                                        上游单号:<input type="text" name="sourceCode"/>
-                                    </li>
-                                    <li>
-                                        u8仓库:<select name="uWarehouseCode" th:with="warehouse=${@warehouse.selectList()}">
-                                        <option value="">所有</option>
-                                        <option th:each="e : ${warehouse}" th:text="${e['uWarehouseName']}" th:value="${e['uWarehouseCode']}"></option></select>
-                                    </li>
-                                    <li>
-                                        上游平台:<input type="text" name="sourcePlatform"/>
-                                    </li>
                                     <li class="time">
                                         <label>创建时间: </label>
                                         <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="params[createdBegin]"/>
+                                               name="createdBegin"/>
                                         <span>-</span>
                                         <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="params[createdEnd]"/>
+                                               name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
@@ -110,8 +102,8 @@
                                             <li>仓库编码:<input type="text" name="shipmentWarehouseCode" id="shipmentWarehouseCode"></li>
                                             <input type="hidden" name="shipmentCompanyId" id="shipmentCompanyId">
                                             <li>货主:<input type="text" name="shipmentCompanyCode" id="shipmentCompanyCode"></li>
-                                            <li>上游系统单号:<input type="text" name="shipmentSourceCode" id="shipmentSourceCode"></li>
-                                            <li>上游平台:<input type="text" name="shipmentSourcePlatform" id="shipmentSourcePlatform"></li>
+                                            <li>上游订单号:<input type="text" name="shipmentSourceCode" id="shipmentSourceCode"></li>
+                                            <li>订单平台:<input type="text" name="shipmentSourcePlatform" id="shipmentSourcePlatform"></li>
                                             <li>出库单类型:<input type="text" name="shipmentType" id = "shipmentType"></li>
                                             <li>总数量:<input type="text" name="shipmentTotalQty" id="shipmentTotalQty"></li>
                                             <li>总行数:<input type="text" name="shipmentTotalLines" id="shipmentTotalLines"></li>
@@ -123,16 +115,14 @@
                                 <div class="tab-pane fade" id="tabCustomer">
                                     <div class="select-list">
                                         <ul>
-                                            <li>客户编码:<input type="text" name="shipmentShipTo" id="shipmentShipTo"></li>
-                                            <li>发货预约时间:<input type="text" name="shipmentAppointmentTime" id="shipmentAppointmentTime"></li>
+                                        <li>客户编码:<input type="text" name="shipmentShipTo" id="shipmentShipTo"></li>
                                         </ul>
                                     </div>
                                 </div>
                                 <div class="tab-pane fade" id="tabExcute">
                                     <div class="select-list">
                                         <ul>
-                                            <li>优先级:<input type="text" name="shipmentPriority" id="shipmentPriority"></li>
-                                            <li>发货站台:<input type="text" name="shipmentStation" id="shipmentStation"></li>
+                                            < <li>优先级:<input type="text" name="shipmentPriority" id="shipmentPriority"></li>
                                             <li></li>
                                         </ul>
                                     </div>
@@ -140,7 +130,6 @@
                                 <div class="tab-pane fade" id="tabOther">
                                     <div class="select-list">
                                         <ul>
-                                            <li>备注:<input type="text" name="shipmentRemark" id="shipmentRemark"></li>
                                             <li>扩展属性1:<input type="text" name="shipmentUserDef1" id="shipmentUserDef1"></li>
                                             <li>扩展属性2:<input type="text" name="shipmentUserDef2" id="shipmentUserDef2"></li>
                                             <li>扩展属性3:<input type="text" name="shipmentUserDef3" id="shipmentUserDef3"></li>
@@ -151,14 +140,10 @@
                                 <div class="tab-pane fade" id="tabSystem">
                                     <div class="select-list">
                                         <ul>
-                                            <li>上传备注:<input type="text" name="shipmentUploadremark" id="shipmentUploadremark"></li>
-                                            <li>上传时间:<input type="text" name="shipmentUploadTime" id="shipmentUploadTime"></li>
-                                            <li>上传状态:<input type="text" name="shipmentUploadStatus" id="shipmentUploadStatus"></li>
                                             <li>创建时间:<input type="text" name="shipmentCreated" id="shipmentCreated"></li>
                                             <li>创建用户:<input type="text" name="shipmentCreatedBy" id="shipmentCreatedBy"></li>
                                             <li>最后修改时间:<input type="text" name="shipmentLastUpdated" id="shipmentLastUpdated"></li>
                                             <li>更新用户:<input type="text" name=" shipmentLastUpdatedBy" id="shipmentLastUpdatedBy"></li>
-                                            <li>是否有效:<input type="text" name="shipmentEnable" id="shipmentEnable"></li>
                                             <li>是否删除:<input type="text" name="shipmentDeleted" id="shipmentDeleted"></li>
                                         </ul>
                                     </div>
@@ -229,38 +214,23 @@
                     sortable:true
                 },
                 {
-                    field: 'warehouseCode',
-                    title: '仓库',
-                    sortable:true
-                },
-                {
-                    field: 'companyId',
-                    title: '货主标识',
-                    visible:false
-                },
-                {
                     field: 'companyCode',
                     title: '货主',
                     sortable:true
                 },
                 {
-                    field: 'sourceCode',
-                    title: '上游单号',
+                    field: 'referCode',
+                    title: '上游订单号',
                     sortable:true
                 },
                 {
-                    field: 'sourcePlatform',
-                    title: '上游平台',
+                    field: 'referCodeType',
+                    title: '上游订单内部号',
                     sortable:true,
                     visible:false
                 },
                 {
-                    field : 'uWarehouseCode',
-                    title : 'U8仓库',
-                    sortable:true
-                },
-                {
-                    field: 'type',
+                    field: 'shipmentType',
                     title: '类型',
                     align: 'center',
                     formatter: function(value, row, index) {
@@ -270,7 +240,7 @@
 
                 },
                 {
-                    field: 'shipTo',
+                    field: 'customerCode',
                     title: '客户编码',
                     sortable:true
                 },
@@ -279,12 +249,8 @@
                     title: '优先级'
                 },
                 {
-                    field: 'station',
-                    title: '发货站台',
-                    align: 'center',
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(stations, value);
-                    },
+                    field: 'route',
+                    title: '路线',
                     sortable:true
                 },
                 {
@@ -296,25 +262,6 @@
                     title: '总行数'
                 },
                 {
-                    field: 'remark',
-                    title: '备注'
-                },
-                {
-                    field: 'uploadremark',
-                    title: '上传备注',
-                    visible:false
-                },
-                {
-                    field: 'uploadTime',
-                    title: '上传时间',
-                    visible:false
-                },
-                {
-                    field: 'appointmentTime',
-                    title: '发货预约时间',
-                    visible:false
-                },
-                {
                     field: 'firstStatus',
                     title: '头状态',
                     formatter: function(value, row, index) {
@@ -331,11 +278,6 @@
                     sortable:true
                 },
                 {
-                    field: 'uploadStatus',
-                    title: '上传状态',
-                    visible:false
-                },
-                {
                     field: 'created',
                     title: '创建时间',
                     sortable: true
@@ -355,13 +297,6 @@
                     visible:false
                 },
                 {
-                    field: 'enable',
-                    title: '是否有效',
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(datas, value);
-                    }
-                },
-                {
                     title: '操作',
                     align: 'center',
                     formatter: function (value, row, index) {
@@ -396,15 +331,6 @@
                     title: '明细id'
                 },
                 {
-                    field: 'zoneCode',
-                    title: '库区'
-                },
-
-               /* {
-                    field: 'shipmentId',
-                    title: '出库单Id'
-                },*/
-                {
                     field: 'materialCode',
                     title: '存货编码'
                 },
@@ -413,12 +339,13 @@
                     title: '物料名称'
                 },
                 {
-                    field: 'specification',
+                    field: 'materialSpec',
                     title: '物料规格'
                 },
                 {
                     field: 'batch',
-                    title: '批次'
+                    title: '批次',
+                    visible:false
                 },
                 {
                     field: 'lot',
@@ -426,17 +353,17 @@
                     visible:false
                 },
                 {
-                    field: 'project',
+                    field: 'projectNo',
                     title: '项目号'
                 },
-                {
+                /*{
                     field: 'status',
                     title: '明细状态',
                     formatter: function(value, row, index) {
                         return $.table.selectDictLabel(shipmentHeaderStatus, value);
                     },
                     visible:true
-                },
+                },*/
                 {
                     field: 'manufactureDate',
                     title: '生产日期',
@@ -450,37 +377,40 @@
                 {
                     field: 'agingDate',
                     title: '入库日期',
-                    sortable: true
+                    visible:false
                 },
                 {
-                    field: 'inventoryStatus',
+                    field: 'inventorySts',
                     title: '库存状态',
                     formatter: function(value, row, index) {
                         return $.table.selectDictLabel(inventoryStatus, value);
                     },
                 },
                 {
-                    field: 'qty',
+                    field: 'shipQty',
                     title: '发货数量'
                 },
                 {
-                    field: 'qtyCompleted',
+                    field: 'requestQty',
                     title: '已出数量'
                 },
                 {
+                    field : 'inventoryQty',
+                    title : '库存数量'
+                },
+                {
+                    field : 'materialUnit',
+                    title : '物料单位'
+                },
+                {
                     field : 'status',
-                    title : '单据状态',
+                    title : '明细状态',
                     align: 'center',
                     formatter: function(value, row, index) {
                         return $.table.selectDictLabel(shipmentHeaderStatus, value);
                     }
                 },
                 {
-                    field: 'price',
-                    title: '物料单价',
-                    visible:false
-                },
-                {
                     field: 'created',
                     title: '创建时间',
                 },
@@ -541,36 +471,21 @@
             success:function (value) {
                 $('#shipmentId').val(value.data.id);
                 $('#shipmentCode').val(value.data.code);
-                $('#shipmentWarehouseId').val(value.data.warehouseId);
                 $('#shipmentWarehouseCode').val(value.data.warehouseCode);
-                $('#shipmentCompanyId').val(value.data.companyId);
                 $('#shipmentCompanyCode').val(value.data.companyCode);
-                $('#shipmentSourceCode').val(value.data.sourceCode);
-                $('#shipmentSourcePlatform').val(value.data.sourcePlatform);
-                $('#shipmentType').val(shipmentTypes.filter(function(a){return a.dictValue==value.data.type})[0].dictLabel);
-                $('#shipmentShipTo').val(value.data.shipTo);
+                $('#shipmentSourceCode').val(value.data.referCode);
+                $('#shipmentSourcePlatform').val(value.data.referPlatform);
+                $('#shipmentType').val(shipmentTypes.filter(function(a){return a.dictValue==value.data.shipmentType})[0].dictLabel);
+                $('#shipmentShipTo').val(value.data.customerCode);
                 $('#shipmentPriority').val(value.data.priority);
-                $('#shipmentStation').val(value.data.station);
                 $('#shipmentTotalQty').val(value.data.totalQty);
                 $('#shipmentTotalLines').val(value.data.totalLines);
-                $('#shipmentRemark').val(value.data.remark);
-                $('#shipmentUploadremark').val(value.data.uploadremark);
-                $('#shipmentUploadTime').val(value.data.uploadTime);
-                $('#shipmentAppointmentTime').val(value.data.appointmentTime);
                 $('#shipmentFirstStatus').val(shipmentHeaderStatus.filter(function(a){return a.dictValue==value.data.firstStatus})[0].dictLabel);
                 $('#shipmentLastStatus').val(shipmentHeaderStatus.filter(function(a){return a.dictValue==value.data.lastStatus})[0].dictLabel);
-                $('#shipmentUploadStatus').val(uploadStatus.filter(function (a) {return a.dictValue==value.data.uploadStatus})[0].dictLabel);
                 $('#shipmentCreated').val(value.data.created);
                 $('#shipmentCreatedBy').val(value.data.createdBy);
                 $('#shipmentLastUpdated').val(value.data.lastUpdated);
                 $('#shipmentLastUpdatedBy').val(value.data.lastUpdatedBy);
-                //$('#shipmentEnable').val(value.data.enable);
-                if(value.data.enable==true){
-                    $('#shipmentEnable').val('是')
-                }else{
-                    $('#shipmentEnable').val('否')
-                };
-                //$('#shipmentDeleted').val(value.data.deleted);
                 if(value.data.deleted==false){
                     $('#shipmentDeleted').val('否')
                 }else{
diff --git a/src/main/resources/templates/admin/task/task.html b/src/main/resources/templates/admin/task/task.html
index 8aa0073..64289ba 100644
--- a/src/main/resources/templates/admin/task/task.html
+++ b/src/main/resources/templates/admin/task/task.html
@@ -27,56 +27,15 @@
 									<li>
 										任务id:<input type="text" name="id"/>
 									</li>
-									<!--<li>-->
-										<!--单据编码:<input type="text" name="billCode"/>-->
-									<!--</li>-->
 									<li>
 										容器编号:<input type="text" name="containerCode"/>
 									</li>
 									<li>
-										<!--入库类型:<input type="text" name="sourceCode"/>-->
-										任务类型:<select name="type" th:with="type=${@dict.getType('taskType')}">
-										<option value="">所有</option>
-										<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
+										源库位编号:<input type="text" name="fromLocation"/>
 									</li>
-
-									<li class="time" style="height: 30px">
-										<label>创建时间: </label>
-										<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-										<span>-</span>
-										<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-									</li>
-
-									<li>
-										<!--头 状 态:<input type="text" name="firstStatus"/>-->
-										头 状 态:<select name="firstStatus" th:with="firstStatus=${@dict.getType('taskStatus')}">
-										<option value="">所有</option>
-										<option th:each="e : ${firstStatus}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
-									</li>
-									<li>
-										<!--尾 状 态:<input type="text" name="lastStatus"/>-->
-										尾 状 态:<select name="lastStatus" th:with="lastStatus=${@dict.getType('taskStatus')}">
-										<option value="">所有</option>
-										<option th:each="e : ${lastStatus}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
-									</li>
-                                    <!--<li>
-                                        出入库站台:<select name="station" th:with="stations = ${@dict.getType('station')}">
-                                        <option value="">所有</option>
-                                        <option th:each="e : ${stations}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option></select>
-                                    </li>-->
 									<li>
-										巷道:<input type="text" name="roadway"/>
+										目的库位编号:<input type="text" name="toLocation"/>
 									</li>
-                                    <li>
-                                        库区:<input type="text" name="zoneCode"/>
-                                    </li>
-									<li>
-										来源库位:<input type="text" name="sourceLocation"/>
-									</li>
-									<li>
-										目的库位:<input type="text" name="destinationLocation"/>
-									</li>
-
 									<li>
 										<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 										<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
@@ -136,128 +95,90 @@
                 columns: [{
 		            checkbox: true
 		        },
-				{
-					field : 'id', 
-					title : '任务id' ,
-                    sortable: true
-				},
-				{
-					field : 'companyId', 
-					title : '货主id' ,
-					visible:false
-				},
-				/*{
-                    field : 'billCode',
-                    title : '单据编码' ,
-                },*/
-				{
-					field : 'priority', 
-					title : '优先级'
-				},
-				{
-					field : 'type', 
-					title : '任务类型' ,
-                    align: 'center',
-                    visible:true,
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(taskTypes, value);
-                    }
+					{
+						field : 'id',
+						title : '任务id' ,
+						sortable: true
+					},
+					{
+						field : 'companyCode',
+						title : '货主编码',
+						visible:true
+					},
+					{
+						field : 'taskType',
+						title : '任务类型' ,
+						align: 'center',
+						visible:true,
+						formatter: function(value, row, index) {
+							return $.table.selectDictLabel(taskTypes, value);
+						}
 
-				},
-                    {
-                        field : 'roadway',
-                        title : '巷道',
-                        visible:true
-                    },
-				{
-					field : 'station',
-					title : '出入库站台' ,
-                    align: 'center',
-                    visible:true,
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(stations, value);
-                    },
-                    visible:false
-				},
-				{
-					field : 'containerCode', 
-					title : '容器编码' ,
-                    sortable: true
-				},
-				{
-					field : 'sourceLocation', 
-					title : '来源库位',
-                    sortable: true
-				},
-                    {
-                        field : 'zoneCode',
-                        title : '库区',
-                        sortable: true
-                    },
-				{
-					field : 'destinationLocation', 
-					title : '目的库位' ,
-                    sortable: true
-				},
-                {
-                 	field : 'firstStatus',
-                    title : '头状态' ,
-                    align: 'center',
-                    formatter: function(value, row, index) {
-                    return $.table.selectDictLabel(taskStatus, value);
-                 	}
-                },
-                {
-                    field : 'lastStatus',
-					title : '尾状态' ,
-                    align: 'center',
-                    formatter: function(value, row, index) {
-                    return $.table.selectDictLabel(taskStatus, value);
-                        }
-                    },
-				{
-					field : 'created', 
-					title : '生成时间',
-                    sortable: true
-				},
-				{
-					field : 'createdBy', 
-					title : '任务下达人' 
-				},
-				{
-					field : 'beginTime', 
-					title : '任务下达时间' ,
-                    visible:false
-				},
-				{
-					field : 'lastUpdated', 
-					title : '修改时间' ,
-                    sortable: true,
-				},
-                {
-                        field : 'endTime',
-                        title : '任务完成时间',
-                        sortable: true
-                 },
-				{
-					field : 'lastUpdatedBy', 
-					title : '更新用户' 
-				},
-				{
-					field : 'userDef1', 
-					title : '自定义字段1' ,
-					visible:false
-				},
-				{
-					field : 'userDef2', 
-					title : '自定义字段2' ,
-					visible:false
-				},
-				{
-					field : 'userDef3', 
-					title : '自定义字段3' ,
-					visible:false
-				},
+					},
+					{
+						field : 'fromLocation',
+						title : '源库位号',
+						visible:true
+					},
+
+					{
+						field : 'toLocation',
+						title : '目的库位号',
+						visible:true
+					},
+					{
+						field : 'containerCode',
+						title : '容器号' ,
+						sortable: true
+					},
+					{
+						field : 'exceptionCode',
+						title : '异常原因',
+						sortable: true
+					},
+
+					{
+						field : 'startPickDateTime',
+						title : '开始拣货时间',
+						sortable: true
+					},
+					{
+						field : 'endPickDateTime',
+						title : '截止拣货时间'
+					},
+					{
+						field : 'created',
+						title : '生成时间',
+						sortable: true
+					},
+					{
+						field : 'createdBy',
+						title : '任务下达人'
+					},
+					{
+						field : 'lastUpdated',
+						title : '修改时间' ,
+						sortable: true,
+					},
+					{
+						field : 'lastUpdatedBy',
+						title : '更新用户'
+					},
+					{
+						field : 'userDef1',
+						title : '自定义字段1' ,
+						visible:false
+					},
+					{
+						field : 'userDef2',
+						title : '自定义字段2' ,
+						visible:false
+					},
+					{
+						field : 'userDef3',
+						title : '自定义字段3' ,
+						visible:false
+					},
 		        {
 		            title: '操作',
 		            align: 'center',
@@ -296,81 +217,81 @@
             columns: [{
                 checkbox: true
             },
-                {
-                    field : 'id',
-                    title : '明细Id'
-                },
-                {
-                    field : 'taskId',
-                    title : '任务Id',
-                    sortable: true
-                },
-                {
-                    field : 'billCode',
-                    title : '单据编码',
-                },
-                {
-                    field : 'allocationId',
-                    title : '容器物料表ID' ,
-                    sortable: true
-                },
-                {
-                    field : 'materialCode',
-                    title : '存货编码',
-                    sortable: true
-                },
-                {
-                    field : 'materialName',
-                    title : '物料名称',
-                    sortable:true
-                },
-                {
-                    field : 'project',
-                    title : '项目号',
-                },
-                {
-                    field : 'containerCode',
-                    title : '容器编码',
-                    sortable:true
-                },
-                {
-                    field : 'sourceLocation',
-                    title : '源库位',
-                    sortable:true
-                },
-                {
-                    field : 'destinationLocation',
-                    title : '目的库位',
-                    sortable:true
-                },
-                {
-                    field : 'qty',
-                    title : '数量'
-                },
-                {
-                    field : 'status',
-                    title : '子任务状态',
-                    align: 'center',
-                    formatter: function(value, row, index) {
-                        return $.table.selectDictLabel(taskDetailStatus, value);
-                    }
-                },
-                {
-                    field : 'endTime',
-                    title : '子任务完成时间' ,
-                    visible:false,
-                    sortable:true
-                },
-                {
-                    field : 'lastUpdated',
-                    title : '最后修改时间' ,
-                    visible:false,
-                    sortable:true
-                },
-                {
-                    field : 'lastUpdatedBy',
-                    title : '更新用户'
-                },
+				{
+					field : 'id',
+					title : '明细id'
+				},
+				{
+					field : 'billCode',
+					title : '单据编码',
+				},
+				{
+					field : 'taskId',
+					title : '任务标识',
+					sortable: true
+				},
+				{
+					field : 'allocationId',
+					title : '容器物料表id' ,
+					sortable: true
+				},
+				{
+					field : 'materialCode',
+					title : '存货编码',
+					sortable: true
+				},
+				{
+					field : 'materialName',
+					title : '物料名称',
+					sortable:true
+				},
+				{
+					field : 'containerCode',
+					title : '容器编码',
+					sortable:true
+				},
+				{
+					field : 'fromLocation',
+					title : '源库位',
+					sortable:true
+				},
+				{
+					field : 'toLocation',
+					title : '目的库位',
+					sortable:true
+				},
+				{
+					field : 'qty',
+					title : '数量'
+				},
+				{
+					field : 'project',
+					title : '项目号'
+				},
+				{
+					field : 'status',
+					title : '子任务状态',
+					align: 'center',
+					formatter: function(value, row, index) {
+						return $.table.selectDictLabel(taskDetailStatus, value);
+					}
+				},
+				{
+					field : 'endTime',
+					title : '子任务完成时间' ,
+					visible:false,
+					sortable:true
+				},
+				{
+					field : 'lastUpdated',
+					title : '最后修改时间' ,
+					visible:false,
+					sortable:true
+				},
+				{
+					field : 'lastUpdatedBy',
+					title : '更新用户'
+				},
                 /*{
                     title: '操作',
                     align: 'center',
diff --git a/src/main/resources/templates/administration/alarmFlow/alarmFlow.html b/src/main/resources/templates/administration/alarmFlow/alarmFlow.html
index f1248d0..5a908f0 100644
--- a/src/main/resources/templates/administration/alarmFlow/alarmFlow.html
+++ b/src/main/resources/templates/administration/alarmFlow/alarmFlow.html
@@ -23,9 +23,9 @@
                         <!--</li>-->
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/administration/alarmType/alarmType.html b/src/main/resources/templates/administration/alarmType/alarmType.html
index 69fd8e8..0c4f608 100644
--- a/src/main/resources/templates/administration/alarmType/alarmType.html
+++ b/src/main/resources/templates/administration/alarmType/alarmType.html
@@ -23,9 +23,9 @@
                         <!--</li>-->
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/administration/sendMail/sendMail.html b/src/main/resources/templates/administration/sendMail/sendMail.html
index 08d2045..79f6f04 100644
--- a/src/main/resources/templates/administration/sendMail/sendMail.html
+++ b/src/main/resources/templates/administration/sendMail/sendMail.html
@@ -23,9 +23,9 @@
                         <!--</li>-->
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/check/checkHeader/checkHeader.html b/src/main/resources/templates/check/checkHeader/checkHeader.html
index dcf6346..ce05da2 100644
--- a/src/main/resources/templates/check/checkHeader/checkHeader.html
+++ b/src/main/resources/templates/check/checkHeader/checkHeader.html
@@ -32,9 +32,9 @@
                                     </li>
                                     <li class="time">
                                         <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startCreatedTime" placeholder="开始时间" name="params[createdBegin]"/>
+                                        <input type="text" class="time-input" id="startCreatedTime" placeholder="开始时间" name="createdBegin"/>
                                         <span>-</span>
-                                        <input type="text" class="time-input" id="endCreatedTime" placeholder="结束时间" name="params[createdEnd]"/>
+                                        <input type="text" class="time-input" id="endCreatedTime" placeholder="结束时间" name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/check/checkingRegister/checkingRegister.html b/src/main/resources/templates/check/checkingRegister/checkingRegister.html
index 22e3298..9f9105c 100644
--- a/src/main/resources/templates/check/checkingRegister/checkingRegister.html
+++ b/src/main/resources/templates/check/checkingRegister/checkingRegister.html
@@ -32,9 +32,9 @@
                         </li>
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/bomHeader/bomHeader.html b/src/main/resources/templates/config/bomHeader/bomHeader.html
index 1f39f7a..9132019 100644
--- a/src/main/resources/templates/config/bomHeader/bomHeader.html
+++ b/src/main/resources/templates/config/bomHeader/bomHeader.html
@@ -26,10 +26,10 @@
                                     <li class="time">
                                         <label>创建时间: </label>
                                         <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="params[createdBegin]"/>
+                                               name="createdBegin"/>
                                         <span>-</span>
                                         <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="params[createdEnd]"/>
+                                               name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
diff --git a/src/main/resources/templates/config/carrier/add.html b/src/main/resources/templates/config/carrier/add.html
index 2444b92..76af967 100644
--- a/src/main/resources/templates/config/carrier/add.html
+++ b/src/main/resources/templates/config/carrier/add.html
@@ -4,7 +4,7 @@
 <head th:include="include :: header"></head>
 <body class="white-bg">
 <div class="wrapper wrapper-content animated fadeInRight ibox-content">
-    <form class="form-horizontal m" id="form-company-add">
+    <form class="form-horizontal m" id="form-carrier-add">
         <div class="form-group">
             <label class="col-sm-3 control-label">编码:</label>
             <div class="col-sm-8">
@@ -17,14 +17,14 @@
                 <input id="name" name="name" class="form-control" type="text">
             </div>
         </div>
-        <div class="form-group">
-            <label class="col-sm-3 control-label">仓库:</label>
-            <div class="col-sm-8">
-                <label th:each="warehouse:${warehouseList}" class="checkbox-inline i-checks">
-                    <input name="warehouseCode" type="checkbox" th:value="${warehouse.value}" th:text=" ${warehouse.name}" th:disabled="${warehouse.enable == false} ">
-                </label>
-            </div>
-        </div>
+        <!--<div class="form-group">-->
+            <!--<label class="col-sm-3 control-label">仓库:</label>-->
+            <!--<div class="col-sm-8">-->
+                <!--<label th:each="warehouse:${warehouseList}" class="checkbox-inline i-checks">-->
+                    <!--<input name="warehouseCode" type="checkbox" th:value="${warehouse.value}" th:text=" ${warehouse.name}" th:disabled="${warehouse.enable == false} ">-->
+                <!--</label>-->
+            <!--</div>-->
+        <!--</div>-->
         <div class="form-group">
             <label class="col-sm-3 control-label">运单获取地址url:</label>
             <div class="col-sm-8">
@@ -67,8 +67,8 @@
 </div>
 <div th:include="include::footer"></div>
 <script type="text/javascript">
-    var prefix = ctx + "config/company"
-    $("#form-company-add").validate({
+    var prefix = ctx + "config/carrier"
+    $("#form-carrier-add").validate({
         rules:{
             code:{
                 required:true
@@ -78,8 +78,7 @@
             },
         },
         submitHandler: function() {
-            var tableValue = $("#form-bomHeader-add").serialize();
-            tableValue = formValueReplace(tableValue, "warehouseCode", $.form.selectCheckeds("warehouseCode"));
+            var tableValue = $("#form-carrier-add").serialize();
             $.operate.save(prefix + "/add", tableValue);
         }
     });
diff --git a/src/main/resources/templates/config/carrier/carrier.html b/src/main/resources/templates/config/carrier/carrier.html
index 4a43f39..1f83f25 100644
--- a/src/main/resources/templates/config/carrier/carrier.html
+++ b/src/main/resources/templates/config/carrier/carrier.html
@@ -15,12 +15,12 @@
                         <li>
                             名称:<input type="text" name="name"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('company-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/company/company.html b/src/main/resources/templates/config/company/company.html
index b02fb65..bd25445 100644
--- a/src/main/resources/templates/config/company/company.html
+++ b/src/main/resources/templates/config/company/company.html
@@ -15,12 +15,12 @@
 							<li>
 								名称:<input type="text" name="name"/>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('company-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/company/edit.html b/src/main/resources/templates/config/company/edit.html
index ea59aac..9e6bdf4 100644
--- a/src/main/resources/templates/config/company/edit.html
+++ b/src/main/resources/templates/config/company/edit.html
@@ -226,8 +226,7 @@
                         "mobile": $("input[name='mobile']").val(),
                         "faxNum": $("input[name='faxNum']").val(),
                         "email": $("input[name='email']").val(),
-                        "enable" : $("input[name='enable']").is(':checked'),
-                        "warehouseCode": $.form.selectCheckeds("warehouseCode")
+
                     },
                     async : false,
                     error : function(request) {
@@ -239,8 +238,7 @@
                 });
 			}
 		});
-		
-		function submitHandler() {
+        function submitHandler() {
             $.ajax({
                 cache : true,
                 type : "POST",
diff --git a/src/main/resources/templates/config/configValue/configValue.html b/src/main/resources/templates/config/configValue/configValue.html
index dd36581..2b82bbf 100644
--- a/src/main/resources/templates/config/configValue/configValue.html
+++ b/src/main/resources/templates/config/configValue/configValue.html
@@ -15,12 +15,12 @@
                         <li>
                             类型:<input type="text" name="name"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('company-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/configWarning/configWarning.html b/src/main/resources/templates/config/configWarning/configWarning.html
index 5ea4807..6c9b521 100644
--- a/src/main/resources/templates/config/configWarning/configWarning.html
+++ b/src/main/resources/templates/config/configWarning/configWarning.html
@@ -30,9 +30,9 @@
                         </li>
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/container/container.html b/src/main/resources/templates/config/container/container.html
index efb7bfc..79958b5 100644
--- a/src/main/resources/templates/config/container/container.html
+++ b/src/main/resources/templates/config/container/container.html
@@ -29,9 +29,9 @@
 							</li>
 							<li class="time">
 								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
 								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
@@ -50,7 +50,13 @@
 			<a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="config:container:remove">
 				<i class="fa fa-trash-o"></i> 删除
 			</a>
+
+			<a class="btn btn-outline btn-success btn-rounded" onclick="print()"
+			   shiro:hasPermission="inventory:inventoryTransaction:report">
+				<i class="fa fa-plus"></i> 打印
+			</a>
 		</div>
+
 			
 		<div class="col-sm-12 select-info">
 			<table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
@@ -193,6 +199,20 @@
             };
             $.table.init(options);
         });
+
+		function print() {
+			var rows=$("#bootstrap-table").bootstrapTable('getSelections');
+			if (rows.length == 0) {
+				$.modal.alertWarning("请至少选择一条记录");
+				return;
+			}
+			var ids = "";
+			for(var i=0; i<rows.length; i++) {
+				ids = ids + rows[i].id + ","
+			}
+			let url=prefix+'/print/' + ids;
+			$.modal.open("打印",url);
+		}
     </script>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/resources/templates/config/container/print.html b/src/main/resources/templates/config/container/print.html
new file mode 100644
index 0000000..553327a
--- /dev/null
+++ b/src/main/resources/templates/config/container/print.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <head th:include="include :: header"></head>
+    <title>库存交易明细</title>
+    <!--<link href="css/bootstrap.min.css" rel="stylesheet" />-->
+    <!--<link href="css/font-awesome.min.css" rel="stylesheet" />-->
+    <!--&lt;!&ndash;[if IE]>-->
+    <!--<link href="css/font-awesome-ie7.min.css" rel="stylesheet" />-->
+    <!--<![endif]&ndash;&gt;-->
+    <link href="css/bootstrap.min.css" rel="stylesheet" />
+    <link href="css/font-awesome.min.css" rel="stylesheet" />
+    <link href="css/font-awesome-ie7.min.css" rel="stylesheet" />
+    <style type="text/css">
+        body,ul,li{
+            padding:0;
+            margin:0;
+        }
+        ul,li{
+            list-style:none;
+        }
+        .table-bordered td,.table-bordered th{border:0px solid #000!important}
+
+        .ewm_w ul{width:500px; margin:0 auto;}
+        .ewm_w li{width:500px;height:228px; padding:0px;margin:0px auto; display:inline-table;}
+
+        .ewm_w{
+            width:156px;
+            float:left;
+            padding-left:0px;
+        }
+        .r_two{
+            padding-left:20px;
+        }
+    </style>
+</head>
+
+<body>
+<div class="container">
+    <div class="row" style="text-align:right"><span class="hidden-print" style="padding-left:20px;"><button type="button" onClick="a()"><i class="fa fa-print"></i> 打印</button></span></div>
+    <div class="row" style="width:500px;padding:0px 0px; margin:0 auto">
+        <div  style="width: 312px; margin:0;padding:0;">
+            <div th:each="row:${container}">
+                <div class="ewm_w" >
+                    <table style="height: 220px; margin:0;padding:0;" border="0" cellspacing="0" cellpadding="0" class="dy-report table table-bordered">
+                        <!--th:each="row:${container}">-->
+                        <tbody>
+                        <tr>
+                            <td align="center">
+                                <img id="barcode" name="rotate" />
+                                <input th:value="${row.code}" id="code" type="hidden" name="code"/>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="ewm_w" >
+                    <table style="height: 220px; margin:0;padding:0;" border="0" cellspacing="0" cellpadding="0" class="dy-report table table-bordered">
+                        <!--th:each="row:${container}">-->
+                        <tbody>
+                        <tr>
+                            <td align="center">
+                                <img id="barcode" name="rotate" />
+                                <input th:value="${row.code}" id="code" type="hidden" name="code"/>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<div th:include="include :: footer"></div>
+<style type="text/css">
+    @media print {
+        .noprint {
+            display: none;
+        }
+    }
+</style>
+<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
+<script type="text/javascript" src="../../../js/jquery.jqprint-0.3.js"></script>
+<script type="text/javascript" src="../../../js/barcode/JsBarcode.all.js"></script>
+<script type="text/javascript">
+    var  barcodeStyle = {
+        format: "CODE128",//选择要使用的条形码类型
+        width:2,//设置条之间的宽度
+        height:70,//高度
+        displayValue:true,//是否在条形码下方显示文字
+        // text:"456",//覆盖显示的文本
+        // fontOptions:"bold italic",//使文字加粗体或变斜体
+        font:"monospace",//设置文本的字体fantasy
+        textAlign:"center",//设置文本的水平对齐方式
+        textPosition:"bottom",//设置文本的垂直位置
+        textMargin:1,//设置条形码和文本之间的间距
+        fontSize:17,//设置文本的大小
+        background:"#ffffff",//设置条形码的背景
+        lineColor:"#000000",//设置条和文本的颜色。
+        margin:1//设置条形码周围的空白边距
+    };
+    function print_qrcode() {
+        $('.dy-report').each(function (i, item) {
+            var code= document.getElementsByName("code")[i].getAttribute("value");
+            $(this).find('#barcode').JsBarcode( code, barcodeStyle);
+            document.getElementsByName("rotate")[i].style.transform = 'rotate('+90+'deg)';
+        });
+    }
+    print_qrcode();
+</script>
+
+<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
+<script type="text/javascript" src="../../../js/jquery.jqprint-0.3.js"></script>
+<script type="text/javascript">
+    function a(){
+        window.print();
+    }
+</script>
+
+</body>
+</html>
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/templates/config/containerType/containerType.html b/src/main/resources/templates/config/containerType/containerType.html
index 42bc496..2b66fea 100644
--- a/src/main/resources/templates/config/containerType/containerType.html
+++ b/src/main/resources/templates/config/containerType/containerType.html
@@ -21,12 +21,12 @@
 							<!--<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>-->
 						<!--</select>-->
 						<!--</li>-->
-						<li class="time">
-							<label>创建时间: </label>
-							<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-							<span>-</span>
-							<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-						</li>
+						<!--<li class="time">-->
+							<!--<label>创建时间: </label>-->
+							<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+							<!--<span>-</span>-->
+							<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+						<!--</li>-->
 						<li>
 							<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 							<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('containerType-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/customer/add.html b/src/main/resources/templates/config/customer/add.html
index c4123a5..1823d94 100644
--- a/src/main/resources/templates/config/customer/add.html
+++ b/src/main/resources/templates/config/customer/add.html
@@ -18,15 +18,14 @@
 				</div>
 			</div>
 			<div class="form-group">
-				<label class="col-sm-3 control-label">货主:</label>
+				<label class="col-sm-3 control-label">货主编码:</label>
 				<div class="col-sm-8">
-					<select id="companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.getCode()}">
-						<option value ="" code="">全部货主</option>
-						<option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option>
+					<select id="companyCode" name="companyCode" class="form-control" th:with="companyList=${@companyService.selectCompanyByCurrentUserId()}">
+						<option th:each="company : ${companyList}" th:text="${company['name']}" th:value="${company['code']}"></option>
 					</select>
 				</div>
 			</div>
-			<div class="form-group">	
+			<div class="form-group">
 				<label class="col-sm-3 control-label">名称:</label>
 				<div class="col-sm-8">
 					<input id="name" name="name" class="form-control" type="text">
@@ -170,44 +169,13 @@
                     email:true,
                 },
 				companyCode:{
-
+					required:true,
 				}
 			},
 			submitHandler: function(form) {
-                $.ajax({
-                    cache : true,
-                    type : "POST",
-                    url : prefix + "/add",
-                    data : {
-                        "code": $("input[name='code']").val(),
-						"shipToCode" : $("input[name='shipToCode']").val(),
-                        "name": $("input[name='name']").val(),
-						"companyCode" : $("#companyCode").find("option:selected").attr("code"),
-                        "address1": $("input[name='address1']").val(),
-                        "address2": $("input[name='address2']").val(),
-                        "city": $("input[name='city']").val(),
-                        "province": $("input[name='province']").val(),
-                        "country": $("input[name='country']").val(),
-                        "postalCode": $("input[name='postalCode']").val(),
-						"parent": $("input[name='parent']").val(),
-                        "attentionTo": $("input[name='attentionTo']").val(),
-                        "phoneNum": $("input[name='phoneNum']").val(),
-                        "mobile": $("input[name='mobile']").val(),
-                        "faxNum": $("input[name='faxNum']").val(),
-                        "email": $("input[name='email']").val(),
-                        "enable" : $("input[name='enable']").is(':checked'),
-                        // "userDef1": $("input[name='userDef1']").val(),
-                        // "userDef2": $("input[name='userDef2']").val(),
-                        // "userDef3": $("input[name='userDef3']").val(),
-                    },
-                    async : false,
-                    error : function(request) {
-                        $.modal.alertError("请求失败!");
-                    },
-                    success : function(data) {
-                        $.operate.saveSuccess(data);
-                    }
-                });
+				var tableValue = $("#form-customer-add").serialize();
+				tableValue = formValueReplace(tableValue, "companyCode", $("#companyCode option:selected").val());
+				$.operate.save(prefix + "/add", tableValue);
 			}
 		});
 	</script>
diff --git a/src/main/resources/templates/config/customer/customer.html b/src/main/resources/templates/config/customer/customer.html
index f84be52..660504f 100644
--- a/src/main/resources/templates/config/customer/customer.html
+++ b/src/main/resources/templates/config/customer/customer.html
@@ -15,12 +15,12 @@
 							<li>
 								名称:<input type="text" name="name"/>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('customer-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/cycleCountPreference/cycleCountPreference.html b/src/main/resources/templates/config/cycleCountPreference/cycleCountPreference.html
index 601dd79..ac5b692 100644
--- a/src/main/resources/templates/config/cycleCountPreference/cycleCountPreference.html
+++ b/src/main/resources/templates/config/cycleCountPreference/cycleCountPreference.html
@@ -27,12 +27,12 @@
                         <li>
                             创建人:<input type="text" name="createdBy"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('cycleCountPreference-form')"><i class="fa fa-refresh"></i>&nbsp;清除选择</a>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/filterConfigDetail/edit.html b/src/main/resources/templates/config/filterConfigDetail/edit.html
index cecdd27..af251d6 100644
--- a/src/main/resources/templates/config/filterConfigDetail/edit.html
+++ b/src/main/resources/templates/config/filterConfigDetail/edit.html
@@ -39,6 +39,12 @@
             </div>
         </div>
         <div class="form-group">
+            <label class="col-sm-3 control-label">后续分组排序:</label>
+            <div class="col-sm-8">
+                <input id="statements" name="statements" class="form-control" type="text" th:field="*{statements}">
+            </div>
+        </div>
+        <div class="form-group">
             <label class="col-sm-3 control-label">是否系统创建:</label>
             <div class="col-sm-8">
                 <div class="onoffswitch">
diff --git a/src/main/resources/templates/config/filterConfigHeader/filterConfigHeader.html b/src/main/resources/templates/config/filterConfigHeader/filterConfigHeader.html
index 2e3d72b..744af5f 100644
--- a/src/main/resources/templates/config/filterConfigHeader/filterConfigHeader.html
+++ b/src/main/resources/templates/config/filterConfigHeader/filterConfigHeader.html
@@ -26,14 +26,14 @@
                                     <li>
                                         条件名:<input type="text" name="filterCode"/>
                                     </li>
-                                    <li class="time">
-                                        <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="createdBegin"/>
-                                        <span>-</span>
-                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="createdEnd"/>
-                                    </li>
+                                    <!--<li class="time">-->
+                                        <!--<label>创建时间: </label>-->
+                                        <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间"-->
+                                               <!--name="createdBegin"/>-->
+                                        <!--<span>-</span>-->
+                                        <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间"-->
+                                               <!--name="createdEnd"/>-->
+                                    <!--</li>-->
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/location/location.html b/src/main/resources/templates/config/location/location.html
index 06d13b5..d983495 100644
--- a/src/main/resources/templates/config/location/location.html
+++ b/src/main/resources/templates/config/location/location.html
@@ -50,9 +50,9 @@
 						</li>
 						<li class="time">
 							<label>创建时间: </label>
-							<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+							<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
 							<span>-</span>
-							<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+							<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
 						</li>
 						<li>
 							<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/locationType/locationType.html b/src/main/resources/templates/config/locationType/locationType.html
index 6d412df..a449c41 100644
--- a/src/main/resources/templates/config/locationType/locationType.html
+++ b/src/main/resources/templates/config/locationType/locationType.html
@@ -21,12 +21,12 @@
 							<!--<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>-->
 							<!--</select>-->
 							<!--</li>-->
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('alarmLevel-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/material/add.html b/src/main/resources/templates/config/material/add.html
index 6c33743..c3c8349 100644
--- a/src/main/resources/templates/config/material/add.html
+++ b/src/main/resources/templates/config/material/add.html
@@ -60,7 +60,7 @@
 			<div class="form-group">	
 				<label class="col-sm-3 control-label">定位规则:</label>
 				<div class="col-sm-8">
-					<select id="locatingRule" name="locatingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('入库')}">
+					<select id="locatingRule" name="locatingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('locationRule')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
 					</select>
@@ -69,7 +69,7 @@
 			<div class="form-group">	
 				<label class="col-sm-3 control-label">分配规则:</label>
 				<div class="col-sm-8">
-					<select id="allocationRule" name="allocationRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('分配规则')}">
+					<select id="allocationRule" name="allocationRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('allocationRule')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
 					</select>
@@ -78,7 +78,7 @@
 			<div class="form-group">	
 				<label class="col-sm-3 control-label">补货规则:</label>
 				<div class="col-sm-8">
-					<select id="replenishmentRule" name="replenishmentRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('补货规则')}">
+					<select id="replenishmentRule" name="replenishmentRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('replenishmentRule')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
 					</select>
@@ -87,7 +87,7 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">空货位规则:</label>
 				<div class="col-sm-8">
-					<select id="emptyLocRule" name="emptyLocRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('空货位规则')}">
+					<select id="emptyLocRule" name="emptyLocRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('emptyLocRule')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
 					</select>
@@ -96,7 +96,7 @@
 			<div class="form-group">	
 				<label class="col-sm-3 control-label">入库规则:</label>
 				<div class="col-sm-8">
-					<select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('入库单')}">
+					<select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('receivingFlow')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
 					</select>
@@ -105,7 +105,7 @@
 			<div class="form-group">	
 				<label class="col-sm-3 control-label">出库流程:</label>
 				<div class="col-sm-8">
-					<select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('出库单')}">
+					<select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('shippingFlow')}">
 						<option value="">请选择</option>
 						<option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
 					</select>
diff --git a/src/main/resources/templates/config/material/material.html b/src/main/resources/templates/config/material/material.html
index ee1183b..7487de7 100644
--- a/src/main/resources/templates/config/material/material.html
+++ b/src/main/resources/templates/config/material/material.html
@@ -16,15 +16,12 @@
 								名称:<input type="text" name="name"/>
 							</li>
 							<li>
-								库区编码:<input type="text" name="zoneCode"/>
+								规格:<input type="text" name="spec"/>
 							</li>
 							<li>
-								规格:<input type="text" name="specification"/>
-							</li>
-							<li>
-								物料类别:<select name="type" th:with="type=${@dict.getType('materialType')}">
+								物料类别:<select name="type" th:with="type=${@materialType.list()}">
 								<option value="">所有</option>
-								<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
+								<option th:each="e : ${type}" th:text="${e['name']}" th:value="${e['code']}"></option>
 							</select>
 							</li>
 							<li class="time">
diff --git a/src/main/resources/templates/config/materialMultiple/add.html b/src/main/resources/templates/config/materialMultiple/add.html
index 3a68d5b..986f499 100644
--- a/src/main/resources/templates/config/materialMultiple/add.html
+++ b/src/main/resources/templates/config/materialMultiple/add.html
@@ -23,13 +23,13 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">单位1:</label>
             <div class="col-sm-8">
-                <input id="unit1" name="unit1" class="form-control" type="text">
+                <input id="unitId1" name="unitId1" class="form-control" type="text">
             </div>
         </div>
         <div class="form-group">
             <label class="col-sm-3 control-label">单位2:</label>
             <div class="col-sm-8">
-                <input id="unit2" name="unit2" class="form-control" type="text">
+                <input id="unitId2" name="unitId2" class="form-control" type="text">
             </div>
         </div>
         <div class="form-group">
diff --git a/src/main/resources/templates/config/materialMultiple/materialMultiple.html b/src/main/resources/templates/config/materialMultiple/materialMultiple.html
index ae8f463..7972c70 100644
--- a/src/main/resources/templates/config/materialMultiple/materialMultiple.html
+++ b/src/main/resources/templates/config/materialMultiple/materialMultiple.html
@@ -14,12 +14,12 @@
                         <li>
                             名称:<input type="text" name="materialName"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('materialMultiple-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
@@ -85,11 +85,11 @@
                             title : '货主编码'
                         },
                         {
-                            field : 'unitld1',
+                            field : 'unitId1',
                             title : '单位1'
                         },
                         {
-                            field : 'unitld2',
+                            field : 'unitId2',
                             title : '单位2'
                         },
                         {
diff --git a/src/main/resources/templates/config/materialType/add.html b/src/main/resources/templates/config/materialType/add.html
index e02fe14..f3000a1 100644
--- a/src/main/resources/templates/config/materialType/add.html
+++ b/src/main/resources/templates/config/materialType/add.html
@@ -40,7 +40,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">入库流程:</label>
             <div class="col-sm-8">
-                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('入库单')}">
+                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('receivingFlow')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
@@ -49,7 +49,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">出库流程:</label>
             <div class="col-sm-8">
-                <select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('出库单')}">
+                <select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('shippingFlow')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
@@ -58,7 +58,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">定位规则:</label>
             <div class="col-sm-8">
-                <select id="locatingRule" name="locatingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('入库')}">
+                <select id="locatingRule" name="locatingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('locatingRule')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -67,7 +67,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">分配规则:</label>
             <div class="col-sm-8">
-                <select id="allocationRule" name="allocationRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('分配规则')}">
+                <select id="allocationRule" name="allocationRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('allocationRule')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -76,7 +76,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">补货规则:</label>
             <div class="col-sm-8">
-                <select id="replenishmentRule" name="replenishmentRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('补货规则')}">
+                <select id="replenishmentRule" name="replenishmentRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('replenishmentRule')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -85,7 +85,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">空货位规则:</label>
             <div class="col-sm-8">
-                <select id="emptyLocRule" name="emptyLocRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('空货位规则')}">
+                <select id="emptyLocRule" name="emptyLocRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('emptyLocRule')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -94,7 +94,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">拣货规则:</label>
             <div class="col-sm-8">
-                <select id="pickingRule" name="pickingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('出库')}">
+                <select id="pickingRule" name="pickingRule" class="form-control" th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('pickingRule')}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
diff --git a/src/main/resources/templates/config/materialType/edit.html b/src/main/resources/templates/config/materialType/edit.html
index a66f06b..9fe1c98 100644
--- a/src/main/resources/templates/config/materialType/edit.html
+++ b/src/main/resources/templates/config/materialType/edit.html
@@ -43,7 +43,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">入库流程:</label>
             <div class="col-sm-8">
-                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('入库单')}" th:field="*{receivingFlow}">
+                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('receivingFlow')}" th:field="*{receivingFlow}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
@@ -52,7 +52,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">出库流程:</label>
             <div class="col-sm-8">
-                <select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('出库单')}" th:field="*{shippingFlow}">
+                <select id="shippingFlow" name="shippingFlow" class="form-control" th:with="list=${@StatusFlow.flowList('shippingFlow')}" th:field="*{shippingFlow}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
@@ -62,7 +62,7 @@
             <label class="col-sm-3 control-label">定位规则:</label>
             <div class="col-sm-8">
                 <select id="locatingRule" name="locatingRule" class="form-control"
-                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('入库')}" th:field="*{locatingRule}">
+                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('locatingRule')}" th:field="*{locatingRule}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -72,7 +72,7 @@
             <label class="col-sm-3 control-label">分配规则:</label>
             <div class="col-sm-8">
                 <select id="allocationRule" name="allocationRule" class="form-control"
-                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('分配规则')}" th:field="*{allocationRule}">
+                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('allocationRule')}" th:field="*{allocationRule}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -82,7 +82,7 @@
             <label class="col-sm-3 control-label">补货规则:</label>
             <div class="col-sm-8">
                 <select id="replenishmentRule" name="replenishmentRule" class="form-control"
-                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('补货规则')}" th:field="*{replenishmentRule}">
+                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('replenishmentRule')}" th:field="*{replenishmentRule}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -92,7 +92,7 @@
             <label class="col-sm-3 control-label">空货位规则:</label>
             <div class="col-sm-8">
                 <select id="emptyLocRule" name="emptyLocRule" class="form-control"
-                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('空货位规则')}" th:field="*{emptyLocRule}">
+                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('emptyLocRule')}" th:field="*{emptyLocRule}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
@@ -102,7 +102,7 @@
             <label class="col-sm-3 control-label">拣货规则:</label>
             <div class="col-sm-8">
                 <select id="pickingRule" name="pickingRule" class="form-control"
-                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('出库')}" th:field="*{pickingRule}">
+                        th:with="list=${@FilterConfigDetailService.queryFilterConfigDetail('pickingRule')}" th:field="*{pickingRule}">
                     <option value="">请选择</option>
                     <option th:each="flow : ${list}" th:text="${flow['description']}" th:value="${flow['code']}"></option>
                 </select>
diff --git a/src/main/resources/templates/config/materialType/materialType.html b/src/main/resources/templates/config/materialType/materialType.html
index 5bf0f96..d1f1909 100644
--- a/src/main/resources/templates/config/materialType/materialType.html
+++ b/src/main/resources/templates/config/materialType/materialType.html
@@ -15,12 +15,12 @@
                                 <li>
                                     名称:<input type="text" name="name"/>
                                 </li>
-                                <li class="time">
-                                    <label>创建时间: </label>
-                                    <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                                    <span>-</span>
-                                    <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                                </li>
+                                <!--<li class="time">-->
+                                    <!--<label>创建时间: </label>-->
+                                    <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                                    <!--<span>-</span>-->
+                                    <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                                <!--</li>-->
                                 <li>
                                     <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                                     <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('materialType-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/materialUnit/materialUnit.html b/src/main/resources/templates/config/materialUnit/materialUnit.html
index 1e1b2ab..464e46f 100644
--- a/src/main/resources/templates/config/materialUnit/materialUnit.html
+++ b/src/main/resources/templates/config/materialUnit/materialUnit.html
@@ -19,12 +19,12 @@
                             单位:<input type="text" name="unit"/>
                         </li>
 
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('materialUnit-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/point/edit.html b/src/main/resources/templates/config/point/edit.html
new file mode 100644
index 0000000..1f60a90
--- /dev/null
+++ b/src/main/resources/templates/config/point/edit.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML>
+<html  lang="zh" xmlns:th="http://www.thymeleaf.org">
+<meta charset="utf-8">
+<head th:include="include :: header"></head>
+<body class="white-bg">
+<div class="wrapper wrapper-content animated fadeInRight ibox-content">
+    <form class="form-horizontal m" id="form-zone-edit">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">货架号:</label>
+            <div class="col-sm-8">
+                <input id="goodsShelfNo" name="goodsShelfNo" class="form-control" type="text">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">货主:</label>
+            <div class="col-sm-8">
+                <select id="companyCode" name="companyCode" class="form-control" th:with="list=${@company.selectCompanyByCurrentUserId()}">
+                    <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option>
+                </select>
+            </div>
+        </div>
+        <div class="form-group">
+            <div class="form-control-static col-sm-offset-9">
+                <button type="submit" class="btn btn-primary">提交</button>
+                <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
+            </div>
+        </div>
+    </form>
+</div>
+<div th:include="include::footer"></div>
+<script type="text/javascript">
+    let prefix = ctx + "config/point";
+    $("#form-zone-edit").validate({
+        rules:{
+            XX:{
+                required:true,
+            },
+        },
+        submitHandler: function(form) {
+            let tableValue = $.common.getTableValue("#form-zone-edit");
+            $.operate.save(prefix + "/edit", tableValue);
+        }
+    });
+
+    $(function () {
+        $("#goodsShelfNo").val(window.parent.goodsShelfNos);
+        $("select[name='companyCode']").change(function (e) {
+            let companyCode=$("select[name='companyCode'] option:selected").attr('code');
+            $.ajax({
+                url: ctx + "receipt/receiptHeader/getwarehouse",
+                type:'post',
+                data:{code:companyCode},
+                success:function (response) {
+                    if(response.code===200){
+                        $("select[name='uWarehouseCode']").children().remove();
+                        $("select[name='uWarehouseCode']").append(`<option value="">所有</option>`);
+                        for (let item of response.data) {
+                            let option=`<option value="${item.uWarehouseCode}">${item.uWarehouseName}</option>`;
+                            $("select[name='uWarehouseCode']").append(option);
+                        }
+                    }
+                    else {$.modal.msgError(response.msg)}
+                }
+            })
+        })
+    })
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/config/point/point.html b/src/main/resources/templates/config/point/point.html
new file mode 100644
index 0000000..b05ea27
--- /dev/null
+++ b/src/main/resources/templates/config/point/point.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<meta charset="utf-8">
+<head th:include="include :: header"></head>
+<body class="gray-bg">
+<div class="container-div">
+    <div class="row">
+        <div class="col-sm-12 select-info">
+            <form id="zone-form">
+                <div class="select-list">
+                    <ul>
+                        <li>
+                            货架号:<input type="text" id="goodsShelfNo" name="goodsShelfNo"/>
+                        </li>
+                        <li>
+                            货主:<select name="companyCode" th:with="company=${@company.getEnableCompanyList()}">
+                            <option value="">所有</option>
+                            <option th:each="e : ${company}" th:text="${e['name']}" th:value="${e['code']}"></option></select>
+                        </li>
+                        <li>
+                            <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('zone-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                        </li>
+                    </ul>
+                </div>
+            </form>
+        </div>
+
+        <!--<div class="btn-group hidden-xs" id="toolbar" role="group">-->
+            <!--<a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()" shiro:hasPermission="config:zone:add">-->
+                <!--<i class="fa fa-plus"></i> 新增-->
+            <!--</a>-->
+            <!--<a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="config:zone:remove">-->
+                <!--<i class="fa fa-trash-o"></i> 删除-->
+            <!--</a>-->
+        <!--</div>-->
+
+        <div class="col-sm-12 select-info">
+            <a class="btn btn-outline btn-primary btn-rounded to-receive"  onclick="restore()">
+                <i class="fa fa-paper-plane"></i> 状态恢复
+            </a>
+            <a class="btn btn-outline btn-primary btn-rounded to-receive"  onclick="detectShelf()">
+                <i class="fa fa-paper-plane"></i> 检测空货架
+            </a>
+            <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
+        </div>
+    </div>
+</div>
+<div th:include="include :: footer"></div>
+<script th:inline="javascript">
+    var prefix = ctx + "config/point";
+    var goodsShelfNos=null;
+    $(function() {
+        let options = {
+            url: prefix + "/list",
+            createUrl: prefix + "/add",
+            updateUrl: prefix + "/edit/{id}",
+            removeUrl: prefix + "/remove",
+            modalName: "货架",
+            search: false,
+            columns: [
+                // {
+                // checkbox: true
+                // },
+                {
+                    field : 'goodsShelfNo',
+                    title : '货架号',
+                    sortable:true
+                },
+                {
+                    field : 'companyName',
+                    title : '货主名称',
+                    sortable:true
+                },
+                {
+                    field : 'isEmpty',
+                    title : '是否空货架',
+                    sortable:true,
+                    formatter: function (value, item, index) {
+                        if (value==true) {
+                            return '<span class="badge" style="background-color: #00B83F;color: white;width: 36px;">' + ' 是 ' + '</span>';
+                        }
+                        else if (value==false) {
+                            return '<span class="badge" style="background-color: #ff0000;color: white;width: 36px;">' + ' 否 ' + '</span>';
+                        }
+                    }
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        let actions = [];
+                        actions.push('<a class="btn btn-success btn-xs" onclick="Edit(\'' + row.id + '\' , \'' + row.goodsShelfNo + '\' )"><i class="fa fa-edit"></i>编辑</a> ');
+                        return actions.join('');
+                    }
+                }
+            ]
+        };
+        $.table.init(options);
+    });
+
+    function Edit(id, code) {
+        goodsShelfNos=code;
+        $.operate.edit(id)
+    }
+
+    /* 恢复 */
+    function restore() {
+        $.ajax({
+            url:prefix+'/restore',
+            type:'post',
+            success:function (res) {
+                if(res.code==200){
+                    $.table.refresh();
+                    $.modal.msgSuccess(res.msg);
+                }
+                else{
+                    $.modal.msgError(res.msg);
+                }
+            }
+        })
+    }
+
+
+
+    /* 检测货架装货状态 */
+    function detectShelf() {
+        $.ajax({
+            url:prefix+'/detectShelf',
+            type:'post',
+            success:function (res) {
+                if(res.code==200){
+                    $.table.refresh();
+                    $.modal.msgSuccess(res.msg);
+                }
+                else{
+                    $.modal.msgError(res.msg);
+                }
+            }
+        })
+    }
+
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/config/receiptPreference/receiptPreference.html b/src/main/resources/templates/config/receiptPreference/receiptPreference.html
index 6b72a1b..e720669 100644
--- a/src/main/resources/templates/config/receiptPreference/receiptPreference.html
+++ b/src/main/resources/templates/config/receiptPreference/receiptPreference.html
@@ -18,15 +18,15 @@
                         <li>
                             入库流程:<input type="text" name="receivingFlow"/>
                         </li>
-                        <li>
-                            入库类型:<input type="text" name="receiptTypes"/>
-                        </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li>-->
+                            <!--入库类型:<input type="text" name="receiptTypes"/>-->
+                        <!--</li>-->
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('receiptPreference-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/receiptType/receiptType.html b/src/main/resources/templates/config/receiptType/receiptType.html
index 34b8a3b..e46b519 100644
--- a/src/main/resources/templates/config/receiptType/receiptType.html
+++ b/src/main/resources/templates/config/receiptType/receiptType.html
@@ -12,12 +12,12 @@
                         <li>
                             编码:<input type="text" name="code"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('receiptType-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/shipmentPreference/shipmentPreference.html b/src/main/resources/templates/config/shipmentPreference/shipmentPreference.html
index 67fb14b..ecfd78b 100644
--- a/src/main/resources/templates/config/shipmentPreference/shipmentPreference.html
+++ b/src/main/resources/templates/config/shipmentPreference/shipmentPreference.html
@@ -18,12 +18,12 @@
                         <li>
                             出库流程:<input type="text" name="shippingFlow"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('shipmentPreference-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/shipmentType/edit.html b/src/main/resources/templates/config/shipmentType/edit.html
index 3f2ce7e..734422c 100644
--- a/src/main/resources/templates/config/shipmentType/edit.html
+++ b/src/main/resources/templates/config/shipmentType/edit.html
@@ -48,7 +48,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">出库流程:</label>
             <div class="col-sm-8">
-                <select id="receiptFlow" name="shipmentFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList()}" th:field="*{receiptFlow}">
+                <select id="shipmentFlow" name="shipmentFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList('shippingFlow')}" th:field="*{shipmentFlow}">
                     <option th:each="flow : ${statusFlowList}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
             </div>
diff --git a/src/main/resources/templates/config/shipmentType/shipmentType.html b/src/main/resources/templates/config/shipmentType/shipmentType.html
index b71ed67..ec66209 100644
--- a/src/main/resources/templates/config/shipmentType/shipmentType.html
+++ b/src/main/resources/templates/config/shipmentType/shipmentType.html
@@ -15,12 +15,12 @@
                         <li>
                             名称:<input type="text" name="name"/>
                         </li>
-                        <li class="time">
-                            <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                            <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                        </li>
+                        <!--<li class="time">-->
+                            <!--<label>创建时间: </label>-->
+                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                            <!--<span>-</span>-->
+                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                        <!--</li>-->
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('shipmentType-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/station/station.html b/src/main/resources/templates/config/station/station.html
index 6b5f357..2b0806f 100644
--- a/src/main/resources/templates/config/station/station.html
+++ b/src/main/resources/templates/config/station/station.html
@@ -14,9 +14,9 @@
                         </li>
                         <li class="time">
                             <label>创建时间: </label>
-                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                             <span>-</span>
-                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html b/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html
index dca7c9b..825f2c2 100644
--- a/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html
+++ b/src/main/resources/templates/config/statusFlowHeader/statusFlowHeader.html
@@ -26,17 +26,17 @@
                                     <li>
                                         模块:<input type="text" name="moduleType" th:value="${moduleType}"/>
                                     </li>
-                                    <li>
-                                        类型:<input type="text" name="recordType" th:value="${recordType}"/>
-                                    </li>
-                                    <li class="time">
-                                        <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="params[createdBegin]"/>
-                                        <span>-</span>
-                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="params[createdEnd]"/>
-                                    </li>
+                                    <!--<li>-->
+                                        <!--类型:<input type="text" name="recordType" th:value="${recordType}"/>-->
+                                    <!--</li>-->
+                                    <!--<li class="time">-->
+                                        <!--<label>创建时间: </label>-->
+                                        <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间"-->
+                                               <!--name="params[createdBegin]"/>-->
+                                        <!--<span>-</span>-->
+                                        <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间"-->
+                                               <!--name="params[createdEnd]"/>-->
+                                    <!--</li>-->
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/supplier/add.html b/src/main/resources/templates/config/supplier/add.html
index 0f9a43b..f8deaa0 100644
--- a/src/main/resources/templates/config/supplier/add.html
+++ b/src/main/resources/templates/config/supplier/add.html
@@ -20,9 +20,8 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">货主编码:</label>
 				<div class="col-sm-8">
-					<!--<input id="companyCode" name="companyCode" class="form-control" type="text" >-->
-					<select id="companyCode" name="companyCode" class="form-control m-b" th:with="company=${@companyService.getCode()}">
-						<option th:each="item : ${company}" th:text="${item['name']}" th:value="${item['code']}"></option>
+					<select id="companyCode" name="companyCode" class="form-control" th:with="companyList=${@companyService.selectCompanyByCurrentUserId()}">
+						<option th:each="company : ${companyList}" th:text="${company['name']}" th:value="${company['code']}"></option>
 					</select>
 				</div>
 			</div>
diff --git a/src/main/resources/templates/config/supplier/supplier.html b/src/main/resources/templates/config/supplier/supplier.html
index 651e3b6..60c6fa6 100644
--- a/src/main/resources/templates/config/supplier/supplier.html
+++ b/src/main/resources/templates/config/supplier/supplier.html
@@ -15,12 +15,12 @@
 							<li>
 								名称:<input type="text" name="name"/>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('supplier-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/warehouse/add.html b/src/main/resources/templates/config/warehouse/add.html
index 30642aa..3385d93 100644
--- a/src/main/resources/templates/config/warehouse/add.html
+++ b/src/main/resources/templates/config/warehouse/add.html
@@ -17,14 +17,14 @@
 					<input id="name" name="name" class="form-control" type="text">
 				</div>
 			</div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">公司:</label>
-                <div class="col-sm-8">
-                    <select id="orgCode" name="orgCode" class="form-control">
-                        <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option>
-                    </select>
-                </div>
-            </div>
+            <!--<div class="form-group">-->
+                <!--<label class="col-sm-3 control-label">公司:</label>-->
+                <!--<div class="col-sm-8">-->
+                    <!--<select id="orgCode" name="orgCode" class="form-control">-->
+                        <!--<option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option>-->
+                    <!--</select>-->
+                <!--</div>-->
+            <!--</div>-->
 			<div class="form-group">
 				<label class="col-sm-3 control-label">地址1:</label>
 				<div class="col-sm-8">
@@ -161,10 +161,6 @@
                 name:{
                     required:true
 				},
-				orgCode:{
-                    required:true,
-                    digits:true
-				},
                 postalCode:{
                     number:true
 				},
@@ -187,7 +183,7 @@
 				} else {
 					tableValue = formValueReplace(tableValue, "enable", 0);
 				}
-                tableValue = formValueReplace(tableValue, "orgCode", $("#orgCode option:selected").val());
+                // tableValue = formValueReplace(tableValue, "orgCode", $("#orgCode option:selected").val());
 
                 $.operate.save(prefix + "/add", tableValue);
 			}
diff --git a/src/main/resources/templates/config/warehouse/copy.html b/src/main/resources/templates/config/warehouse/copy.html
index 944409c..c769ffb 100644
--- a/src/main/resources/templates/config/warehouse/copy.html
+++ b/src/main/resources/templates/config/warehouse/copy.html
@@ -8,7 +8,9 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">仓库编码:</label>
             <div class="col-sm-8">
-                <input id="newWarehouseCode" name="newWarehouseCode" class="form-control" type="text">
+                <select id="newWarehouseCode" name="newWarehouseCode" class="form-control" th:with="newWarehouseCode=${@WarehouseService.list()}">
+                    <option th:each="dict : ${newWarehouseCode}" th:text="${dict['name']}" th:value="${dict['code']}"></option>
+                </select>
             </div>
         </div>
         <div class="form-group">
diff --git a/src/main/resources/templates/config/warehouse/edit.html b/src/main/resources/templates/config/warehouse/edit.html
index 6129fd2..0d3f119 100644
--- a/src/main/resources/templates/config/warehouse/edit.html
+++ b/src/main/resources/templates/config/warehouse/edit.html
@@ -17,14 +17,14 @@
                     <input id="name" name="name" th:field="*{name}" class="form-control" type="text" readonly="true">
                 </div>
             </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">公司:</label>
-                <div class="col-sm-8">
-                    <select id="orgCode" name="orgCode" class="form-control" th:field="*{orgCode}">
-                        <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option>
-                    </select>
-                </div>
-            </div>
+            <!--<div class="form-group">-->
+                <!--<label class="col-sm-3 control-label">公司:</label>-->
+                <!--<div class="col-sm-8">-->
+                    <!--<select id="orgCode" name="orgCode" class="form-control" th:field="*{orgCode}">-->
+                        <!--<option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option>-->
+                    <!--</select>-->
+                <!--</div>-->
+            <!--</div>-->
             <div class="form-group">
                 <label class="col-sm-3 control-label">地址1:</label>
                 <div class="col-sm-8">
@@ -135,12 +135,12 @@
                     </div>
                 </div>
             </div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">是否删除:</label>
-                <div class="col-sm-8">
-                    <input id="deleted" name="deleted" th:field="*{deleted}" class="form-control" type="text">
-                </div>
-            </div>
+            <!--<div class="form-group">-->
+                <!--<label class="col-sm-3 control-label">是否删除:</label>-->
+                <!--<div class="col-sm-8">-->
+                    <!--<input id="deleted" name="deleted" th:field="*{deleted}" class="form-control" type="text">-->
+                <!--</div>-->
+            <!--</div>-->
             <!--<div class="form-group">	-->
                 <!--<label class="col-sm-3 control-label">自定义字段1:</label>-->
                 <!--<div class="col-sm-8">-->
@@ -178,10 +178,6 @@
                 name:{
                     required:true
                 },
-                orgCode:{
-                    required:true,
-                    digits:true
-                },
                 postalCode:{
                     number:true
                 },
@@ -204,7 +200,7 @@
                 } else {
                     tableValue = formValueReplace(tableValue, "enable", 0);
                 }
-                tableValue = formValueReplace(tableValue, "orgCode", $("#orgCode option:selected").val());
+                // tableValue = formValueReplace(tableValue, "orgCode", $("#orgCode option:selected").val());
                 $.operate.save(prefix + "/edit", tableValue);
 			}
 		});
diff --git a/src/main/resources/templates/config/warehouse/warehouse.html b/src/main/resources/templates/config/warehouse/warehouse.html
index 3506339..710f34d 100644
--- a/src/main/resources/templates/config/warehouse/warehouse.html
+++ b/src/main/resources/templates/config/warehouse/warehouse.html
@@ -21,12 +21,12 @@
 							<!--<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>-->
 						<!--</select>-->
 							<!--</li>-->
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('warehouse-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/waveFlowHeader/waveFlowHeader.html b/src/main/resources/templates/config/waveFlowHeader/waveFlowHeader.html
index 07d4649..72b4bc7 100644
--- a/src/main/resources/templates/config/waveFlowHeader/waveFlowHeader.html
+++ b/src/main/resources/templates/config/waveFlowHeader/waveFlowHeader.html
@@ -20,14 +20,14 @@
                                     <li>
                                         流程名称:<input type="text" name="code"/>
                                     </li>
-                                    <li class="time">
-                                        <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="createdBegin"/>
-                                        <span>-</span>
-                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="createdEnd"/>
-                                    </li>
+                                    <!--<li class="time">-->
+                                        <!--<label>创建时间: </label>-->
+                                        <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间"-->
+                                               <!--name="createdBegin"/>-->
+                                        <!--<span>-</span>-->
+                                        <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间"-->
+                                               <!--name="createdEnd"/>-->
+                                    <!--</li>-->
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/config/waveMaster/waveMaster.html b/src/main/resources/templates/config/waveMaster/waveMaster.html
index 9654780..72b4851 100644
--- a/src/main/resources/templates/config/waveMaster/waveMaster.html
+++ b/src/main/resources/templates/config/waveMaster/waveMaster.html
@@ -27,12 +27,12 @@
                                         <li>
                                             波次流程:<input type="text" name="waveFlowCode"/>
                                         </li>
-                                        <li class="time">
-                                            <label>创建时间: </label>
-                                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-                                            <span>-</span>
-                                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-                                        </li>
+                                        <!--<li class="time">-->
+                                            <!--<label>创建时间: </label>-->
+                                            <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+                                            <!--<span>-</span>-->
+                                            <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+                                        <!--</li>-->
                                         <li>
                                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
                                             <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('waveMaster-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/config/zone/zone.html b/src/main/resources/templates/config/zone/zone.html
index 1b3a706..a592bab 100644
--- a/src/main/resources/templates/config/zone/zone.html
+++ b/src/main/resources/templates/config/zone/zone.html
@@ -21,12 +21,12 @@
 							<!--<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>-->
 							<!--</select>-->
 							<!--</li>-->
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
 								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('zone-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
diff --git a/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html b/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
index 014cbb6..8a376ea 100644
--- a/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
+++ b/src/main/resources/templates/inventory/adjustHeader/adjustHeader.html
@@ -62,6 +62,7 @@
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('cycleHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                     </li>
                                 </ul>
                             </div>
diff --git a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
index 318e153..9e24329 100644
--- a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
+++ b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html
@@ -65,10 +65,10 @@
                     <li class="time">
                         <label>创建时间: </label>
                         <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                               name="params[createdBegin]"/>
+                               name="createdBegin"/>
                         <span>-</span>
                         <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                               name="params[createdEnd]"/>
+                               name="createdEnd"/>
                     </li>
                     <li>
                         创建人:<input id="createdBy" type="text" name="createdBy" />
diff --git a/src/main/resources/templates/inventory/cycleCountHeader/add.html b/src/main/resources/templates/inventory/cycleCountHeader/add.html
index 830d84e..64405b3 100644
--- a/src/main/resources/templates/inventory/cycleCountHeader/add.html
+++ b/src/main/resources/templates/inventory/cycleCountHeader/add.html
@@ -33,8 +33,8 @@
             <div class="form-group">
                 <label class="col-sm-3 control-label">货主:</label>
                 <div class="col-sm-8">
-                    <select id="companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.getCode()}">
-                        <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option>
+                    <select id = "companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.selectCompanyByCurrentUserId()}">
+                        <option  th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}"  th:attr = " code = ${item['code']}"></option>
                     </select>
                 </div>
             </div>
diff --git a/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html b/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
index 54310a5..1fc3602 100644
--- a/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
+++ b/src/main/resources/templates/inventory/cycleCountHeader/cycleCountHeader.html
@@ -55,14 +55,15 @@
                                     <li class="time">
                                         <label>创建时间: </label>
                                         <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="params[createdBegin]"/>
+                                               name="createdBegin"/>
                                         <span>-</span>
                                         <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="params[createdEnd]"/>
+                                               name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('cycleHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                     </li>
                                 </ul>
                             </div>
diff --git a/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html b/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
index b2bda68..172e314 100644
--- a/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
+++ b/src/main/resources/templates/inventory/inventoryDetail/inventoryDetail.html
@@ -67,10 +67,10 @@
                         <li class="time" style="height:30px">
                             <label>创建时间: </label>
                             <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                   name="params[createdBegin]"/>
+                                   name="createdBegin"/>
                             <span>-</span>
                             <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                   name="params[createdEnd]"/>
+                                   name="createdEnd"/>
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
diff --git a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
index 81325e5..f25a9fe 100644
--- a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
+++ b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
@@ -39,14 +39,15 @@
                                     <li class="time">
                                         <label>创建时间: </label>
                                         <input type="text" class="time-input" id="startTime" placeholder="开始时间"
-                                               name="params[createdBegin]"/>
+                                               name="createdBegin"/>
                                         <span>-</span>
                                         <input type="text" class="time-input" id="endTime" placeholder="结束时间"
-                                               name="params[createdEnd]"/>
+                                               name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('inventoryHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                     </li>
                                 </ul>
                             </div>
diff --git a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
index c35f1ef..68e4073 100644
--- a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
+++ b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
@@ -58,7 +58,7 @@
                             <li>
                                 项 目 号:<input type="text" name="projectNo"/>
                             </li>
-                            <li>
+                            AjaxResult.error("单据号为"+receiptHeader.getCode()+"入库单不需要审核");                    <li>
                                 交易类型:<select name="type" th:with="type=${@dict.getType('inventoryTransactionType')}">
                                 <option value="">所有</option>
                                 <option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
@@ -67,12 +67,13 @@
 
                             <li class="time">
                                 <label>创建时间: </label>
-                                <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                                <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                                 <span>-</span>
-                                <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                                <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                             </li>
                             <li>
                                 <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('inventory-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                 <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="general:inventoryHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                             </li>
                         </ul>
diff --git a/src/main/resources/templates/monitor/errorlog/errorlog.html b/src/main/resources/templates/monitor/errorlog/errorlog.html
index a54a715..e6ca6e2 100644
--- a/src/main/resources/templates/monitor/errorlog/errorlog.html
+++ b/src/main/resources/templates/monitor/errorlog/errorlog.html
@@ -22,6 +22,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('logininfor-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
diff --git a/src/main/resources/templates/monitor/job/job.html b/src/main/resources/templates/monitor/job/job.html
index 0d025b6..9abfbc1 100644
--- a/src/main/resources/templates/monitor/job/job.html
+++ b/src/main/resources/templates/monitor/job/job.html
@@ -25,6 +25,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('job-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:job:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
diff --git a/src/main/resources/templates/monitor/logininfor/logininfor.html b/src/main/resources/templates/monitor/logininfor/logininfor.html
index 84d48d4..1b03f80 100644
--- a/src/main/resources/templates/monitor/logininfor/logininfor.html
+++ b/src/main/resources/templates/monitor/logininfor/logininfor.html
@@ -31,6 +31,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('logininfor-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
diff --git a/src/main/resources/templates/monitor/online/online.html b/src/main/resources/templates/monitor/online/online.html
index 44f0841..e8f1ae4 100644
--- a/src/main/resources/templates/monitor/online/online.html
+++ b/src/main/resources/templates/monitor/online/online.html
@@ -19,6 +19,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('online-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/monitor/operlog/operlog.html b/src/main/resources/templates/monitor/operlog/operlog.html
index e50c8bc..cedb67d 100644
--- a/src/main/resources/templates/monitor/operlog/operlog.html
+++ b/src/main/resources/templates/monitor/operlog/operlog.html
@@ -34,6 +34,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('operlog-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
diff --git a/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html b/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html
index 46b0642..8ff7a94 100644
--- a/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html
+++ b/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html
@@ -44,9 +44,9 @@
 									   </li>
 									   <li class="time">
 										   <label>创建时间: </label>
-										   <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+										   <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
 										   <span>-</span>
-										   <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+										   <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
 									   </li>
 									   <li>
 										   <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
diff --git a/src/main/resources/templates/receipt/receiptHeader/add.html b/src/main/resources/templates/receipt/receiptHeader/add.html
index 38c44a9..68116ed 100644
--- a/src/main/resources/templates/receipt/receiptHeader/add.html
+++ b/src/main/resources/templates/receipt/receiptHeader/add.html
@@ -14,10 +14,10 @@
 				</div>
 			</div>
 			<div class="form-group">
-				<label class="col-sm-3 control-label">货主:</label>
+				<label class="col-sm-3 control-label">货主编码:</label>
 				<div class="col-sm-8">
-					<select id="companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.getCode()}">
-						<option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option>
+					<select id="companyCode" name="companyCode" class="form-control" th:with="companyList=${@companyService.selectCompanyByCurrentUserId()}">
+						<option th:each="company : ${companyList}" th:text="${company['name']}" th:value="${company['code']}"></option>
 					</select>
 				</div>
 			</div>
diff --git a/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html b/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html
index e583e89..60122e6 100644
--- a/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html
+++ b/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html
@@ -66,9 +66,9 @@
                                     </li>
                                     <li class="time">
                                         <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createdBegin"/>
                                         <span>-</span>
-                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="createdEnd"/>
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
@@ -250,7 +250,7 @@
                 {
                     field : 'companyCode',
                     title : '货主编码',
-                    visible:false
+                    visible: [[${@table.getVisible('p')}]]
                 },
                 {
                     field : 'warehouseCode',
diff --git a/src/main/resources/templates/receipt/receiptHeaderHistory/receiptHeaderHistory.html b/src/main/resources/templates/receipt/receiptHeaderHistory/receiptHeaderHistory.html
index 3d02497..7c17ffa 100644
--- a/src/main/resources/templates/receipt/receiptHeaderHistory/receiptHeaderHistory.html
+++ b/src/main/resources/templates/receipt/receiptHeaderHistory/receiptHeaderHistory.html
@@ -49,6 +49,7 @@
                                     </li>
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('receiptHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                         <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                                     </li>
                                 </ul>
diff --git a/src/main/resources/templates/shipment/shipmentAnalyzeTemplate/shipmentAnalyzeTemplate.html b/src/main/resources/templates/shipment/shipmentAnalyzeTemplate/shipmentAnalyzeTemplate.html
index adc2d2a..42bc496 100644
--- a/src/main/resources/templates/shipment/shipmentAnalyzeTemplate/shipmentAnalyzeTemplate.html
+++ b/src/main/resources/templates/shipment/shipmentAnalyzeTemplate/shipmentAnalyzeTemplate.html
@@ -29,6 +29,7 @@
 						</li>
 						<li>
 							<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+							<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('containerType-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 							<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:role:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 						</li>
 					</ul>
diff --git a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
index 84c39a3..de7b641 100644
--- a/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
+++ b/src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
@@ -18,9 +18,6 @@
 									<div class="select-list">
 										<ul>
 											<li>
-												出库单号:<input type="text" name="shipmentCode"/>
-											</li>
-											<li>
 												容器编号:<input type="text" name="containerCode"/>
 											</li>
 											<li>
@@ -53,6 +50,7 @@
 											</li>
 											<li>
 												<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+												<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('shipmentContainerHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 												<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 											</li>
 										</ul>
diff --git a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
index a93bde4..d87af12 100644
--- a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
+++ b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
@@ -72,6 +72,7 @@
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('receiptHeader-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                         <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                                     </li>
                                 </ul>
diff --git a/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html b/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
index 4e705a0..db90748 100644
--- a/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
+++ b/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
@@ -72,6 +72,7 @@
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                                 class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('shipmentHeaderHistory-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                         <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                                     </li>
                                 </ul>
diff --git a/src/main/resources/templates/shipment/wave/wave.html b/src/main/resources/templates/shipment/wave/wave.html
index de6ebcc..437f595 100644
--- a/src/main/resources/templates/shipment/wave/wave.html
+++ b/src/main/resources/templates/shipment/wave/wave.html
@@ -23,6 +23,7 @@
                         </li>
                         <li>
                             <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('wave-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                             <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:role:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                         </li>
                     </ul>
diff --git a/src/main/resources/templates/system/config/config.html b/src/main/resources/templates/system/config/config.html
index 0b97658..1938fc1 100644
--- a/src/main/resources/templates/system/config/config.html
+++ b/src/main/resources/templates/system/config/config.html
@@ -22,15 +22,16 @@
 									<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
 								</select>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
-							    <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('config-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/system/dept/dept.html b/src/main/resources/templates/system/dept/dept.html
index 1198a84..b7996c5 100644
--- a/src/main/resources/templates/system/dept/dept.html
+++ b/src/main/resources/templates/system/dept/dept.html
@@ -21,6 +21,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('dept-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/system/dict/type/type.html b/src/main/resources/templates/system/dict/type/type.html
index d620f85..cd77cce 100644
--- a/src/main/resources/templates/system/dict/type/type.html
+++ b/src/main/resources/templates/system/dict/type/type.html
@@ -32,18 +32,19 @@
                                                 th:value="${e['dictValue']}"></option>
                                     </select>
                                     </li>
-                                    <li class="time">
+                                    <!--<li class="time">-->
+                                        <!--&lt;!&ndash;<label>创建时间: </label>&ndash;&gt;-->
+                                        <!--&lt;!&ndash;<input type="text" class="time-input" id="createdBegin" placeholder="开始时间" name="params[createdBegin]"/>&ndash;&gt;-->
+                                        <!--&lt;!&ndash;<span>-</span>&ndash;&gt;-->
+                                        <!--&lt;!&ndash;<input type="text" class="time-input" id="createdEnd" placeholder="结束时间" name="params[createdEnd]"/>&ndash;&gt;-->
                                         <!--<label>创建时间: </label>-->
-                                        <!--<input type="text" class="time-input" id="createdBegin" placeholder="开始时间" name="params[createdBegin]"/>-->
+                                        <!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>-->
                                         <!--<span>-</span>-->
-                                        <!--<input type="text" class="time-input" id="createdEnd" placeholder="结束时间" name="params[createdEnd]"/>-->
-                                        <label>创建时间: </label>
-                                        <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
-                                        <span>-</span>
-                                        <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
-                                    </li>
+                                        <!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>-->
+                                    <!--</li>-->
                                     <li>
                                         <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                        <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('type-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
                                         <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:dict:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
                                     </li>
                                 </ul>
diff --git a/src/main/resources/templates/system/menu/menu.html b/src/main/resources/templates/system/menu/menu.html
index e4b809a..4199f6a 100644
--- a/src/main/resources/templates/system/menu/menu.html
+++ b/src/main/resources/templates/system/menu/menu.html
@@ -21,6 +21,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('menu-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/system/notice/notice.html b/src/main/resources/templates/system/notice/notice.html
index 4e3309c..e9c5f95 100644
--- a/src/main/resources/templates/system/notice/notice.html
+++ b/src/main/resources/templates/system/notice/notice.html
@@ -24,6 +24,7 @@
 							</li>
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('notice-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/system/role/role.html b/src/main/resources/templates/system/role/role.html
index 842f251..aadd32d 100644
--- a/src/main/resources/templates/system/role/role.html
+++ b/src/main/resources/templates/system/role/role.html
@@ -23,15 +23,16 @@
 									<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
 								</select>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
-							    <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:role:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('role-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:role:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/system/user/edit.html b/src/main/resources/templates/system/user/edit.html
index 3c52036..ccd7e3f 100644
--- a/src/main/resources/templates/system/user/edit.html
+++ b/src/main/resources/templates/system/user/edit.html
@@ -58,14 +58,14 @@
                      </div>
 				</div>
 			</div>
-			<div class="form-group">
-				<label class="col-sm-3 control-label">货主:</label>
-				<div class="col-sm-8">
-					<label th:each="company:${companys}" class="checkbox-inline i-checks">
-						<input name="company" type="checkbox" th:value="${company.id}" th:text=" ${company.name}" th:checked="${company.flag}" >
-					</label>
-				</div>
-			</div>
+			<!--<div class="form-group">-->
+				<!--<label class="col-sm-3 control-label">货主:</label>-->
+				<!--<div class="col-sm-8">-->
+					<!--<label th:each="company:${companys}" class="checkbox-inline i-checks">-->
+						<!--<input name="company" type="checkbox" th:value="${company.id}" th:text=" ${company.name}" th:checked="${company.flag}" >-->
+					<!--</label>-->
+				<!--</div>-->
+			<!--</div>-->
 
 			<div class="form-group">
 				<label class="col-sm-3 control-label">仓库:</label>
diff --git a/src/main/resources/templates/system/user/user.html b/src/main/resources/templates/system/user/user.html
index adf0a07..24511b0 100644
--- a/src/main/resources/templates/system/user/user.html
+++ b/src/main/resources/templates/system/user/user.html
@@ -50,15 +50,16 @@
 									<option th:each="e : ${type}" th:text="${e['dictLabel']}" th:value="${e['dictValue']}"></option>
 								</select>
 							</li>
-							<li class="time">
-								<label>创建时间: </label>
-								<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
-								<span>-</span>
-								<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
-							</li>
+							<!--<li class="time">-->
+								<!--<label>创建时间: </label>-->
+								<!--<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>-->
+								<!--<span>-</span>-->
+								<!--<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>-->
+							<!--</li>-->
 							<li>
 								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
-							    <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:user:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('user-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+								<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="system:user:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 							</li>
 						</ul>
 					</div>
diff --git a/src/main/resources/templates/task/taskHeader/taskHeader.html b/src/main/resources/templates/task/taskHeader/taskHeader.html
index abc1a5e..fd32398 100644
--- a/src/main/resources/templates/task/taskHeader/taskHeader.html
+++ b/src/main/resources/templates/task/taskHeader/taskHeader.html
@@ -79,6 +79,7 @@
 
 									<li>
 										<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+										<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('task-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
 										<!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="receipt:receiptHeader:export"><i class="fa fa-download"></i>&nbsp;导出</a>-->
 									</li>
 								</ul>
diff --git a/src/test/java/com.huaheng.test/ServiceTest.java b/src/test/java/com.huaheng.test/ServiceTest.java
deleted file mode 100644
index 306b6ab..0000000
--- a/src/test/java/com.huaheng.test/ServiceTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.huaheng.test;
-
-import com.huaheng.pc.config.sendMail.service.MailService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-
-/**
- * Created by Enzo Cotter on 2019/9/6.
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ServiceTest {
-
-    @Resource
-    private MailService mailService;
-
-    /**
-     * 发送简单纯文本邮件
-     */
-    @Test
-    public void sendSimpleMail() {
-        String[] to = {"752432958@qq.com"};
-        String[] cc = {};
-        mailService.sendSimpleMail(to, "发送邮件测试", "大家好,这是我用springboot进行发送邮件测试",cc);
-    }
-
-    /**
-     * 发送HTML邮件
-     */
-    @Test
-    public void sendHtmlMail() {
-        String[] to = {"752432958@qq.com"};
-        String[] cc = {};
-        String content = "<html><body><h3><font color=\"red\">" + "大家好,这是springboot发送的HTML邮件" + "</font></h3></body></html>";
-        mailService.sendHtmlMail(to, "发送邮件测试", content, cc);
-    }
-
-    /**
-     * 发送带附件的邮件
-     */
-    @Test
-    public void sendAttachmentMail() {
-        String[] to = {"752432958@qq.com"};
-        String[] cc = {};
-        String content = "<html><body><h3><font color=\"red\">" + "大家好,这是springboot发送的HTML邮件,有附件哦" + "</font></h3></body></html>";
-        String filePath = "your file path";
-        mailService.sendAttachmentMail(to, "发送邮件测试", content, filePath, cc);
-    }
-
-    /**
-     * 发送带图片的邮件
-     */
-    @Test
-    public void sendInlineResourceMail() {
-        String[] to = {"752432958@qq.com"};
-        String[] cc = {};
-        String rscPath = "your picture path";
-        String rscId = "skill001";
-        String content = "<html><body><h3><font color=\"red\">" + "大家好,这是springboot发送的HTML邮件,有图片哦" + "</font></h3>"
-                + "<img src=\'cid:" + rscId + "\'></body></html>";
-        mailService.sendInlineResourceMail(to, "发送邮件测试", content, rscPath, rscId, cc);
-    }
-}