diff --git a/.idea/MyBatisCodeHelperDatasource.xml b/.idea/MyBatisCodeHelperDatasource.xml
index 6c83820..a7a7381 100644
--- a/.idea/MyBatisCodeHelperDatasource.xml
+++ b/.idea/MyBatisCodeHelperDatasource.xml
@@ -6,9 +6,9 @@
         <option name="addSerializeUid" value="true" />
         <option name="generateService" value="true" />
         <option name="generateServiceInterface" value="true" />
-        <option name="javaMapperPackage" value="com.huaheng.pc.config.containerCapacityl.mapper" />
+        <option name="javaMapperPackage" value="com.huaheng.pc.task.taskPreference.mapper" />
         <option name="javaMapperPath" value="$PROJECT_DIR$/src/main/java" />
-        <option name="javaModelPackage" value="com.huaheng.pc.config.containerCapacityl.domain" />
+        <option name="javaModelPackage" value="com.huaheng.pc.task.taskPreference.domain" />
         <option name="javaModelPath" value="$PROJECT_DIR$/src/main/java" />
         <option name="lastDatabaseCrudChooseModuleName" value="huaheng" />
         <option name="moduleNameToPackageAndPathMap">
@@ -30,15 +30,15 @@
             <entry key="huaheng">
               <value>
                 <UserPackageAndPathInfoByModule>
-                  <option name="javaMapperPackage" value="com.huaheng.pc.config.containerCapacityl.mapper" />
+                  <option name="javaMapperPackage" value="com.huaheng.pc.task.taskPreference.mapper" />
                   <option name="javaMapperPath" value="$PROJECT_DIR$/src/main/java" />
-                  <option name="javaModelPacakge" value="com.huaheng.pc.config.containerCapacityl.domain" />
+                  <option name="javaModelPacakge" value="com.huaheng.pc.task.taskPreference.domain" />
                   <option name="javaModelPath" value="$PROJECT_DIR$/src/main/java" />
-                  <option name="javaServiceInterfacePackage" value="com.huaheng.pc.config.containerCapacityl.service" />
+                  <option name="javaServiceInterfacePackage" value="com.huaheng.pc.task.taskPreference.service" />
                   <option name="javaServiceInterfacePath" value="$PROJECT_DIR$/src/main/java" />
-                  <option name="javaServicePackage" value="com.huaheng.pc.config.containerCapacityl.service" />
+                  <option name="javaServicePackage" value="com.huaheng.pc.task.taskPreference.service" />
                   <option name="javaServicePath" value="$PROJECT_DIR$/src/main/java" />
-                  <option name="xmlPackage" value="config" />
+                  <option name="xmlPackage" value="task" />
                   <option name="xmlPath" value="E:\code\wms2\src\main\resources\mybatis" />
                 </UserPackageAndPathInfoByModule>
               </value>
@@ -47,6 +47,16 @@
         </option>
         <option name="tableGenerateConfigs">
           <map>
+            <entry key="wms_v2:bom_detail">
+              <value>
+                <TableGenerateConfig>
+                  <option name="generatedKey" value="id" />
+                  <option name="javaModelName" value="BomDetail" />
+                  <option name="moduleName" value="huaheng" />
+                  <option name="useActualColumnName" value="true" />
+                </TableGenerateConfig>
+              </value>
+            </entry>
             <entry key="wms_v2:bom_header">
               <value>
                 <TableGenerateConfig>
@@ -277,6 +287,36 @@
                 </TableGenerateConfig>
               </value>
             </entry>
+            <entry key="wms_v2:task_detail">
+              <value>
+                <TableGenerateConfig>
+                  <option name="generatedKey" value="id" />
+                  <option name="javaModelName" value="TaskDetail" />
+                  <option name="moduleName" value="huaheng" />
+                  <option name="useActualColumnName" value="true" />
+                </TableGenerateConfig>
+              </value>
+            </entry>
+            <entry key="wms_v2:task_header">
+              <value>
+                <TableGenerateConfig>
+                  <option name="generatedKey" value="id" />
+                  <option name="javaModelName" value="TaskHeader" />
+                  <option name="moduleName" value="huaheng" />
+                  <option name="useActualColumnName" value="true" />
+                </TableGenerateConfig>
+              </value>
+            </entry>
+            <entry key="wms_v2:task_preference">
+              <value>
+                <TableGenerateConfig>
+                  <option name="generatedKey" value="id" />
+                  <option name="javaModelName" value="TaskPreference" />
+                  <option name="moduleName" value="huaheng" />
+                  <option name="useActualColumnName" value="true" />
+                </TableGenerateConfig>
+              </value>
+            </entry>
             <entry key="wms_v2:zone_capacity">
               <value>
                 <TableGenerateConfig>
@@ -293,7 +333,7 @@
         <option name="useLomBokOnModel" value="true" />
         <option name="useSwagger" value="true" />
         <option name="userMybatisPlus" value="true" />
-        <option name="xmlMapperPackage" value="config" />
+        <option name="xmlMapperPackage" value="task" />
         <option name="xmlMapperPath" value="E:\code\wms2\src\main\resources\mybatis" />
       </ProjectProfile>
     </option>
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 1b3d401..d9d9ec3 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,16 +2,19 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="9ff7b25e-dc1a-4859-8a0c-00039489e359" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomDetail/add.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomDetail/bomDetail.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomDetail/edit.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomHeader/add.html" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomHeader/edit.html" afterDir="false" />
       <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/general/company/service/CompanyService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/company/service/CompanyService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/domain/Material.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/domain/Material.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/materialUnit/service/MaterialUnitService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/materialUnit/service/MaterialUnitService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/materialUnit/service/MaterialUnitServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/materialUnit/service/MaterialUnitServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/role/domain/Role.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/role/domain/Role.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/controller/UserController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/controller/UserController.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/general/material/add.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/general/material/add.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/general/material/edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/general/material/edit.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/resources/templates/general/bomHeader/bomHeader.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/general/bomHeader/bomHeader.html" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -51,7 +54,14 @@
         <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" />
-        <item name="company: table" type="285a2a93:MysqlImplModel$Table" />
+        <item name="bom_detail: table" type="285a2a93:MysqlImplModel$Table" />
+      </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" />
+        <item name="location_type: table" type="285a2a93:MysqlImplModel$Table" />
       </path>
     </expand>
     <select />
@@ -60,6 +70,7 @@
     <option name="RECENT_TEMPLATES">
       <list>
         <option value="Class" />
+        <option value="HTML File" />
       </list>
     </option>
   </component>
@@ -85,6 +96,7 @@
   <component name="PropertiesComponent">
     <property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
     <property name="DatabaseDriversLRU" value="mysql" />
+    <property name="DefaultHtmlFileTemplate" value="HTML File" />
     <property name="ExpandSpringBootJavaOptionsPanel" value="true" />
     <property name="RequestMappingsPanelOrder0" value="0" />
     <property name="RequestMappingsPanelOrder1" value="1" />
@@ -100,6 +112,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="settings.editor.selected.configurable" value="preferences.pluginManager" />
   </component>
   <component name="RecentsManager">
@@ -153,7 +166,7 @@
           <expand>
             <path>
               <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
-              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@21a8d0c6" type="7427dc5b:ServiceModel$ServiceGroupNode" />
+              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@6299c693" type="7427dc5b:ServiceModel$ServiceGroupNode" />
             </path>
           </expand>
           <select />
@@ -179,7 +192,10 @@
       <workItem from="1565328536669" duration="797000" />
       <workItem from="1565345715376" duration="452000" />
       <workItem from="1565570424829" duration="11663000" />
-      <workItem from="1565587737758" duration="4606000" />
+      <workItem from="1565587737758" duration="12961000" />
+      <workItem from="1565657307503" duration="115000" />
+      <workItem from="1565657439247" duration="2447000" />
+      <workItem from="1565662229227" duration="19207000" />
     </task>
     <task id="LOCAL-00001" summary="添加库位、库位类型增删改查接口">
       <created>1565226427512</created>
@@ -223,7 +239,35 @@
       <option name="project" value="LOCAL" />
       <updated>1565578920011</updated>
     </task>
-    <option name="localTasksCounter" value="7" />
+    <task id="LOCAL-00007" summary="添加物料页面">
+      <created>1565593159103</created>
+      <option name="number" value="00007" />
+      <option name="presentableId" value="LOCAL-00007" />
+      <option name="project" value="LOCAL" />
+      <updated>1565593159103</updated>
+    </task>
+    <task id="LOCAL-00008" summary="添加商品详情">
+      <created>1565598117104</created>
+      <option name="number" value="00008" />
+      <option name="presentableId" value="LOCAL-00008" />
+      <option name="project" value="LOCAL" />
+      <updated>1565598117104</updated>
+    </task>
+    <task id="LOCAL-00009" summary="添加物料时判断单位是否存在,不存在则添加物料单位">
+      <created>1565659672152</created>
+      <option name="number" value="00009" />
+      <option name="presentableId" value="LOCAL-00009" />
+      <option name="project" value="LOCAL" />
+      <updated>1565659672152</updated>
+    </task>
+    <task id="LOCAL-00010" summary="添加task实体类">
+      <created>1565665525508</created>
+      <option name="number" value="00010" />
+      <option name="presentableId" value="LOCAL-00010" />
+      <option name="project" value="LOCAL" />
+      <updated>1565665525508</updated>
+    </task>
+    <option name="localTasksCounter" value="11" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -263,15 +307,29 @@
     <MESSAGE value="Merge branch 'develop' of http://172.16.29.40:8010/wms/wms2 into develop&#10;&#10;# Conflicts:&#10;#&#9;.idea/workspace.xml" />
     <MESSAGE value="添加userWarehouse" />
     <MESSAGE value="添加containerCapacity" />
-    <option name="LAST_COMMIT_MESSAGE" value="添加containerCapacity" />
+    <MESSAGE value="添加物料页面" />
+    <MESSAGE value="添加商品详情" />
+    <MESSAGE value="添加物料时判断单位是否存在,不存在则添加物料单位" />
+    <MESSAGE value="添加task实体类" />
+    <option name="LAST_COMMIT_MESSAGE" value="添加task实体类" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
       <breakpoints>
         <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/controller/UserController.java</url>
+          <line>88</line>
+          <option name="timeStamp" value="3" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java</url>
+          <line>69</line>
+          <option name="timeStamp" value="6" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java</url>
-          <line>107</line>
-          <option name="timeStamp" value="1" />
+          <line>123</line>
+          <option name="timeStamp" value="7" />
         </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
