diff --git a/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java b/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
index 14f8a76..878e0b1 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/WCS/v1")
+@RequestMapping("/WCS/v2")
 @Api(tags = {"OverrideHandle"}, description = "wcs空出处理接口")
 public class EmptyOutHandle extends BaseController {
 
diff --git a/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java b/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
index bb2f570..e694aae 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java
@@ -1,8 +1,7 @@
 package com.huaheng.api.wcs.controller;
 
-import com.huaheng.api.wcs.domain.WcsTask;
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.api.wcs.service.overrideHandle.OverrideHandleService;
-import com.huaheng.api.wcs.service.taskFinish.TaskFinishService;
 import com.huaheng.framework.aspectj.lang.annotation.Log;
 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
 import com.huaheng.framework.web.controller.BaseController;
@@ -21,7 +20,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/WCS/v1")
+@RequestMapping("/WCS/v2")
 @Api(tags = {"OverrideHandle"}, description = "wcs重入处理接口")
 public class OverrideHandle extends BaseController {
 
@@ -32,9 +31,9 @@ public class OverrideHandle extends BaseController {
     @PostMapping("/OverrideHandle")
     @ApiOperation("wcs重入处理")
     @ResponseBody
-    public AjaxResult OverrideHandle(@RequestBody WcsTask wcsTask)
+    public AjaxResult OverrideHandle(@RequestBody TaskFinishDomain taskFinishDomain)
     {
-        AjaxResult ajaxResult =overrideHandleService.OverrideHandle(wcsTask) ;
+        AjaxResult ajaxResult =overrideHandleService.OverrideHandle(taskFinishDomain) ;
         return ajaxResult;
     }
 
diff --git a/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java b/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
index 2390a61..1400d10 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java
@@ -1,5 +1,6 @@
 package com.huaheng.api.wcs.controller;
 
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.api.wcs.service.taskFinish.TaskFinishService;
 import com.huaheng.framework.aspectj.lang.annotation.Log;
@@ -20,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/WCS/v1")
+@RequestMapping("/WCS/v2")
 @Api(tags = {"TaskFinish"}, description = "wcs任务完成数据接口")
 public class TaskFinish extends BaseController {
 
@@ -31,9 +32,9 @@ public class TaskFinish extends BaseController {
     @PostMapping("/TaskFinish")
     @ApiOperation("wcs任务完成")
     @ResponseBody
-    public AjaxResult TaskFinish(@RequestBody WcsTask wcsTask)
+    public AjaxResult TaskFinish(@RequestBody TaskFinishDomain taskFinishDomain)
     {
-        AjaxResult ajaxResult =taskFinishService.completeTaskByWCS(wcsTask) ;
+        AjaxResult ajaxResult =taskFinishService.completeTaskByWCS(taskFinishDomain) ;
         return ajaxResult;
     }
 
diff --git a/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java b/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
index 4fe9415..a685950 100644
--- a/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
+++ b/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
  */
 
 @RestController
-@RequestMapping("/WCS/v1")
+@RequestMapping("/WCS/v2")
 @Api(tags = {"WarecellAllocation"}, description = "wcs仓位分配接口")
 public class WarecellAllocation extends BaseController {
 
@@ -30,7 +30,7 @@ public class WarecellAllocation extends BaseController {
 
     @Log(title = "wcs仓位分配", action = BusinessType.INSERT)
     @PostMapping("/WarecellAllocation")
-    @ApiOperation("wcs仓位分配")
+    @ApiOperation(value="wcs仓位分配", notes="wcs仓位分配", httpMethod = "POST")
     @ResponseBody
     public AjaxResult WarecellAllocation(@RequestBody WcsTask wcsTask)
     {
diff --git a/src/main/java/com/huaheng/api/wcs/domain/TaskDetails.java b/src/main/java/com/huaheng/api/wcs/domain/TaskDetails.java
new file mode 100644
index 0000000..d92a09a
--- /dev/null
+++ b/src/main/java/com/huaheng/api/wcs/domain/TaskDetails.java
@@ -0,0 +1,27 @@
+package com.huaheng.api.wcs.domain;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by Enzo Cotter on 2019/10/15.
+ */
+@Data
+public class TaskDetails {
+
+    //关联行号,string (50),默认0 ",必填
+    private String referLineNo;
+
+    //物料编码,string (50),默认0 ",必填
+    private String materialCode;
+
+    //物料名称
+    private String materialName;
+
+    //数量,float,默认“0” ,必填"
+    private BigDecimal qty;
+
+    //单位,string(20),默认“PCS” ,必填"
+    private String unit;
+}
diff --git a/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java b/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java
new file mode 100644
index 0000000..2ba3544
--- /dev/null
+++ b/src/main/java/com/huaheng/api/wcs/domain/TaskFinishDomain.java
@@ -0,0 +1,26 @@
+package com.huaheng.api.wcs.domain;
+
+import lombok.Data;
+
+/**
+ * 任务完成和重入实体类
+ * Created by Enzo Cotter on 2019/10/15.
+ */
+@Data
+public class TaskFinishDomain {
+
+    //任务号
+    private String taskNo;
+
+    //重入,int,1:重入  0:正常,必填
+    private Integer isDoubleIn;
+
+    //空出,int,1:空出  0:正常,必填
+    private Integer isEmptyOut;
+
+    //重入的库位编码,string (50),默认0,必填
+    private String redirectionLocationCode;
+
+    //目的位置编码,string (50),默认0 ",必填
+    private String toLocationCode;
+}
diff --git a/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java b/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
index 405da20..376c2a7 100644
--- a/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
+++ b/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java
@@ -1,12 +1,17 @@
 package com.huaheng.api.wcs.domain;
 
+import lombok.Data;
+
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * wcs任务接口实体层
  * @author ricard
  * @date   2019/10/11
  */
+
+@Data
 public class WcsTask implements Serializable {
     private static final long serialVersionUID = -8855840499538794854L;
 
@@ -23,7 +28,13 @@ public class WcsTask implements Serializable {
     private String platform;
 
     //容器编码
-    private String palletNo;
+    private String containerCode;
+
+    //来源口”,一般用于指定入库口,string (50),默认0,必填
+    private String fromPort;
+
+    //目的口”,出库性质的任务必须填写,string (50),默认0,必填
+    private String toPort;
 
     //源位置库位编码
     private String fromLocationCode;
@@ -34,138 +45,26 @@ public class WcsTask implements Serializable {
     //重入后再次分配的位置编码
     private String locationCode;
 
-    //取消任务
-    private String reason;
+    //优先级,int,默认100 ,数字越小优先级越高",必填
+    private int priority;
+
+    //巷道
+    private String roadWay;
 
     //长
-    private Float length;
+    private String length;
 
     //宽
-    private Float width;
+    private String width;
 
     //高
-    private Float height;
+    private String height;
 
     //重
-    private Float weight;
-
-    public String getTaskNo() {
-        return taskNo;
-    }
-
-    public void setTaskNo(String taskNo) {
-        this.taskNo = taskNo;
-    }
-
-    public String getTaskType() {
-        return taskType;
-    }
-
-    public void setTaskType(String taskType) {
-        this.taskType = taskType;
-    }
-
-    public String getStation() {
-        return station;
-    }
-
-    public void setStation(String station) {
-        this.station = station;
-    }
-
-    public String getPlatform() {
-        return platform;
-    }
-
-    public void setPlatform(String platform) {
-        this.platform = platform;
-    }
-
-    public String getPalletNo() {
-        return palletNo;
-    }
-
-    public void setPalletNo(String palletNo) {
-        this.palletNo = palletNo;
-    }
-
-    public String getFromLocationCode() {
-        return fromLocationCode;
-    }
-
-    public void setFromLocationCode(String fromLocationCode) {
-        this.fromLocationCode = fromLocationCode;
-    }
-
-    public String getToLocationCode() {
-        return toLocationCode;
-    }
-
-    public void setToLocationCode(String toLocationCode) {
-        this.toLocationCode = toLocationCode;
-    }
-
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public float getLength() {
-        return length;
-    }
-
-    public void setLength(float length) {
-        this.length = length;
-    }
-
-    public float getWidth() {
-        return width;
-    }
-
-    public void setWidth(float width) {
-        this.width = width;
-    }
-
-    public float getHeight() {
-        return height;
-    }
-
-    public void setHeight(float height) {
-        this.height = height;
-    }
-
-    public float getWeight() {
-        return weight;
-    }
-
-    public void setWeight(float weight) {
-        this.weight = weight;
-    }
-
-    public String getLocationCode() {
-        return locationCode;
-    }
-
-    public void setLocationCode(String locationCode) {
-        this.locationCode = locationCode;
-    }
-
-    public void setLength(Float length) {
-        this.length = length;
-    }
-
-    public void setWidth(Float width) {
-        this.width = width;
-    }
+    private String weight;
 
-    public void setHeight(Float height) {
-        this.height = height;
-    }
+    //备注
+    private String remark;
 
-    public void setWeight(Float weight) {
-        this.weight = weight;
-    }
+    private List<TaskDetails> taskDetails;
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
index 0d690df..6b75a4b 100644
--- a/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/emptyOutHandle/EmptyOutHandleServiceImpl.java
@@ -40,7 +40,7 @@ public class EmptyOutHandleServiceImpl implements EmptyOutHandleService {
         }
 
         //3、修改该任务为空出,过后处理
-        taskHeader.setUserDef1("空托出库");
+        taskHeader.setExceptionCode("空托出库");
         Boolean flag = taskHeaderService.updateById(taskHeader);
         if(flag == false){
             return AjaxResult.error("修改任务失败,空出处理失败");
diff --git a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleService.java b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleService.java
index a0da223..af4a31b 100644
--- a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleService.java
@@ -1,10 +1,11 @@
 package com.huaheng.api.wcs.service.overrideHandle;
 
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.framework.web.domain.AjaxResult;
 
 public interface OverrideHandleService {
 
     //重入处理
-    AjaxResult OverrideHandle(WcsTask wcsTask);
+    AjaxResult OverrideHandle(TaskFinishDomain taskFinishDomain);
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
index 4451fc5..eab5af1 100644
--- a/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java
@@ -2,6 +2,7 @@ package com.huaheng.api.wcs.service.overrideHandle;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
@@ -48,19 +49,24 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
 
     @Override
     @Transactional
-    public AjaxResult OverrideHandle(WcsTask wcsTask) {
+    public AjaxResult OverrideHandle(TaskFinishDomain taskFinishDomain) {
         Boolean flag = true;
 
         //1、判断非空字段
-        if(StringUtils.isEmpty(wcsTask.getTaskNo())){
+        if(StringUtils.isEmpty(taskFinishDomain.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
-        if(StringUtils.isEmpty(wcsTask.getToLocationCode())){
+        if(StringUtils.isEmpty(taskFinishDomain.getToLocationCode())){
             return AjaxResult.error("目的库位为空");
         }
+        if(StringUtils.isEmpty(taskFinishDomain.getRedirectionLocationCode())){
+            return AjaxResult.error("目的库位为空");
+        }
+
+
 
         //2、根据任务号查找任务
-        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(wcsTask.getTaskNo()));
+        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(taskFinishDomain.getTaskNo()));
         if(taskHeader == null){
             return AjaxResult.error("任务号错误,没有找到该任务");
         }
@@ -80,16 +86,31 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
             return AjaxResult.error("修改此任务的原目的库位错误");
         }
 
-        //查看新库位
-        locationLam.eq(Location::getCode,wcsTask.getToLocationCode())
-                .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode());
-        Location newlocation = locationService.getOne(locationLam);
-        if(newlocation == null){
-            throw  new ServiceException("新目的库位在系统中不存在");
+
+        /**
+         *  查看新库位有两种情况
+         *  1、重入的库位由wcs提供
+         *  2、重入的库位由wms提供
+         */
+
+        Location newlocation =new Location();
+
+        //重入的库位由wcs提供
+        if(!taskFinishDomain.getRedirectionLocationCode().equals("0")) {
+            locationLam.eq(Location::getCode, taskFinishDomain.getToLocationCode())
+                    .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode());
+            newlocation = locationService.getOne(locationLam);
+            if (newlocation == null) {
+                throw new ServiceException("新目的库位在系统中不存在");
+            }
+        }else {
+            //重入的库位由wms提供
+
         }
+
         //修改任务
-        taskHeader.setToLocation(wcsTask.getToLocationCode());
-        taskHeader.setUserDef1("重入处理");
+        taskHeader.setToLocation(newlocation.getCode());
+        taskHeader.setExceptionCode("重入处理");
         flag = taskHeaderService.updateById(taskHeader);
         if(flag == false){
             throw new ServiceException("修改此任务错误");
@@ -103,7 +124,7 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
         List<TaskDetail> taskDetailList = new ArrayList<>();
         if(taskDetails != null && taskDetails.size()> 0){
             for(TaskDetail taskDetail : taskDetails){
-                taskDetail.setToLocation(wcsTask.getToLocationCode());
+                taskDetail.setToLocation(newlocation.getCode());
                 taskDetailList.add(taskDetail);
             }
             flag = taskDetailService.updateBatchById(taskDetailList);
@@ -120,7 +141,7 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
         if(receiptContainerHeader == null){
             throw new ServiceException("找不到此任务的组盘头");
         }
-        receiptContainerHeader.setToLocation(wcsTask.getToLocationCode());
+        receiptContainerHeader.setToLocation(newlocation.getCode());
         flag = receiptContainerHeaderService.updateById(receiptContainerHeader);
         if(flag == false){
             throw new ServiceException("修改此任务对应的组盘头错误");
@@ -131,10 +152,11 @@ public class OverrideHandleServiceImpl implements OverrideHandleService {
         lam.eq(ReceiptContainerDetail::getReceiptContainerId,receiptContainerHeader.getId())
                 .eq(ReceiptContainerDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
         List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lam);
+
         List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
         if(receiptContainerDetails != null && receiptContainerDetails.size()> 0){
             for(ReceiptContainerDetail receiptContainerDetail : receiptContainerDetails){
-                receiptContainerDetail.setLocationCode(wcsTask.getToLocationCode());
+                receiptContainerDetail.setLocationCode(newlocation.getCode());
                 receiptContainerDetailList.add(receiptContainerDetail);
             }
             flag = receiptContainerDetailService.updateBatchById(receiptContainerDetailList);
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
index 4fcbd1c..16e812a 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
@@ -2,17 +2,25 @@ package com.huaheng.api.wcs.service.taskAssignService;
 
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.api.wcs.domain.TaskDetails;
 import com.huaheng.api.wcs.domain.WcsTask;
 import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.http.HttpUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.config.address.service.AddressService;
+import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 任务下发接口ServiceImpl层
  * @author ricard
@@ -25,6 +33,8 @@ public class TaskAssignServiceImpl implements TaskAssignService {
 
     @Autowired
     private AddressService addressService;
+    @Autowired
+    private TaskDetailService taskDetailService;
 
 
     public static String platform = "wms";
@@ -57,9 +67,7 @@ public class TaskAssignServiceImpl implements TaskAssignService {
         if(StringUtils.isEmpty(taskHeader.getContainerCode())){
             throw new ServiceException("wms任务中容器为空");
         }
-//        if(StringUtils.isEmpty(taskHeader.getStation())){
-//            throw new ServiceException("wms站台为空");
-//        }
+
 
         //入库性质的任务源库位不能为空
         if(taskHeader.getTaskType()==100 || taskHeader.getTaskType()==200
@@ -83,16 +91,40 @@ public class TaskAssignServiceImpl implements TaskAssignService {
         WcsTask wcsTask = new WcsTask();
         wcsTask.setTaskNo(taskHeader.getId().toString());
         wcsTask.setTaskType(taskHeader.getTaskType().toString());
-//        wcsTask.setStation(taskHeader.getStation);
-        wcsTask.setPalletNo(taskHeader.getContainerCode());
+        wcsTask.setFromPort("0");
+        wcsTask.setToPort("0");
+        wcsTask.setContainerCode(taskHeader.getContainerCode());
         wcsTask.setFromLocationCode(taskHeader.getFromLocation());
         wcsTask.setToLocationCode(taskHeader.getToLocation());
+        wcsTask.setPriority(100);
+        wcsTask.setRemark("0");
         wcsTask.setPlatform(platform);
 
+        //找到任务明细
+        LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
+        taskDetailLam.eq(TaskDetail::getTaskId,taskHeader.getId());
+        List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLam);
+        if(taskDetailList == null){
+            throw new ServiceException("没有子任务");
+        }
+        List<TaskDetails> taskDetails =new ArrayList<>();
+        for(TaskDetail item : taskDetailList){
+            TaskDetails details = new TaskDetails();
+            details.setMaterialCode(item.getMaterialCode());
+            details.setMaterialName(item.getMaterialName());
+            details.setUnit(item.getMaterialUnit());
+            details.setQty(item.getQty());
+            details.setReferLineNo(item.getId().toString());
+            taskDetails.add(details);
+        }
+
+        wcsTask.setTaskDetails(taskDetails);
+
         //4、发送数据
         String param="wcs";
         String url=addressService.selectAddress(param)+"TaskAssign";
         String JsonParam = JSON.toJSONString(wcsTask);
+        System.out.println(JsonParam);
         String result = HttpUtils.bodypost(url, JsonParam);
         if(StringUtils.isEmpty(result)){
             throw new ServiceException("接口地址错误");
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
index 104b3a2..5bf9238 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java
@@ -6,5 +6,5 @@ import com.huaheng.framework.web.domain.AjaxResult;
 public interface TaskCancelService {
 
     //取消任务
-    AjaxResult TaskCance(Integer id,String reason);
+    AjaxResult TaskCance(Integer id);
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
index 80d4ee1..b8683ca 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java
@@ -26,20 +26,17 @@ public class TaskCancelServiceImpl implements TaskCancelService {
      * @return
      */
     @Override
-    public AjaxResult TaskCance(Integer id, String reason) {
+    public AjaxResult TaskCance(Integer id) {
 
         //1、判断参数是否为空
         if(id == null){
             throw new ServiceException("任务号为空");
         }
-        if(StringUtils.isEmpty(reason)){
-            throw new ServiceException("取消原因");
-        }
+
 
         //2、转换实体
         WcsTask wcsTask = new WcsTask();
         wcsTask.setTaskNo(id.toString());
-        wcsTask.setReason(reason);
 
         //3、发送数据
         String param="wcs";
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishService.java b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishService.java
index 9ddfb62..8eb2bc1 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishService.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishService.java
@@ -1,10 +1,10 @@
 package com.huaheng.api.wcs.service.taskFinish;
 
-import com.huaheng.api.wcs.domain.WcsTask;
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.framework.web.domain.AjaxResult;
 
 public interface TaskFinishService {
 
     //任务完成
-    AjaxResult completeTaskByWCS(WcsTask wcsTask);
+    AjaxResult completeTaskByWCS(TaskFinishDomain taskFinishDomain);
 }
diff --git a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
index 488da19..d487d5f 100644
--- a/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java
@@ -1,6 +1,6 @@
 package com.huaheng.api.wcs.service.taskFinish;
 
-import com.huaheng.api.wcs.domain.WcsTask;
+import com.huaheng.api.wcs.domain.TaskFinishDomain;
 import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
@@ -16,13 +16,13 @@ public class TaskFinishServiceImpl implements TaskFinishService {
 
     //任务完成
     @Override
-    public AjaxResult completeTaskByWCS(WcsTask wcsTask) {
+    public AjaxResult completeTaskByWCS(TaskFinishDomain taskFinishDomain) {
         AjaxResult ajaxResult=new AjaxResult();
-        if(StringUtils.isEmpty(wcsTask.getTaskNo())){
+        if(StringUtils.isEmpty(taskFinishDomain.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
         try{
-            ajaxResult=taskHeaderService.completeTaskByWMS(Convert.toIntArray(wcsTask.getTaskNo()));
+            ajaxResult=taskHeaderService.completeTaskByWMS(Convert.toIntArray(taskFinishDomain.getTaskNo()));
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
index f918a25..18abb7c 100644
--- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
+++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
@@ -1,18 +1,81 @@
 package com.huaheng.api.wcs.service.warecellAllocation;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huaheng.api.wcs.domain.WcsTask;
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.StringUtils;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.config.FilterConfig;
 import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
+import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
+import com.huaheng.pc.config.configValue.domain.ConfigValue;
+import com.huaheng.pc.config.configValue.service.ConfigValueService;
+import com.huaheng.pc.config.location.domain.Location;
+import com.huaheng.pc.config.location.service.LocationService;
+import com.huaheng.pc.config.locationType.domain.LocationType;
+import com.huaheng.pc.config.locationType.service.LocationTypeService;
+import com.huaheng.pc.config.material.domain.Material;
+import com.huaheng.pc.config.material.service.MaterialService;
+import com.huaheng.pc.config.material.service.MaterialServiceImpl;
+import com.huaheng.pc.config.materialType.domain.MaterialType;
+import com.huaheng.pc.config.materialType.service.MaterialTypeService;
+import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
+import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
+import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
+import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
+import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
+import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
+import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
+import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
+import com.huaheng.pc.system.config.domain.Config;
+import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
+import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
+import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
+import com.jhlabs.image.LightFilter;
+import io.swagger.annotations.ResponseHeader;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 public class WarecellAllocationServiceImpl implements WarecellAllocationService {
 
+    @Resource
+    private LocationTypeService locationTypeService;
+    @Resource
+    private LocationService locationService;
+    @Resource
+    private ConfigValueService configValueService;
+    @Resource
+    private ReceiptPreferenceService receiptPreferenceService;
+    @Resource
+    private FilterConfigDetailService filterConfigDetailService;
+    @Resource
+    private TaskDetailService taskDetailService;
+    @Resource
+    private TaskHeaderService taskHeaderService;
+    @Resource
+    private ReceiptContainerDetailService receiptContainerDetailService;
+    @Resource
+    private ReceiptContainerHeaderService receiptContainerHeaderService;
+    @Resource
+    private ReceiptDetailService receiptDetailService;
+    @Resource
+    private MaterialService materialService;
+    @Resource
+    private MaterialTypeService materialTypeService;
+
     /**
      * 仓位分配
      * 1、判断非空字段
      * 2、实体转换
-     *
+     * 3、查询满足条件的库位类型
      * @param wcsTask
      * @return
      */
@@ -23,11 +86,8 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
         if(StringUtils.isEmpty(wcsTask.getTaskNo())){
             return AjaxResult.error("任务号为空");
         }
-        if(StringUtils.isEmpty(wcsTask.getPalletNo())){
-            return AjaxResult.error("托盘编号为空");
-        }
-        if(StringUtils.isEmpty(wcsTask.getStation())){
-            return AjaxResult.error("站台编码为空");
+        if(StringUtils.isEmpty(wcsTask.getRoadWay())){
+            return AjaxResult.error("巷道为空");
         }
         if(StringUtils.isNull(wcsTask.getLength())){
             return AjaxResult.error("长为空");
@@ -42,7 +102,144 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService 
             return AjaxResult.error("重为空");
         }
 
+        //查询满足条件的库位类型
+        LambdaQueryWrapper<LocationType> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.gt(LocationType::getLength,wcsTask.getLength())
+                .gt(LocationType::getWidth, wcsTask.getWidth())
+                .gt(LocationType::getHeight, wcsTask.getHeight())
+                .gt(LocationType::getMaxWeight, wcsTask.getWidth());
+        List<LocationType> locationTypeList = locationTypeService.list(lambdaQueryWrapper);
+        List<String> codeList = new ArrayList<>();
+        for (LocationType locationType: locationTypeList) {
+            codeList.add(locationType.getCode());
+        }
+
+        String locationCode = null;
+        //查询任务明细
+        LambdaQueryWrapper<TaskDetail> taskDetailLambda = Wrappers.lambdaQuery();
+        taskDetailLambda.eq(TaskDetail::getTaskId, wcsTask.getTaskNo());
+        List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambda);
+
+        List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
+        for (TaskDetail taskDetail : taskDetailList) {
+            receiptContainerDetailList.add(receiptContainerDetailService.getById(taskDetail.getAllocationId()));
+        }
+        //去重
+        receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList());
+
+        for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
+            ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId());
+            String locatingRule = receiptContainerHeader.getLocatingRule(); //定位规则
+            if (StringUtils.isEmpty(locatingRule)){
+                locatingRule = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()).getLocatingRule();
+                //入库单明细定位规则不为空时执行
+                if (StringUtils.isEmpty(locatingRule)){
+                    //入库单明细为空时,查询物料表中是否含有定位规则
+                    LambdaQueryWrapper<Material> materialLambda = Wrappers.lambdaQuery();
+                    materialLambda.eq(Material::getCode, receiptContainerDetail.getMaterialCode());
+                    Material material = materialService.getOne(materialLambda);
+                    locatingRule = material.getLocatingRule();
+
+                    if (StringUtils.isEmpty(locatingRule)){
+                        //物料表中定位规则为空时,查询物料类别
+                        LambdaQueryWrapper<MaterialType> materialTypeLambda = Wrappers.lambdaQuery();
+                        materialTypeLambda.eq(MaterialType::getCode, material.getType());
+                        MaterialType materialType = materialTypeService.getOne(materialTypeLambda);
+                        locatingRule = materialType.getLocatingRule();
+                        if (StringUtils.isEmpty(locatingRule)){
+                            //物料类别中定位规则为空时,查询入库首选项
+                            LambdaQueryWrapper<ConfigValue> configValueLambda = Wrappers.lambdaQuery();
+                            configValueLambda.eq(ConfigValue::getWarehouseCode, ShiroUtils.getWarehouseCode())
+                                    .eq(ConfigValue::getModuleType, "receipt")
+                                    .eq(ConfigValue::getRecordType, "入库首选项");
+                            ConfigValue configValue = configValueService.getOne(configValueLambda);
+                            LambdaQueryWrapper<ReceiptPreference> receiptPreferenceLambda = Wrappers.lambdaQuery();
+                            receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue());
+                            ReceiptPreference receiptPreference = receiptPreferenceService.getOne(receiptPreferenceLambda);
+                            locatingRule = receiptPreferenceService.getOne(receiptPreferenceLambda).getLocationRule();
+                        }
+                    }
+                }
+
+            }
+            //通过定位规则查找自定义sql
+            if (StringUtils.isEmpty(locatingRule)){
+                throw new ServiceException("未绑定定位规则");
+            }
+
+            LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
+            filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule);
+            FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
+
+            String[] locatingRules = filterConfigDetail.getStatement().split("limit");
+
+            //根据定位规则查询库位编码
+            LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
+            locationLambda.last(locatingRules[0]);
+            List<Location> locationList = locationService.list(locationLambda);
+//            locationList.stream().filter(location -> location.getLocationType().equals(locationTypeList.get(0)));
+            locationCode = filter(locationList, locationTypeList);
+            if (StringUtils.isEmpty(locationCode)){
+                throw new ServiceException("没有库位可分配");
+            }
+
+            if (StringUtils.isNotEmpty(locationCode)){
+                locationService.updateStatus(locationCode, "lock");
+            } else {
+                throw new ServiceException("定位失败,请检查定位规则是否正确");
+            }
 
+            //更新库位编码到组盘头表
+            receiptContainerHeader.setToLocation(locationCode);
+            if (!receiptContainerHeaderService.updateById(receiptContainerHeader)){
+                throw new ServiceException("更新库位失败");
+            }
+
+            //把库位编码赋到该入库组盘头表下的所有明细
+            LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery();
+            lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId());
+            List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda);
+            for (ReceiptContainerDetail receiptContainerDetail2: receiptContainerDetails) {
+                receiptContainerDetail2.setLocationCode(locationCode);
+                if (!receiptContainerDetailService.updateById(receiptContainerDetail2)){throw new ServiceException("更新库位编码到入库组盘明细");}
+            }
+
+        }
+        if (StringUtils.isNotEmpty(locationCode)){
+            //修改任务明细目标库位
+            for (TaskDetail taskDetail : taskDetailList) {
+                taskDetail.setToLocation(locationCode);
+                if (!taskDetailService.updateById(taskDetail)){ throw new ServiceException("更新任务明细目标库位失败");}
+            }
+
+            TaskHeader taskHeader = taskHeaderService.getById(wcsTask.getTaskNo());
+
+            taskHeader.setToLocation(locationCode);
+            if (!taskHeaderService.updateById(taskHeader)){throw new ServiceException("更新任务头表目标库位失败");}
+            WcsTask wcsTaskResult = new WcsTask();
+            wcsTaskResult.setToLocationCode(locationCode);
+            return AjaxResult.success(wcsTaskResult);
+        }
+
+        return AjaxResult.error("错误");
+    }
+
+    /**
+     * 库位筛选
+     * @param locationList
+     * @param locationTypeList
+     * @return
+     */
+    public String filter(List<Location> locationList, List<LocationType> locationTypeList){
+        String locationCode = null;
+        for (Location location: locationList){
+            for (LocationType locationType: locationTypeList) {
+                if (location.getLocationType().equals(locationType.getCode())){
+                    locationCode = location.getCode();
+                    return locationCode;
+                }
+            }
+        }
         return null;
     }
 }
diff --git a/src/main/java/com/huaheng/pc/config/station/controller/stationController.java b/src/main/java/com/huaheng/pc/config/station/controller/stationController.java
new file mode 100644
index 0000000..fef29bd
--- /dev/null
+++ b/src/main/java/com/huaheng/pc/config/station/controller/stationController.java
@@ -0,0 +1,136 @@
+package com.huaheng.pc.config.station.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.config.station.domain.Station;
+import com.huaheng.pc.config.station.service.StationService;
+import io.swagger.annotations.ApiParam;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by Enzo Cotter on 2019/10/14.
+ */
+@Controller
+@RequestMapping("/config/station")
+public class stationController extends BaseController {
+
+    @Resource
+    private StationService stationService;
+
+    private String prefix = "config/station";
+
+    @RequiresPermissions("config:station:view")
+    @GetMapping()
+    public String station() {
+        return prefix + "/station";
+    }
+
+    /**
+     * 查询出库类型
+     */
+    @RequiresPermissions("config:station:list")
+    @Log(title = "配置-站台",operating = "站台列表", action = BusinessType.GRANT)
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(@ApiParam(name="shipmentType",value="编码、类型") Station station,
+                              @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin,
+                              @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) {
+        LambdaQueryWrapper<Station> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Station::getCreated, createdBegin)
+                .lt(StringUtils.isNotEmpty(createdEnd), Station::getCreated, createdEnd)
+                .eq(StringUtils.isNotEmpty(station.getCode()), Station::getCode, station.getCode())
+                .eq(StringUtils.isNotEmpty(station.getType()), Station::getType, station.getType())
+                .eq(Station::getWarehouseCode, ShiroUtils.getWarehouseCode());
+
+        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
+            /*使用分页查询*/
+            Page<Station> page = new Page<>(pageNum, pageSize);
+            IPage<Station> iPage = stationService.page(page, lambdaQueryWrapper);
+            return getMpDataTable(iPage.getRecords(), iPage.getTotal());
+        } else {
+            List<Station> list = stationService.list(lambdaQueryWrapper);
+            return getDataTable(list);
+        }
+    }
+
+    /**
+     * 新增站台
+     */
+    @GetMapping("/add")
+    public String add() {
+        return prefix + "/add";
+    }
+
+    /**
+     * 新增保存站台
+     */
+    @RequiresPermissions("config:station:add")
+    @Log(title = "配置-站台",operating = "新增站台", action = BusinessType.INSERT)
+    @PostMapping("/add")
+    @ResponseBody
+    public AjaxResult addSave(Station station) {
+        station.setWarehouseCode(ShiroUtils.getWarehouseCode());
+        return toAjax(stationService.save(station));
+    }
+
+    /**
+     * 修改站台
+     */
+    @GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Integer id, ModelMap mmap) {
+        Station station = stationService.getById(id);
+        mmap.put("station", station);
+        return prefix + "/edit";
+    }
+
+    /**
+     * 修改保存站台
+     */
+    @RequiresPermissions("config:station:edit")
+    @Log(title = "配置-站台",operating = "修改站台", action = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(Station station) {
+        station.setLastUpdatedBy(ShiroUtils.getLoginName());
+        return toAjax(stationService.updateById(station));
+    }
+
+    /**
+     * 删除出库
+     */
+    @RequiresPermissions("config:station: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<>(Arrays.asList(Convert.toIntArray(ids)));
+        return toAjax(stationService.removeByIds(list));
+    }
+
+}
diff --git a/src/main/java/com/huaheng/pc/config/station/domain/Station.java b/src/main/java/com/huaheng/pc/config/station/domain/Station.java
index 70eadf5..0b935bf 100644
--- a/src/main/java/com/huaheng/pc/config/station/domain/Station.java
+++ b/src/main/java/com/huaheng/pc/config/station/domain/Station.java
@@ -30,6 +30,13 @@ public class Station implements Serializable {
     private String code;
 
     /**
+     * 类型
+     */
+    @TableField(value = "type")
+    @ApiModelProperty(value="类型")
+    private String type;
+
+    /**
      * 状态
      */
     @TableField(value = "status")
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerHeader.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerHeader.java
index eaa2e5b..bc1dc27 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerHeader.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerHeader.java
@@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
 
 @ApiModel(value="com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader")
 @TableName(value = "receipt_container_header")
+@Data
 public class ReceiptContainerHeader implements Serializable {
     /**
      * ID
@@ -208,563 +211,13 @@ public class ReceiptContainerHeader implements Serializable {
     @ApiModelProperty(value="状态")
     private Short status;
 
-    private static final long serialVersionUID = 1L;
-
-    public static final String COL_WAREHOUSECODE = "warehouseCode";
-
-    public static final String COL_COMPANYCODE = "companyCode";
-
-    public static final String COL_CONTAINERCODE = "containerCode";
-
-    public static final String COL_CONTAINERTYPE = "containerType";
-
-    public static final String COL_TASKTYPE = "taskType";
-
-    public static final String COL_WEIGHT = "weight";
-
-    public static final String COL_PROJECTNO = "projectNo";
-
-    public static final String COL_LOCATINGRULE = "locatingRule";
-
-    public static final String COL_FROMLOCATION = "fromLocation";
-
-    public static final String COL_TOLOCATION = "toLocation";
-
-    public static final String COL_WAVEID = "waveId";
-
-    public static final String COL_TASKCREATED = "taskCreated";
-
-    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_STATUS = "status";
-
-    /**
-     * 获取ID
-     *
-     * @return id - ID
-     */
-    public  Integer getId() {
-        return this.id;
-    }
-
-    /**
-     * 设置ID
-     *
-     * @param id ID
-     */
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    /**
-     * 获取仓库
-     *
-     * @return warehouseCode - 仓库
-     */
-    public String getWarehouseCode() {
-        return warehouseCode;
-    }
-
-    /**
-     * 设置仓库
-     *
-     * @param warehouseCode 仓库
-     */
-    public void setWarehouseCode(String warehouseCode) {
-        this.warehouseCode = warehouseCode;
-    }
-
-    /**
-     * 获取货主
-     *
-     * @return companyCode - 货主
-     */
-    public String getCompanyCode() {
-        return companyCode;
-    }
-
-    /**
-     * 设置货主
-     *
-     * @param companyCode 货主
-     */
-    public void setCompanyCode(String companyCode) {
-        this.companyCode = companyCode;
-    }
-
-    /**
-     * 获取容器号
-     *
-     * @return containerCode - 容器号
-     */
-    public String getContainerCode() {
-        return containerCode;
-    }
-
-    /**
-     * 设置容器号
-     *
-     * @param containerCode 容器号
-     */
-    public void setContainerCode(String containerCode) {
-        this.containerCode = containerCode;
-    }
-
-    /**
-     * 获取容器类型
-     *
-     * @return containerType - 容器类型
-     */
-    public String getContainerType() {
-        return containerType;
-    }
-
-    /**
-     * 设置容器类型
-     *
-     * @param containerType 容器类型
-     */
-    public void setContainerType(String containerType) {
-        this.containerType = containerType;
-    }
-
-    /**
-     * 获取任务类型
-     *
-     * @return taskType - 任务类型
-     */
-    public String getTaskType() {
-        return taskType;
-    }
-
-    /**
-     * 设置任务类型
-     *
-     * @param taskType 任务类型
-     */
-    public void setTaskType(String taskType) {
-        this.taskType = taskType;
-    }
-
-    /**
-     * 获取重量
-     *
-     * @return weight - 重量
-     */
-    public String getWeight() {
-        return weight;
-    }
-
-    /**
-     * 设置重量
-     *
-     * @param weight 重量
-     */
-    public void setWeight(String weight) {
-        this.weight = weight;
-    }
-
-    /**
-     * 获取项目号
-     *
-     * @return projectNo - 项目号
-     */
-    public String getProjectNo() {
-        return projectNo;
-    }
-
-    /**
-     * 设置项目号
-     *
-     * @param projectNo 项目号
-     */
-    public void setProjectNo(String projectNo) {
-        this.projectNo = projectNo;
-    }
-
-    /**
-     * 获取定位规则
-     *
-     * @return locatingRule - 定位规则
-     */
-    public String getLocatingRule() {
-        return locatingRule;
-    }
-
-    /**
-     * 设置定位规则
-     *
-     * @param locatingRule 定位规则
-     */
-    public void setLocatingRule(String locatingRule) {
-        this.locatingRule = locatingRule;
-    }
-
-    /**
-     * 获取从库位
-     *
-     * @return fromLocation - 从库位
-     */
-    public String getFromLocation() {
-        return fromLocation;
-    }
-
-    /**
-     * 设置从库位
-     *
-     * @param fromLocation 从库位
-     */
-    public void setFromLocation(String fromLocation) {
-        this.fromLocation = fromLocation;
-    }
-
-    /**
-     * 获取目标库位
-     *
-     * @return toLocation - 目标库位
-     */
-    public String getToLocation() {
-        return toLocation;
-    }
-
-    /**
-     * 设置目标库位
-     *
-     * @param toLocation 目标库位
-     */
-    public void setToLocation(String toLocation) {
-        this.toLocation = toLocation;
-    }
-
-    /**
-     * 获取波次号
-     *
-     * @return waveId - 波次号
-     */
-    public Integer getWaveId() {
-        return waveId;
-    }
-
     /**
-     * 设置波次号
-     *
-     * @param waveId 波次号
+     * 站台
      */
-    public void setWaveId(Integer waveId) {
-        this.waveId = waveId;
-    }
+    @TableField(value = "recvDock")
+    @ApiModelProperty(value="站台")
+    private String recvDock;
 
-    /**
-     * 获取任务已创建
-     *
-     * @return taskCreated - 任务已创建
-     */
-    public Integer getTaskCreated() {
-        return taskCreated;
-    }
-
-    /**
-     * 设置任务已创建
-     *
-     * @param taskCreated 任务已创建
-     */
-    public void setTaskCreated(Integer taskCreated) {
-        this.taskCreated = taskCreated;
-    }
-
-    /**
-     * 获取创建时间
-     *
-     * @return created - 创建时间
-     */
-    public Date getCreated() {
-        return created;
-    }
-
-    /**
-     * 设置创建时间
-     *
-     * @param created 创建时间
-     */
-    public void setCreated(Date created) {
-        this.created = created;
-    }
-
-    /**
-     * 获取创建用户
-     *
-     * @return createdBy - 创建用户
-     */
-    public String getCreatedBy() {
-        return createdBy;
-    }
-
-    /**
-     * 设置创建用户
-     *
-     * @param createdBy 创建用户
-     */
-    public void setCreatedBy(String createdBy) {
-        this.createdBy = createdBy;
-    }
-
-    /**
-     * 获取创建时间
-     *
-     * @return lastUpdated - 创建时间
-     */
-    public Date getLastUpdated() {
-        return lastUpdated;
-    }
-
-    /**
-     * 设置创建时间
-     *
-     * @param lastUpdated 创建时间
-     */
-    public void setLastUpdated(Date lastUpdated) {
-        this.lastUpdated = lastUpdated;
-    }
-
-    /**
-     * 获取更新用户
-     *
-     * @return lastUpdatedBy - 更新用户
-     */
-    public String getLastUpdatedBy() {
-        return lastUpdatedBy;
-    }
-
-    /**
-     * 设置更新用户
-     *
-     * @param lastUpdatedBy 更新用户
-     */
-    public void setLastUpdatedBy(String lastUpdatedBy) {
-        this.lastUpdatedBy = lastUpdatedBy;
-    }
-
-    /**
-     * 获取数据版本
-     *
-     * @return version - 数据版本
-     */
-    public Integer getVersion() {
-        return version;
-    }
-
-    /**
-     * 设置数据版本
-     *
-     * @param version 数据版本
-     */
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
-
-    /**
-     * 获取自定义字段1
-     *
-     * @return userDef1 - 自定义字段1
-     */
-    public String getUserDef1() {
-        return userDef1;
-    }
-
-    /**
-     * 设置自定义字段1
-     *
-     * @param userDef1 自定义字段1
-     */
-    public void setUserDef1(String userDef1) {
-        this.userDef1 = userDef1;
-    }
-
-    /**
-     * 获取自定义字段2
-     *
-     * @return userDef2 - 自定义字段2
-     */
-    public String getUserDef2() {
-        return userDef2;
-    }
-
-    /**
-     * 设置自定义字段2
-     *
-     * @param userDef2 自定义字段2
-     */
-    public void setUserDef2(String userDef2) {
-        this.userDef2 = userDef2;
-    }
-
-    /**
-     * 获取自定义字段3
-     *
-     * @return userDef3 - 自定义字段3
-     */
-    public String getUserDef3() {
-        return userDef3;
-    }
-
-    /**
-     * 设置自定义字段3
-     *
-     * @param userDef3 自定义字段3
-     */
-    public void setUserDef3(String userDef3) {
-        this.userDef3 = userDef3;
-    }
-
-    /**
-     * 获取自定义字段4
-     *
-     * @return userDef4 - 自定义字段4
-     */
-    public String getUserDef4() {
-        return userDef4;
-    }
-
-    /**
-     * 设置自定义字段4
-     *
-     * @param userDef4 自定义字段4
-     */
-    public void setUserDef4(String userDef4) {
-        this.userDef4 = userDef4;
-    }
-
-    /**
-     * 获取自定义字段5
-     *
-     * @return userDef5 - 自定义字段5
-     */
-    public String getUserDef5() {
-        return userDef5;
-    }
-
-    /**
-     * 设置自定义字段5
-     *
-     * @param userDef5 自定义字段5
-     */
-    public void setUserDef5(String userDef5) {
-        this.userDef5 = userDef5;
-    }
-
-    /**
-     * 获取自定义字段6
-     *
-     * @return userDef6 - 自定义字段6
-     */
-    public String getUserDef6() {
-        return userDef6;
-    }
-
-    /**
-     * 设置自定义字段6
-     *
-     * @param userDef6 自定义字段6
-     */
-    public void setUserDef6(String userDef6) {
-        this.userDef6 = userDef6;
-    }
-
-    /**
-     * 获取自定义字段7
-     *
-     * @return userDef7 - 自定义字段7
-     */
-    public String getUserDef7() {
-        return userDef7;
-    }
-
-    /**
-     * 设置自定义字段7
-     *
-     * @param userDef7 自定义字段7
-     */
-    public void setUserDef7(String userDef7) {
-        this.userDef7 = userDef7;
-    }
-
-    /**
-     * 获取自定义字段8
-     *
-     * @return userDef8 - 自定义字段8
-     */
-    public String getUserDef8() {
-        return userDef8;
-    }
-
-    /**
-     * 设置自定义字段8
-     *
-     * @param userDef8 自定义字段8
-     */
-    public void setUserDef8(String userDef8) {
-        this.userDef8 = userDef8;
-    }
-
-    /**
-     * 获取处理标记
-     *
-     * @return processStamp - 处理标记
-     */
-    public String getProcessStamp() {
-        return processStamp;
-    }
-
-    /**
-     * 设置处理标记
-     *
-     * @param processStamp 处理标记
-     */
-    public void setProcessStamp(String processStamp) {
-        this.processStamp = processStamp;
-    }
-
-    /**
-     * 获取状态
-     *
-     * @return status - 状态
-     */
-    public Short getStatus() {
-        return status;
-    }
+    private static final long serialVersionUID = 1L;
 
-    /**
-     * 设置状态
-     *
-     * @param status 状态
-     */
-    public void setStatus(Short status) {
-        this.status = status;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
index cc23162..be1f0a4 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
@@ -26,6 +26,7 @@ import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
 import com.huaheng.pc.system.config.domain.Config;
 import com.huaheng.pc.system.dict.domain.DictData;
 import com.huaheng.pc.system.dict.service.IDictDataService;
+import io.swagger.models.auth.In;
 import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
@@ -296,13 +297,18 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R
         //查询出头表信息
         ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
         Integer minStatus = Integer.parseInt(receiptDetails.get(0).getProcessStamp());
+        Integer maxStatus = Integer.parseInt(receiptDetails.get(0).getProcessStamp());
         //遍历明细状态得出最小状态值
         for (int i = 1; i<receiptDetails.size(); i++){
-            if ( minStatus > Integer.parseInt(receiptDetails.get(1).getProcessStamp())) {
-                minStatus = Integer.parseInt(receiptDetails.get(1).getProcessStamp());
+            if ( minStatus > Integer.parseInt(receiptDetails.get(i).getProcessStamp())) {
+                minStatus = Integer.parseInt(receiptDetails.get(i).getProcessStamp());
+            }
+            if ( maxStatus < Integer.parseInt(receiptDetails.get(i).getProcessStamp())) {
+                maxStatus = Integer.parseInt(receiptDetails.get(i).getProcessStamp());
             }
         }
 
+
         //从数据字典中获取单据当前状态
         List<DictData> dictData = dictDataService.selectDictDataByType("receiptHeaderStatus");
         for (int i = 0; i<dictData.size(); i++){
@@ -314,8 +320,8 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R
         //若更新状态值小于头状态,更新尾状态否则更新头尾状态
         if (minStatus < receiptHeader.getFirstStatus()){
             receiptHeader.setLastStatus(minStatus);
-        } else {
-            receiptHeader.setFirstStatus(minStatus);
+        } if (maxStatus > receiptHeader.getFirstStatus()){
+            receiptHeader.setFirstStatus(maxStatus);
             receiptHeader.setLastStatus(minStatus);
             receiptHeaderService.updateById(receiptHeader);
         }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java b/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
index bd493fc..2d033e9 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiving/service/ReceivingService.java
@@ -90,9 +90,7 @@ public class ReceivingService {
         //如果入库组盘表中有目标库位说明已经指定
         if (StringUtils.isNotEmpty(receiptContainerHeader.getToLocation())){return true;}
         String locatingRule = receiptContainerHeader.getLocatingRule(); //定位规则
-        if (StringUtils.isNotEmpty(locatingRule)){
-            //入库组盘头表中定位规则不为空时执行
-        } else if (locatingRule == null){
+        if (StringUtils.isEmpty(locatingRule)){
             locatingRule = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()).getLocatingRule();
             //入库单明细定位规则不为空时执行
             if (StringUtils.isEmpty(locatingRule)){
@@ -147,6 +145,7 @@ public class ReceivingService {
 
         //更新库位编码到组盘头表
         receiptContainerHeader.setToLocation(locationCode);
+        receiptContainerHeader.setRecvDock("0");
         if (!receiptContainerHeaderService.updateById(receiptContainerHeader)){
             throw new ServiceException("更新库位失败");
         }
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
index 6e94931..85572df 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
@@ -294,5 +294,12 @@ public class TaskHeader implements Serializable {
     @ApiModelProperty(value="处理标记")
     private String processStamp;
 
+    /**
+     * 站台
+     */
+    @TableField(value = "recvDock")
+    @ApiModelProperty(value="站台")
+    private String recvDock;
+
     private static final long serialVersionUID = 1L;
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
index 5542963..5e79b92 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -407,8 +407,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 //                }
 //            }
 
-            //给wcs传递任务
-//            taskAssignService.wcsTaskAssign(task);
+//            给wcs传递任务
+            taskAssignService.wcsTaskAssign(task);
         }
         return AjaxResult.success("执行下发任务成功", task);
     }
@@ -1141,6 +1141,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 task.setFromLocation(receiptContainerHeader.getFromLocation());
                 task.setToLocation(receiptContainerHeader.getToLocation());
                 task.setContainerCode(receiptContainerHeader.getContainerCode());
+                task.setRecvDock(receiptContainerHeader.getRecvDock());
                 task.setCreated(new Date());
                 task.setCreatedBy(ShiroUtils.getLoginName());
                 if (this.save(task)){
@@ -1151,6 +1152,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                         taskDetail.setTaskType(Integer.valueOf(receiptContainerHeaderService.getById(item.getReceiptContainerId()).getTaskType()));
                         taskDetail.setInternalTaskType(100);
                         taskDetail.setWarehouseCode(task.getWarehouseCode());
+                        taskDetail.setAllocationId(item.getReceiptId());
                         taskDetail.setCompanyCode(task.getCompanyCode());
                         taskDetail.setCompanyCode(task.getCompanyCode());
                         taskDetail.setMaterialCode(item.getMaterialCode());
@@ -1174,12 +1176,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                         }
 
                         ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId());
-                        if ("300".equals(receiptDetail.getProcessStamp())){
-                            ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail);
-                            if (!receiptDetailService.updateById(detail)){
-                                throw new ServiceException("更新入库单详情失败");
-                            }
+
+                        ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail);
+                        if (!receiptDetailService.updateById(detail)){
+                            throw new ServiceException("更新入库单详情失败");
                         }
+                        //更新头表状态
+                        receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
+
                     }
                 } else {
                     throw new ServiceException("生成任务头表失败");
diff --git a/src/main/resources/mybatis/config/StationMapper.xml b/src/main/resources/mybatis/config/StationMapper.xml
index 40c50ce..3b74cac 100644
--- a/src/main/resources/mybatis/config/StationMapper.xml
+++ b/src/main/resources/mybatis/config/StationMapper.xml
@@ -7,6 +7,7 @@
     <id column="id" jdbcType="INTEGER" property="id" />
     <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" />
     <result column="created" jdbcType="TIMESTAMP" property="created" />
     <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
@@ -15,6 +16,6 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, code, `status`, warehouseCode, created, createdBy, lastUpdated, lastUpdatedBy
+    id, code, `status`, type, warehouseCode, created, createdBy, lastUpdated, lastUpdatedBy
   </sql>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/receipt/ReceiptContainerHeaderMapper.xml b/src/main/resources/mybatis/receipt/ReceiptContainerHeaderMapper.xml
index 2d30d19..bcc90b0 100644
--- a/src/main/resources/mybatis/receipt/ReceiptContainerHeaderMapper.xml
+++ b/src/main/resources/mybatis/receipt/ReceiptContainerHeaderMapper.xml
@@ -31,12 +31,13 @@
     <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
     <result column="processStamp" jdbcType="VARCHAR" property="processStamp" />
     <result column="status" jdbcType="SMALLINT" property="status" />
+    <result column="recvDock" jdbcType="VARCHAR" property="recvDock" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, warehouseCode, companyCode, containerCode, containerType, taskType, weight, projectNo, 
     locatingRule, fromLocation, toLocation, waveId, taskCreated, created, createdBy, 
     lastUpdated, lastUpdatedBy, version, userDef1, userDef2, userDef3, userDef4, userDef5, 
-    userDef6, userDef7, userDef8, processStamp, `status`
+    userDef6, userDef7, userDef8, processStamp, `status`, recvDock
   </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
index ddbfcbf..e6c753b 100644
--- a/src/main/resources/mybatis/task/TaskHeaderMapper.xml
+++ b/src/main/resources/mybatis/task/TaskHeaderMapper.xml
@@ -41,6 +41,7 @@
         <result column="userDef2" jdbcType="VARCHAR" property="userDef2"/>
         <result column="userDef3" jdbcType="VARCHAR" property="userDef3"/>
         <result column="processStamp" jdbcType="VARCHAR" property="processStamp"/>
+        <result column="recvDock" jdbcType="VARCHAR" property="recvDock" />
     </resultMap>
     <select id="getReceiptTask" resultType="java.util.Map">
    SELECT rd.id receiptDetailId,rd.receiptId,td.taskId, td.warehouseCode, td.id taskDetailId, td.status,
diff --git a/src/main/resources/templates/config/configValue/add.html b/src/main/resources/templates/config/configValue/add.html
index 6b612f5..86dfefc 100644
--- a/src/main/resources/templates/config/configValue/add.html
+++ b/src/main/resources/templates/config/configValue/add.html
@@ -9,13 +9,17 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">模块:</label>
             <div class="col-sm-8">
-                <input id="moduleType" name="moduleType" class="form-control" type="text">
+                <select id="moduleType" name="moduleType" class="form-control" th:with="moduleTypeList=${@dict.getType('moduleType')}">
+                    <option th:each="moduleType : ${moduleTypeList}" th:text="${moduleType['dictLabel']}" th:value="${moduleType['dictValue']}"></option>
+                </select>
             </div>
         </div>
         <div class="form-group">
             <label class="col-sm-3 control-label">类型:</label>
             <div class="col-sm-8">
-                <input id="recordType" name="recordType" class="form-control" type="text">
+                <select id="recordType" name="recordType" class="form-control" th:with="moduleTypeList=${@dict.getType('recordType')}">
+                    <option th:each="moduleType : ${moduleTypeList}" th:text="${moduleType['dictLabel']}" th:value="${moduleType['dictValue']}"></option>
+                </select>
             </div>
         </div>
         <div class="form-group">
diff --git a/src/main/resources/templates/config/configValue/edit.html b/src/main/resources/templates/config/configValue/edit.html
index cb8d6de..4e349b5 100644
--- a/src/main/resources/templates/config/configValue/edit.html
+++ b/src/main/resources/templates/config/configValue/edit.html
@@ -9,13 +9,13 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">模块:</label>
             <div class="col-sm-8">
-                <input id="moduleType" name="moduleType" class="form-control" type="text" th:field="*{moduleType}">
+                <input id="moduleType" name="moduleType" class="form-control" type="text" th:field="*{moduleType}" readonly>
             </div>
         </div>
         <div class="form-group">
             <label class="col-sm-3 control-label">类型:</label>
             <div class="col-sm-8">
-                <input id="recordType" name="recordType" class="form-control" type="text" th:field="*{recordType}">
+                <input id="recordType" name="recordType" class="form-control" type="text" th:field="*{recordType}" readonly>
             </div>
         </div>
         <div class="form-group">
diff --git a/src/main/resources/templates/config/receiptPreference/edit.html b/src/main/resources/templates/config/receiptPreference/edit.html
index 565b81b..849c085 100644
--- a/src/main/resources/templates/config/receiptPreference/edit.html
+++ b/src/main/resources/templates/config/receiptPreference/edit.html
@@ -21,7 +21,7 @@
         <div class="form-group">
             <label class="col-sm-3 control-label">入库流程:</label>
             <div class="col-sm-8">
-                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList('入库单')}" th:field="*{receivingFlow}">
+                <select id="receivingFlow" name="receivingFlow" class="form-control" th:with="statusFlowList=${@StatusFlow.flowList('receivingFlow')}" th:field="*{receivingFlow}">
                     <option th:each="flow : ${statusFlowList}" th:text="${flow['name']}" th:value="${flow['code']}"></option>
                 </select>
             </div>
diff --git a/src/main/resources/templates/config/station/add.html b/src/main/resources/templates/config/station/add.html
new file mode 100644
index 0000000..6bcb411
--- /dev/null
+++ b/src/main/resources/templates/config/station/add.html
@@ -0,0 +1,54 @@
+<!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-station-add">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">编码:</label>
+            <div class="col-sm-8">
+                <input id="code" name="code" 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="type" name="type" 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="status" name="status" 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 + "config/station"
+    $("#form-station-add").validate({
+        rules:{
+            code:{
+                required:true
+            },
+            type:{
+                required: true
+            }
+        },
+        submitHandler: function(form) {
+            // $.operate.save(prefix + "/add", $('#form-supplier-add').serialize());
+            var tableValue = $.common.getTableValue("#form-station-add");
+            $.operate.save(prefix + "/add", tableValue);
+        }
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/config/station/edit.html b/src/main/resources/templates/config/station/edit.html
new file mode 100644
index 0000000..b483673
--- /dev/null
+++ b/src/main/resources/templates/config/station/edit.html
@@ -0,0 +1,54 @@
+<!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-station-add" th:object="${station}">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">编码:</label>
+            <div class="col-sm-8">
+                <input id="code" name="code" class="form-control" type="text" th:field="*{code}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">类型:</label>
+            <div class="col-sm-8">
+                <input id="type" name="type" class="form-control" type="text" th:field="*{type}">
+            </div>
+        </div>
+        <div class="form-group">
+            <label class="col-sm-3 control-label">状态:</label>
+            <div class="col-sm-8">
+                <input id="status" name="status" class="form-control" type="text" th:field="*{status}">
+            </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 + "config/station"
+    $("#form-station-add").validate({
+        rules:{
+            code:{
+                required:true
+            },
+            type:{
+                required: true
+            }
+        },
+        submitHandler: function(form) {
+            // $.operate.save(prefix + "/add", $('#form-supplier-add').serialize());
+            var tableValue = $.common.getTableValue("#form-station-add");
+            $.operate.save(prefix + "/edit", tableValue);
+        }
+    });
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/config/station/station.html b/src/main/resources/templates/config/station/station.html
new file mode 100644
index 0000000..6b5f357
--- /dev/null
+++ b/src/main/resources/templates/config/station/station.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<meta charset="utf-8">
+<head th:include="include :: header"></head>
+<body class="gray-bg">
+<div class="container-div">
+    <div class="row">
+        <div class="col-sm-12 select-info">
+            <form id="supplier-form">
+                <div class="select-list">
+                    <ul>
+                        <li>
+                            编码:<input type="text" name="code"/>
+                        </li>
+                        <li class="time">
+                            <label>创建时间: </label>
+                            <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/>
+                            <span>-</span>
+                            <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/>
+                        </li>
+                        <li>
+                            <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                            <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('supplier-form')"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            <!--<a class="btn btn-success btn-rounded btn-sm" onclick="$.table.exportExcel()" shiro:hasPermission="config:supplier: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="config:station:add">
+                <i class="fa fa-plus"></i> 新增
+            </a>
+            <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="config:station:remove">
+                <i class="fa fa-trash-o"></i> 删除
+            </a>
+        </div>
+
+        <div class="col-sm-12 select-info">
+            <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table>
+        </div>
+    </div>
+</div>
+<div th:include="include :: footer"></div>
+<script th:inline="javascript">
+    var editFlag = [[${@permission.hasPermi('config:station:edit')}]];
+    var removeFlag = [[${@permission.hasPermi('config:station:remove')}]];
+    var prefix = ctx + "config/station"
+    var datas = [[${@dict.getType('sys_normal_disable')}]];
+    $(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 : 'warehouseCode',
+                    title : '仓库'
+                },
+                {
+                    field : 'code',
+                    title : '编码'
+                },
+                {
+                    field : 'type',
+                    title : '类型'
+                },
+                {
+                    field : 'status',
+                    title : '状态'
+                },
+                {
+                    field : 'created',
+                    title : '创建时间'
+                },
+                {
+                    field : 'createdBy',
+                    title : '创建用户'
+                },
+                {
+                    field : 'lastUpdated',
+                    title : '更新时间'
+                },
+                {
+                    field : 'lastUpdatedBy',
+                    title : '更新用户'
+                },
+                {
+                    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/task/taskHeader/taskHeader.html b/src/main/resources/templates/task/taskHeader/taskHeader.html
index b908105..5749be0 100644
--- a/src/main/resources/templates/task/taskHeader/taskHeader.html
+++ b/src/main/resources/templates/task/taskHeader/taskHeader.html
@@ -188,6 +188,11 @@
 					title : '容器号' ,
                     sortable: true
 				},
+					{
+						field : 'exceptionCode',
+						title : '异常原因',
+						sortable: true
+					},
 
 				{
 						field : 'startPickDateTime',
@@ -218,7 +223,8 @@
 				},
 				{
 					field : 'userDef1', 
-					title : '处理' ,
+					title : '自定义字段1' ,
+					visible:false
 				},
 				{
 					field : 'userDef2',