diff --git a/ant-design-vue-jeecg/.env.test b/ant-design-vue-jeecg/.env.test
index 8cbb4ff..e7ebd07 100644
--- a/ant-design-vue-jeecg/.env.test
+++ b/ant-design-vue-jeecg/.env.test
@@ -1,5 +1,5 @@
 NODE_ENV=production
-VUE_APP_ENV=test
+VUE_APP_ENV=production
 outputDir=dist
 VUE_APP_API_BASE_URL=http://172.16.29.77:8081/wms
 VUE_APP_CAS_BASE_URL=http://localhost:8443/cas
diff --git a/ant-design-vue-jeecg/src/assets/huaheng.png b/ant-design-vue-jeecg/src/assets/huaheng.png
index 463550d..176e33f 100644
--- a/ant-design-vue-jeecg/src/assets/huaheng.png
+++ b/ant-design-vue-jeecg/src/assets/huaheng.png
diff --git a/ant-design-vue-jeecg/src/components/jeecg/JEditableTable.vue b/ant-design-vue-jeecg/src/components/jeecg/JEditableTable.vue
index 3f4dd81..86b050c 100644
--- a/ant-design-vue-jeecg/src/components/jeecg/JEditableTable.vue
+++ b/ant-design-vue-jeecg/src/components/jeecg/JEditableTable.vue
@@ -3110,7 +3110,7 @@ export default {
   margin-bottom: 8px;
 
   .gap {
-    padding-left: 8px;
+    padding-left: 0px;
   }
 
 }