diff --git a/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java b/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java
index ddab98f..19cc6e6 100644
--- a/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java
+++ b/src/main/java/com/huaheng/pc/config/locationType/service/LocationTypeService.java
@@ -7,4 +7,6 @@ import java.util.List;
 import java.util.Map;
 
 public interface LocationTypeService extends IService<LocationType>{
+
+    public List<Map<String, Object>> getLocationPrefix();
 }
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 752f571..6f5f921 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
@@ -2,11 +2,11 @@ package com.huaheng.pc.config.locationType.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.huaheng.common.utils.security.ShiroUtils;
-import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.huaheng.pc.config.locationType.mapper.LocationTypeMapper;
+import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.pc.config.locationType.domain.LocationType;
+import com.huaheng.pc.config.locationType.mapper.LocationTypeMapper;
+import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Map;
@@ -14,4 +14,11 @@ import java.util.Map;
 @Service("locationType")
 public class LocationTypeServiceImpl extends ServiceImpl<LocationTypeMapper, LocationType> implements LocationTypeService{
 
+    public List<Map<String, Object>> getLocationPrefix(){
+        LambdaQueryWrapper<LocationType> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(LocationType::getWarehouseCode, ShiroUtils.getWarehouseCode())
+                .eq(LocationType::getEnable, false)
+                .eq(LocationType::getEnable, true);
+        return this.listMaps(lambdaQueryWrapper);
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java b/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java
index 638996c..8a28c28 100644
--- a/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java
+++ b/src/main/java/com/huaheng/pc/general/bom/controller/BomDetailController.java
@@ -1,18 +1,151 @@
 package com.huaheng.pc.general.bom.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.support.Convert;
+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.general.bom.domain.BomDetail;
 import com.huaheng.pc.general.bom.service.BomDetailService;
+import com.huaheng.pc.general.material.domain.Material;
+import com.huaheng.pc.general.material.service.MaterialService;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 @Controller
 @RequestMapping("/general/bomDetail")
-public class BomDetailController {
+public class BomDetailController extends BaseController {
 
     private String prefix = "general/bomDetail";
 
     @Resource
     private BomDetailService bomDetailService;
+    @Resource
+    private MaterialService materialService;
+
+    @RequiresPermissions("general:bomHeader:view")
+    @Log(title = "管理-推送详情列表", operating = "推送详情列表", action = BusinessType.GRANT)
+    @GetMapping("/list/{id}")
+    public String list(@PathVariable("id")Integer id, ModelMap mmap) {
+        mmap.put("bomHeaderId",id);
+        return prefix+"/bomDetail";
+    }
+
+    /**
+     * 查询商品详情
+     */
+    @ApiOperation(value="查看商品列表", notes="根据商品id获取商品详情信息", httpMethod = "POST")
+    @RequiresPermissions("general:bomHeader:list")
+    @Log(title = "通用-商品管理", operating = "查看商品列表", action = BusinessType.GRANT)
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(@ApiParam(name="bomId",value="商品ID") Integer bomId) {
+        LambdaQueryWrapper<BomDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        lambdaQueryWrapper.eq(BomDetail::getBomId, bomId);
+        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
+            /*使用分页查询*/
+            Page<BomDetail> page = new Page<>(pageNum, pageSize);
+            IPage<BomDetail> iPage = bomDetailService.page(page, lambdaQueryWrapper);
+            return getMpDataTable(iPage.getRecords(), iPage.getTotal());
+        } else {
+            List<BomDetail> list = bomDetailService.list(lambdaQueryWrapper);
+            return getDataTable(list);
+        }
+    }
+
+    /**
+     * 新增商品详情
+     */
+    @GetMapping("/add")
+    public String add() {
+        return prefix + "/add";
+    }
+
+    /**
+     * 新增保存商品
+     */
+    @ApiOperation(value="新增商品详情", notes="新增商品详情", httpMethod = "POST")
+    @RequiresPermissions("general:bomDetail:add")
+    @Log(title = "通用-商品", operating = "新增商品", action = BusinessType.INSERT)
+    @PostMapping("/add")
+    @ResponseBody
+    public AjaxResult addSave(@ApiParam(name = "containerType", value = "商品详情", required = true)
+                                      BomDetail bomDetail)  {
+        LambdaQueryWrapper<Material> lamdba = Wrappers.lambdaQuery();
+        lamdba.eq(Material::getCode, bomDetail.getMaterialCode());
+        Material material = materialService.getOne(lamdba);
+        if ( material == null){
+            return AjaxResult.error("不存在物料编码"+bomDetail.getMaterialCode());
+        } else {
+            bomDetail.setCompanyCode(material.getCompanyCode());
+            bomDetail.setWarehouseCode(material.getWarehouseCode());
+            bomDetail.setMaterialCode(material.getCode());
+            bomDetail.setMaterialName(material.getName());
+            bomDetail.setMaterialUnit(material.getUnit());
+            bomDetail.setCreatedBy(ShiroUtils.getLoginName());
+            bomDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+        }
+        return toAjax(bomDetailService.save(bomDetail));
+    }
+
+    /**
+     * 修改商品详情
+     */
+    @GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Integer id, ModelMap mmap) {
+        mmap.put("bomDetail", bomDetailService.getById(id));
+        return prefix + "/edit";
+    }
+
+    /**
+     * 修改保存商品详情
+     */
+    @ApiOperation(value="修改商品详情", notes="修改商品详情", httpMethod = "POST")
+    @RequiresPermissions("general:BomDetail:edit")
+    @Log(title = "通用-商品详情", operating = "修改商品详情", action = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(
+            @ApiParam(name = "BomDetail", value = "商品详情实体类", required = true)BomDetail bomDetail) {
+        return toAjax(bomDetailService.updateById(bomDetail));
+    }
+
+    /**
+     * 删除商品详情
+     */
+    @ApiOperation(value="删除商品详情", notes="根据id批量删除商品详情,参数示例1,2,3", httpMethod = "POST")
+    @RequiresPermissions("general:BomDetail:remove")
+    @Log(title = "通用-商品", operating = "删除商品", action = BusinessType.DELETE)
+    @PostMapping( "/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids) {
+        if (StringUtils.isEmpty(ids)){
+            return AjaxResult.error("id不能为空");
+        }
+        List<Integer> list = new ArrayList<>();
+        for (Integer id : Convert.toIntArray(ids)) {
+            list.add(id);
+        }
+        return toAjax(bomDetailService.removeByIds(list));
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java b/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java
index 1e6f011..e80fa69 100644
--- a/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java
+++ b/src/main/java/com/huaheng/pc/general/bom/controller/BomHeaderController.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaheng.common.support.Convert;
 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;
@@ -17,6 +18,8 @@ import com.huaheng.pc.general.bom.domain.BomDetail;
 import com.huaheng.pc.general.bom.domain.BomHeader;
 import com.huaheng.pc.general.bom.service.BomDetailService;
 import com.huaheng.pc.general.bom.service.BomHeaderService;
+import com.huaheng.pc.general.material.domain.Material;
+import com.huaheng.pc.general.material.service.MaterialService;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -40,9 +43,13 @@ public class BomHeaderController extends BaseController {
     @Resource
     private BomDetailService bomDetailService;
 
+    @Resource
+    private MaterialService materialService;
+
     @RequiresPermissions("general:bomHeader:view")
     @GetMapping()
-    public String company() {
+    public String bomHeader() {
+        System.out.println("商品管理");
         return prefix + "/bomHeader";
     }
 
@@ -97,6 +104,22 @@ public class BomHeaderController extends BaseController {
     @ResponseBody
     public AjaxResult addSave(@ApiParam(name = "containerType", value = "商品类型", required = true)
                                           BomHeader bomHeader)  {
+
+        LambdaQueryWrapper<Material> lamdba = Wrappers.lambdaQuery();
+        lamdba.eq(Material::getCode, bomHeader.getMaterialCode());
+        Material material = materialService.getOne(lamdba);
+        if ( material == null){
+            return AjaxResult.error("不存在物料编码"+bomHeader.getMaterialCode());
+        } else {
+            bomHeader.setCompanyCode(material.getCompanyCode());
+            bomHeader.setWarehouseCode(material.getWarehouseCode());
+            bomHeader.setMaterialCode(material.getCode());
+            bomHeader.setMaterialName(material.getName());
+            bomHeader.setMaterialSpec(material.getSpec());
+            bomHeader.setMaterialUnit(material.getUnit());
+            bomHeader.setCreatedBy(ShiroUtils.getLoginName());
+            bomHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
+        }
         return toAjax(bomHeaderService.save(bomHeader));
     }
 
diff --git a/src/main/java/com/huaheng/pc/general/company/service/CompanyService.java b/src/main/java/com/huaheng/pc/general/company/service/CompanyService.java
index b169ff6..4af1fd0 100644
--- a/src/main/java/com/huaheng/pc/general/company/service/CompanyService.java
+++ b/src/main/java/com/huaheng/pc/general/company/service/CompanyService.java
@@ -11,7 +11,7 @@ public interface CompanyService extends IService<Company>{
 
     public List<Company> selectCompanyByCurrentUserId();
 
-    public List<Company> selectCompanyByUserId();
+    public List<Company> selectCompanyByUserId(Integer id);
 
     public AjaxResult addCompany(Company company);
 
diff --git a/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java b/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java
index c5f398d..e61447d 100644
--- a/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/general/company/service/CompanyServiceImpl.java
@@ -39,9 +39,9 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
      * @return
      */
     @Override
-    public List<Company> selectCompanyByUserId() {
+    public List<Company> selectCompanyByUserId(Integer id) {
         UserCompany condition = new UserCompany();
-        condition.setUserId(ShiroUtils.getUserId());
+        condition.setUserId(id);
         List<UserCompany> userCompanys = userCompanyMapper.selectListEntityByEqual(condition);
         Company company = new Company();
         company.setWarehouseCode(ShiroUtils.getWarehouseCode());
diff --git a/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java b/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java
index 32b3c4a..321a506 100644
--- a/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/general/location/service/LocationServiceImpl.java
@@ -51,7 +51,7 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i
             throw new ServiceException("库区编码不存在");
         }
 
-
+        String prefix = location.getLocationType().substring(1);
         List<Location> locations = new ArrayList<>();
         for (int i=1; i<=location.getIRow().intValue(); i++)  {
             for (int j=1; j<=location.getIColumn().intValue(); j++)  {
@@ -70,7 +70,7 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i
                         param.setCreatedBy(ShiroUtils.getLoginName());
                         param.setLastUpdatedBy(ShiroUtils.getLoginName());
                         String code = MessageFormat.format("{0}{1}-{2}-{3}-{4}",
-                                location.getLocationType(),
+                                prefix,
                                 String.format("%02d", i),
                                 String.format("%02d", j),
                                 String.format("%02d", k),
diff --git a/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java b/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java
index 86a6215..4ec966b 100644
--- a/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java
+++ b/src/main/java/com/huaheng/pc/general/material/controller/MaterialController.java
@@ -18,6 +18,8 @@ import com.huaheng.pc.general.location.domain.Location;
 import com.huaheng.pc.general.location.service.LocationService;
 import com.huaheng.pc.general.material.domain.Material;
 import com.huaheng.pc.general.material.service.MaterialService;
+import com.huaheng.pc.general.materialUnit.domain.MaterialUnit;
+import com.huaheng.pc.general.materialUnit.service.MaterialUnitService;
 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -41,6 +43,9 @@ public class MaterialController extends BaseController {
     @Resource
     private MaterialService materialService;
 
+    @Resource
+    private MaterialUnitService materialUnitService;
+
     @RequiresPermissions("general:material:view")
     @GetMapping()
     public String material() {
@@ -74,7 +79,7 @@ public class MaterialController extends BaseController {
                 .like(StringUtils.isNotEmpty(material.getSpec()), Material::getSpec, material.getSpec())
                 .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode())
                 .in(Material::getCompanyCode, ShiroUtils.getCompanyCodeList())
-                .ne(Material::getDeleted, false);
+                .eq(Material::getDeleted, false);
 
         if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
             /*使用分页查询*/
@@ -113,6 +118,22 @@ public class MaterialController extends BaseController {
         if (map != null) {
             return AjaxResult.error("物料已经存在");
         }
+        LambdaQueryWrapper<MaterialUnit> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(MaterialUnit::getMaterialCode, material.getCode())
+                .eq(MaterialUnit::getUnit, material.getUnit());
+        if (materialUnitService.getOne(lambdaQueryWrapper) == null){
+            MaterialUnit materialUnit = new MaterialUnit();
+            materialUnit.setMaterialCode(material.getCode());
+            materialUnit.setMaterialName(material.getName());
+            materialUnit.setMaterialSpec(material.getSpec());
+            materialUnit.setCompanyCode(material.getCompanyCode());
+            materialUnit.setWarehouseCode(ShiroUtils.getWarehouseCode());
+            materialUnit.setUnit(material.getUnit());
+            materialUnit.setCreatedBy(ShiroUtils.getLoginName());
+            materialUnit.setLastUpdatedBy(ShiroUtils.getLoginName());
+
+            materialUnitService.save(materialUnit);
+        }
 
         material.setWarehouseCode(ShiroUtils.getWarehouseCode());
         material.setCreatedBy(ShiroUtils.getLoginName());
diff --git a/src/main/java/com/huaheng/pc/general/warehouse/domain/Warehouse.java b/src/main/java/com/huaheng/pc/general/warehouse/domain/Warehouse.java
index ab346da..a18ab3c 100644
--- a/src/main/java/com/huaheng/pc/general/warehouse/domain/Warehouse.java
+++ b/src/main/java/com/huaheng/pc/general/warehouse/domain/Warehouse.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -84,6 +85,15 @@ public class Warehouse implements Serializable {
     @TableField(value = "email")
     private String email;
 
+    public boolean isFlag() {
+        return flag;
+    }
+
+    public Warehouse setFlag(boolean flag) {
+        this.flag = flag;
+        return this;
+    }
+
     /**
      * 上位系统url地址
      */
@@ -189,6 +199,10 @@ public class Warehouse implements Serializable {
     @TableField(value = "deleted")
     private Boolean deleted;
 
+    /** 用户是否存在此仓库标识 默认不存在 */
+    @TableField(exist = false)
+    private boolean flag = false;
+
     private static final long serialVersionUID = 1L;
 
     public static final String COL_ADDRESS1 = "address1";
diff --git a/src/main/java/com/huaheng/pc/general/warehouse/mapper/WarehouseMapper.java b/src/main/java/com/huaheng/pc/general/warehouse/mapper/WarehouseMapper.java
index e3224cc..7d584af 100644
--- a/src/main/java/com/huaheng/pc/general/warehouse/mapper/WarehouseMapper.java
+++ b/src/main/java/com/huaheng/pc/general/warehouse/mapper/WarehouseMapper.java
@@ -2,6 +2,16 @@ package com.huaheng.pc.general.warehouse.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.general.warehouse.domain.Warehouse;
+import com.huaheng.pc.system.role.domain.Role;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
+
+import java.util.List;
 
 public interface WarehouseMapper extends BaseMapper<Warehouse> {
+
+    public List<SysUserWarehouse> wareHouseAll();
+
+    public List<Warehouse> selectWarehouseByUserId(Integer userId);
+
+    public List<Warehouse> selectWarehouseAll();
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseService.java b/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseService.java
index d377193..08c0538 100644
--- a/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseService.java
+++ b/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseService.java
@@ -2,6 +2,7 @@ package com.huaheng.pc.general.warehouse.service;
 
 import com.huaheng.pc.general.warehouse.domain.Warehouse;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
 
 import java.util.List;
 import java.util.Map;
@@ -9,4 +10,9 @@ import java.util.Map;
 public interface WarehouseService extends IService<Warehouse>{
 
     List<Map<String,Object>> getWarehouseList(Integer id);
+
+    public List<Warehouse> selectWarehouseByUserId(Integer userId);
+
+
+
 }
diff --git a/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseServiceImpl.java b/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseServiceImpl.java
index ebe671a..d3bb5fe 100644
--- a/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/general/warehouse/service/WarehouseServiceImpl.java
@@ -2,8 +2,11 @@ package com.huaheng.pc.general.warehouse.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.general.warehouseCopany.domain.WarehouseCompany;
 import com.huaheng.pc.general.warehouseCopany.service.WarehouseCompanyService;
+import com.huaheng.pc.system.role.domain.Role;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.general.warehouse.mapper.WarehouseMapper;
@@ -47,4 +50,24 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         }
         return warehouseList;
     }
+
+    @Override
+    public List<Warehouse> selectWarehouseByUserId(Integer userId)
+    {
+        List<Warehouse> userWarhouses = warehouseMapper.selectWarehouseByUserId(userId);
+        List<Warehouse> warehouses = warehouseMapper.selectWarehouseAll();
+        for (Warehouse warehouse : warehouses)
+        {
+            for (Warehouse  userWarehouse: userWarhouses)
+            {
+                if (warehouse.getCode().equals(userWarehouse.getCode()))
+                {
+                    warehouse.setFlag(true);
+                    break;
+                }
+            }
+        }
+        return warehouses;
+    }
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/user/controller/UserController.java b/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
index 0e4354f..43c125d 100644
--- a/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
+++ b/src/main/java/com/huaheng/pc/system/user/controller/UserController.java
@@ -2,11 +2,22 @@ package com.huaheng.pc.system.user.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.common.constant.Constants;
+import com.huaheng.common.utils.MessageUtils;
+import com.huaheng.common.utils.SystemLogUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.shiro.web.filter.LogoutFilter;
 import com.huaheng.pc.general.company.domain.Company;
 import com.huaheng.pc.general.company.service.CompanyService;
+import com.huaheng.pc.general.warehouse.domain.Warehouse;
+import com.huaheng.pc.general.warehouse.mapper.WarehouseMapper;
+import com.huaheng.pc.general.warehouse.service.WarehouseService;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.session.SessionException;
+import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.web.servlet.server.Session;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
@@ -25,7 +36,14 @@ import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.pc.system.role.service.IRoleService;
 import com.huaheng.pc.system.user.domain.User;
 import com.huaheng.pc.system.user.service.IUserService;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import java.util.List;
+import java.util.Map;
+
+import static javax.security.auth.Subject.getSubject;
 
 /**
  * 用户信息
@@ -47,6 +65,12 @@ public class UserController extends BaseController
     @Autowired
     private CompanyService companyService;
 
+    @Autowired
+    private WarehouseService warehouseService;
+
+    @Resource
+    private WarehouseMapper warehouseMapper;
+
     @RequiresPermissions("system:user:view")
     @GetMapping()
     public String user()
@@ -94,6 +118,13 @@ public class UserController extends BaseController
         mmap.put("roles", roleService.selectRoleAll());
         LambdaQueryWrapper<Company> lambdaQueryWrapper = Wrappers.lambdaQuery(company);
         mmap.put("companys", companyService.list(lambdaQueryWrapper));
+        LambdaQueryWrapper<Warehouse> warehouse = Wrappers.lambdaQuery();
+        warehouse.select(Warehouse::getCode,Warehouse::getName,Warehouse::getEnable);
+        List<Map<String, Object>> warehouseList = warehouseService.listMaps(warehouse);
+        for (Map<String, Object> item : warehouseList){
+            item.put("value",item.get("code").toString());
+        }
+        mmap.put("warehouseList",warehouseList);
         return prefix + "/add";
     }
 
@@ -123,7 +154,8 @@ public class UserController extends BaseController
     {
         mmap.put("user", userService.selectUserById(id));
         mmap.put("roles", roleService.selectRolesByUserId(id));
-        mmap.put("companys", companyService.selectCompanyByUserId());
+        mmap.put("companys", companyService.selectCompanyByUserId(id));
+        mmap.put("warehouses", warehouseService.selectWarehouseByUserId(id));
         return prefix + "/edit";
     }
 
@@ -137,11 +169,16 @@ public class UserController extends BaseController
     @ResponseBody
     public AjaxResult editSave(User user)
     {
+
         if (StringUtils.isNotNull(user.getId()) && User.isAdmin(user.getId()))
         {
             return error("不允许修改超级管理员用户");
         }
         AjaxResult ajaxResult = toAjax(userService.updateUser(user));
+
+        if (ShiroUtils.getLoginName().equals(user.getUserName()))
+            ShiroUtils.logout();
+
         return ajaxResult;
     }
 
diff --git a/src/main/java/com/huaheng/pc/system/userWarehouse/domain/SysUserWarehouse.java b/src/main/java/com/huaheng/pc/system/user/domain/SysUserWarehouse.java
index a15f21f..ecbf0e6 100644
--- a/src/main/java/com/huaheng/pc/system/userWarehouse/domain/SysUserWarehouse.java
+++ b/src/main/java/com/huaheng/pc/system/user/domain/SysUserWarehouse.java
@@ -1,4 +1,4 @@
-package com.huaheng.pc.system.userWarehouse.domain;
+package com.huaheng.pc.system.user.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -6,9 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
 import lombok.Data;
 
+import java.io.Serializable;
+
 @ApiModel(value="com.huaheng.pc.system.userWarehousel.domain.SysUserWarehouse")
 @Data
 @TableName(value = "sys_user_warehouse")
diff --git a/src/main/java/com/huaheng/pc/system/user/domain/User.java b/src/main/java/com/huaheng/pc/system/user/domain/User.java
index 4dd9fe8..2e79e3f 100644
--- a/src/main/java/com/huaheng/pc/system/user/domain/User.java
+++ b/src/main/java/com/huaheng/pc/system/user/domain/User.java
@@ -112,6 +112,9 @@ public class User
     /** 货主编码列表 */
     private List<String> companyCodeList;
 
+    /** 仓库编码列表 */
+    private List<String> warehouseCodeList;
+
     /** 搜索值 */
     private String searchValue;
 
diff --git a/src/main/java/com/huaheng/pc/system/user/mapper/SysUserWarehouseMapper.java b/src/main/java/com/huaheng/pc/system/user/mapper/SysUserWarehouseMapper.java
new file mode 100644
index 0000000..0569c25
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/system/user/mapper/SysUserWarehouseMapper.java
@@ -0,0 +1,16 @@
+package com.huaheng.pc.system.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface SysUserWarehouseMapper extends BaseMapper<SysUserWarehouse> {
+
+    public int batchUserWarehouse(@Param("userWarehouseList") List<SysUserWarehouse> userWarehouseList);
+
+    public int deleteUserWarehouseByUserId(Integer userId);
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/system/user/mapper/UserMapper.java b/src/main/java/com/huaheng/pc/system/user/mapper/UserMapper.java
index 4be2e3e..3be853e 100644
--- a/src/main/java/com/huaheng/pc/system/user/mapper/UserMapper.java
+++ b/src/main/java/com/huaheng/pc/system/user/mapper/UserMapper.java
@@ -132,6 +132,14 @@ public interface UserMapper
      */
     public List<Map<String, Object>> getWarehouseByUserCode(@Param("loginName")String loginName);
 
+
+    /**
+     * 根据用户编码查询该用户所有仓库
+     * @param loginName
+     * @return
+     */
+    public List<Map<String, Object>> getWarehouseByUserName(@Param("loginName")String loginName);
+
     /**
      * 更新用户维护日期
      * @param date
diff --git a/src/main/java/com/huaheng/pc/system/user/service/IUserService.java b/src/main/java/com/huaheng/pc/system/user/service/IUserService.java
index ea3b9f3..6607160 100644
--- a/src/main/java/com/huaheng/pc/system/user/service/IUserService.java
+++ b/src/main/java/com/huaheng/pc/system/user/service/IUserService.java
@@ -2,8 +2,10 @@ package com.huaheng.pc.system.user.service;
 
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.system.user.domain.ClientType;
+import com.huaheng.pc.system.user.domain.SysUserWarehouse;
 import com.huaheng.pc.system.user.domain.User;
 import io.swagger.models.auth.In;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
 import java.util.List;
@@ -195,6 +197,8 @@ public interface IUserService
      * @return
      */
     public User selectmen(String loginName);
+
+    public int batchUserWarehouse(@Param("userWarehouseList") List<SysUserWarehouse> userWarehouseList);
 }
 
 
diff --git a/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java b/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java
index 1efe7d6..99d1863 100644
--- a/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java
@@ -13,8 +13,8 @@ import com.huaheng.pc.general.company.mapper.CompanyMapper;
 import com.huaheng.pc.general.company.service.CompanyService;
 import com.huaheng.pc.general.warehouse.service.WarehouseService;
 import com.huaheng.pc.general.warehouse.domain.Warehouse;
-import com.huaheng.pc.system.user.domain.ClientType;
-import com.huaheng.pc.system.user.domain.UserCompany;
+import com.huaheng.pc.system.user.domain.*;
+import com.huaheng.pc.system.user.mapper.SysUserWarehouseMapper;
 import com.huaheng.pc.system.user.mapper.UserCompanyMapper;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.AuthenticationException;
@@ -29,8 +29,6 @@ import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.shiro.service.PasswordService;
 import com.huaheng.pc.system.role.domain.Role;
 import com.huaheng.pc.system.role.mapper.RoleMapper;
-import com.huaheng.pc.system.user.domain.User;
-import com.huaheng.pc.system.user.domain.UserRole;
 import com.huaheng.pc.system.user.mapper.UserMapper;
 import com.huaheng.pc.system.user.mapper.UserRoleMapper;
 
@@ -68,11 +66,14 @@ public class UserServiceImpl implements IUserService
     @Resource
     private WarehouseService warehouseService;
 
+    @Resource
+    private SysUserWarehouseMapper sysUserWarehouseMapper;
+
     /**
      *  登陆验证
      * @param username  用户名
      * @param password  密  码
-     * @param warehouseId  仓库id
+//     * @param warehouseId  仓库id
      * @param warehouseCode  仓库编码
      * @return
      */
@@ -262,6 +263,8 @@ public class UserServiceImpl implements IUserService
         insertUserCompany(user);
         // 新增用户与角色管理
         insertUserRole(user);
+        // 新增用户与仓库管理
+        insertUserWarehouse(user);
         return rows;
     }
 
@@ -284,6 +287,11 @@ public class UserServiceImpl implements IUserService
         userCompanyMapper.deleteUserCompanyByUserId(userId);
         // 新增用户与货主管理
         insertUserCompany(user);
+        // 删除用户与仓库关联
+        sysUserWarehouseMapper.deleteUserWarehouseByUserId(userId);
+        // 新增用户与仓库管理
+        insertUserWarehouse(user);
+
         return userMapper.updateUser(user);
     }
 
@@ -335,6 +343,29 @@ public class UserServiceImpl implements IUserService
         }
     }
 
+
+    /**
+     * 新增用户仓库信息
+     *
+     * @param user 用户对象
+     */
+    public void insertUserWarehouse(User user)
+    {
+        // 新增用户与仓库管理
+        List<SysUserWarehouse> list = new ArrayList<SysUserWarehouse>();
+        if (user.getWarehouseCodeList() != null) {
+            for (String warehouseCode : user.getWarehouseCodeList()) {
+                SysUserWarehouse warehouse = new SysUserWarehouse();
+                warehouse.setUserId(user.getId());
+                warehouse.setWarehouseCode(warehouseCode);
+                list.add(warehouse);
+            }
+            if (list.size() > 0) {
+                sysUserWarehouseMapper.batchUserWarehouse(list);
+            }
+        }
+    }
+
     /**
      * 新增用户货主信息
      * 
@@ -469,7 +500,11 @@ public class UserServiceImpl implements IUserService
         }
         else
         {
-            list =  userMapper.getWarehouseByUserCode(loginName);
+            list =  userMapper.getWarehouseByUserName(loginName);
+            if (list.size()==1)
+                list=userMapper.getWarehouseByUserCode(loginName);
+
+
         }
         return  list;
     }
@@ -552,4 +587,9 @@ public class UserServiceImpl implements IUserService
         return user;
     }
 
+    @Override
+    public int batchUserWarehouse(List<SysUserWarehouse> userWarehouseList) {
+        return sysUserWarehouseMapper.batchUserWarehouse(userWarehouseList);
+    }
+
 }
diff --git a/src/main/java/com/huaheng/pc/system/userWarehouse/mapper/SysUserWarehouseMapper.java b/src/main/java/com/huaheng/pc/system/userWarehouse/mapper/SysUserWarehouseMapper.java
deleted file mode 100644
index 74a1259..0000000
--- a/src/main/java/com/huaheng/pc/system/userWarehouse/mapper/SysUserWarehouseMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.huaheng.pc.system.userWarehouse.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.huaheng.pc.system.userWarehouse.domain.SysUserWarehouse;
-
-public interface SysUserWarehouseMapper extends BaseMapper<SysUserWarehouse> {
-}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseService.java b/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseService.java
deleted file mode 100644
index 734afcc..0000000
--- a/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.huaheng.pc.system.userWarehouse.service;
-
-import com.huaheng.pc.system.userWarehouse.domain.SysUserWarehouse;
-import com.baomidou.mybatisplus.extension.service.IService;
-public interface SysUserWarehouseService extends IService<SysUserWarehouse>{
-
-
-}
diff --git a/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseServiceImpl.java b/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseServiceImpl.java
deleted file mode 100644
index bf91504..0000000
--- a/src/main/java/com/huaheng/pc/system/userWarehouse/service/SysUserWarehouseServiceImpl.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.huaheng.pc.system.userWarehouse.service;
-
-import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.huaheng.pc.system.userWarehouse.mapper.SysUserWarehouseMapper;
-import com.huaheng.pc.system.userWarehouse.domain.SysUserWarehouse;
-
-@Service
-public class SysUserWarehouseServiceImpl extends ServiceImpl<SysUserWarehouseMapper, SysUserWarehouse> implements SysUserWarehouseService{
-
-}
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
new file mode 100644
index 0000000..32d5a85
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java
@@ -0,0 +1,510 @@
+package com.huaheng.pc.task.taskDetail.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+@ApiModel(value="com.huaheng.pc.task.taskDetail.domain.TaskDetail")
+@Data
+@TableName(value = "task_detail")
+public class TaskDetail implements Serializable {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value="ID")
+    private Integer id;
+
+    /**
+     * 任务头内部号
+     */
+    @TableField(value = "taskId")
+    @ApiModelProperty(value="任务头内部号")
+    private Integer taskId;
+
+    /**
+     * 任务号
+     */
+    @TableField(value = "taskCode")
+    @ApiModelProperty(value="任务号")
+    private String taskCode;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "taskType")
+    @ApiModelProperty(value="任务类型")
+    private String taskType;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "internalTaskType")
+    @ApiModelProperty(value="任务类型")
+    private String internalTaskType;
+
+    /**
+     * 仓库
+     */
+    @TableField(value = "warehouseCode")
+    @ApiModelProperty(value="仓库")
+    private String warehouseCode;
+
+    /**
+     * 货主
+     */
+    @TableField(value = "companyCode")
+    @ApiModelProperty(value="货主")
+    private String companyCode;
+
+    /**
+     * 物料
+     */
+    @TableField(value = "materialCode")
+    @ApiModelProperty(value="物料")
+    private String materialCode;
+
+    /**
+     * 物料明细
+     */
+    @TableField(value = "materialName")
+    @ApiModelProperty(value="物料明细")
+    private String materialName;
+
+    /**
+     * 物料
+     */
+    @TableField(value = "materialSpec")
+    @ApiModelProperty(value="物料")
+    private String materialSpec;
+
+    /**
+     * 物料明细
+     */
+    @TableField(value = "materialUnit")
+    @ApiModelProperty(value="物料明细")
+    private String materialUnit;
+
+    /**
+     * 数量
+     */
+    @TableField(value = "qty")
+    @ApiModelProperty(value="数量")
+    private Integer qty;
+
+    /**
+     * 从货位
+     */
+    @TableField(value = "fromLocation")
+    @ApiModelProperty(value="从货位")
+    private String fromLocation;
+
+    /**
+     * 到货位
+     */
+    @TableField(value = "toLocation")
+    @ApiModelProperty(value="到货位")
+    private String toLocation;
+
+    /**
+     * 容器编码
+     */
+    @TableField(value = "containerCode")
+    @ApiModelProperty(value="容器编码")
+    private String containerCode;
+
+    /**
+     * 从区域
+     */
+    @TableField(value = "fromZone")
+    @ApiModelProperty(value="从区域")
+    private String fromZone;
+
+    /**
+     * 到区域
+     */
+    @TableField(value = "toZone")
+    @ApiModelProperty(value="到区域")
+    private String toZone;
+
+    /**
+     * 属性号
+     */
+    @TableField(value = "attributeId")
+    @ApiModelProperty(value="属性号")
+    private Integer attributeId;
+
+    /**
+     * 状态
+     */
+    @TableField(value = "enable")
+    @ApiModelProperty(value="状态")
+    private Integer enable;
+
+    /**
+     * 参考单号
+     */
+    @TableField(value = "referenceCode")
+    @ApiModelProperty(value="参考单号")
+    private String referenceCode;
+
+    /**
+     * 参考内部号
+     */
+    @TableField(value = "referenceId")
+    @ApiModelProperty(value="参考内部号")
+    private Integer referenceId;
+
+    /**
+     * 参考内部行号
+     */
+    @TableField(value = "referenceLineId")
+    @ApiModelProperty(value="参考内部行号")
+    private Integer referenceLineId;
+
+    /**
+     * 指派用户
+     */
+    @TableField(value = "assignedUser")
+    @ApiModelProperty(value="指派用户")
+    private String assignedUser;
+
+    /**
+     * 属性1
+     */
+    @TableField(value = "attribute1")
+    @ApiModelProperty(value="属性1")
+    private String attribute1;
+
+    /**
+     * 属性2
+     */
+    @TableField(value = "attribute2")
+    @ApiModelProperty(value="属性2")
+    private String attribute2;
+
+    /**
+     * 属性3
+     */
+    @TableField(value = "attribute3")
+    @ApiModelProperty(value="属性3")
+    private String attribute3;
+
+    /**
+     * 属性4
+     */
+    @TableField(value = "attribute4")
+    @ApiModelProperty(value="属性4")
+    private String attribute4;
+
+    /**
+     * 批次
+     */
+    @TableField(value = "batch")
+    @ApiModelProperty(value="批次")
+    private String batch;
+
+    /**
+     * 批号
+     */
+    @TableField(value = "lot")
+    @ApiModelProperty(value="批号")
+    private String lot;
+
+    /**
+     * 项目号
+     */
+    @TableField(value = "projectNo")
+    @ApiModelProperty(value="项目号")
+    private String projectNo;
+
+    /**
+     * 质检
+     */
+    @TableField(value = "qcCheck")
+    @ApiModelProperty(value="质检")
+    private String qcCheck;
+
+    /**
+     * 生产日期
+     */
+    @TableField(value = "manufactureDate")
+    @ApiModelProperty(value="生产日期")
+    private Date manufactureDate;
+
+    /**
+     * 失效日期
+     */
+    @TableField(value = "expirationDate")
+    @ApiModelProperty(value="失效日期")
+    private Date expirationDate;
+
+    /**
+     * 入库日期
+     */
+    @TableField(value = "agingDate")
+    @ApiModelProperty(value="入库日期")
+    private Date agingDate;
+
+    /**
+     * 库存状态
+     */
+    @TableField(value = "inventorySts")
+    @ApiModelProperty(value="库存状态")
+    private String inventorySts;
+
+    /**
+     * 波次号
+     */
+    @TableField(value = "waveId")
+    @ApiModelProperty(value="波次号")
+    private Integer waveId;
+
+    /**
+     * 分配的库存ID
+     */
+    @TableField(value = "fromInventoryId")
+    @ApiModelProperty(value="分配的库存ID")
+    private Integer fromInventoryId;
+
+    @TableField(value = "toInventoryId")
+    @ApiModelProperty(value="null")
+    private Integer toInventoryId;
+
+    /**
+     * 确认用户
+     */
+    @TableField(value = "confirmedBy")
+    @ApiModelProperty(value="确认用户")
+    private String confirmedBy;
+
+    /**
+     * 组号
+     */
+    @TableField(value = "groupNum")
+    @ApiModelProperty(value="组号")
+    private Integer groupNum;
+
+    /**
+     * 序号
+     */
+    @TableField(value = "groupIndex")
+    @ApiModelProperty(value="序号")
+    private Integer groupIndex;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "created")
+    @ApiModelProperty(value="创建时间")
+    private Date created;
+
+    /**
+     * 创建用户
+     */
+    @TableField(value = "createdBy")
+    @ApiModelProperty(value="创建用户")
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "lastUpdated")
+    @ApiModelProperty(value="创建时间")
+    private Date lastUpdated;
+
+    /**
+     * 更新用户
+     */
+    @TableField(value = "lastUpdatedBy")
+    @ApiModelProperty(value="更新用户")
+    private String lastUpdatedBy;
+
+    /**
+     * 数据版本
+     */
+    @TableField(value = "version")
+    @ApiModelProperty(value="数据版本")
+    private Integer version;
+
+    /**
+     * kitFlag标志 Y/N AGV专用
+     */
+    @TableField(value = "userDef1")
+    @ApiModelProperty(value="kitFlag标志 Y/N AGV专用")
+    private String userDef1;
+
+    /**
+     * unit 单位 AGV专用
+     */
+    @TableField(value = "userDef2")
+    @ApiModelProperty(value="unit 单位 AGV专用")
+    private String userDef2;
+
+    /**
+     * 自定义字段3
+     */
+    @TableField(value = "userDef3")
+    @ApiModelProperty(value="自定义字段3")
+    private String userDef3;
+
+    /**
+     * 自定义字段4
+     */
+    @TableField(value = "userDef4")
+    @ApiModelProperty(value="自定义字段4")
+    private String userDef4;
+
+    /**
+     * 自定义字段5
+     */
+    @TableField(value = "userDef5")
+    @ApiModelProperty(value="自定义字段5")
+    private String userDef5;
+
+    /**
+     * 自定义字段6
+     */
+    @TableField(value = "userDef6")
+    @ApiModelProperty(value="自定义字段6")
+    private String userDef6;
+
+    /**
+     * 自定义字段7
+     */
+    @TableField(value = "userDef7")
+    @ApiModelProperty(value="自定义字段7")
+    private String userDef7;
+
+    /**
+     * 自定义字段8
+     */
+    @TableField(value = "userDef8")
+    @ApiModelProperty(value="自定义字段8")
+    private String userDef8;
+
+    /**
+     * 处理标记
+     */
+    @TableField(value = "processStamp")
+    @ApiModelProperty(value="处理标记")
+    private String processStamp;
+
+    private static final long serialVersionUID = 1L;
+
+    public static final String COL_ID = "id";
+
+    public static final String COL_TASKID = "taskId";
+
+    public static final String COL_TASKCODE = "taskCode";
+
+    public static final String COL_TASKTYPE = "taskType";
+
+    public static final String COL_INTERNALTASKTYPE = "internalTaskType";
+
+    public static final String COL_WAREHOUSECODE = "warehouseCode";
+
+    public static final String COL_COMPANYCODE = "companyCode";
+
+    public static final String COL_MATERIALCODE = "materialCode";
+
+    public static final String COL_MATERIALNAME = "materialName";
+
+    public static final String COL_MATERIALSPEC = "materialSpec";
+
+    public static final String COL_MATERIALUNIT = "materialUnit";
+
+    public static final String COL_QTY = "qty";
+
+    public static final String COL_FROMLOCATION = "fromLocation";
+
+    public static final String COL_TOLOCATION = "toLocation";
+
+    public static final String COL_CONTAINERCODE = "containerCode";
+
+    public static final String COL_FROMZONE = "fromZone";
+
+    public static final String COL_TOZONE = "toZone";
+
+    public static final String COL_ATTRIBUTEID = "attributeId";
+
+    public static final String COL_ENABLE = "enable";
+
+    public static final String COL_REFERENCECODE = "referenceCode";
+
+    public static final String COL_REFERENCEID = "referenceId";
+
+    public static final String COL_REFERENCELINEID = "referenceLineId";
+
+    public static final String COL_ASSIGNEDUSER = "assignedUser";
+
+    public static final String COL_ATTRIBUTE1 = "attribute1";
+
+    public static final String COL_ATTRIBUTE2 = "attribute2";
+
+    public static final String COL_ATTRIBUTE3 = "attribute3";
+
+    public static final String COL_ATTRIBUTE4 = "attribute4";
+
+    public static final String COL_BATCH = "batch";
+
+    public static final String COL_LOT = "lot";
+
+    public static final String COL_PROJECTNO = "projectNo";
+
+    public static final String COL_QCCHECK = "qcCheck";
+
+    public static final String COL_MANUFACTUREDATE = "manufactureDate";
+
+    public static final String COL_EXPIRATIONDATE = "expirationDate";
+
+    public static final String COL_AGINGDATE = "agingDate";
+
+    public static final String COL_INVENTORYSTS = "inventorySts";
+
+    public static final String COL_WAVEID = "waveId";
+
+    public static final String COL_FROMINVENTORYID = "fromInventoryId";
+
+    public static final String COL_TOINVENTORYID = "toInventoryId";
+
+    public static final String COL_CONFIRMEDBY = "confirmedBy";
+
+    public static final String COL_GROUPNUM = "groupNum";
+
+    public static final String COL_GROUPINDEX = "groupIndex";
+
+    public static final String COL_CREATED = "created";
+
+    public static final String COL_CREATEDBY = "createdBy";
+
+    public static final String COL_LASTUPDATED = "lastUpdated";
+
+    public static final String COL_LASTUPDATEDBY = "lastUpdatedBy";
+
+    public static final String COL_VERSION = "version";
+
+    public static final String COL_USERDEF1 = "userDef1";
+
+    public static final String COL_USERDEF2 = "userDef2";
+
+    public static final String COL_USERDEF3 = "userDef3";
+
+    public static final String COL_USERDEF4 = "userDef4";
+
+    public static final String COL_USERDEF5 = "userDef5";
+
+    public static final String COL_USERDEF6 = "userDef6";
+
+    public static final String COL_USERDEF7 = "userDef7";
+
+    public static final String COL_USERDEF8 = "userDef8";
+
+    public static final String COL_PROCESSSTAMP = "processStamp";
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskDetail/mapper/TaskDetailMapper.java b/src/main/java/com/huaheng/pc/task/taskDetail/mapper/TaskDetailMapper.java
new file mode 100644
index 0000000..87e5a0e
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskDetail/mapper/TaskDetailMapper.java
@@ -0,0 +1,7 @@
+package com.huaheng.pc.task.taskDetail.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+
+public interface TaskDetailMapper extends BaseMapper<TaskDetail> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailService.java b/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailService.java
new file mode 100644
index 0000000..f5ac425
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailService.java
@@ -0,0 +1,8 @@
+package com.huaheng.pc.task.taskDetail.service;
+
+import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+public interface TaskDetailService extends IService<TaskDetail>{
+
+
+}
diff --git a/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailServiceImpl.java
new file mode 100644
index 0000000..2b2343f
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailServiceImpl.java
@@ -0,0 +1,13 @@
+package com.huaheng.pc.task.taskDetail.service;
+
+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.task.taskDetail.mapper.TaskDetailMapper;
+import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
+@Service
+public class TaskDetailServiceImpl extends ServiceImpl<TaskDetailMapper, TaskDetail> implements TaskDetailService{
+
+}
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
new file mode 100644
index 0000000..88c539b
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
@@ -0,0 +1,405 @@
+package com.huaheng.pc.task.taskHeader.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+@ApiModel(value="com.huaheng.pc.task.taskHeader.domain.TaskHeader")
+@Data
+@TableName(value = "task_header")
+public class TaskHeader implements Serializable {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value="ID")
+    private Integer id;
+
+    /**
+     * 任务
+     */
+    @TableField(value = "code")
+    @ApiModelProperty(value="任务")
+    private String code;
+
+    /**
+     * 仓库
+     */
+    @TableField(value = "warehouseCode")
+    @ApiModelProperty(value="仓库")
+    private String warehouseCode;
+
+    /**
+     * 货主
+     */
+    @TableField(value = "companyCode")
+    @ApiModelProperty(value="货主")
+    private String companyCode;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "taskType")
+    @ApiModelProperty(value="任务类型")
+    private String taskType;
+
+    /**
+     * 内部类型
+     */
+    @TableField(value = "internalTaskType")
+    @ApiModelProperty(value="内部类型")
+    private String internalTaskType;
+
+    /**
+     * 参考单内部号
+     */
+    @TableField(value = "referenceId")
+    @ApiModelProperty(value="参考单内部号")
+    private Integer referenceId;
+
+    /**
+     * 参考单号
+     */
+    @TableField(value = "referenceCode")
+    @ApiModelProperty(value="参考单号")
+    private String referenceCode;
+
+    /**
+     * 分配用户
+     */
+    @TableField(value = "assignedUser")
+    @ApiModelProperty(value="分配用户")
+    private String assignedUser;
+
+    /**
+     * 确认用户
+     */
+    @TableField(value = "confirmedBy")
+    @ApiModelProperty(value="确认用户")
+    private String confirmedBy;
+
+    /**
+     * 状态
+     */
+    @TableField(value = "enable")
+    @ApiModelProperty(value="状态")
+    private Integer enable;
+
+    /**
+     * 波次号
+     */
+    @TableField(value = "waveId")
+    @ApiModelProperty(value="波次号")
+    private Integer waveId;
+
+    /**
+     * 车号
+     */
+    @TableField(value = "pickingCartCode")
+    @ApiModelProperty(value="车号")
+    private String pickingCartCode;
+
+    /**
+     * 位置号
+     */
+    @TableField(value = "pickingCartPos")
+    @ApiModelProperty(value="位置号")
+    private String pickingCartPos;
+
+    /**
+     * 容器号
+     */
+    @TableField(value = "containerCode")
+    @ApiModelProperty(value="容器号")
+    private String containerCode;
+
+    /**
+     * 开始拣货时间
+     */
+    @TableField(value = "startPickDateTime")
+    @ApiModelProperty(value="开始拣货时间")
+    private Date startPickDateTime;
+
+    /**
+     * 截至拣货时间
+     */
+    @TableField(value = "endPickDateTime")
+    @ApiModelProperty(value="截至拣货时间")
+    private Date endPickDateTime;
+
+    /**
+     * 合流货位
+     */
+    @TableField(value = "rebatchLoc")
+    @ApiModelProperty(value="合流货位")
+    private String rebatchLoc;
+
+    /**
+     * 是否完成合流
+     */
+    @TableField(value = "finishRebatch")
+    @ApiModelProperty(value="是否完成合流")
+    private Integer finishRebatch;
+
+    /**
+     * 合流组唯一号
+     */
+    @TableField(value = "rebatchGroupCode")
+    @ApiModelProperty(value="合流组唯一号")
+    private String rebatchGroupCode;
+
+    /**
+     * 是否允许合流
+     */
+    @TableField(value = "allowRebatch")
+    @ApiModelProperty(value="是否允许合流")
+    private Integer allowRebatch;
+
+    /**
+     * 任务处理类型
+     */
+    @TableField(value = "taskProcessType")
+    @ApiModelProperty(value="任务处理类型")
+    private String taskProcessType;
+
+    /**
+     * 二次分拣工作台
+     */
+    @TableField(value = "rebinBench")
+    @ApiModelProperty(value="二次分拣工作台")
+    private String rebinBench;
+
+    /**
+     * 二次分拣完成
+     */
+    @TableField(value = "rebined")
+    @ApiModelProperty(value="二次分拣完成")
+    private Integer rebined;
+
+    /**
+     * 二次分拣开始时间
+     */
+    @TableField(value = "startRebinDateTime")
+    @ApiModelProperty(value="二次分拣开始时间")
+    private Date startRebinDateTime;
+
+    /**
+     * 二次分拣结束时间
+     */
+    @TableField(value = "endRebinDateTime")
+    @ApiModelProperty(value="二次分拣结束时间")
+    private Date endRebinDateTime;
+
+    /**
+     * 二次分拣人
+     */
+    @TableField(value = "rebinedBy")
+    @ApiModelProperty(value="二次分拣人")
+    private String rebinedBy;
+
+    /**
+     * 异常原因
+     */
+    @TableField(value = "exceptionCode")
+    @ApiModelProperty(value="异常原因")
+    private String exceptionCode;
+
+    /**
+     * 异常处理人
+     */
+    @TableField(value = "exceptionHandledBy")
+    @ApiModelProperty(value="异常处理人")
+    private String exceptionHandledBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "created")
+    @ApiModelProperty(value="创建时间")
+    private Date created;
+
+    /**
+     * 创建用户
+     */
+    @TableField(value = "createdBy")
+    @ApiModelProperty(value="创建用户")
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "lastUpdated")
+    @ApiModelProperty(value="创建时间")
+    private Date lastUpdated;
+
+    /**
+     * 更新用户
+     */
+    @TableField(value = "lastUpdatedBy")
+    @ApiModelProperty(value="更新用户")
+    private String lastUpdatedBy;
+
+    /**
+     * 数据版本
+     */
+    @TableField(value = "version")
+    @ApiModelProperty(value="数据版本")
+    private Integer version;
+
+    /**
+     * AGV区域任务标志 =‘AGV’
+     */
+    @TableField(value = "userDef1")
+    @ApiModelProperty(value="AGV区域任务标志 =‘AGV’")
+    private String userDef1;
+
+    /**
+     * 自定义字段2
+     */
+    @TableField(value = "userDef2")
+    @ApiModelProperty(value="自定义字段2")
+    private String userDef2;
+
+    /**
+     * 同步标志  0:需要同步 10:同步成功   20:同步失败
+     */
+    @TableField(value = "userDef3")
+    @ApiModelProperty(value="同步标志  0:需要同步 10:同步成功   20:同步失败")
+    private String userDef3;
+
+    /**
+     * 自定义字段4
+     */
+    @TableField(value = "userDef4")
+    @ApiModelProperty(value="自定义字段4")
+    private String userDef4;
+
+    /**
+     * 自定义字段5
+     */
+    @TableField(value = "userDef5")
+    @ApiModelProperty(value="自定义字段5")
+    private String userDef5;
+
+    /**
+     * 自定义字段6
+     */
+    @TableField(value = "userDef6")
+    @ApiModelProperty(value="自定义字段6")
+    private String userDef6;
+
+    /**
+     * 自定义字段7
+     */
+    @TableField(value = "userDef7")
+    @ApiModelProperty(value="自定义字段7")
+    private String userDef7;
+
+    /**
+     * 自定义字段8
+     */
+    @TableField(value = "userDef8")
+    @ApiModelProperty(value="自定义字段8")
+    private String userDef8;
+
+    /**
+     * 处理标记
+     */
+    @TableField(value = "processStamp")
+    @ApiModelProperty(value="处理标记")
+    private String processStamp;
+
+    private static final long serialVersionUID = 1L;
+
+    public static final String COL_ID = "id";
+
+    public static final String COL_CODE = "code";
+
+    public static final String COL_WAREHOUSECODE = "warehouseCode";
+
+    public static final String COL_COMPANYCODE = "companyCode";
+
+    public static final String COL_TASKTYPE = "taskType";
+
+    public static final String COL_INTERNALTASKTYPE = "internalTaskType";
+
+    public static final String COL_REFERENCEID = "referenceId";
+
+    public static final String COL_REFERENCECODE = "referenceCode";
+
+    public static final String COL_ASSIGNEDUSER = "assignedUser";
+
+    public static final String COL_CONFIRMEDBY = "confirmedBy";
+
+    public static final String COL_ENABLE = "enable";
+
+    public static final String COL_WAVEID = "waveId";
+
+    public static final String COL_PICKINGCARTCODE = "pickingCartCode";
+
+    public static final String COL_PICKINGCARTPOS = "pickingCartPos";
+
+    public static final String COL_CONTAINERCODE = "containerCode";
+
+    public static final String COL_STARTPICKDATETIME = "startPickDateTime";
+
+    public static final String COL_ENDPICKDATETIME = "endPickDateTime";
+
+    public static final String COL_REBATCHLOC = "rebatchLoc";
+
+    public static final String COL_FINISHREBATCH = "finishRebatch";
+
+    public static final String COL_REBATCHGROUPCODE = "rebatchGroupCode";
+
+    public static final String COL_ALLOWREBATCH = "allowRebatch";
+
+    public static final String COL_TASKPROCESSTYPE = "taskProcessType";
+
+    public static final String COL_REBINBENCH = "rebinBench";
+
+    public static final String COL_REBINED = "rebined";
+
+    public static final String COL_STARTREBINDATETIME = "startRebinDateTime";
+
+    public static final String COL_ENDREBINDATETIME = "endRebinDateTime";
+
+    public static final String COL_REBINEDBY = "rebinedBy";
+
+    public static final String COL_EXCEPTIONCODE = "exceptionCode";
+
+    public static final String COL_EXCEPTIONHANDLEDBY = "exceptionHandledBy";
+
+    public static final String COL_CREATED = "created";
+
+    public static final String COL_CREATEDBY = "createdBy";
+
+    public static final String COL_LASTUPDATED = "lastUpdated";
+
+    public static final String COL_LASTUPDATEDBY = "lastUpdatedBy";
+
+    public static final String COL_VERSION = "version";
+
+    public static final String COL_USERDEF1 = "userDef1";
+
+    public static final String COL_USERDEF2 = "userDef2";
+
+    public static final String COL_USERDEF3 = "userDef3";
+
+    public static final String COL_USERDEF4 = "userDef4";
+
+    public static final String COL_USERDEF5 = "userDef5";
+
+    public static final String COL_USERDEF6 = "userDef6";
+
+    public static final String COL_USERDEF7 = "userDef7";
+
+    public static final String COL_USERDEF8 = "userDef8";
+
+    public static final String COL_PROCESSSTAMP = "processStamp";
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/mapper/TaskHeaderMapper.java b/src/main/java/com/huaheng/pc/task/taskHeader/mapper/TaskHeaderMapper.java
new file mode 100644
index 0000000..72ef249
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/mapper/TaskHeaderMapper.java
@@ -0,0 +1,7 @@
+package com.huaheng.pc.task.taskHeader.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+
+public interface TaskHeaderMapper extends BaseMapper<TaskHeader> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java
new file mode 100644
index 0000000..a0bddf4
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java
@@ -0,0 +1,8 @@
+package com.huaheng.pc.task.taskHeader.service;
+
+import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+import com.baomidou.mybatisplus.extension.service.IService;
+public interface TaskHeaderService extends IService<TaskHeader>{
+
+
+}
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
new file mode 100644
index 0000000..d4c22cc
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -0,0 +1,13 @@
+package com.huaheng.pc.task.taskHeader.service;
+
+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.task.taskHeader.domain.TaskHeader;
+import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper;
+import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
+@Service
+public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHeader> implements TaskHeaderService{
+
+}
diff --git a/src/main/java/com/huaheng/pc/task/taskPreference/domain/TaskPreference.java b/src/main/java/com/huaheng/pc/task/taskPreference/domain/TaskPreference.java
new file mode 100644
index 0000000..5e782f7
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskPreference/domain/TaskPreference.java
@@ -0,0 +1,324 @@
+package com.huaheng.pc.task.taskPreference.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+@ApiModel(value="com.huaheng.pc.task.taskPreference.domain.TaskPreference")
+@Data
+@TableName(value = "task_preference")
+public class TaskPreference implements Serializable {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value="ID")
+    private Integer id;
+
+    /**
+     * 首选项
+     */
+    @TableField(value = "name")
+    @ApiModelProperty(value="首选项")
+    private String name;
+
+    /**
+     * 仓库编码
+     */
+    @TableField(value = "warehouseCode")
+    @ApiModelProperty(value="仓库编码")
+    private String warehouseCode;
+
+    /**
+     * 内部任务类型
+     */
+    @TableField(value = "internalTaskType")
+    @ApiModelProperty(value="内部任务类型")
+    private String internalTaskType;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "taskType")
+    @ApiModelProperty(value="任务类型")
+    private String taskType;
+
+    /**
+     * 区域
+     */
+    @TableField(value = "zoneCode")
+    @ApiModelProperty(value="区域")
+    private String zoneCode;
+
+    /**
+     * 任务开始方式
+     */
+    @TableField(value = "taskInitMethod")
+    @ApiModelProperty(value="任务开始方式")
+    private String taskInitMethod;
+
+    /**
+     * 任务方向方式
+     */
+    @TableField(value = "taskDirectedMethod")
+    @ApiModelProperty(value="任务方向方式")
+    private String taskDirectedMethod;
+
+    /**
+     * 拣货顺序?
+     */
+    @TableField(value = "fromAssignMethod")
+    @ApiModelProperty(value="拣货顺序?")
+    private String fromAssignMethod;
+
+    /**
+     * 上架顺序?
+     */
+    @TableField(value = "toAssignMethod")
+    @ApiModelProperty(value="上架顺序?")
+    private String toAssignMethod;
+
+    /**
+     * PICK方式
+     */
+    @TableField(value = "pickMethod")
+    @ApiModelProperty(value="PICK方式")
+    private String pickMethod;
+
+    /**
+     * 启动RF操作成功消息
+     */
+    @TableField(value = "rfSuccessEnabled")
+    @ApiModelProperty(value="启动RF操作成功消息")
+    private Integer rfSuccessEnabled;
+
+    /**
+     * 消息字段
+     */
+    @TableField(value = "rfSuccessField")
+    @ApiModelProperty(value="消息字段")
+    private String rfSuccessField;
+
+    /**
+     * 消息格式
+     */
+    @TableField(value = "rfSuccessMessage")
+    @ApiModelProperty(value="消息格式")
+    private String rfSuccessMessage;
+
+    /**
+     * 默认LPN作为出库箱号
+     */
+    @TableField(value = "DEFAULTLpAsShipCont")
+    @ApiModelProperty(value="默认LPN作为出库箱号")
+    private Integer DEFAULTLpAsShipCont;
+
+    /**
+     * 多人拣选方式
+     */
+    @TableField(value = "multiPickMethod")
+    @ApiModelProperty(value="多人拣选方式")
+    private Integer multiPickMethod;
+
+    /**
+     * 允许部分拣选
+     */
+    @TableField(value = "allowPartial")
+    @ApiModelProperty(value="允许部分拣选")
+    private String allowPartial;
+
+    /**
+     * 接力货位
+     */
+    @TableField(value = "pickDropLoc")
+    @ApiModelProperty(value="接力货位")
+    private String pickDropLoc;
+
+    /**
+     * 显示物料信息
+     */
+    @TableField(value = "displayItemInfo")
+    @ApiModelProperty(value="显示物料信息")
+    private String displayItemInfo;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "created")
+    @ApiModelProperty(value="创建时间")
+    private Date created;
+
+    /**
+     * 创建用户
+     */
+    @TableField(value = "createdBy")
+    @ApiModelProperty(value="创建用户")
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "lastUpdated")
+    @ApiModelProperty(value="创建时间")
+    private Date lastUpdated;
+
+    /**
+     * 更新用户
+     */
+    @TableField(value = "lastUpdatedBy")
+    @ApiModelProperty(value="更新用户")
+    private String lastUpdatedBy;
+
+    /**
+     * 数据版本
+     */
+    @TableField(value = "version")
+    @ApiModelProperty(value="数据版本")
+    private Integer version;
+
+    /**
+     * 自定义字段1
+     */
+    @TableField(value = "userDef1")
+    @ApiModelProperty(value="自定义字段1")
+    private String userDef1;
+
+    /**
+     * 自定义字段2
+     */
+    @TableField(value = "userDef2")
+    @ApiModelProperty(value="自定义字段2")
+    private String userDef2;
+
+    /**
+     * 自定义字段3
+     */
+    @TableField(value = "userDef3")
+    @ApiModelProperty(value="自定义字段3")
+    private String userDef3;
+
+    /**
+     * 自定义字段4
+     */
+    @TableField(value = "userDef4")
+    @ApiModelProperty(value="自定义字段4")
+    private String userDef4;
+
+    /**
+     * 自定义字段5
+     */
+    @TableField(value = "userDef5")
+    @ApiModelProperty(value="自定义字段5")
+    private String userDef5;
+
+    /**
+     * 自定义字段6
+     */
+    @TableField(value = "userDef6")
+    @ApiModelProperty(value="自定义字段6")
+    private String userDef6;
+
+    /**
+     * 自定义字段7
+     */
+    @TableField(value = "userDef7")
+    @ApiModelProperty(value="自定义字段7")
+    private String userDef7;
+
+    /**
+     * 自定义字段8
+     */
+    @TableField(value = "userDef8")
+    @ApiModelProperty(value="自定义字段8")
+    private String userDef8;
+
+    /**
+     * 处理标记
+     */
+    @TableField(value = "processStamp")
+    @ApiModelProperty(value="处理标记")
+    private String processStamp;
+
+    /**
+     * RF显示待处理任务
+     */
+    @TableField(value = "showOpenTask")
+    @ApiModelProperty(value="RF显示待处理任务")
+    private Integer showOpenTask;
+
+    private static final long serialVersionUID = 1L;
+
+    public static final String COL_ID = "id";
+
+    public static final String COL_NAME = "name";
+
+    public static final String COL_WAREHOUSECODE = "warehouseCode";
+
+    public static final String COL_INTERNALTASKTYPE = "internalTaskType";
+
+    public static final String COL_TASKTYPE = "taskType";
+
+    public static final String COL_ZONECODE = "zoneCode";
+
+    public static final String COL_TASKINITMETHOD = "taskInitMethod";
+
+    public static final String COL_TASKDIRECTEDMETHOD = "taskDirectedMethod";
+
+    public static final String COL_FROMASSIGNMETHOD = "fromAssignMethod";
+
+    public static final String COL_TOASSIGNMETHOD = "toAssignMethod";
+
+    public static final String COL_PICKMETHOD = "pickMethod";
+
+    public static final String COL_RFSUCCESSENABLED = "rfSuccessEnabled";
+
+    public static final String COL_RFSUCCESSFIELD = "rfSuccessField";
+
+    public static final String COL_RFSUCCESSMESSAGE = "rfSuccessMessage";
+
+    public static final String COL_DEFAULTLPASSHIPCONT = "DEFAULTLpAsShipCont";
+
+    public static final String COL_MULTIPICKMETHOD = "multiPickMethod";
+
+    public static final String COL_ALLOWPARTIAL = "allowPartial";
+
+    public static final String COL_PICKDROPLOC = "pickDropLoc";
+
+    public static final String COL_DISPLAYITEMINFO = "displayItemInfo";
+
+    public static final String COL_CREATED = "created";
+
+    public static final String COL_CREATEDBY = "createdBy";
+
+    public static final String COL_LASTUPDATED = "lastUpdated";
+
+    public static final String COL_LASTUPDATEDBY = "lastUpdatedBy";
+
+    public static final String COL_VERSION = "version";
+
+    public static final String COL_USERDEF1 = "userDef1";
+
+    public static final String COL_USERDEF2 = "userDef2";
+
+    public static final String COL_USERDEF3 = "userDef3";
+
+    public static final String COL_USERDEF4 = "userDef4";
+
+    public static final String COL_USERDEF5 = "userDef5";
+
+    public static final String COL_USERDEF6 = "userDef6";
+
+    public static final String COL_USERDEF7 = "userDef7";
+
+    public static final String COL_USERDEF8 = "userDef8";
+
+    public static final String COL_PROCESSSTAMP = "processStamp";
+
+    public static final String COL_SHOWOPENTASK = "showOpenTask";
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskPreference/mapper/TaskPreferenceMapper.java b/src/main/java/com/huaheng/pc/task/taskPreference/mapper/TaskPreferenceMapper.java
new file mode 100644
index 0000000..3c9d352
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskPreference/mapper/TaskPreferenceMapper.java
@@ -0,0 +1,7 @@
+package com.huaheng.pc.task.taskPreference.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaheng.pc.task.taskPreference.domain.TaskPreference;
+
+public interface TaskPreferenceMapper extends BaseMapper<TaskPreference> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceService.java b/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceService.java
new file mode 100644
index 0000000..c175e60
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceService.java
@@ -0,0 +1,8 @@
+package com.huaheng.pc.task.taskPreference.service;
+
+import com.huaheng.pc.task.taskPreference.domain.TaskPreference;
+import com.baomidou.mybatisplus.extension.service.IService;
+public interface TaskPreferenceService extends IService<TaskPreference>{
+
+
+}
diff --git a/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceServiceImpl.java
new file mode 100644
index 0000000..8592201
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/task/taskPreference/service/TaskPreferenceServiceImpl.java
@@ -0,0 +1,13 @@
+package com.huaheng.pc.task.taskPreference.service;
+
+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.task.taskPreference.mapper.TaskPreferenceMapper;
+import com.huaheng.pc.task.taskPreference.domain.TaskPreference;
+import com.huaheng.pc.task.taskPreference.service.TaskPreferenceService;
+@Service
+public class TaskPreferenceServiceImpl extends ServiceImpl<TaskPreferenceMapper, TaskPreference> implements TaskPreferenceService{
+
+}
diff --git a/src/main/resources/mybatis/general/WarehouseMapper.xml b/src/main/resources/mybatis/general/WarehouseMapper.xml
index 1c94a4c..89db683 100644
--- a/src/main/resources/mybatis/general/WarehouseMapper.xml
+++ b/src/main/resources/mybatis/general/WarehouseMapper.xml
@@ -34,6 +34,26 @@
     <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
     <result column="deleted" jdbcType="BIT" property="deleted" />
   </resultMap>
+  <select id="wareHouseAll" resultType="com.huaheng.pc.system.user.domain.SysUserWarehouse">
+    select * from warehouse
+  </select>
+
+  <select id="selectWarehouseByUserId"
+          resultType="com.huaheng.pc.general.warehouse.domain.Warehouse">
+		SELECT  r.`name`, r.code
+       FROM sys_user u
+			 LEFT JOIN sys_user_warehouse ur ON u.id = ur.userId
+			 LEFT JOIN warehouse r ON ur.warehouseCode = r.code
+		WHERE ur.userId =#{userId}
+	</select>
+
+  <select id="selectWarehouseAll"
+          resultType="com.huaheng.pc.general.warehouse.domain.Warehouse">
+     select * from warehouse
+  </select>
+
+
+
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     code, address1, address2, city, `state`, district, country, postalCode, attentionTo, 
diff --git a/src/main/resources/mybatis/system/SysUserWarehouseMapper.xml b/src/main/resources/mybatis/system/SysUserWarehouseMapper.xml
new file mode 100644
index 0000000..aaa15fa
--- /dev/null
+++ b/src/main/resources/mybatis/system/SysUserWarehouseMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huaheng.pc.system.user.mapper.SysUserWarehouseMapper">
+  <resultMap id="BaseResultMap" type="com.huaheng.pc.system.user.domain.SysUserWarehouse">
+    <!--@mbg.generated-->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="userId" jdbcType="INTEGER" property="userId" />
+    <result column="warehouseId" jdbcType="INTEGER" property="warehouseId" />
+    <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+  </resultMap>
+
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, userId, warehouseId, warehouseCode
+  </sql>
+
+  <insert id="batchUserWarehouse">
+    insert into sys_user_warehouse(userId, warehouseCode) values
+    <foreach item="item" index="index" collection="userWarehouseList" separator=",">
+      (#{item.userId},#{item.warehouseCode})
+    </foreach>
+  </insert>
+
+  <delete id="deleteUserWarehouseByUserId" parameterType="Integer">
+		delete from sys_user_warehouse where userId=#{userId}
+	</delete>
+
+
+</mapper>
+
diff --git a/src/main/resources/mybatis/system/UserMapper.xml b/src/main/resources/mybatis/system/UserMapper.xml
index e96a88e..88a4010 100644
--- a/src/main/resources/mybatis/system/UserMapper.xml
+++ b/src/main/resources/mybatis/system/UserMapper.xml
@@ -191,6 +191,14 @@
         INNER JOIN sys_role  ON sys_user_role.roleId = sys_role.id  AND sys_user_role.userId = sys_user.Id  AND sys_role.enable = TRUE
         INNER JOIN warehouse ON sys_role.warehouseCode = warehouse.code AND warehouse.enable = TRUE
     </select>
+
+	<select id="getWarehouseByUserName" resultType="java.util.HashMap">
+      SELECT  r.`name`, r.code
+       FROM sys_user u
+			 LEFT JOIN sys_user_warehouse ur ON u.id = ur.userId
+			 LEFT JOIN warehouse r ON ur.warehouseCode = r.code
+		WHERE u.loginName=#{loginName,jdbcType=VARCHAR}
+    </select>
 	
 	<update id="insertupdateTime" >
 		update sys_user set updateTime = #{date} where loginName = #{cPersonCode}
diff --git a/src/main/resources/mybatis/task/TaskDetailMapper.xml b/src/main/resources/mybatis/task/TaskDetailMapper.xml
new file mode 100644
index 0000000..79c9499
--- /dev/null
+++ b/src/main/resources/mybatis/task/TaskDetailMapper.xml
@@ -0,0 +1,73 @@
+<?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.task.taskDetail.mapper.TaskDetailMapper">
+  <resultMap id="BaseResultMap" type="com.huaheng.pc.task.taskDetail.domain.TaskDetail">
+    <!--@mbg.generated-->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="taskId" jdbcType="INTEGER" property="taskId" />
+    <result column="taskCode" jdbcType="VARCHAR" property="taskCode" />
+    <result column="taskType" jdbcType="VARCHAR" property="taskType" />
+    <result column="internalTaskType" jdbcType="VARCHAR" property="internalTaskType" />
+    <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+    <result column="companyCode" jdbcType="VARCHAR" property="companyCode" />
+    <result column="materialCode" jdbcType="VARCHAR" property="materialCode" />
+    <result column="materialName" jdbcType="VARCHAR" property="materialName" />
+    <result column="materialSpec" jdbcType="VARCHAR" property="materialSpec" />
+    <result column="materialUnit" jdbcType="VARCHAR" property="materialUnit" />
+    <result column="qty" jdbcType="INTEGER" property="qty" />
+    <result column="fromLocation" jdbcType="VARCHAR" property="fromLocation" />
+    <result column="toLocation" jdbcType="VARCHAR" property="toLocation" />
+    <result column="containerCode" jdbcType="VARCHAR" property="containerCode" />
+    <result column="fromZone" jdbcType="VARCHAR" property="fromZone" />
+    <result column="toZone" jdbcType="VARCHAR" property="toZone" />
+    <result column="attributeId" jdbcType="INTEGER" property="attributeId" />
+    <result column="enable" jdbcType="INTEGER" property="enable" />
+    <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" />
+    <result column="attribute2" jdbcType="VARCHAR" property="attribute2" />
+    <result column="attribute3" jdbcType="VARCHAR" property="attribute3" />
+    <result column="attribute4" jdbcType="VARCHAR" property="attribute4" />
+    <result column="batch" jdbcType="VARCHAR" property="batch" />
+    <result column="lot" jdbcType="VARCHAR" property="lot" />
+    <result column="projectNo" jdbcType="VARCHAR" property="projectNo" />
+    <result column="qcCheck" jdbcType="VARCHAR" property="qcCheck" />
+    <result column="manufactureDate" jdbcType="DATE" property="manufactureDate" />
+    <result column="expirationDate" jdbcType="DATE" property="expirationDate" />
+    <result column="agingDate" jdbcType="DATE" property="agingDate" />
+    <result column="inventorySts" jdbcType="VARCHAR" property="inventorySts" />
+    <result column="waveId" jdbcType="INTEGER" property="waveId" />
+    <result column="fromInventoryId" jdbcType="INTEGER" property="fromInventoryId" />
+    <result column="toInventoryId" jdbcType="INTEGER" property="toInventoryId" />
+    <result column="confirmedBy" jdbcType="VARCHAR" property="confirmedBy" />
+    <result column="groupNum" jdbcType="INTEGER" property="groupNum" />
+    <result column="groupIndex" jdbcType="INTEGER" property="groupIndex" />
+    <result column="created" jdbcType="TIMESTAMP" property="created" />
+    <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
+    <result column="lastUpdated" jdbcType="TIMESTAMP" property="lastUpdated" />
+    <result column="lastUpdatedBy" jdbcType="VARCHAR" property="lastUpdatedBy" />
+    <result column="version" jdbcType="INTEGER" property="version" />
+    <result column="userDef1" jdbcType="VARCHAR" property="userDef1" />
+    <result column="userDef2" jdbcType="VARCHAR" property="userDef2" />
+    <result column="userDef3" jdbcType="VARCHAR" property="userDef3" />
+    <result column="userDef4" jdbcType="VARCHAR" property="userDef4" />
+    <result column="userDef5" jdbcType="VARCHAR" property="userDef5" />
+    <result column="userDef6" jdbcType="VARCHAR" property="userDef6" />
+    <result column="userDef7" jdbcType="VARCHAR" property="userDef7" />
+    <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
+    <result column="processStamp" jdbcType="VARCHAR" property="processStamp" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, taskId, taskCode, taskType, internalTaskType, warehouseCode, companyCode, materialCode, 
+    materialName, materialSpec, materialUnit, qty, fromLocation, toLocation, containerCode, 
+    fromZone, toZone, attributeId, `enable`, referenceCode, referenceId, referenceLineId, 
+    assignedUser, attribute1, attribute2, attribute3, attribute4, batch, lot, projectNo, 
+    qcCheck, manufactureDate, expirationDate, agingDate, inventorySts, waveId, fromInventoryId, 
+    toInventoryId, confirmedBy, groupNum, groupIndex, created, createdBy, lastUpdated, 
+    lastUpdatedBy, version, userDef1, userDef2, userDef3, userDef4, userDef5, userDef6, 
+    userDef7, userDef8, processStamp
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/task/TaskHeaderMapper.xml b/src/main/resources/mybatis/task/TaskHeaderMapper.xml
new file mode 100644
index 0000000..9c9819b
--- /dev/null
+++ b/src/main/resources/mybatis/task/TaskHeaderMapper.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper">
+  <resultMap id="BaseResultMap" type="com.huaheng.pc.task.taskHeader.domain.TaskHeader">
+    <!--@mbg.generated-->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="code" jdbcType="VARCHAR" property="code" />
+    <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+    <result column="companyCode" jdbcType="VARCHAR" property="companyCode" />
+    <result column="taskType" jdbcType="VARCHAR" property="taskType" />
+    <result column="internalTaskType" jdbcType="VARCHAR" property="internalTaskType" />
+    <result column="referenceId" jdbcType="INTEGER" property="referenceId" />
+    <result column="referenceCode" jdbcType="VARCHAR" property="referenceCode" />
+    <result column="assignedUser" jdbcType="VARCHAR" property="assignedUser" />
+    <result column="confirmedBy" jdbcType="VARCHAR" property="confirmedBy" />
+    <result column="enable" jdbcType="INTEGER" property="enable" />
+    <result column="waveId" jdbcType="INTEGER" property="waveId" />
+    <result column="pickingCartCode" jdbcType="VARCHAR" property="pickingCartCode" />
+    <result column="pickingCartPos" jdbcType="VARCHAR" property="pickingCartPos" />
+    <result column="containerCode" jdbcType="VARCHAR" property="containerCode" />
+    <result column="startPickDateTime" jdbcType="TIMESTAMP" property="startPickDateTime" />
+    <result column="endPickDateTime" jdbcType="TIMESTAMP" property="endPickDateTime" />
+    <result column="rebatchLoc" jdbcType="VARCHAR" property="rebatchLoc" />
+    <result column="finishRebatch" jdbcType="INTEGER" property="finishRebatch" />
+    <result column="rebatchGroupCode" jdbcType="VARCHAR" property="rebatchGroupCode" />
+    <result column="allowRebatch" jdbcType="INTEGER" property="allowRebatch" />
+    <result column="taskProcessType" jdbcType="VARCHAR" property="taskProcessType" />
+    <result column="rebinBench" jdbcType="VARCHAR" property="rebinBench" />
+    <result column="rebined" jdbcType="INTEGER" property="rebined" />
+    <result column="startRebinDateTime" jdbcType="TIMESTAMP" property="startRebinDateTime" />
+    <result column="endRebinDateTime" jdbcType="TIMESTAMP" property="endRebinDateTime" />
+    <result column="rebinedBy" jdbcType="VARCHAR" property="rebinedBy" />
+    <result column="exceptionCode" jdbcType="VARCHAR" property="exceptionCode" />
+    <result column="exceptionHandledBy" jdbcType="VARCHAR" property="exceptionHandledBy" />
+    <result column="created" jdbcType="TIMESTAMP" property="created" />
+    <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
+    <result column="lastUpdated" jdbcType="TIMESTAMP" property="lastUpdated" />
+    <result column="lastUpdatedBy" jdbcType="VARCHAR" property="lastUpdatedBy" />
+    <result column="version" jdbcType="INTEGER" property="version" />
+    <result column="userDef1" jdbcType="VARCHAR" property="userDef1" />
+    <result column="userDef2" jdbcType="VARCHAR" property="userDef2" />
+    <result column="userDef3" jdbcType="VARCHAR" property="userDef3" />
+    <result column="userDef4" jdbcType="VARCHAR" property="userDef4" />
+    <result column="userDef5" jdbcType="VARCHAR" property="userDef5" />
+    <result column="userDef6" jdbcType="VARCHAR" property="userDef6" />
+    <result column="userDef7" jdbcType="VARCHAR" property="userDef7" />
+    <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
+    <result column="processStamp" jdbcType="VARCHAR" property="processStamp" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, code, warehouseCode, companyCode, taskType, internalTaskType, referenceId, referenceCode, 
+    assignedUser, confirmedBy, `enable`, waveId, pickingCartCode, pickingCartPos, containerCode, 
+    startPickDateTime, endPickDateTime, rebatchLoc, finishRebatch, rebatchGroupCode, 
+    allowRebatch, taskProcessType, rebinBench, rebined, startRebinDateTime, endRebinDateTime, 
+    rebinedBy, exceptionCode, exceptionHandledBy, created, createdBy, lastUpdated, lastUpdatedBy, 
+    version, userDef1, userDef2, userDef3, userDef4, userDef5, userDef6, userDef7, userDef8, 
+    processStamp
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/task/TaskPreferenceMapper.xml b/src/main/resources/mybatis/task/TaskPreferenceMapper.xml
new file mode 100644
index 0000000..d82e291
--- /dev/null
+++ b/src/main/resources/mybatis/task/TaskPreferenceMapper.xml
@@ -0,0 +1,50 @@
+<?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.task.taskPreference.mapper.TaskPreferenceMapper">
+  <resultMap id="BaseResultMap" type="com.huaheng.pc.task.taskPreference.domain.TaskPreference">
+    <!--@mbg.generated-->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
+    <result column="internalTaskType" jdbcType="VARCHAR" property="internalTaskType" />
+    <result column="taskType" jdbcType="VARCHAR" property="taskType" />
+    <result column="zoneCode" jdbcType="VARCHAR" property="zoneCode" />
+    <result column="taskInitMethod" jdbcType="VARCHAR" property="taskInitMethod" />
+    <result column="taskDirectedMethod" jdbcType="VARCHAR" property="taskDirectedMethod" />
+    <result column="fromAssignMethod" jdbcType="VARCHAR" property="fromAssignMethod" />
+    <result column="toAssignMethod" jdbcType="VARCHAR" property="toAssignMethod" />
+    <result column="pickMethod" jdbcType="VARCHAR" property="pickMethod" />
+    <result column="rfSuccessEnabled" jdbcType="INTEGER" property="rfSuccessEnabled" />
+    <result column="rfSuccessField" jdbcType="VARCHAR" property="rfSuccessField" />
+    <result column="rfSuccessMessage" jdbcType="VARCHAR" property="rfSuccessMessage" />
+    <result column="DEFAULTLpAsShipCont" jdbcType="INTEGER" property="DEFAULTLpAsShipCont" />
+    <result column="multiPickMethod" jdbcType="INTEGER" property="multiPickMethod" />
+    <result column="allowPartial" jdbcType="VARCHAR" property="allowPartial" />
+    <result column="pickDropLoc" jdbcType="VARCHAR" property="pickDropLoc" />
+    <result column="displayItemInfo" jdbcType="VARCHAR" property="displayItemInfo" />
+    <result column="created" jdbcType="TIMESTAMP" property="created" />
+    <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
+    <result column="lastUpdated" jdbcType="TIMESTAMP" property="lastUpdated" />
+    <result column="lastUpdatedBy" jdbcType="VARCHAR" property="lastUpdatedBy" />
+    <result column="version" jdbcType="INTEGER" property="version" />
+    <result column="userDef1" jdbcType="VARCHAR" property="userDef1" />
+    <result column="userDef2" jdbcType="VARCHAR" property="userDef2" />
+    <result column="userDef3" jdbcType="VARCHAR" property="userDef3" />
+    <result column="userDef4" jdbcType="VARCHAR" property="userDef4" />
+    <result column="userDef5" jdbcType="VARCHAR" property="userDef5" />
+    <result column="userDef6" jdbcType="VARCHAR" property="userDef6" />
+    <result column="userDef7" jdbcType="VARCHAR" property="userDef7" />
+    <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
+    <result column="processStamp" jdbcType="VARCHAR" property="processStamp" />
+    <result column="showOpenTask" jdbcType="INTEGER" property="showOpenTask" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, `name`, warehouseCode, internalTaskType, taskType, zoneCode, taskInitMethod, 
+    taskDirectedMethod, fromAssignMethod, toAssignMethod, pickMethod, rfSuccessEnabled, 
+    rfSuccessField, rfSuccessMessage, DEFAULTLpAsShipCont, multiPickMethod, allowPartial, 
+    pickDropLoc, displayItemInfo, created, createdBy, lastUpdated, lastUpdatedBy, version, 
+    userDef1, userDef2, userDef3, userDef4, userDef5, userDef6, userDef7, userDef8, processStamp, 
+    showOpenTask
+  </sql>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/general/bomDetail/add.html b/src/main/resources/templates/general/bomDetail/add.html
new file mode 100644
index 0000000..f588507
--- /dev/null
+++ b/src/main/resources/templates/general/bomDetail/add.html
@@ -0,0 +1,68 @@
+<!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-bomDetail-add">
+        <div class="form-group">
+            <label class="col-sm-3 control-label"> 物料编码:</label>
+            <div class="col-sm-8">
+                <input id="materialCode" name="materialCode" 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="qty" name="qty" 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="buildLevel" name="buildLevel" 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="buildSequence" name="buildSequence" 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="allocationRule" name="allocationRule" 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="fromLocation" name="fromLocation" class="form-control" type="text">
+            </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">
+    var prefix = ctx + "general/bomDetail";
+    $("#form-bomDetail-add").validate({
+        rules:{
+            materialCode:{
+                required:true
+            },
+        },
+        submitHandler: function(form) {
+            var tableValue = $("#form-bomDetail-add").serialize();
+            $.operate.save(prefix + "/add", tableValue);
+        }
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/general/bomDetail/bomDetail.html b/src/main/resources/templates/general/bomDetail/bomDetail.html
new file mode 100644
index 0000000..e7de231
--- /dev/null
+++ b/src/main/resources/templates/general/bomDetail/bomDetail.html
@@ -0,0 +1,139 @@
+<!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>
+
+<div class="btn-group hidden-xs" id="toolbar" role="group">
+    <a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()" shiro:hasPermission="general:bomDetail:add">
+        <i class="fa fa-plus"></i> 新增
+    </a>
+    <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="general:bomDetail:remove">
+        <i class="fa fa-trash-o"></i> 删除
+    </a>
+</div>
+<div class="col-sm-12">
+    <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
+</div>
+
+
+<div th:include="include :: footer"></div>
+<script th:inline="javascript">
+    var prefix = ctx + "general/bomDetail";
+    var editFlag = [[${@permission.hasPermi('general:bomDetail:edit')}]];
+    var removeFlag = [[${@permission.hasPermi('general:bomDetail:remove')}]];
+    var datas = [[${@dict.getType('sys_normal_disable')}]];
+    $(function() {
+        var options = {
+            url: prefix + "/list",
+            createUrl: prefix + "/add",
+            updateUrl: prefix + "/edit/{id}",
+            removeUrl: prefix + "/remove",
+            modalName: "商品详情",
+            queryParams:"bomId="+[[${bomHeaderId}]],
+            search: false,
+            sortName: "id",
+            sortOrder: "desc",
+            columns: [{
+                checkbox: true
+            },
+                {
+                    field : 'id',
+                    title : 'id'
+                },
+                {
+                    field : 'warehouseCode',
+                    title : '仓库代码'
+                },
+                {
+                    field : 'companyCode',
+                    title : '货主'
+                },
+                {
+                    field : 'bomId',
+                    title : '物料清单内部号'  ,
+                    visible:false
+                },
+                {
+                    field : 'materialName',
+                    title : '物料名称'
+                },
+                {
+                    field : 'materialUnit',
+                    title : '物料单位'
+                },
+                {
+                    field : 'buildLevel',
+                    title : '组套层次'
+                },
+                {
+                    field : 'buildSequence',
+                    title : '序号'
+                },
+                {
+                    field : 'qty',
+                    title : '数量'
+                },
+                {
+                    field : 'allocationRule',
+                    title : '分配规则'
+                },
+                {
+                    field : 'fromLocation',
+                    title : '分配规则'
+                },
+                {
+                    field : 'enable',
+                    title : '是否有效',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        return $.table.selectDictLabel(datas, value);
+                    }
+                },
+                {
+                    field : 'created',
+                    title : '创建时间'
+                },
+                {
+                    field : 'createdBy',
+                    title : '创建用户'
+                },
+                {
+                    field : 'lastUpdated',
+                    title : '更新时间'
+                },
+                {
+                    field : 'lastUpdatedBy',
+                    title : '更新用户'
+                },
+                {
+                    field : 'userDef1',
+                    title : '自定义字段1' ,
+                    visible:false
+                },
+                {
+                    field : 'userDef2',
+                    title : '自定义字段2'  ,
+                    visible:false
+                },
+                {
+                    field : 'userDef3',
+                    title : '自定义字段3'  ,
+                    visible:false
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>');
+                        return actions.join('');
+                    }
+                }]
+        };
+        $.table.init(options);
+    });
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/general/bomDetail/edit.html b/src/main/resources/templates/general/bomDetail/edit.html
new file mode 100644
index 0000000..527b312
--- /dev/null
+++ b/src/main/resources/templates/general/bomDetail/edit.html
@@ -0,0 +1,68 @@
+<!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-bomDetail-add" th:object="${bomDetail}">
+        <div class="form-group">
+            <label class="col-sm-3 control-label"> 物料编码:</label>
+            <div class="col-sm-8">
+                <input id="materialCode" name="materialCode" class="form-control" type="text" th:field="*{materialCode}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">数量:</label>
+            <div class="col-sm-8">
+                <input id="qty" name="qty" class="form-control" type="text" th:field="*{qty}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">组套层次:</label>
+            <div class="col-sm-8">
+                <input id="buildLevel" name="buildLevel" class="form-control" type="text" th:field="*{buildLevel}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">序号:</label>
+            <div class="col-sm-8">
+                <input id="buildSequence" name="buildSequence" class="form-control" type="text" th:field="*{buildSequence}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">分配规则:</label>
+            <div class="col-sm-8">
+                <input id="allocationRule" name="allocationRule" class="form-control" type="text" th:field="*{allocationRule}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">从货位:</label>
+            <div class="col-sm-8">
+                <input id="fromLocation" name="fromLocation" class="form-control" type="text" th:field="*{fromLocation}" >
+            </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">
+    var prefix = ctx + "general/bomDetail";
+    $("#form-bomDetail-add").validate({
+        rules:{
+            materialCode:{
+                required:true
+            },
+        },
+        submitHandler: function(form) {
+            var tableValue = $("#form-bomDetail-add").serialize();
+            $.operate.save(prefix + "/add", tableValue);
+        }
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/general/bomHeader/add.html b/src/main/resources/templates/general/bomHeader/add.html
new file mode 100644
index 0000000..b9faeae
--- /dev/null
+++ b/src/main/resources/templates/general/bomHeader/add.html
@@ -0,0 +1,107 @@
+<!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-bomHeader-add">
+        <div class="form-group">
+            <label class="col-sm-3 control-label"> 物料编码:</label>
+            <div class="col-sm-8">
+                <input id="materialCode" name="materialCode" 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="qty" name="qty" 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="revisionNum" name="revisionNum" 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="buildInstructions" name="buildInstructions" 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="buildLoc" name="buildLoc" 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="validFromDate" name="validFromDate" 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="validEndDate" name="validEndDate" 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="priority" name="priority" 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="enable" name="enable" class="form-control" >
+                    <option value="0">有效</option>
+                    <option value="1">无效</option>
+                </select>
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">是否虚拟商品:</label>
+            <div class="col-sm-8">
+                <select id="isVirtualBom" name="isVirtualBom" class="form-control">
+                    <option value="0">不是</option>
+                    <option value="1">是</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">
+    var prefix = ctx + "general/bomHeader";
+    $("#form-bomHeader-add").validate({
+        rules:{
+            materialCode:{
+                required:true
+            },
+        },
+        submitHandler: function(form) {
+            var tableValue = $("#form-bomHeader-add").serialize();
+            tableValue = formValueReplace(tableValue, "enable", $("#enable option:selected").val());
+            tableValue = formValueReplace(tableValue, "isVirtualBom", $("#isVirtualBom option:selected").val());
+            $.operate.save(prefix + "/add", tableValue);
+        }
+    });
+    $(function () {
+        layui.use('laydate', function() {
+            var laydate = layui.laydate;
+            laydate.render({ elem: '#validFromDate', theme: 'molv', format: 'yyyy-MM-dd' });
+            laydate.render({ elem: '#validEndDate', theme: 'molv', format: 'yyyy-MM-dd' });
+        });
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/general/bomHeader/bomHeader.html b/src/main/resources/templates/general/bomHeader/bomHeader.html
new file mode 100644
index 0000000..3ab8fc4
--- /dev/null
+++ b/src/main/resources/templates/general/bomHeader/bomHeader.html
@@ -0,0 +1,220 @@
+<!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">
+            <ul id="myTab" class="nav nav-tabs">
+                <li class="active"><a href="#tabHeader" data-toggle="tab">主表</a></li>
+                <li><a href="#tabDetail" data-toggle="tab">明细</a></li>
+            </ul>
+            <div id="myTabContent" class="tab-content">
+                <div class="tab-pane fade in active" id="tabHeader">
+                    <div class="col-sm-12 select-info">
+                        <form id="alarmFlow-form">
+                            <div class="select-list">
+                                <ul>
+                                    <li>
+                                        物料名称:<input type="text" name="materialName"/>
+                                    </li>
+                                    <li>
+                                         物料编码:<input type="text" name="materialCode"/>
+                                    </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:role:export"><i class="fa fa-download"></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="general:bomHeader:add">
+                            <i class="fa fa-plus"></i> 新增
+                        </a>
+                        <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()"
+                           shiro:hasPermission="general:bomHeader:remove">
+                            <i class="fa fa-trash-o"></i> 删除
+                        </a>
+                    </div>
+
+                    <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
+                </div>
+
+                <div class="tab-pane fade" id="tabDetail">
+                    <table id="bootstrap-table1" data-mobile-responsive="true"
+                           class="table table-bordered table-hover"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div th:include="include :: footer"></div>
+<script th:inline="javascript">
+    var prefix = ctx + "general/bomHeader";
+    var prefix1 = ctx + "general/bomDetail";
+    var editFlag = [[${@permission.hasPermi('general:bomHeader:edit')}]];
+    var removeFlag = [[${@permission.hasPermi('general:bomHeader:remove')}]];
+    $(function() {
+        var options = {
+            url: prefix + "/list",
+            createUrl: prefix + "/add",
+            updateUrl: prefix + "/edit/{id}",
+            removeUrl: prefix + "/remove",
+            modalName: "商品",
+            search: false,
+            sortName: "id",
+            sortOrder: "desc",
+            columns: [{
+                checkbox: true
+            },
+                {
+                    field : 'id',
+                    title : 'id'
+                },
+                {
+                    field : 'materialCode',
+                    title : '物料编码'
+                },
+                {
+                    field : 'materialName',
+                    title : '物料名称'
+                },
+                {
+                    field : 'warehouseCode',
+                    title : '仓库代码'
+                },
+                {
+                    field : 'companyCode',
+                    title : '货主编码'
+                },
+                {
+                    field : 'materialSpec',
+                    title : '物料规格'
+                },
+                {
+                    field : 'materialUnit',
+                    title : ' 物料单位'
+                },
+                {
+                    field : 'qty',
+                    title : '数量'
+                },
+                {
+                    field : 'revisionNum',
+                    title : '修正号码'
+                },
+                {
+                    field : 'buildInstructions',
+                    title : '加工说明'
+                },
+                {
+                    field : 'buildLoc',
+                    title : '加工货位'
+                },
+                {
+                    field : 'validFromDate',
+                    title : '有效起止日期'
+                },
+                {
+                    field : 'validEndDate',
+                    title : '有效结束日期'
+                },
+                {
+                    field : 'priority',
+                    title : '优先级'
+                },
+                {
+                    field : 'version',
+                    title : '数据版本',
+                    visible : false
+                },
+                {
+                    field : 'isVirtualBom',
+                    title : '是否为虚拟商品',
+                    visible : false
+                },
+                {
+                    field : 'created',
+                    title : '创建时间',
+                    visible : false
+                },
+                {
+                    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',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>');
+                        return actions.join('');
+                    }
+                }]
+        };
+        $.table.init(options);
+    });
+
+    function detail(id, code) {
+        // console.log(id);
+        // dictid=id;
+        var url = prefix1+"/list/" + id;
+        createtable(url);
+    }
+
+    function createtable(url) {
+        $("#tabDetail").children().remove();
+        $("#myTab li").removeClass("active");
+        var height = $(document).height()-100 + 'px';
+        var str = '<iframe class="huaheng_iframe" name="iframe" width="100%" height="' + height + '" src="' + url + '" frameborder="0" data-id="' + url + '" seamless></iframe>';
+        $("#tabDetail").append(str);
+        $(".tab-pane").removeClass("in active");
+        $("#myTab li:eq(1)").addClass("active");
+        $("#tabDetail").addClass("in active");
+    }
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/general/bomHeader/edit.html b/src/main/resources/templates/general/bomHeader/edit.html
new file mode 100644
index 0000000..4769548
--- /dev/null
+++ b/src/main/resources/templates/general/bomHeader/edit.html
@@ -0,0 +1,126 @@
+<!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-bomHeader-edit" th:object="${bomHeader}">
+        <div class="form-group">
+            <label class="col-sm-3 control-label"> 物料编码:</label>
+            <div class="col-sm-8">
+                <input id="materialCode" name="materialCode" class="form-control" type="text" th:field="*{materialCode}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">数量:</label>
+            <div class="col-sm-8">
+                <input id="qty" name="qty" class="form-control" type="text" th:field="*{qty}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">修正号码:</label>
+            <div class="col-sm-8">
+                <input id="revisionNum" name="revisionNum" class="form-control" type="text" th:field="*{revisionNum}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">加工说明:</label>
+            <div class="col-sm-8">
+                <input id="buildInstructions" name="buildInstructions" class="form-control" type="text" th:field="*{buildInstructions}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">加工货位:</label>
+            <div class="col-sm-8">
+                <input id="buildLoc" name="buildLoc" class="form-control" type="text" th:field="*{buildLoc}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">有效起始日期:</label>
+            <div class="col-sm-8">
+                <input id="validFromDate" name="validFromDate" class="time-input" type="text" th:field="*{validFromDate}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">有效结束日期:</label>
+            <div class="col-sm-8">
+                <input id="validEndDate" name="validEndDate" class="time-input" type="text" th:field="*{validEndDate}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">优先级:</label>
+            <div class="col-sm-8">
+                <input id="priority" name="priority" class="form-control" type="text" th:field="*{priority}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">是否有效:</label>
+            <div class="col-sm-8">
+                 <select id="enable" name="enable" class="form-control" th:field="*{enable}">
+                     <option value="0">有效</option>
+                     <option value="1">无效</option>
+                 </select>
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">是否虚拟商品:</label>
+            <div class="col-sm-8">
+                <select id="isVirtualBom" name="isVirtualBom" class="form-control" th:field="*{isVirtualBom}" >
+                    <option value="0">不是</option>
+                    <option value="1">是</option>
+                </select>
+            </div>
+        </div>
+        <!--<div class="form-group">	-->
+        <!--<label class="col-sm-3 control-label">自定义字段1:</label>-->
+        <!--<div class="col-sm-8">-->
+        <!--<input id="userDef1" name="userDef1" 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="userDef2" name="userDef2" class="form-control" type="text">-->
+        <!--</div>-->
+        <!--</div>-->
+        <!--<div class="form-group">	-->
+        <!--<label class="col-sm-3 control-label">自定义字段3:</label>-->
+        <!--<div class="col-sm-8">-->
+        <!--<input id="userDef3" name="userDef3" class="form-control" type="text">-->
+        <!--</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">
+    var prefix = ctx + "general/bomHeader";
+    $("#form-bomHeader-add").validate({
+        rules:{
+            materialCode:{
+                required:true
+            },
+        },
+        submitHandler: function(form) {
+            var tableValue = $("#form-bomHeader-add").serialize();
+            tableValue = formValueReplace(tableValue, "enable", $("#enable option:selected").val());
+            tableValue = formValueReplace(tableValue, "isVirtualBom", $("#isVirtualBom option:selected").val());
+            $.operate.save(prefix + "/add", tableValue);
+        }
+    });
+
+    $(function () {
+        layui.use('laydate', function() {
+            var laydate = layui.laydate;
+            laydate.render({ elem: '#validFromDate', theme: 'molv', format: 'yyyy-MM-dd' });
+            laydate.render({ elem: '#validEndDate', theme: 'molv', format: 'yyyy-MM-dd' });
+        });
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/general/company/add.html b/src/main/resources/templates/general/company/add.html
index d7a7620..bb1b69e 100644
--- a/src/main/resources/templates/general/company/add.html
+++ b/src/main/resources/templates/general/company/add.html
@@ -91,6 +91,8 @@
 					<input id="email" name="email" class="form-control" type="text">
 				</div>
 			</div>
+
+			<input id="filePath" name="filePath" class="form-control" type="file">
 			<!--<div class="form-group">	-->
 				<!--<label class="col-sm-3 control-label">自定义字段1:</label>-->
 				<!--<div class="col-sm-8">-->
diff --git a/src/main/resources/templates/general/material/add.html b/src/main/resources/templates/general/material/add.html
index 17850c8..27f8fc0 100644
--- a/src/main/resources/templates/general/material/add.html
+++ b/src/main/resources/templates/general/material/add.html
@@ -14,7 +14,9 @@
 			<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" 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">
@@ -32,9 +34,7 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">单位:</label>
 				<div class="col-sm-8">
-					<select id="unit" name="unit" class="form-control" th:with="materialUnit=${@materialUnitService.getUnit()}">
-						<option th:each="item : ${materialUnit}" th:text="${item['unit']}" th:value="${item['unit']}"></option>
-					</select>
+					<input id="unit" name="unit" class="form-control" type="text">
 				</div>
 			</div>
 			<div class="form-group">	
@@ -257,6 +257,7 @@
                 // var tableValue = $.common.getTableValue("#form-material-add");
                 // $.operate.save(prefix + "/add", tableValue);
                 var tableValue = $("#form-material-add").serialize();
+                tableValue = formValueReplace(tableValue, "companyCode", $("#companyCode option:selected").val())
                 tableValue = formValueReplace(tableValue, "enable", $("input[name='enable']").is(':checked'));
                 $.operate.save(prefix + "/add", tableValue);
 			}
diff --git a/src/main/resources/templates/general/material/material.html b/src/main/resources/templates/general/material/material.html
index 0032ac3..9c73976 100644
--- a/src/main/resources/templates/general/material/material.html
+++ b/src/main/resources/templates/general/material/material.html
@@ -169,26 +169,26 @@
 					title : '收货预警天数' ,
                     visible:false
 				},
-				{
-					field : "version",
-					title: "数据版本"
-				},
-				{
-					field : 'created', 
-					title : '创建时间' 
-				},
-				{
-					field : 'createdBy', 
-					title : '创建用户' 
-				},
-				{
-					field : 'lastUpdated', 
-					title : '更新时间'
-				},
-				{
-					field : 'lastUpdatedBy', 
-					title : '更新用户' 
-				},
+				// {
+				// 	field : "version",
+				// 	title: "数据版本"
+				// },
+				// {
+				// 	field : 'created',
+				// 	title : '创建时间'
+				// },
+				// {
+				// 	field : 'createdBy',
+				// 	title : '创建用户'
+				// },
+				// {
+				// 	field : 'lastUpdated',
+				// 	title : '更新时间'
+				// },
+				// {
+				// 	field : 'lastUpdatedBy',
+				// 	title : '更新用户'
+				// },
 				{
 					field : 'enable', 
 					title : '状态'  ,
diff --git a/src/main/resources/templates/system/user/add.html b/src/main/resources/templates/system/user/add.html
index b8df4b5..c83fd84 100644
--- a/src/main/resources/templates/system/user/add.html
+++ b/src/main/resources/templates/system/user/add.html
@@ -71,6 +71,16 @@
 					</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">角色:</label>
 				<div class="col-sm-8">
@@ -188,6 +198,7 @@
         	var sex = $("#sex option:selected").val();
         	var enable = $("input[name='enable']").is(':checked') == true ? 1 : 0;
         	var roleIds = $.form.selectCheckeds("role");
+			var warehouseCodeList = $.form.selectCheckeds("warehouseCode");
         	var companyIdList = $.form.selectCheckeds("company");
         	$.ajax({
         		cache : true,
@@ -204,6 +215,7 @@
         			"sex": sex,
         			"enable": enable,
         			"roleIds": roleIds,
+					"warehouseCodeList": warehouseCodeList,
         			"companyIdList": companyIdList
         		},
         		async : false,
diff --git a/src/main/resources/templates/system/user/edit.html b/src/main/resources/templates/system/user/edit.html
index 2fb57a9..3c52036 100644
--- a/src/main/resources/templates/system/user/edit.html
+++ b/src/main/resources/templates/system/user/edit.html
@@ -66,6 +66,16 @@
 					</label>
 				</div>
 			</div>
+
+			<div class="form-group">
+				<label class="col-sm-3 control-label">仓库:</label>
+				<div class="col-sm-8">
+					<label th:each="warehouse:${warehouses}" class="checkbox-inline i-checks">
+						<input name="warehouse" type="checkbox" th:value="${warehouse.code}" th:text="${warehouse.name}" th:checked="${warehouse.flag}" 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">
@@ -160,6 +170,7 @@
         	var sex = $("#sex option:selected").val();
         	var enable = $("input[name='enable']").is(':checked') == true ? 1 : 0;
         	var roleIds = $.form.selectCheckeds("role");
+			var warehouseCodeList = $.form.selectCheckeds("warehouse");
         	var companyIdList = $.form.selectCheckeds("company");
         	$.ajax({
         		cache : true,
@@ -174,6 +185,7 @@
         			"sex": sex,
         			"enable": enable,
         			"roleIds": roleIds,
+					"warehouseCodeList": warehouseCodeList,
         			"companyIdList": companyIdList
         		},
         		async : false,