diff --git a/ant-design-vue-jeecg/src/components/layouts/UserLayout.vue b/ant-design-vue-jeecg/src/components/layouts/UserLayout.vue
index 83cd5d2..f73913c 100644
--- a/ant-design-vue-jeecg/src/components/layouts/UserLayout.vue
+++ b/ant-design-vue-jeecg/src/components/layouts/UserLayout.vue
@@ -59,9 +59,9 @@ export default {
   .container {
     width: 100%;
     min-height: 100%;
-    background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
+    background-color: 255, 255, 255;
     background-size: 100%;
-    padding: 110px 0 144px;
+    // padding: 110px 0 144px;
     position: relative;
 
     a {
@@ -72,8 +72,9 @@ export default {
       text-align: center;
 
       .header {
-        height: 44px;
-        line-height: 44px;
+        height: 59px;
+        line-height: 59px;
+        background-color: #111;
 
         .badge {
           position: absolute;
@@ -86,7 +87,9 @@ export default {
         }
 
         .logo {
-          height: 44px;
+          height: 59px;
+          line-height: 59px;
+          padding: 19px;
           vertical-align: top;
           border-style: none;
         }
@@ -102,10 +105,11 @@ export default {
       }
 
       .desc {
-        font-size: 14px;
-        color: rgba(0, 0, 0, 0.45);
-        margin-top: 12px;
-        margin-bottom: 40px;
+        font-size: 24px;
+        color: #111;
+        margin-top: 170px;
+        margin-bottom: 70px;
+        font-weight: bolder;
       }
     }
 
diff --git a/ant-design-vue-jeecg/src/components/page/GlobalHeader.vue b/ant-design-vue-jeecg/src/components/page/GlobalHeader.vue
index 9980f65..c7e1905 100644
--- a/ant-design-vue-jeecg/src/components/page/GlobalHeader.vue
+++ b/ant-design-vue-jeecg/src/components/page/GlobalHeader.vue
@@ -150,9 +150,9 @@ export default {
           this.topMenuStyle.headerIndexRight = {}
           this.topMenuStyle.headerIndexLeft = {}
         } else {
-          let rightWidth = '400px'
-          this.topMenuStyle.topNavHeader = {'min-width': '165px'}
-          this.topMenuStyle.topSmenuStyle = {'width': 'calc(100% - 165px)'}
+          let rightWidth = '356px'
+          this.topMenuStyle.topNavHeader = {'min-width': '208px'}
+          this.topMenuStyle.topSmenuStyle = {'width': 'calc(100% - 208px)'}
           this.topMenuStyle.headerIndexRight = {'min-width': rightWidth, 'white-space': 'nowrap'}
           this.topMenuStyle.headerIndexLeft = {'width': `calc(100% - ${rightWidth})`}
         }
@@ -180,7 +180,7 @@ export default {
   .top-nav-header-index {
 
     .header-index-wide {
-      margin-left: 10px;
+      margin-left: 0px;
 
       .ant-menu.ant-menu-horizontal {
         height: @height;
@@ -201,7 +201,7 @@ export default {
     z-index: 2;
     color: white;
     height: @height;
-    background-color: @primary-color;
+    background-color: #111;
     transition: background 300ms;
 
     /* dark 样式 */
diff --git a/ant-design-vue-jeecg/src/components/page/GlobalLayout.vue b/ant-design-vue-jeecg/src/components/page/GlobalLayout.vue
index de2bf08..a62a806 100644
--- a/ant-design-vue-jeecg/src/components/page/GlobalLayout.vue
+++ b/ant-design-vue-jeecg/src/components/page/GlobalLayout.vue
@@ -9,7 +9,7 @@
         @close="() => this.collapsed = false"
         :closable="false"
         :visible="collapsed"
-        width="200px"
+        width="208px"
       >
         <side-menu
           mode="inline"
@@ -41,7 +41,7 @@
         @close="() => this.collapsed = false"
         :closable="false"
         :visible="collapsed"
-        width="200px"
+        width="208px"
       >
         <side-menu
           mode="inline"
@@ -56,7 +56,7 @@
 
     <a-layout
       :class="[layoutMode, `content-width-${contentWidth}`]"
-      :style="{ paddingLeft: fixSiderbar && isDesktop() ? `${sidebarOpened ? 200 : 80}px` : '0' }">
+      :style="{ paddingLeft: fixSiderbar && isDesktop() ? `${sidebarOpened ? 208 : 80}px` : '0' }">
       <!-- layout header -->
       <global-header
         :mode="layoutMode"
@@ -259,12 +259,12 @@ body {
   }
 
   .trigger {
-    font-size: 22px;
-    line-height: 59px;
-    padding: 0 18px;
-    cursor: pointer;
+    font-size: 25px;
+    line-height: 20px;
+    padding: 17px 18px 17px 18px;
+    margin: 0px 0px 0px 0px;
+    vertical-align: top;
     transition: color 300ms, background 300ms;
-
     &:hover {
       background: rgba(255, 255, 255, 0.3);
     }
@@ -313,7 +313,7 @@ body {
       transition: width .2s;
 
       &.ant-header-side-opened {
-        width: calc(100% - 200px)
+        width: calc(100% - 208px)
       }
 
       &.ant-header-side-closed {
@@ -354,10 +354,10 @@ body {
         }
 
         .avatar {
-          margin: 20px 10px 20px 0;
+          margin: 18px 0px 17px 0px;
           color: #1890ff;
           background: hsla(0, 0%, 100%, .85);
-          vertical-align: middle;
+          vertical-align: top;
         }
 
         .icon {
@@ -403,8 +403,8 @@ body {
 
           .logo.top-nav-header {
             text-align: center;
-            width: 58px;
-            line-height: 58px;
+            width: 59px;
+            line-height: 59px;
           }
         }
       }
@@ -455,14 +455,14 @@ body {
     .header-index-wide {
       width: 100%;
       margin: auto;
-      padding: 0 20px 0 0;
+      padding: 0 12px 0 0;
       display: flex;
       height: 59px;
 
       .ant-menu.ant-menu-horizontal {
         border: none;
-        height: 64px;
-        line-height: 64px;
+        height: 59px;
+        line-height: 59px;
       }
 
       .header-index-left {
@@ -470,17 +470,19 @@ body {
         display: flex;
 
         .logo.top-nav-header {
-          width: 160px;
-          height: 58px;
+          width: 208px;
+          height: 59px;
+          padding: 0 10px;
+          text-align: center;
           position: relative;
-          line-height: 58px;
+          line-height: 54px;
           transition: all .3s;
           overflow: hidden;
 
           img {
             display: inline-block;
             vertical-align: middle;
-            height: 32px;
+            height: 20px;
           }
 
           h1 {
@@ -595,11 +597,11 @@ body {
     height: 64px;
     position: relative;
     line-height: 64px;
-    padding-left: 24px;
     -webkit-transition: all .3s;
     transition: all .3s;
     background: #002140;
     overflow: hidden;
+    text-align: center;
 
     img, h1 {
       display: inline-block;
@@ -607,7 +609,8 @@ body {
     }
 
     img {
-      height: 32px;
+      height: 20px;
+      vertical-align: middle;
     }
 
     h1 {
@@ -644,7 +647,7 @@ body {
   padding: 4px 0;
 
   .ant-dropdown-menu-item {
-    width: 160px;
+    width: auto;
   }
 
   .ant-dropdown-menu-item > .anticon:first-child,
diff --git a/ant-design-vue-jeecg/src/components/tools/Logo.vue b/ant-design-vue-jeecg/src/components/tools/Logo.vue
index 9d98d0b..cb7ef60 100644
--- a/ant-design-vue-jeecg/src/components/tools/Logo.vue
+++ b/ant-design-vue-jeecg/src/components/tools/Logo.vue
@@ -60,7 +60,7 @@ export default {
   }
 
   &.light .logo {
-    background-color: @primary-color;
+    background-color: #111;
   }
 }
 </style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/components/tools/UserMenu.vue b/ant-design-vue-jeecg/src/components/tools/UserMenu.vue
index db58df0..2c8eb4a 100644
--- a/ant-design-vue-jeecg/src/components/tools/UserMenu.vue
+++ b/ant-design-vue-jeecg/src/components/tools/UserMenu.vue
@@ -36,8 +36,8 @@
     <header-notice class="action"/>
     <a-dropdown>
       <span class="action action-full ant-dropdown-link user-dropdown-menu">
-        <!-- <a-avatar class="avatar" size="small" :src="getAvatar()"/> -->
-        <span v-if="isDesktop()">欢迎您,{{ nickname() }}</span>
+        <a-avatar class="avatar" size="small" :src="getAvatar()"/>
+        <span v-if="isDesktop()" style="padding: 0px 0px 0px 10px;">欢迎您,{{ nickname() }}</span>
       </span>
       <a-menu slot="overlay" class="user-dropdown-menu-wrapper">
         <!-- <a-menu-item key="0">
@@ -46,12 +46,12 @@
             <span>个人中心</span>
           </router-link>
         </a-menu-item> -->
-        <a-menu-item key="1">
+        <!-- <a-menu-item key="1">
           <router-link :to="{ name: 'account-settings-base' }">
             <a-icon type="setting"/>
             <span>账户设置</span>
           </router-link>
-        </a-menu-item>
+        </a-menu-item> -->
         <a-menu-item key="3" @click="systemSetting">
           <a-icon type="tool"/>
           <span>系统设置</span>
diff --git a/ant-design-vue-jeecg/src/defaultSettings.js b/ant-design-vue-jeecg/src/defaultSettings.js
index 1135d33..3918af4 100644
--- a/ant-design-vue-jeecg/src/defaultSettings.js
+++ b/ant-design-vue-jeecg/src/defaultSettings.js
@@ -18,7 +18,7 @@ export default {
   navTheme: 'dark', // theme for nav menu
   layout: 'sidemenu', // nav menu position: sidemenu or topmenu
   contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu
-  fixedHeader: false, // sticky header
+  fixedHeader: true, // sticky header
   fixSiderbar: true, // sticky siderbar
   autoHideHeader: false, //  auto hide header
   colorWeak: false,
diff --git a/ant-design-vue-jeecg/src/views/system/RoleUserList.vue b/ant-design-vue-jeecg/src/views/system/RoleUserList.vue
index fff9774..6d83886 100644
--- a/ant-design-vue-jeecg/src/views/system/RoleUserList.vue
+++ b/ant-design-vue-jeecg/src/views/system/RoleUserList.vue
@@ -543,6 +543,6 @@ export default {
 @import '~@assets/less/common.less';
 /** Button按钮间距 */
 .ant-btn {
-  margin-left: 8px
+  margin-left: 0px
 }
 </style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue
index b9b327b..28e1b76 100644
--- a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue
+++ b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue
@@ -147,7 +147,6 @@ export default {
           align: 'center',
           dataIndex: 'param'
         },
-
         {
           title: '库区',
           align: 'center',
diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue
index d64f65e..ca2c299 100644
--- a/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue
+++ b/ant-design-vue-jeecg/src/views/system/config/LocationTypeList.vue
@@ -5,6 +5,14 @@
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="库区">
+              <a-form-model-item prop="zoneOptions">
+                <j-multi-select-tag v-model="queryParam.zoneCode" :options="zoneOptions" placeholder="请选择">
+                </j-multi-select-tag>
+              </a-form-model-item>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="编码">
               <a-input placeholder="请输入编码" v-model="queryParam.code"></a-input>
             </a-form-item>
@@ -78,6 +86,12 @@
         class="j-table-force-nowrap"
         @change="handleTableChange"
       >
+        <span slot="zoneCode" slot-scope="zoneCode">
+          <a-tag :key="zoneCode" color="blue">
+            {{ solutionZoneCode(zoneCode) }}
+          </a-tag>
+        </span>
+
         <template slot="htmlSlot" slot-scope="text">
           <div v-html="text"></div>
         </template>
@@ -126,6 +140,7 @@ import '@/assets/less/TableExpand.less'
 import { mixinDevice } from '@/utils/mixin'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import LocationTypeModal from './modules/LocationTypeModal'
+import { getZoneList } from '@/api/api'
 
 export default {
   name: 'LocationTypeList',
@@ -135,6 +150,8 @@ export default {
   },
   data() {
     return {
+      zoneList: [],
+      zoneOptions: [],
       description: '库位类型管理页面',
       // 表头
       columns: [
@@ -161,7 +178,9 @@ export default {
         {
           title: '库区',
           align: 'center',
-          dataIndex: 'zoneCode'
+          dataIndex: 'zoneCode',
+          key: 'zoneCode',
+          scopedSlots: { customRender: 'zoneCode' }
         },
         {
           title: '长度',
@@ -225,6 +244,19 @@ export default {
   },
   created() {
     this.getSuperFieldList()
+    getZoneList().then(res => {
+      if (res.success) {
+        this.zoneList = res.result
+        //延迟半秒执行,避免组件未加载完,数据已经加载完
+        setTimeout(() => {
+          //slice可以在数组的任何位置进行删除/添加操作
+          this.zoneOptions.splice(0, 1)
+          for (let i = 0; i < res.result.length; i++) {
+            this.zoneOptions.push({ value: res.result[i].code, text: res.result[i].name })
+          }
+        }, 500)
+      }
+    })
   },
   computed: {
     importExcelUrl: function() {
@@ -233,6 +265,16 @@ export default {
   },
   methods: {
     initDictConfig() {},
+    solutionZoneCode(value) {
+      var actions = []
+      Object.keys(this.zoneList).some(key => {
+        if (this.zoneList[key].code == '' + value) {
+          actions.push(this.zoneList[key].name)
+          return true
+        }
+      })
+      return actions.join('')
+    },
     getSuperFieldList() {
       let fieldList = []
       fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue b/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue
index ebc15f0..501c6b2 100644
--- a/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue
@@ -14,17 +14,13 @@
             </a-form-model-item>
           </a-col>
           <a-col :span="24">
-            <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
-              <a-select
-                show-search
-                placeholder="请选择库区"
-                option-filter-prop="children"
-                v-model="model.zoneCode">
+            <a-form-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
+              <a-select show-search placeholder="请选择库区" option-filter-prop="children" v-model="model.zoneCode">
                 <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">
                   {{ item.name }}
                 </a-select-option>
               </a-select>
-            </a-form-model-item>
+            </a-form-item>
           </a-col>
           <a-col :span="24">
             <a-form-model-item label="接口地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url">
@@ -38,10 +34,9 @@
 </template>
 
 <script>
-
-import {httpAction, getAction} from '@/api/manage'
-import {validateDuplicateValue} from '@/utils/util'
-import {getZoneList} from '@/api/api'
+import { httpAction, getAction } from '@/api/manage'
+import { validateDuplicateValue } from '@/utils/util'
+import { getZoneList } from '@/api/api'
 
 export default {
   name: 'AddressForm',
@@ -56,79 +51,79 @@ export default {
   },
   data() {
     return {
-      zoneList: [],
       model: {},
+      zoneList: [],
       labelCol: {
-        xs: {span: 24},
-        sm: {span: 5},
+        xs: { span: 24 },
+        sm: { span: 5 }
       },
       wrapperCol: {
-        xs: {span: 24},
-        sm: {span: 16},
+        xs: { span: 24 },
+        sm: { span: 16 }
       },
       confirmLoading: false,
       validatorRules: {},
       url: {
-        add: "/config/address/add",
-        edit: "/config/address/edit",
-        queryById: "/config/address/queryById"
+        add: '/config/address/add',
+        edit: '/config/address/edit',
+        queryById: '/config/address/queryById'
       }
     }
   },
   computed: {
     formDisabled() {
       return this.disabled
-    },
+    }
   },
   created() {
     //备份model原始值
-    this.modelDefault = JSON.parse(JSON.stringify(this.model));
-    this.loadFrom();
+    this.modelDefault = JSON.parse(JSON.stringify(this.model))
+    this.loadFrom()
   },
   methods: {
-    add() {
-      this.edit(this.modelDefault);
-    },
-    edit(record) {
-      this.model = Object.assign({}, record);
-      this.visible = true;
-    },
     loadFrom() {
-      getZoneList().then((res) => {
+      getZoneList().then(res => {
         if (res.success) {
           this.zoneList = res.result
         }
-      });
+      })
+    },
+    add() {
+      this.edit(this.modelDefault)
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
     },
     submitForm() {
-      const that = this;
+      const that = this
       // 触发表单验证
       this.$refs.form.validate(valid => {
         if (valid) {
-          that.confirmLoading = true;
-          let httpurl = '';
-          let method = '';
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
           if (!this.model.id) {
-            httpurl += this.url.add;
-            method = 'post';
+            httpurl += this.url.add
+            method = 'post'
           } else {
-            httpurl += this.url.edit;
-            method = 'put';
+            httpurl += this.url.edit
+            method = 'put'
           }
-          httpAction(httpurl, this.model, method).then((res) => {
+          httpAction(httpurl, this.model, method).then(res => {
             if (res.success) {
-              that.$message.success(res.message);
-              that.$emit('ok');
+              that.$message.success(res.message)
+              that.$emit('ok')
             } else {
-              that.$message.warning(res.message);
+              that.$message.warning(res.message)
             }
-          }).finally(() => {
-            that.confirmLoading = false;
+          })
+          .finally(() => {
+            that.confirmLoading = false
           })
         }
-
       })
-    },
+    }
   }
 }
 </script>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
index ac5bef9..2cc727d 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
@@ -115,7 +115,9 @@ export default {
         {
           title: '库存详情ID',
           align: 'center',
-          dataIndex: 'id'
+          dataIndex: 'id',
+          fixed: "left",
+          width: 100,
         },
         {
           title: '货主',
@@ -229,14 +231,14 @@ export default {
           align: 'center',
           dataIndex: 'updateTime'
         },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          align: 'center',
-          fixed: 'right',
-          width: 147,
-          scopedSlots: {customRender: 'action'}
-        }
+        // {
+        //   title: '操作',
+        //   dataIndex: 'action',
+        //   align: 'center',
+        //   fixed: 'right',
+        //   width: 147,
+        //   scopedSlots: {customRender: 'action'}
+        // }
       ],
       url: {
         list: '/inventory/inventoryHeader/listInventoryDetailByMainId',
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue
index 3788427..0318551 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue
@@ -175,6 +175,8 @@ export default {
         {
           title: '库存ID',
           align: "center",
+          fixed: "left",
+          width: 100,
           dataIndex: 'id'
         },
         {
@@ -230,14 +232,14 @@ export default {
           align: "center",
           dataIndex: 'updateTime'
         },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          align: "center",
-          fixed: "right",
-          width: 147,
-          scopedSlots: {customRender: 'action'},
-        }
+        // {
+        //   title: '操作',
+        //   dataIndex: 'action',
+        //   align: "center",
+        //   fixed: "right",
+        //   width: 147,
+        //   scopedSlots: {customRender: 'action'},
+        // }
       ],
       url: {
         list: "/inventory/inventoryHeader/list",
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
index a4d1bd2..b2773b1 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
@@ -15,7 +15,7 @@
               </a-form-model-item>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+          <!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="货主">
               <a-select
                 show-search
@@ -28,6 +28,16 @@
                 </a-select-option>
               </a-select>
             </a-form-item>
+          </a-col> -->
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="入库单编码">
+              <a-input placeholder="请输入入库单编码" v-model="queryParam.receiptCode"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="出库单编码">
+              <a-input placeholder="请输入出库单编码" v-model="queryParam.shipmentCode"></a-input>
+            </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <a-form-item label="库位编码">
@@ -49,18 +59,18 @@
               <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus" dictCode="inventory_status"/>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="物料编码">
-              <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="物料名称">
-              <a-input placeholder="请输入物料名称" v-model="queryParam.materialName"></a-input>
-            </a-form-item>
-          </a-col>
           <template v-if="toggleSearchStatus">
             <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="物料编码">
+                <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="物料名称">
+                <a-input placeholder="请输入物料名称" v-model="queryParam.materialName"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
               <a-form-item label="物料规格">
                 <a-input placeholder="请输入物料规格" v-model="queryParam.materialSpec"></a-input>
               </a-form-item>
@@ -107,36 +117,14 @@
 
     <!-- 操作按钮区域 -->
     <div class="table-operator">
-      <a-button @click="handleAdd" v-has="'inventoryTransaction:add'" type="primary" icon="plus">新增</a-button>
-      <a-button v-has="'inventoryTransaction:export'" type="primary" icon="download"
-                @click="handleExportXls('库存交易记录')">导出
-      </a-button>
-      <a-upload v-has="'inventoryTransaction:import'" name="file" :showUploadList="false" :multiple="false"
-                :headers="tokenHeader" :action="importExcelUrl"
-                @change="handleImportExcel">
+      <a-button v-has="'inventoryTransaction:export'" type="primary" icon="download" @click="handleExportXls('库存交易记录')">导出</a-button>
+      <a-upload v-has="'inventoryTransaction:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
         <a-button type="primary" icon="import">导入</a-button>
       </a-upload>
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <a-menu slot="overlay" v-has="'inventoryTransaction:deleteBatch'">
-          <a-menu-item key="1" @click="batchDel">
-            <a-icon type="delete"/>
-            删除
-          </a-menu-item>
-        </a-menu>
-        <a-button style="margin-left: 8px"> 批量操作
-          <a-icon type="down"/>
-        </a-button>
-      </a-dropdown>
     </div>
 
     <!-- table区域-begin -->
     <div>
-      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a
-        style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
-        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
-      </div>
-
       <a-table
         ref="table"
         size="middle"
@@ -147,7 +135,6 @@
         :dataSource="dataSource"
         :pagination="ipagination"
         :loading="loading"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         class="j-table-force-nowrap"
         @change="handleTableChange">
 
@@ -168,8 +155,6 @@
             {{ solutionZoneCode(zoneCode) }}
           </a-tag>
         </span>
-      </a-table>
-
         <template slot="htmlSlot" slot-scope="text">
           <div v-html="text"></div>
         </template>
@@ -190,7 +175,6 @@
             下载
           </a-button>
         </template>
-
         <span slot="action" slot-scope="text, record">
           <a v-has="'inventoryTransaction:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
           <a-dropdown>
@@ -207,7 +191,6 @@
             </a-menu>
           </a-dropdown>
         </span>
-
       </a-table>
     </div>
 
@@ -241,7 +224,9 @@ export default {
         {
           title: '库存交易ID',
           align: "center",
-          dataIndex: 'id'
+          dataIndex: 'id',
+          fixed: 'left',
+          width: 100,
         },
         {
           title: '库区',
@@ -258,6 +243,16 @@ export default {
         //   scopedSlots: {customRender: 'companyCode'}
         // },
         {
+          title: '入库单编码',
+          align: "center",
+          dataIndex: 'receiptCode'
+        },
+        {
+          title: '出库单编码',
+          align: "center",
+          dataIndex: 'shipmentCode'
+        },
+        {
           title: '容器编码',
           align: "center",
           dataIndex: 'containerCode'
@@ -319,16 +314,6 @@ export default {
           dataIndex: 'batch'
         },
         {
-          title: '入库单编码',
-          align: "center",
-          dataIndex: 'receiptCode'
-        },
-        {
-          title: '出库单编码',
-          align: "center",
-          dataIndex: 'shipmentCode'
-        },
-        {
           title: '创建人',
           align: "center",
           dataIndex: 'createBy'
@@ -348,14 +333,14 @@ export default {
           align: "center",
           dataIndex: 'updateTime'
         },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          align: "center",
-          fixed: "right",
-          width: 147,
-          scopedSlots: {customRender: 'action'}
-        }
+        // {
+        //   title: '操作',
+        //   dataIndex: 'action',
+        //   align: "center",
+        //   fixed: "right",
+        //   width: 147,
+        //   scopedSlots: {customRender: 'action'}
+        // }
       ],
       url: {
         list: "/inventory/inventoryTransaction/list",
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
index 52f5b98..58bdfc8 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
@@ -161,7 +161,6 @@
         :dataSource="dataSource"
         :pagination="ipagination"
         :loading="loading"
-        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
         class="j-table-force-nowrap"
         @change="handleTableChange"
       >
@@ -198,9 +197,7 @@
         </template>
         <template slot="fileSlot" slot-scope="text">
           <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
-          <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
-            下载
-          </a-button>
+          <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">下载</a-button>
         </template>
         <span slot="action" slot-scope="text, record">
           <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
@@ -238,14 +235,11 @@ export default {
       // 表头
       columns: [
         {
-          title: '#',
-          dataIndex: '',
-          key: 'rowIndex',
-          width: 60,
+          title: '库存详情ID',
           align: 'center',
-          customRender: function (t, r, index) {
-            return parseInt(index) + 1
-          }
+          dataIndex: 'id',
+          fixed: "left",
+          width: 100,
         },
         {
           title: '货主',
@@ -355,14 +349,14 @@ export default {
           align: 'center',
           dataIndex: 'updateTime'
         },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          align: 'center',
-          fixed: 'right',
-          width: 147,
-          scopedSlots: {customRender: 'action'}
-        }
+        // {
+        //   title: '操作',
+        //   dataIndex: 'action',
+        //   align: 'center',
+        //   fixed: 'right',
+        //   width: 147,
+        //   scopedSlots: {customRender: 'action'}
+        // }
       ],
       url: {
         list: '/inventory/inventoryDetail/list',
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue b/ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue
index c41df9f..3d3bb69 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue
@@ -94,6 +94,7 @@ export default {
           align: 'center',
           dataIndex: 'id',
           fixed: 'left',
+          width: 100,
         },
         {
           title: '货主',
diff --git a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue
index e48044e..3f065c0 100644
--- a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue
+++ b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue
@@ -103,24 +103,24 @@
         <template :slot="expandedRowRender" slot-scope="record">
           <div style="margin: 0">
             <div>
-              <a-badge status="default" style="vertical-align: revert;" />
+              <a-badge status="default" style="vertical-align: text-bottom;" />
               <a-button @click="copyToClipboard(record.requestHeader)" type="link" icon="copy" style="vertical-align: revert;"></a-button>
-              <span style="vertical-align: left;word-break:break-all;white-space:pre-wrap;overflow:hidden;color:#b3b3b3;">请求头:{{ record.requestHeader }}</span>
+              <span style="vertical-align: text-bottom; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#b3b3b3;">请求头:{{ record.requestHeader }}</span>
             </div>
             <div>
-              <a-badge status="success" style="vertical-align: middle;" />
-              <a-button @click="copyToClipboard(record.requestBody)" type="link" icon="copy" style="vertical-align: middle;"></a-button>
-              <span style="vertical-align: middle; word-break: break-all; white-space: pre-wrap; overflow: hidden; color: saddlebrown;">请求内容:{{ record.requestBody }}</span>
+              <a-badge status="success" style="vertical-align: text-bottom;" />
+              <a-button @click="copyToClipboard(record.requestBody)" type="link" icon="copy" style="vertical-align: revert;"></a-button>
+              <span style="vertical-align: text-bottom; word-break:break-all; white-space:pre-wrap; overflow:hidden; color: saddlebrown;">请求内容:{{ record.requestBody }}</span>
             </div>
             <div>
-              <a-badge status="processing" style="vertical-align: revert;" />
+              <a-badge status="processing" style="vertical-align: text-bottom;" />
               <a-button @click="copyToClipboard(record.responseBody)" type="link" icon="copy" style="vertical-align: revert;"></a-button>
-              <span style="vertical-align: text-bottom;word-break:break-all;white-space:pre-wrap;overflow:hidden;color:#0066CC;">响应内容:{{ record.responseBody }}</span>
+              <span style="vertical-align: text-bottom; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:#0066CC;">响应内容:{{ record.responseBody }}</span>
             </div>
             <div v-if="record.exception" >
-              <a-badge status="error" style="vertical-align: revert;" />
+              <a-badge status="error" style="vertical-align: text-bottom;" />
               <a-button @click="copyToClipboard(record.exception)" type="link" icon="copy" style="vertical-align: revert;"></a-button>
-              <span style="vertical-align: text-bottom;word-break:break-all;white-space:pre-wrap;overflow:hidden;color:red">异常堆栈信息:{{ record.exception }}</span>
+              <span style="vertical-align: text-bottom; word-break:break-all; white-space:pre-wrap; overflow:hidden; color:red">异常堆栈信息:{{ record.exception }}</span>
             </div>
           </div>
         </template>
diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
index ef7f163..7a14894 100644
--- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -117,8 +117,8 @@
           </a-button>
         </template>
         <span slot="action" slot-scope="text, record">
-          <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a>
-          <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a>
+          <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>
+          <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>
 <!--          <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>-->
 <!--          <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>-->
           <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
index ef53ab0..ad5e740 100644
--- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
@@ -126,11 +126,11 @@
         </template>
 
         <span slot="action" slot-scope="text, record">
-          <a v-if="record.status == 0" @click="selectPort(record)"><a-button type="primary">生成任务</a-button> </a>
+          <a v-if="record.status == 0" @click="selectPort(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>
           <a-popconfirm v-if="record.status == 0" v-has="'shipmentContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
-            <a><a-divider type="vertical"/><a-button type="danger">取消配盘</a-button> </a>
+            <a><a-button type="danger">取消配盘</a-button><a-divider type="vertical"/></a>
           </a-popconfirm>
-          <a v-has="'receiptContainerHeader:edit'" @click="handleEdit(record)"><a-divider type="vertical"/><a-button type="default">编辑</a-button></a>
+          <a v-has="'receiptContainerHeader:edit'" @click="handleEdit(record)"><a-button type="default">编辑</a-button></a>
         </span>
       </a-table>
     </div>
diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue
index 237e73d..686de19 100644
--- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue
@@ -78,7 +78,6 @@
         <span slot="action" slot-scope="text, record">
           <a @click="combine(record)"><a-button type="primary">配盘</a-button></a>
           <a-divider type="vertical"/>
-
               <a-dropdown>
                 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
                 <a-menu slot="overlay">
diff --git a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
index 8610188..0511040 100644
--- a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
@@ -46,7 +46,7 @@
             </a-form-item>
           </a-col>
           <template v-if="toggleSearchStatus">
-			<a-col :xl="6" :lg="7" :md="8" :sm="24">
+                <a-col :xl="6" :lg="7" :md="8" :sm="24">
               <a-form-item label="起始出入口">
                 <a-input placeholder="请输入起始出入口" v-model="queryParam.fromPortCode"></a-input>
               </a-form-item>
diff --git a/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue b/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
index acd00c7..aa70e99 100644
--- a/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
@@ -78,8 +78,7 @@
           <adjustment-doc-modal ref="adjustmentModal" @ok="modalFormOk" :id="record.id" :taskHeaderId="record.taskHeaderId"/>
           <a v-if="record.taskType==700" @click="createMany(record)">实盘登记</a>
           <a-divider type="vertical" v-if="record.taskType==700" />
-          <a v-has="'taskDetail:edit'" @click="handleEdit(record)">编辑</a>
-          <a-divider type="vertical"/>
+          <a v-has="'taskDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical" /></a>
           <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
             <a v-has="'taskDetail:delete'">删除</a>
           </a-popconfirm>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
index 6323d0d..0029912 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
@@ -5,15 +5,9 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import cn.hutool.crypto.SecureUtil;
-import cn.monitor4all.logRecord.annotation.OperationLog;
-
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.utils.HuahengJwtUtil;
-import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.modules.cas.util.CASServiceUtil;
 import org.jeecg.modules.cas.util.XmlUtils;
@@ -21,7 +15,7 @@ import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.ISysDepartService;
 import org.jeecg.modules.system.service.ISysUserService;
-import org.springframework.beans.BeanUtils;
+import org.jeecg.utils.HuahengJwtUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
@@ -45,11 +39,21 @@ import lombok.extern.slf4j.Slf4j;
 @RestController
 @RequestMapping("/sys/cas/client")
 public class CasClientController {
+    
+    /** Token失效时间 */
+    private Long TOKEN_EXPIRE_TIME;
+
+    @Value("${system.token.expireTime}")
+    public void setExpireTime(String expireTime) {
+        TOKEN_EXPIRE_TIME = Long.parseLong(expireTime);
+    }
 
     @Autowired
     private ISysUserService sysUserService;
+
     @Autowired
     private ISysDepartService sysDepartService;
+
     @Autowired
     private RedisUtil redisUtil;
 
@@ -83,7 +87,7 @@ public class CasClientController {
             String token = HuahengJwtUtil.sign(sysUser.getUsername(), sysUser.getPassword());
             // 设置超时时间
             redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
-            redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000);
+            redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, TOKEN_EXPIRE_TIME / 1000);
 
             // 获取用户部门信息
             JSONObject obj = new JSONObject();
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java
index 39ef544..ad2977e 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -50,6 +50,7 @@ import org.jeecg.utils.config.ApplicationConfig;
 import org.jeecg.utils.support.SystemRSA256Key;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.core.io.DefaultResourceLoader;
 import org.springframework.core.io.ResourceLoader;
@@ -89,6 +90,15 @@ import lombok.extern.slf4j.Slf4j;
 @Api(tags = "用户登录")
 @Slf4j
 public class LoginController {
+
+    /** Token失效时间 */
+    private Long TOKEN_EXPIRE_TIME;
+
+    @Value("${system.token.expireTime}")
+    public void setExpireTime(String expireTime) {
+        TOKEN_EXPIRE_TIME = Long.parseLong(expireTime);
+    }
+
     @Autowired
     private ISysUserService sysUserService;
 
@@ -115,7 +125,7 @@ public class LoginController {
 
     @Autowired
     private HuahengRedisUtil huahengRedisUtil;
-    
+
     @Autowired
     private ApplicationConfig applicationConfig;
 
@@ -226,7 +236,7 @@ public class LoginController {
     private Result<JSONObject> checkSystemActivationCode() throws IOException {
         Result<JSONObject> result = new Result<JSONObject>();
         // 是否需要校验激活码
-        if(applicationConfig.getCheckSystemActivationCode() != null && !applicationConfig.getCheckSystemActivationCode()) {
+        if (applicationConfig.getCheckSystemActivationCode() != null && !applicationConfig.getCheckSystemActivationCode()) {
             return result;
         }
         FileInputStream inputStream = null;
@@ -312,7 +322,7 @@ public class LoginController {
         }
         return result;
     }
-    
+
     /**
      * 退出登录
      * @param  request
@@ -615,7 +625,7 @@ public class LoginController {
         String token = HuahengJwtUtil.sign(username, syspassword, warehouseCode, roles);
         // 设置token缓存有效时间
         redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
-        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000);
+        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, TOKEN_EXPIRE_TIME / 1000);
         obj.put("token", token);
         obj.put("userInfo", sysUser);
         obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
@@ -721,7 +731,7 @@ public class LoginController {
         String token = JwtUtil.sign(username, syspassword);
         // 设置超时时间
         redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
-        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000);
+        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, TOKEN_EXPIRE_TIME / 1000);
 
         // token 信息
         obj.put("token", token);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
index f223036..ff175d6 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
@@ -1,17 +1,14 @@
 package org.jeecg.modules.system.controller;
 
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.xkcoding.justauth.AuthRequestFactory;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import me.zhyd.oauth.model.AuthCallback;
-import me.zhyd.oauth.model.AuthResponse;
-import me.zhyd.oauth.request.AuthRequest;
-import me.zhyd.oauth.utils.AuthStateUtils;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.utils.HuahengJwtUtil;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.RestUtil;
@@ -26,16 +23,30 @@ import org.jeecg.modules.system.service.ISysThirdAccountService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecg.modules.system.service.impl.ThirdAppDingtalkServiceImpl;
 import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
+import org.jeecg.utils.HuahengJwtUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.List;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xkcoding.justauth.AuthRequestFactory;
+
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthResponse;
+import me.zhyd.oauth.request.AuthRequest;
+import me.zhyd.oauth.utils.AuthStateUtils;
 
 /**
  * @Author scott
@@ -45,22 +56,36 @@ import java.util.List;
 @RequestMapping("/sys/thirdLogin")
 @Slf4j
 public class ThirdLoginController {
+
+    /** Token失效时间 */
+    private Long TOKEN_EXPIRE_TIME;
+
+    @Value("${system.token.expireTime}")
+    public void setExpireTime(String expireTime) {
+        TOKEN_EXPIRE_TIME = Long.parseLong(expireTime);
+    }
+
     @Autowired
     private ISysUserService sysUserService;
+
     @Autowired
     private ISysThirdAccountService sysThirdAccountService;
 
     @Autowired
     private BaseCommonService baseCommonService;
+
     @Autowired
     private RedisUtil redisUtil;
+
     @Autowired
     private AuthRequestFactory factory;
 
     @Autowired
     ThirdAppConfig thirdAppConfig;
+
     @Autowired
     private ThirdAppWechatEnterpriseServiceImpl thirdAppWechatEnterpriseService;
+
     @Autowired
     private ThirdAppDingtalkServiceImpl thirdAppDingtalkService;
 
@@ -198,7 +223,7 @@ public class ThirdLoginController {
         String token = HuahengJwtUtil.sign(user.getUsername(), user.getPassword());
         redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
         // 设置超时时间
-        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, HuahengJwtUtil.EXPIRE_TIME / 1000);
+        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, TOKEN_EXPIRE_TIME / 1000);
         return token;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
index ff4f158..7c394a4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
@@ -150,7 +150,11 @@ public class MesServiceImpl implements IMesService {
         if (!success) {
             throw new JeecgBootException("MES下发入库信息,更新入库组盘头失败");
         }
-        return huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        return result;
     }
 
     @Override
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
index b961b56..b591eec 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
@@ -162,7 +162,11 @@ public class WmsServiceImpl implements WmsService {
         if (!success) {
             throw new JeecgBootException("WMS下发入库信息,更新入库组盘头失败");
         }
-        return huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        return result;
     }
 
     @Override
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
index 0ff4ef3..4c57907 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
@@ -18,7 +18,7 @@ public interface IHuahengMultiHandlerService {
 
     Result sendTaskToWcs(TaskHeader taskHeader);
 
-    Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode);
+    Result createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode);
 
     Result combination(CombinationModel combinationModel);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
index 1f54a49..c7ed5f5 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
@@ -71,13 +71,11 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) {
-        String lockKey = warehouseCode;
-        Result result = handleMultiProcess("createReceiptTask", lockKey, new MultiProcessListener() {
+    public Result createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) {
+        Result result = handleMultiProcess("createReceiptTask", warehouseCode, new MultiProcessListener() {
             @Override
             public Result<?> doProcess() {
-                Result result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
-                return result;
+                return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
             }
         });
         return result;
@@ -89,8 +87,7 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
         Result result = handleMultiProcess("combination", new MultiProcessListener() {
             @Override
             public Result<?> doProcess() {
-                Result result = shipmentCombinationService.combination(combinationModel);
-                return result;
+                return shipmentCombinationService.combination(combinationModel);
             }
         });
         return result;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
index 5bb4d0b..1ae2079 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -57,26 +57,37 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
 
     @Autowired
     private ReceiptContainerHeaderMapper receiptContainerHeaderMapper;
+
     @Autowired
     private ReceiptContainerDetailMapper receiptContainerDetailMapper;
+
     @Resource
     private IContainerService containerService;
+
     @Resource
     private IReceiptContainerDetailService receiptContainerDetailService;
+
     @Resource
     private ILocationService locationService;
+
     @Resource
     private IReceiptContainerHeaderService receiptContainerHeaderService;
+
     @Resource
     private ITaskHeaderService taskHeaderService;
+
     @Resource
     private ITaskDetailService taskDetailService;
+
     @Resource
     private IReceiptDetailService receiptDetailService;
+
     @Resource
     private IReceiptHeaderService receiptHeaderService;
+
     @Resource
     private IInventoryHeaderService inventoryHeaderService;
+
     @Resource
     private IParameterConfigurationService parameterConfigurationService;
 
@@ -106,7 +117,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
     }
 
     @Override
-    @Transactional(rollbackFor = JeecgBootException.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional
     @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库任务生成'", extra = "#extraJsonString1", msg = "'任务ID:' + #taskHeader.getId()",
         condition = "#receiptContainerDetailList.size() > 0", recordReturnValue = true)
     @OperationLog(bizId = "''", bizType = "'任务追踪'", tag = "'入库任务生成'", extra = "#extraJsonString2",
@@ -115,7 +126,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
     public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) {
         log.info("开始创建入库任务");
         if (!receiptContainerHeader.getWarehouseCode().equals(warehouseCode)) {
-            return Result.error("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘不能在" + warehouseCode + "仓库操作");
+            throw new JeecgBootException("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘不能在" + warehouseCode + "仓库操作");
         }
         String containerCode = receiptContainerHeader.getContainerCode();
         String fromLocationCode = receiptContainerHeader.getFromLocationCode();
@@ -125,11 +136,11 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
         List<ReceiptContainerDetail> receiptContainerDetailList =
             receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(receiptContainerHeader.getId());
         if (receiptContainerDetailList.size() == 0) {
-            return Result.error("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘,没有组盘明细,请先组盘!");
+            throw new JeecgBootException("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘,没有组盘明细,请先组盘!");
         }
         int receiptContainerStatus = receiptContainerHeader.getStatus();
         if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_BUILD) {
-            return Result.error("创建入库任务, 入库组盘状态不是创建状态");
+            throw new JeecgBootException("创建入库任务, 入库组盘状态不是创建状态");
         }
         String containerFillStatus = QuantityConstant.STATUS_CONTAINER_FILL_SOME;
         if (!StringUtils.isEmpty(receiptContainerHeader.getContainerFillStatus())) {
@@ -411,30 +422,36 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
     }
 
     @Override
+    @Transactional
     public Result cancelReceiving(List<Integer> ids) {
         Result result = null;
         for (Integer id : ids) {
-            result = cancelReceiving(id);
+            result = receiptContainerHeaderService.cancelReceiving(id);
+            if (!result.isSuccess()) {
+                throw new JeecgBootException(result.getMessage());
+            }
         }
         return result;
     }
 
     @Override
+    @Transactional
     public boolean updateToPortById(String toPort, int id) {
         ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
         receiptContainerHeader.setToPort(toPort);
         receiptContainerHeader.setId(id);
-        boolean success = updateById(receiptContainerHeader);
+        boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader);
         return success;
     }
 
     @Override
+    @Transactional
     public boolean updateToPortAndStatus(String toPort, int status, int id) {
         ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
         receiptContainerHeader.setToPort(toPort);
         receiptContainerHeader.setStatus(status);
         receiptContainerHeader.setId(id);
-        boolean success = updateById(receiptContainerHeader);
+        boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader);
         return success;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
index 7902225..4f83284 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
@@ -181,15 +181,18 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R
                 }
             }
         }
-        receiptHeader = new ReceiptHeader();
-        receiptHeader.setId(id);
-        receiptHeader.setFirstStatus(maxStatus);
-        receiptHeader.setLastStatus(minStatus);
-        if (!receiptHeaderService.updateById(receiptHeader)) {
+        ReceiptHeader updateReceiptHeader = new ReceiptHeader();
+        updateReceiptHeader.setId(id);
+        updateReceiptHeader.setCode(receiptHeader.getCode());
+        updateReceiptHeader.setReferCode(receiptHeader.getReferCode());
+        updateReceiptHeader.setWarehouseCode(receiptHeader.getWarehouseCode());
+        updateReceiptHeader.setFirstStatus(maxStatus);
+        updateReceiptHeader.setLastStatus(minStatus);
+        if (!receiptHeaderService.updateById(updateReceiptHeader)) {
             throw new JeecgBootException("更新入库单:" + id + " 状态失败");
         }
         LogRecordContext.putVariable("minStatus", minStatus);
-        LogRecordContext.putVariable("receiptHeader", receiptHeader);
+        LogRecordContext.putVariable("receiptHeader", updateReceiptHeader);
         return true;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
index aa203f2..36b3b46 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
@@ -100,7 +100,7 @@ public class ReceiveController extends HuahengBaseController {
     @ApiOperation(value = "入库单-生成任务", notes = "入库单-生成任务")
     @PostMapping("/receivingAndCreateTask")
     @ResponseBody
-    public Result<TaskHeader> receivingAndCreateTask(@RequestBody List<Receive> receiveList, HttpServletRequest req) {
+    public Result receivingAndCreateTask(@RequestBody List<Receive> receiveList, HttpServletRequest req) {
         String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
         String lockKey = warehouseCode;
         Result result = handleMultiProcess("receivingAndCreateTask", lockKey, new MultiProcessListener() {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/IReceiveService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/IReceiveService.java
index 684c3b5..a98e650 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/IReceiveService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/IReceiveService.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.wms.receipt.receiving.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;
 import org.jeecg.modules.wms.receipt.receiving.domain.Receive;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
@@ -14,7 +15,7 @@ import java.util.List;
  */
 public interface IReceiveService extends IService<Receive> {
 
-    Result receiving(List<Receive> receiveList, String warehouseCode);
+    Result<ReceiptContainerHeader> receiving(List<Receive> receiveList, String warehouseCode);
 
     Result<TaskHeader> receivingAndCreateTask(List<Receive> receiveList, String warehouseCode);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
index 937e008..e6b0176 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -222,7 +222,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
                 combinationModel.setShipQty(inventoryQty);
                 shipmentQty = shipmentQty.subtract(inventoryQty);
             }
-            Result result = huahengMultiHandlerService.combination(combinationModel);
+            Result result = shipmentCombinationService.combination(combinationModel);
             if (!result.isSuccess()) {
                 throw new JeecgBootException(result.getMessage());
             }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
index ab81285..6f18a45 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -867,7 +867,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional
     public Result sendTaskToWcs(Integer taskId) {
         TaskHeader taskHeader = taskHeaderService.getById(taskId);
         if (taskHeader == null) {
@@ -1670,7 +1670,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Transactional(rollbackFor = Exception.class)
     public Result completeTaskUnLockContainerAndLocation(String containerFillStatus, int taskType, String containerCode, String fromLocationCode,
         String toLocationCode, String warehouseCode) {
-        Result result = null;
         boolean success = false;
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("任务类型" + taskType + "完成任务时, 容器编码为空");
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java
index 09c1ea2..b7c4214 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengJwtUtil.java
@@ -17,6 +17,7 @@ import org.jeecg.utils.support.ApiAuthentication;
 import org.jeecg.utils.support.RSA256Key;
 import org.jeecg.utils.support.SystemAuthentication;
 import org.jeecg.utils.support.SystemRSA256Key;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -35,8 +36,13 @@ import cn.hutool.core.util.StrUtil;
 @Component
 public class HuahengJwtUtil {
 
-    /** token失效时间 1天 */
-    public static final long EXPIRE_TIME = 12 * 60 * 60 * 1000;
+    /** Token失效时间 */
+    private static Long TOKEN_EXPIRE_TIME;
+
+    @Value("${system.token.expireTime}")
+    public void setExpireTime(String expireTime) {
+        TOKEN_EXPIRE_TIME = Long.parseLong(expireTime);
+    }
 
     /** 仓库视察员角色 */
     public static final String USER_ROLE_INSPECTOR = "inspector";
@@ -164,7 +170,7 @@ public class HuahengJwtUtil {
      * @return          加密的token
      */
     public static String sign(String username, String secret) {
-        Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
+        Date date = new Date(System.currentTimeMillis() + TOKEN_EXPIRE_TIME);
         Algorithm algorithm = Algorithm.HMAC256(secret);
         // 附带username信息
         return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
@@ -179,7 +185,7 @@ public class HuahengJwtUtil {
      * @return               加密的token
      */
     public static String sign(String username, String secret, String warehouseCode, List<String> roles) {
-        Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
+        Date date = new Date(System.currentTimeMillis() + TOKEN_EXPIRE_TIME);
         Algorithm algorithm = Algorithm.HMAC256(secret);
         // 附带username信息
         return JWT.create().withClaim("username", username).withClaim("warehouseCode", warehouseCode).withClaim("roles", roles).withExpiresAt(date).sign(algorithm);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiAuthenticationAspect.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiAuthenticationAspect.java
index 6afd4b1..117c3fc 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiAuthenticationAspect.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiAuthenticationAspect.java
@@ -25,6 +25,8 @@ import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.exceptions.JWTVerificationException;
 import com.auth0.jwt.interfaces.DecodedJWT;
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -37,13 +39,13 @@ import lombok.extern.slf4j.Slf4j;
 @Component
 @EnableAsync
 public class ApiAuthenticationAspect {
-    
+
     /** 全局认证TOKEN */
-    private String token = "MTY3OTU1MTE0MCwib3BlcmF0b3IiOiJIVUFIRU5HLVdNUzQiLCJqdGkiOiI3ZGExMDQyYS1iMDBhLTQzZmMtOTliO"; 
+    private String token = "MTY3OTU1MTE0MCwib3BlcmF0b3IiOiJIVUFIRU5HLVdNUzQiLCJqdGkiOiI3ZGExMDQyYS1iMDBhLTQzZmMtOTliO";
 
     @Autowired
     private RSA256Key rsa256Key;
-    
+
     @Autowired
     private ApplicationConfig applicationConfig;
 
@@ -79,21 +81,19 @@ public class ApiAuthenticationAspect {
         }
         try {
             if (token.equals("MTY3OTU1MTE0MCwib3BlcmF0b3IiOiJIVUFIRU5HLVdNUzQiLCJqdGkiOiI3ZGExMDQyYS1iMDBhLTQzZmMtOTliO")) {
+                log.error("API Authentication token 非法使用");
                 return;
             }
             Algorithm algorithm = Algorithm.RSA256(rsa256Key.getPublicKey(), rsa256Key.getPrivateKey());
             JWTVerifier verifier = JWT.require(algorithm).withIssuer(applicationConfig.getArtifactId()).build();
             DecodedJWT jwt = verifier.verify(token);
-            new ApiAuthentication.ApiAuthenticationBuild()
-            .operator(jwt.getClaim("operator").asString())
-            .audience(jwt.getAudience().get(0))
-            .issuer(jwt.getIssuer())
-            .issuedAt(jwt.getIssuedAt())
-            .expireDateTime(jwt.getExpiresAt())
-            .bulid();
+            new ApiAuthentication.ApiAuthenticationBuild().operator(jwt.getClaim("operator").asString()).audience(jwt.getAudience().get(0)).issuer(jwt.getIssuer())
+                .issuedAt(jwt.getIssuedAt()).expireDateTime(jwt.getExpiresAt()).bulid();
             if (jwt.getClaim("operator").asString().equals(jwt.getIssuer())) {
                 throw new RuntimeException("Authentication token error");
             }
+            log.info("API Authentication token info: 使用方: {}, 提供方: {}, 失效时间: {}", jwt.getAudience().get(0), jwt.getClaim("operator").asString(),
+                DateUtil.format(jwt.getExpiresAt(), DatePattern.NORM_DATETIME_PATTERN));
         } catch (JWTVerificationException e) {
             log.error(e.getMessage());
             throw e;
diff --git a/huaheng-wms-core/src/main/resources/application-dev.yml b/huaheng-wms-core/src/main/resources/application-dev.yml
index da20945..7bcba6a 100644
--- a/huaheng-wms-core/src/main/resources/application-dev.yml
+++ b/huaheng-wms-core/src/main/resources/application-dev.yml
@@ -355,3 +355,7 @@ third-app:
       # appSecret
       client-secret: ??
       agent-id: ??
+system:
+  token:
+    # 登录TOKEN缓存1年
+    expireTime: 31536000000
diff --git a/huaheng-wms-core/src/main/resources/application-prod.yml b/huaheng-wms-core/src/main/resources/application-prod.yml
index 4831464..f073562 100644
--- a/huaheng-wms-core/src/main/resources/application-prod.yml
+++ b/huaheng-wms-core/src/main/resources/application-prod.yml
@@ -355,3 +355,7 @@ third-app:
       # appSecret
       client-secret: ??
       agent-id: ??
+system:
+  token:
+    # 登录TOKEN缓存12小时
+    expireTime: 43200000
diff --git a/huaheng-wms-core/src/main/resources/application-test.yml b/huaheng-wms-core/src/main/resources/application-test.yml
index e7dac85..8034877 100644
--- a/huaheng-wms-core/src/main/resources/application-test.yml
+++ b/huaheng-wms-core/src/main/resources/application-test.yml
@@ -356,3 +356,7 @@ third-app:
       # appSecret
       client-secret: ??
       agent-id: ??
+system:
+  token:
+    # 登录TOKEN缓存1年
+    expireTime: 31536000000