diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java
index 25cbc41..171c793 100644
--- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java
+++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java
@@ -25,7 +25,9 @@ public enum DriverTypeEnum {
 
     AGV_NDC_TWO(8, "agv_ndc_two", "NDC2楼AGV", "agv"),
 
-    XGAGV(9, "xg_agv", "xg_agv", "agv");
+    XGAGV(9, "xg_agv", "xg_agv", "agv"),
+
+    AUTODOOR(10, "standard_autodoor", "标准版-自动门", "autodoor");
 
     //驱动索引
     private int index;
diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java
index 192cfa6..fa681a3 100644
--- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java
+++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java
@@ -11,7 +11,8 @@ import com.alibaba.fastjson.JSONObject;
  */
 public enum RequestMethodEnum {
     apply_mjxl(1, "MJXLTask", "涂板线满架下料","1"),
-    feedback_task_status(2, "feedback_task_status", "反馈任务状态","1");
+    feedback_task_status(2, "feedback_task_status", "反馈任务状态","1"),
+    apply_bpsl(3, "BPSLTask", "包片上料","1");
 
 
     //驱动索引
diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java
index 1aca9c4..8a30c13 100644
--- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java
+++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java
@@ -446,6 +446,9 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp
             if (devicecode.startsWith("TBX")) {
                 request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode());
                 request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName());
+            }else if(devicecode.startsWith("BP")){
+                request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode());
+                request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName());
             }
             String resp = acsToWmsService.applyTask(request);
             JSONObject res_jo = JSONObject.parseObject(resp);
diff --git a/acs/nladmin-ui/src/views/acs/device/config.vue b/acs/nladmin-ui/src/views/acs/device/config.vue
index 4f95dc4..91a8fc8 100644
--- a/acs/nladmin-ui/src/views/acs/device/config.vue
+++ b/acs/nladmin-ui/src/views/acs/device/config.vue
@@ -73,6 +73,7 @@
 import crud from '@/mixins/crud'
 import { get, selectDriverCodeList } from '@/api/acs/device/driverConfig'
 import { getDicts } from '@/views/system/dict/dict'
+import standard_autodoor from '@/views/acs/device/driver/standard_autodoor'
 import standard_inspect_site from './driver/standard_inspect_site'
 import standard_ordinary_site from './driver/standard_ordinary_site'
 import standard_storage from '@/views/acs/device/driver/standard_storage'
@@ -88,9 +89,11 @@ import agv_ndc_one from '@/views/acs/device/driver/agv/agv_ndc_one'
 import agv_ndc_two from '@/views/acs/device/driver/agv/agv_ndc_two'
 import xg_agv from '@/views/acs/device/driver/agv/xg_agv'
 
+
 export default {
   name: 'DeviceConfig',
   components: {
+    standard_autodoor,
     standard_ordinary_site,
     standard_inspect_site,
     standard_storage,
diff --git a/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue b/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue
new file mode 100644
index 0000000..41e2f46
--- /dev/null
+++ b/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue
@@ -0,0 +1,352 @@
+<template>
+  <!--自动门-->
+  <div>
+
+    <el-card class="box-card" shadow="never">
+      <div slot="header" class="clearfix">
+        <span class="role-span">设备协议:</span>
+      </div>
+
+      <el-row>
+        <el-col :span="12">
+          OpcServer:
+          <el-select
+            v-model="opc_id"
+            placeholder="无"
+            clearable
+            @change="changeOpc"
+          >
+            <el-option
+              v-for="item in dataOpcservers"
+              :key="item.opc_id"
+              :label="item.opc_name"
+              :value="item.opc_id"
+            />
+          </el-select>
+        </el-col>
+        <el-col :span="12">
+          PLC:
+          <el-select
+            v-model="plc_id"
+            placeholder="无"
+            clearable
+            @change="changePlc"
+          >
+            <el-option
+              v-for="item in dataOpcPlcs"
+              :key="item.plc_id"
+              :label="item.plc_name"
+              :value="item.plc_id"
+            />
+          </el-select>
+        </el-col>
+      </el-row>
+
+    </el-card>
+
+    <el-card class="box-card" shadow="never">
+      <div slot="header" class="clearfix">
+        <span class="role-span">输送系统:</span>
+      </div>
+      <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="电气调度号" label-width="150px">
+              <el-switch v-model="form.OPCServer" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+
+    <el-card class="box-card" shadow="never">
+      <div slot="header" class="clearfix">
+        <span class="role-span">PLC读取字段:</span>
+      </div>
+      <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
+        <el-table
+          v-loading="false"
+          :data="data1"
+          :max-height="550"
+          size="small"
+          style="width: 100%;margin-bottom: 15px"
+        >
+
+          <el-table-column prop="name" label="用途" />
+          <el-table-column prop="code" label="别名要求" />
+          <el-table-column prop="db" label="DB块">
+            <template slot-scope="scope">
+              <el-input
+                v-model="data1[scope.$index].db"
+                size="mini"
+                class="edit-input"
+                @input="finishReadEdit(data1[scope.$index])"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column prop="dbr_value">
+            <template slot="header">
+              <el-link type="primary" :underline="false" @click.native="test_read1()">测试读</el-link>
+            </template>
+            <template slot-scope="scope">
+              <el-input v-model="data1[scope.$index].dbr_value" size="mini" class="edit-input" />
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+    </el-card>
+
+    <el-card class="box-card" shadow="never">
+      <div slot="header" class="clearfix">
+        <span class="role-span">PLC写入字段:</span>
+      </div>
+      <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
+        <el-table
+          v-loading="false"
+          :data="data2"
+          :max-height="550"
+          size="small"
+          style="width: 100%;margin-bottom: 15px"
+        >
+
+          <el-table-column prop="name" label="用途" />
+          <el-table-column prop="code" label="别名要求" />
+          <el-table-column prop="db" label="DB块">
+            <template slot-scope="scope">
+              <el-input
+                v-model="data2[scope.$index].db"
+                size="mini"
+                class="edit-input"
+                @input="finishWriteEdit(data2[scope.$index])"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column prop="dbw_value">
+            <template slot="header">
+              <el-link type="primary" :underline="false" @click.native="test_write1()">测试写</el-link>
+            </template>
+            <template slot-scope="scope">
+              <el-input v-model="data2[scope.$index].dbw_value" size="mini" class="edit-input" />
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+    </el-card>
+
+    <el-card class="box-card" shadow="never">
+      <div slot="header" class="clearfix">
+        <span class="role-span" />
+        <el-button
+          :loading="false"
+          icon="el-icon-check"
+          size="mini"
+          style="float: right; padding: 6px 9px"
+          type="primary"
+          @click="doSubmit"
+        >保存
+        </el-button>
+      </div>
+    </el-card>
+
+  </div>
+</template>
+
+<script>
+import {
+  queryDriverConfig,
+  updateConfig,
+  testRead,
+  testwrite
+} from '@/api/acs/device/driverConfig'
+import { selectOpcList } from '@/api/acs/device/opc'
+import { selectPlcList } from '@/api/acs/device/opcPlc'
+import { selectListByOpcID } from '@/api/acs/device/opcPlc'
+
+import crud from '@/mixins/crud'
+
+export default {
+  name: 'StandardAutodoor',
+  mixins: [crud],
+  props: {
+    parentForm: {
+      type: Object,
+      require: true
+    }
+  },
+  data() {
+    return {
+      device_code: '',
+      device_id: '',
+      plc_id: '',
+      plc_code: '',
+      opc_id: '',
+      opc_code: '',
+      configLoading: false,
+      dataOpcservers: [],
+      dataOpcPlcs: [],
+      data1: [],
+      data2: [],
+      form: {
+        inspect_in_stocck: true,
+        ignore_pickup_check: true,
+        ignore_release_check: true,
+        apply_task: true,
+        manual_create_task: true,
+        is_pickup: true,
+        is_release: true
+      },
+      rules: {}
+    }
+  },
+  created() {
+    this.$nextTick(() => {
+      // 从父表单获取设备编码
+      this.device_id = this.$props.parentForm.device_id
+      this.device_code = this.$props.parentForm.device_code
+      queryDriverConfig(this.device_id, this.$props.parentForm.driver_code).then(data => {
+        // 给表单赋值,并且属性不能为空
+        if (data.form) {
+          const arr = Object.keys(data.form)
+          // 不为空
+          if (arr.length > 0) {
+            this.form = data.form
+          }
+        }
+
+        // 给表单赋值,并且属性不能为空
+        if (data.parentForm) {
+          const arr = Object.keys(data.parentForm)
+          // 不为空
+          if (arr.length > 0) {
+            this.opc_code = data.parentForm.opc_code
+            this.plc_code = data.parentForm.plc_code
+          }
+        }
+        this.data1 = data.rs
+        this.data2 = data.ws
+        this.sliceItem()
+      })
+      selectPlcList().then(data => {
+        this.dataOpcPlcs = data
+        this.plc_id = this.$props.parentForm.opc_plc_id
+      })
+      selectOpcList().then(data => {
+        this.dataOpcservers = data
+        this.opc_id = this.$props.parentForm.opc_server_id
+      })
+    })
+  },
+  methods: {
+    changeOpc(val) {
+      this.dataOpcservers.forEach(item => {
+        if (item.opc_id === val) {
+          this.opc_code = item.opc_code
+        }
+      })
+      selectListByOpcID(val).then(data => {
+        this.dataOpcPlcs = data
+        this.plc_id = ''
+        this.plc_code = ''
+        if (this.dataOpcPlcs && this.dataOpcPlcs.length > 0) {
+          this.plc_id = this.dataOpcPlcs[0].plc_id
+          this.plc_code = this.dataOpcPlcs[0].plc_code
+        }
+        this.sliceItem()
+      })
+    },
+    finishReadEdit(data) {
+      // 编辑的是code列,并且值包含mode
+      if (data.code.indexOf('mode') !== -1) {
+        const dbValue = data.db
+        // .之前的字符串
+        const beforeStr = dbValue.match(/(\S*)\./)[1]
+        // .之后的字符串
+        const afterStr = dbValue.match(/\.(\S*)/)[1]
+        // 取最后数字
+        const endNumber = afterStr.substring(1)
+        // 最后为非数字
+        if (isNaN(parseInt(endNumber))) {
+          return
+        }
+        for (const val in this.data1) {
+          if (this.data1[val].code.indexOf('action') !== -1) {
+            this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 1)
+          }
+          if (this.data1[val].code.indexOf('error') !== -1) {
+            this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2)
+          }
+        }
+      }
+    },
+    changePlc(val) {
+      this.dataOpcPlcs.forEach(item => {
+        if (item.plc_id === val) {
+          this.plc_code = item.plc_code
+          this.sliceItem()
+          return
+        }
+      })
+    },
+    test_read1() {
+      testRead(this.data1, this.opc_id).then(data => {
+        this.data1 = data
+        this.notify('操作成功!', 'success')
+      }).catch(err => {
+        console.log(err.response.data.message)
+      })
+    },
+    test_write1() {
+      testwrite(this.data2, this.opc_id).then(data => {
+        this.notify('操作成功!', 'success')
+      }).catch(err => {
+        console.log(err.response.data.message)
+      })
+    },
+    doSubmit() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.configLoading = true
+          // 根据驱动类型判断是否为路由设备
+          const parentForm = this.parentForm
+          parentForm.is_route = true
+          parentForm.plc_id = this.plc_id
+          parentForm.opc_id = this.opc_id
+          updateConfig(parentForm, this.form, this.data1, this.data2).then(res => {
+            this.notify('保存成功', 'success')
+            this.configLoading = false
+          }).catch(err => {
+            this.configLoading = false
+            console.log(err.response.data.message)
+          })
+        }
+      })
+    },
+    sliceItem() { // 拼接DB的Item值
+      this.data1.forEach(item => {
+        const str = item.code
+        // 是否包含.
+        if (str.search('.') !== -1) {
+          // 截取最后一位
+          item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
+        } else {
+          item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
+        }
+      })
+      this.data2.forEach(item => {
+        const str = item.code
+        // 是否包含.
+        if (str.search('.') !== -1) {
+          // 截取最后一位
+          item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
+        } else {
+          item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java
index 147429b..8845fb6 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -19,6 +20,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
 import org.nl.wms.sch.task.service.dao.SchBaseTask;
 import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
 import org.nl.wms.sch.task_manage.AbstractTask;
+import org.nl.wms.sch.task_manage.GeneralDefinition;
 import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
 import org.nl.wms.sch.task_manage.enums.GroupStatusEnum;
 import org.nl.wms.sch.task_manage.task.TaskType;
@@ -58,7 +60,9 @@ public class BPSLTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
@@ -69,72 +73,64 @@ public class BPSLTask extends AbstractTask {
         SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
                 .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
         for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
+            // 找起点
+            SchBasePoint nextPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
+                    .eq(SchBasePoint::getPoint_code, task.getPoint_code2()));
             String extGroupData = task.getExt_group_data();
             JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
+            String materialType = jsonObject.getString("material_type");
+            SchBasePoint point = findNextPoint(jsonObject);
             if (ObjectUtil.isEmpty(point)) {
                 task.setRemark("未找到所需点位!");
                 taskService.update(task);
                 // 消息通知
+                log.info("包片上料未找到当前符合条件的点位materialType:{},",materialType);
                 continue;
             }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
+            // 设置起点并修改创建成功状态
+            task.setPoint_code1(point.getPoint_code());
             task.setTask_status(TaskStatus.CREATED.getCode());
             task.setRemark("");
             taskService.update(task);
 
+            //发起任务时先把点位占用,防止发起重复任务
             point.setIng_task_code(task.getTask_code());
+            point.setVehicle_qty(point.getVehicle_qty() - 1);
+            point.setVehicle_type(materialType);
             pointService.update(point);
 
             //下发
-//            this.renotifyAcs(task);
+            this.renotifyAcs(task);
         }
     }
 
     /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
+     * 判断目标点位
+     * 从10-1查找可以物料一致且有货的点位
      *
-     * @param nextRegionStr
      * @param extGroupData
      * @return
      */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
-        }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
-        }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
+    private SchBasePoint findNextPoint(JSONObject extGroupData) {
+        String regionCode = "HCQ1";
+        String materialType = extGroupData.getString("material_type");
+        List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"2");
+        for(int i=schBasePointList.size()-1;i>=0;i--){
+            SchBasePoint schBasePoint=schBasePointList.get(i);
+            if (schBasePoint.getVehicle_qty()!=0
+                    &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code())
+                    &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){
+                log.info("包片上料任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code());
+                return schBasePoint;
+            }
         }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+        return null;
     }
 
+    /**
+     * 1.取货完毕后起点减少最后一份组盘,,并且该组盘视为已结束
+     * 2.包片机LMS不记录点位信息,由人工对组盘进行操作
+     */
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
@@ -146,18 +142,6 @@ public class BPSLTask extends AbstractTask {
         if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
             throw new BadRequestException("该任务已取消!");
         }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
         String startPoint = taskObj.getPoint_code1(); // 获取起点
         String endPoint = taskObj.getPoint_code2(); // 获取终点
         SchBasePoint startPointObj = pointService.getById(startPoint);
@@ -168,46 +152,40 @@ public class BPSLTask extends AbstractTask {
             taskObj.setRemark("执行中");
         }
         if (status.equals(TaskStatus.FINISHED)) { // 完成
+            List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList());
+            String vehicleCode=vehicleCodeList.get(vehicleCodeList.size()-1);
+            SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
+                    .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
+                    .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status,
+                            GroupBindMaterialStatusEnum.BOUND.getValue()));
+            if (ObjectUtil.isEmpty(one)) {
+                throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到");
+            }
+            one.setTask_code(taskObj.getTask_code());
+            one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
+            one.setPoint_name(endPointObj.getPoint_name());
+            one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code());
+            one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
+            one.setUpdate_id(GeneralDefinition.ACS_ID);
+            one.setUpdate_name(GeneralDefinition.ACS_NAME);
+            one.setUpdate_time(DateUtil.now());
+            vehiclematerialgroupService.updateById(one);
             // 起点清空
-            if (ObjectUtil.isNotEmpty(startPointObj)) {
-                PointUtils.clearPoint(startPointObj);
+            if (vehicleCodeList.size()==1) {
+                startPointObj.setVehicle_code("");
+            }else{
+                StringBuilder vehicle_code=new StringBuilder();
+                for(int i=0;i<=vehicleCodeList.size()-2;i++){
+                    vehicle_code.append(vehicleCodeList.get(i)).append(',');
+                }
+                startPointObj.setVehicle_code(vehicle_code.toString());
             }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
+            startPointObj.setIng_task_code("");
+            startPointObj.setUpdate_time(DateUtil.now());
+            pointService.updateById(startPointObj);
             // 任务完成
             taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
+            taskObj.setGroup_id(one.getGroup_id());
             taskObj.setRemark("任务完成");
         }
         if (status.equals(TaskStatus.CANCELED)) { // 取消
@@ -216,6 +194,12 @@ public class BPSLTask extends AbstractTask {
                 endPointObj.setIng_task_code("");
                 pointService.update(endPointObj);
             }
+            // 起点解锁
+            if (ObjectUtil.isNotEmpty(startPointObj)) {
+                startPointObj.setIng_task_code("");
+                startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()+1);
+                pointService.update(endPointObj);
+            }
             taskObj.setRemark("任务取消");
             taskObj.setTask_status(TaskStatus.CANCELED.getCode());
         }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java
index a7811f0..2a72516 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -58,168 +59,24 @@ public class KGHJRKTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void create() throws BadRequestException {
-        // 获取任务
-        List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
-        // 配置信息
-        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
-                .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
-        for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
-            String extGroupData = task.getExt_group_data();
-            JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
-            if (ObjectUtil.isEmpty(point)) {
-                task.setRemark("未找到所需点位!");
-                taskService.update(task);
-                // 消息通知
-                continue;
-            }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
-            task.setTask_status(TaskStatus.CREATED.getCode());
-            task.setRemark("");
-            taskService.update(task);
-
-            point.setIng_task_code(task.getTask_code());
-            pointService.update(point);
 
-            //下发
-//            this.renotifyAcs(task);
-        }
     }
 
-    /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
-     *
-     * @param nextRegionStr
-     * @param extGroupData
-     * @return
-     */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
-        }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
-        }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
-        }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+
+    private SchBasePoint findNextPoint(SchBasePoint startPoint) {
+        return null;
     }
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
-        // 校验任务
-        SchBaseTask taskObj = taskService.getById(task_code);
-        if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
-            throw new BadRequestException("该任务已完成!");
-        }
-        if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
-            throw new BadRequestException("该任务已取消!");
-        }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
-        String startPoint = taskObj.getPoint_code1(); // 获取起点
-        String endPoint = taskObj.getPoint_code2(); // 获取终点
-        SchBasePoint startPointObj = pointService.getById(startPoint);
-        SchBasePoint endPointObj = pointService.getById(endPoint);
-        // 根据传来的类型去对任务进行操作
-        if (status.equals(TaskStatus.EXECUTING)) { // 执行中
-            taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
-            taskObj.setRemark("执行中");
-        }
-        if (status.equals(TaskStatus.FINISHED)) { // 完成
-            // 起点清空
-            if (ObjectUtil.isNotEmpty(startPointObj)) {
-                PointUtils.clearPoint(startPointObj);
-            }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
-            // 任务完成
-            taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
-            taskObj.setRemark("任务完成");
-        }
-        if (status.equals(TaskStatus.CANCELED)) { // 取消
-            // 终点解锁
-            if (ObjectUtil.isNotEmpty(endPointObj)) {
-                endPointObj.setIng_task_code("");
-                pointService.update(endPointObj);
-            }
-            taskObj.setRemark("任务取消");
-            taskObj.setTask_status(TaskStatus.CANCELED.getCode());
-        }
-        taskService.update(taskObj);
     }
 
     @Override
@@ -231,4 +88,4 @@ public class KGHJRKTask extends AbstractTask {
     public void cancel(String task_code) {
         this.updateStatus(task_code, TaskStatus.CANCELED);
     }
-}
+}
\ No newline at end of file
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java
index c1190a8..d9a42d0 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java
@@ -78,7 +78,7 @@ public class MJXLTask extends AbstractTask {
                 task.setRemark("未找到所需点位!");
                 taskService.update(task);
                 // 消息通知
-                log.info("未找到当前符合条件的点位materialType:{},",materialType);
+                log.info("满架下料未找到当前符合条件的点位materialType:{},",materialType);
                 continue;
             }
             // 设置终点并修改创建成功状态
@@ -206,6 +206,7 @@ public class MJXLTask extends AbstractTask {
             groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
             groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
             groupEntity.setIs_delete(false);
+            groupEntity.setMove_way(startPoint);
             vehiclematerialgroupService.save(groupEntity);
 
 
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java
index 75752a2..8b4315f 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -58,168 +59,24 @@ public class TBXBKJTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void create() throws BadRequestException {
-        // 获取任务
-        List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
-        // 配置信息
-        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
-                .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
-        for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
-            String extGroupData = task.getExt_group_data();
-            JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
-            if (ObjectUtil.isEmpty(point)) {
-                task.setRemark("未找到所需点位!");
-                taskService.update(task);
-                // 消息通知
-                continue;
-            }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
-            task.setTask_status(TaskStatus.CREATED.getCode());
-            task.setRemark("");
-            taskService.update(task);
-
-            point.setIng_task_code(task.getTask_code());
-            pointService.update(point);
 
-            //下发
-//            this.renotifyAcs(task);
-        }
     }
 
-    /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
-     *
-     * @param nextRegionStr
-     * @param extGroupData
-     * @return
-     */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
-        }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
-        }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
-        }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+
+    private SchBasePoint findNextPoint(SchBasePoint startPoint) {
+        return null;
     }
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
-        // 校验任务
-        SchBaseTask taskObj = taskService.getById(task_code);
-        if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
-            throw new BadRequestException("该任务已完成!");
-        }
-        if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
-            throw new BadRequestException("该任务已取消!");
-        }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
-        String startPoint = taskObj.getPoint_code1(); // 获取起点
-        String endPoint = taskObj.getPoint_code2(); // 获取终点
-        SchBasePoint startPointObj = pointService.getById(startPoint);
-        SchBasePoint endPointObj = pointService.getById(endPoint);
-        // 根据传来的类型去对任务进行操作
-        if (status.equals(TaskStatus.EXECUTING)) { // 执行中
-            taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
-            taskObj.setRemark("执行中");
-        }
-        if (status.equals(TaskStatus.FINISHED)) { // 完成
-            // 起点清空
-            if (ObjectUtil.isNotEmpty(startPointObj)) {
-                PointUtils.clearPoint(startPointObj);
-            }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
-            // 任务完成
-            taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
-            taskObj.setRemark("任务完成");
-        }
-        if (status.equals(TaskStatus.CANCELED)) { // 取消
-            // 终点解锁
-            if (ObjectUtil.isNotEmpty(endPointObj)) {
-                endPointObj.setIng_task_code("");
-                pointService.update(endPointObj);
-            }
-            taskObj.setRemark("任务取消");
-            taskObj.setTask_status(TaskStatus.CANCELED.getCode());
-        }
-        taskService.update(taskObj);
     }
 
     @Override
@@ -231,4 +88,4 @@ public class TBXBKJTask extends AbstractTask {
     public void cancel(String task_code) {
         this.updateStatus(task_code, TaskStatus.CANCELED);
     }
-}
+}
\ No newline at end of file
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java
index 3316762..9f950f2 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -58,168 +59,24 @@ public class XSCKTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void create() throws BadRequestException {
-        // 获取任务
-        List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
-        // 配置信息
-        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
-                .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
-        for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
-            String extGroupData = task.getExt_group_data();
-            JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
-            if (ObjectUtil.isEmpty(point)) {
-                task.setRemark("未找到所需点位!");
-                taskService.update(task);
-                // 消息通知
-                continue;
-            }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
-            task.setTask_status(TaskStatus.CREATED.getCode());
-            task.setRemark("");
-            taskService.update(task);
-
-            point.setIng_task_code(task.getTask_code());
-            pointService.update(point);
 
-            //下发
-//            this.renotifyAcs(task);
-        }
     }
 
-    /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
-     *
-     * @param nextRegionStr
-     * @param extGroupData
-     * @return
-     */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
-        }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
-        }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
-        }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+
+    private SchBasePoint findNextPoint(SchBasePoint startPoint) {
+        return null;
     }
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
-        // 校验任务
-        SchBaseTask taskObj = taskService.getById(task_code);
-        if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
-            throw new BadRequestException("该任务已完成!");
-        }
-        if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
-            throw new BadRequestException("该任务已取消!");
-        }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
-        String startPoint = taskObj.getPoint_code1(); // 获取起点
-        String endPoint = taskObj.getPoint_code2(); // 获取终点
-        SchBasePoint startPointObj = pointService.getById(startPoint);
-        SchBasePoint endPointObj = pointService.getById(endPoint);
-        // 根据传来的类型去对任务进行操作
-        if (status.equals(TaskStatus.EXECUTING)) { // 执行中
-            taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
-            taskObj.setRemark("执行中");
-        }
-        if (status.equals(TaskStatus.FINISHED)) { // 完成
-            // 起点清空
-            if (ObjectUtil.isNotEmpty(startPointObj)) {
-                PointUtils.clearPoint(startPointObj);
-            }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
-            // 任务完成
-            taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
-            taskObj.setRemark("任务完成");
-        }
-        if (status.equals(TaskStatus.CANCELED)) { // 取消
-            // 终点解锁
-            if (ObjectUtil.isNotEmpty(endPointObj)) {
-                endPointObj.setIng_task_code("");
-                pointService.update(endPointObj);
-            }
-            taskObj.setRemark("任务取消");
-            taskObj.setTask_status(TaskStatus.CANCELED.getCode());
-        }
-        taskService.update(taskObj);
     }
 
     @Override
@@ -231,4 +88,4 @@ public class XSCKTask extends AbstractTask {
     public void cancel(String task_code) {
         this.updateStatus(task_code, TaskStatus.CANCELED);
     }
-}
+}
\ No newline at end of file
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java
index e90d441..0ae7ac9 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -58,168 +59,24 @@ public class ZJBZKDDTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void create() throws BadRequestException {
-        // 获取任务
-        List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
-        // 配置信息
-        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
-                .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
-        for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
-            String extGroupData = task.getExt_group_data();
-            JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
-            if (ObjectUtil.isEmpty(point)) {
-                task.setRemark("未找到所需点位!");
-                taskService.update(task);
-                // 消息通知
-                continue;
-            }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
-            task.setTask_status(TaskStatus.CREATED.getCode());
-            task.setRemark("");
-            taskService.update(task);
-
-            point.setIng_task_code(task.getTask_code());
-            pointService.update(point);
 
-            //下发
-//            this.renotifyAcs(task);
-        }
     }
 
-    /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
-     *
-     * @param nextRegionStr
-     * @param extGroupData
-     * @return
-     */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
-        }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
-        }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
-        }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+
+    private SchBasePoint findNextPoint(SchBasePoint startPoint) {
+        return null;
     }
 
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
-        // 校验任务
-        SchBaseTask taskObj = taskService.getById(task_code);
-        if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
-            throw new BadRequestException("该任务已完成!");
-        }
-        if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
-            throw new BadRequestException("该任务已取消!");
-        }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
-        String startPoint = taskObj.getPoint_code1(); // 获取起点
-        String endPoint = taskObj.getPoint_code2(); // 获取终点
-        SchBasePoint startPointObj = pointService.getById(startPoint);
-        SchBasePoint endPointObj = pointService.getById(endPoint);
-        // 根据传来的类型去对任务进行操作
-        if (status.equals(TaskStatus.EXECUTING)) { // 执行中
-            taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
-            taskObj.setRemark("执行中");
-        }
-        if (status.equals(TaskStatus.FINISHED)) { // 完成
-            // 起点清空
-            if (ObjectUtil.isNotEmpty(startPointObj)) {
-                PointUtils.clearPoint(startPointObj);
-            }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
-            // 任务完成
-            taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
-            taskObj.setRemark("任务完成");
-        }
-        if (status.equals(TaskStatus.CANCELED)) { // 取消
-            // 终点解锁
-            if (ObjectUtil.isNotEmpty(endPointObj)) {
-                endPointObj.setIng_task_code("");
-                pointService.update(endPointObj);
-            }
-            taskObj.setRemark("任务取消");
-            taskObj.setTask_status(TaskStatus.CANCELED.getCode());
-        }
-        taskService.update(taskObj);
     }
 
     @Override
@@ -231,4 +88,4 @@ public class ZJBZKDDTask extends AbstractTask {
     public void cancel(String task_code) {
         this.updateStatus(task_code, TaskStatus.CANCELED);
     }
-}
+}
\ No newline at end of file
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java
index c2d526a..8060f56 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java
@@ -242,7 +242,7 @@ public class GHSFMTask extends AbstractTask {
                 one.setTask_code(taskObj.getTask_code());
                 one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
                 one.setPoint_name(endPointObj.getPoint_name());
-                one.setMove_way(one.getMove_way() + " -> " + endPointObj.getPoint_code());
+                one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code());
                 one.setUpdate_id(GeneralDefinition.ACS_ID);
                 one.setUpdate_name(GeneralDefinition.ACS_NAME);
                 one.setUpdate_time(DateUtil.now());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java
index de04a1b..3506ab8 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java
@@ -1,6 +1,7 @@
 package org.nl.wms.sch.task_manage.task.tasks.ghs;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.config.MapOf;
+import org.nl.wms.ext.service.WmsToAcsService;
 import org.nl.wms.pdm.service.IPdmBdWorkorderService;
 import org.nl.wms.pdm.service.dao.PdmBdWorkorder;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -19,6 +21,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
 import org.nl.wms.sch.task.service.dao.SchBaseTask;
 import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
 import org.nl.wms.sch.task_manage.AbstractTask;
+import org.nl.wms.sch.task_manage.GeneralDefinition;
 import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
 import org.nl.wms.sch.task_manage.enums.GroupStatusEnum;
 import org.nl.wms.sch.task_manage.task.TaskType;
@@ -58,83 +61,141 @@ public class GHSQHTask extends AbstractTask {
     @Autowired
     private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Autowired
-    private PointMapper yzMapper;
+    private PointMapper pointMapper;
+    @Autowired
+    private WmsToAcsService wmsToAcsService;
 
+    /**
+     * 1.扫描每个允许取货的固化室从1-10的顺序开始进行取货
+     */
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void create() throws BadRequestException {
-        // 获取任务
-        List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
-        // 配置信息
-        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
-                .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
-        for (SchBaseTask task : tasks) {
-            List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
-            // 找终点
-            String extGroupData = task.getExt_group_data();
-            JSONObject jsonObject = JSONObject.parseObject(extGroupData);
-            SchBasePoint point = findNextPoint(nextRegionStr, jsonObject);
-            if (ObjectUtil.isEmpty(point)) {
-                task.setRemark("未找到所需点位!");
-                taskService.update(task);
-                // 消息通知
-                continue;
-            }
-            // 设置终点并修改创建成功状态
-            task.setPoint_code2(point.getPoint_code());
-            task.setTask_status(TaskStatus.CREATED.getCode());
-            task.setRemark("");
-            taskService.update(task);
-
-            point.setIng_task_code(task.getTask_code());
-            pointService.update(point);
 
-            //下发
-//            this.renotifyAcs(task);
+        List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion("GHS","3");
+        if (schBasePointList.size()==0) {
+            // 消息通知
+            log.info("未找到当前符合允许取货的固化室点位,暂不生成任务");
+            return;
+        }
+        SchBasePoint schBasePoint=null;
+        //按顺序查找第一个符合条件的固化室位置,发起任务
+        for(SchBasePoint schBasePoint1:schBasePointList){
+            if (schBasePoint1.getVehicle_qty()==3&&ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())) {
+                schBasePoint=schBasePoint1;
+                break;
+            }
         }
+        if (ObjectUtil.isEmpty(schBasePoint)) {
+            // 消息通知
+            log.info("未找到当前符合允许取货的固化室点位,暂不生成任务");
+            return;
+        }
+        SchBasePoint nextPoint=this.findNextPoint(schBasePoint);
+        if (ObjectUtil.isEmpty(nextPoint)) {
+            // 消息通知
+            log.info("未找到当前符合允许放货的缓存点,暂不生成任务Vehicle_type:{}",schBasePoint.getVehicle_type());
+            return;
+        }
+        this.createTask(schBasePoint,nextPoint.getPoint_code());
+
     }
 
     /**
-     * 判断是否加急:是->入窑口,否->双层缓存线
+     * 创建任务并下发
      *
-     * @param nextRegionStr
-     * @param extGroupData
+     * @param schBasePoint
+     * @param endPoint
      * @return
      */
-    private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) {
-        // 需要获取nextRegionStr
-        if (nextRegionStr.size() < 2) {
-            throw new BadRequestException("压制送料任务的配置文件有错!");
+    private void createTask(SchBasePoint schBasePoint,String endPoint) {
+        // 申请任务
+        SchBaseTask task = new SchBaseTask(); // 任务实体
+        String apply_point_code =schBasePoint.getPoint_code(); // 请求点
+        String config_code = "GHSQHTask";
+        // 1、校验数据
+        SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
+                .eq(SchBaseTaskconfig::getConfig_code, config_code));
+        Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!");
+        // 最大任务数
+        Integer tcmn = taskConfig.getTask_create_max_num();
+        // 获取执行中的任务
+        List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
+                taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
+
+        Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn,
+                "该点位申请的任务未完成数已超过上限,无法申请任务");
+        // 获取对接位点位对象
+        SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
+                .eq(SchBasePoint::getPoint_code, apply_point_code));
+        // 校验是否需要自动agv
+        if (!pointObj.getIs_auto()) {
+            // 如果不需要自动,则不创建任务
+            return;
         }
-        String regionCode = nextRegionStr.get(0);
-        // 当前设备的工单
-        String workorderCode = extGroupData.getString("workorder_code");
-        PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
-                ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                .eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
-                : null;
-        if (one == null) {
-            throw new BadRequestException("压制机的工单不能为空!");
+        // 2、创建申请任务
+        task.setConfig_code(config_code);
+        task.setCreate_mode(GeneralDefinition.ACS_CREATION);
+        task.setVehicle_code(schBasePoint.getVehicle_code());
+        task.setVehicle_qty(schBasePoint.getVehicle_qty());
+        task.setTask_status(TaskStatus.APPLY.getCode());
+        task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码
+        task.setPoint_code2(endPoint);
+        task.setTask_status(TaskStatus.CREATED.getCode());
+        task.setRemark("");
+        // 设置起/终点
+        this.setTaskPoint(taskConfig, task, apply_point_code);
+        taskService.create(task);
+
+        //下发
+        this.renotifyAcs(task);
+    }
+
+    /**
+     * 1.根据当前固化室所处区域,判断到哪个区的缓存位
+     * 2.从1010列到0101列倒叙判断当前列物料类型是否与起点一致且存在空位
+     * 3.将当前点位设置为目标点
+     * 4.如果没有符合条件的点位,跳过执行暂时等待
+     */
+    private SchBasePoint findNextPoint(SchBasePoint startPoint) {
+        String regionCode = null;
+        String materialType = startPoint.getVehicle_type();
+        if ("GHS1".equals(startPoint.getRegion_code())) {
+            //HCQ1找A区
+            regionCode = "HCQ1";
+
+        } else if ("GHS2".equals(startPoint.getRegion_code())) {
+            //GHS2找B区
+            regionCode = "HCQ2";
         }
-        // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
-        if (one.getIs_urgent()) {
-            regionCode = nextRegionStr.get(1); // 去窑区
+        List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"2");
+        for(int i=schBasePointList.size()-1;i>=0;i--){
+            SchBasePoint schBasePoint=schBasePointList.get(i);
+            SchBasePoint temp=null;
+            if (schBasePoint.getVehicle_qty()==0
+                    &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code())
+                &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){
+                //发现有空位时暂存当前位置,检查当前列前面是否存在已放货位置,找最前面无货的位置
+                //如果当列其他位置均已放满,则继续找下一列
+                List<SchBasePoint> tempList = pointMapper.findPointByParentPoint(schBasePoint.getParent_point_code());
+                for(SchBasePoint tempPoint:tempList){
+                    if(tempPoint.getVehicle_qty()!=0||ObjectUtil.isNotEmpty(schBasePoint.getIng_task_code())){
+                        if(temp!=null){
+                            return temp;
+                        }
+                        temp=tempPoint;
+                    }
+                }
+                log.info("固化室取货任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code());
+                return temp;
+            }
         }
-        List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
-                MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
-        return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
-        // ??
-//        LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
-//        lam.eq(SchBasePoint::getRegion_code, regionCode)
-//                .eq(SchBasePoint::getPoint_type, ENTRANCE)
-//                .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住
-//                        .or()
-//                        .eq(SchBasePoint::getIng_task_code, ""))
-//                .eq(SchBasePoint::getIs_used, true);
-//        List<SchBasePoint> schBasePoints = pointService.list(lam);
-//        return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
+        return null;
     }
 
+    /**
+     * 1.如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕
+     */
     @Override
 //    @Transactional(rollbackFor = Exception.class)
     protected void updateStatus(String task_code, TaskStatus status) {
@@ -146,18 +207,6 @@ public class GHSQHTask extends AbstractTask {
         if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
             throw new BadRequestException("该任务已取消!");
         }
-        // 获取参数
-        JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
-                ? JSONObject.parseObject(taskObj.getExt_group_data())
-                : null;
-        // 载具编码:没有就创建一个
-        String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code())
-                ? taskObj.getVehicle_code()
-                : IdUtil.getSnowflake(1, 1).nextIdStr();
-        PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
-                        ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
-                            .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code")))
-                        : null;
         String startPoint = taskObj.getPoint_code1(); // 获取起点
         String endPoint = taskObj.getPoint_code2(); // 获取终点
         SchBasePoint startPointObj = pointService.getById(startPoint);
@@ -168,47 +217,54 @@ public class GHSQHTask extends AbstractTask {
             taskObj.setRemark("执行中");
         }
         if (status.equals(TaskStatus.FINISHED)) { // 完成
+            StringBuilder group_id= new StringBuilder();
+            // 终点解锁
+            endPointObj.setIng_task_code("");
+            endPointObj.setVehicle_code(startPointObj.getVehicle_code());
+            endPointObj.setVehicle_type(startPointObj.getVehicle_type());
+            endPointObj.setVehicle_code(startPointObj.getVehicle_code());
+            endPointObj.setVehicle_qty(startPointObj.getVehicle_qty());
+            endPointObj.setUpdate_time(DateUtil.now());
+            pointService.update(endPointObj);
+            List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList());
+            for(String vehicleCode:vehicleCodeList) {
+                SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
+                        .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode)
+                        .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status,
+                                GroupBindMaterialStatusEnum.BOUND.getValue()));
+                if (ObjectUtil.isEmpty(one)) {
+                    throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到");
+                }
+                one.setTask_code(taskObj.getTask_code());
+                one.setPoint_code(endPointObj.getPoint_code()); // 当前位置
+                one.setPoint_name(endPointObj.getPoint_name());
+                one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code());
+                one.setUpdate_id(GeneralDefinition.ACS_ID);
+                one.setUpdate_name(GeneralDefinition.ACS_NAME);
+                one.setUpdate_time(DateUtil.now());
+                vehiclematerialgroupService.updateById(one);
+                group_id.append(one.getGroup_id()).append(',');
+            }
             // 起点清空
             if (ObjectUtil.isNotEmpty(startPointObj)) {
                 PointUtils.clearPoint(startPointObj);
             }
-            // 终点解锁
-            endPointObj.setIng_task_code("");
-            pointService.update(endPointObj);
-            // 要把数据存到组盘表 -> 改造公共方法,返回id
-            SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
-            groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-            groupEntity.setCreate_id("2");
-            groupEntity.setCreate_name("ACS");
-            groupEntity.setCreate_time(DateUtil.now());
-            groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getMaterial_id()
-                    : "");
-            groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getStanding_time()
-                    : 0);
-            groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData)
-                    ? extGroupData.getBigDecimal("material_qty")
-                    : BigDecimal.valueOf(0));
-            groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode)
-                    ? workorderCode.getWorkorder_code()
-                    : "");
-            groupEntity.setVehicle_code(vehicle_code);
-            groupEntity.setVehicle_type(taskObj.getVehicle_type());
-            groupEntity.setPoint_code(startPoint);
-            groupEntity.setPoint_name(startPointObj.getPoint_name());
-            groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd"));
-            groupEntity.setInstorage_time(DateUtil.now());
-            groupEntity.setTask_code(taskObj.getTask_code());
-            groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
-            groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
-            groupEntity.setIs_delete(false);
-            vehiclematerialgroupService.save(groupEntity);
-
             // 任务完成
             taskObj.setTask_status(TaskStatus.FINISHED.getCode());
-            taskObj.setGroup_id(groupEntity.getGroup_id());
+            taskObj.setGroup_id(group_id.toString());
             taskObj.setRemark("任务完成");
+
+            //如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕
+            if(taskObj.getPoint_code1().endsWith("10")) {
+                String middle = taskObj.getPoint_code1().substring(taskObj.getPoint_code1().length() - 4, taskObj.getPoint_code1().length() - 2);
+                //通知acs已经放满,固化室可以进行固化
+                String device_code = "ZDM" + middle;
+                log.info("当前固化室已经全部取完,通知固化室的自动门{}取货完毕", device_code);
+                JSONObject map = new JSONObject();
+                map.put("device_code", device_code);
+                map.put("type", "2");
+                wmsToAcsService.notifyAcs(map);
+            }
         }
         if (status.equals(TaskStatus.CANCELED)) { // 取消
             // 终点解锁
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java
index 5322087..9735d4c 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java
@@ -11,8 +11,9 @@ import java.util.List;
  * @Date: 2023/10/9
  */
 public interface PointMapper {
-    List<SchBasePoint> findPointByRegion(String regionCode,String point_state);
-    List<SchBasePoint> findPointByPoint(String pointCode);
+    List<SchBasePoint> findPointByRegion(String regionCode,String point_status);
+
+    List<SchBasePoint> findPointByParentPoint(String pointCode);
 
     void updatePointStatus(String device_code,String state);
     List<SchBasePoint> findPointForYZSL(JSONObject param);
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml
index 56f464d..c1e408e 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml
@@ -7,16 +7,16 @@
         FROM
             `sch_base_point` p
         WHERE p.region_code like CONCAT('%', #{regionCode}, '%')
-        and p.point_state = #{point_state}
+        and p.point_status = #{point_status}
         ORDER BY region_code
     </select>
 
-    <select id="findPointByRegion" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
+    <select id="findPointByParentPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
         SELECT
             p.*
         FROM
             `sch_base_point` p
-        WHERE p.point_code like CONCAT('%', #{pointCode}, '%')
+        WHERE p.parent_point_code like CONCAT('%', #{pointCode}, '%')
         ORDER BY point_code
     </select>
 
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java
index 4e51460..279b027 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java
@@ -42,7 +42,6 @@ public class PointUtils {
         point.setVehicle_code("");
         point.setIng_task_code("");
         point.setVehicle_qty(0);
-        point.setVehicle_type("");
         point.setUpdate_time(DateUtil.now());
         pointService.updateById(point);
     }
diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue
index e4bc86a..91406d2 100644
--- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue
+++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue
@@ -247,7 +247,7 @@
         <el-table-column prop="point_name" label="点位名称" :min-width="flexWidth('point_name',crud.data,'点位名称')" />
         <el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('region_code',crud.data,'区域编码')" />
         <el-table-column prop="region_name" label="区域名称" :min-width="flexWidth('region_name',crud.data,'区域名称')" />
-        <el-table-column prop="point_type_name" label="点位类型" :min-width="flexWidth('point_type_name',crud.data,'点位类型')" />
+        <!-- <el-table-column prop="point_type_name" label="点位类型" :min-width="flexWidth('point_type_name',crud.data,'点位类型')" /> -->
         <el-table-column prop="point_status_name" label="点位状态" :min-width="flexWidth('point_status_name',crud.data,'点位类型')" />
         <!--        <el-table-column prop="point_type" label="点位类型" :min-width="flexWidth('point_type',crud.data,'点位类型')" />-->
         <!--        <el-table-column prop="point_status" label="点位状态" :min-width="flexWidth('point_status',crud.data,'点位状态')" />-->
@@ -256,6 +256,7 @@
             {{ dict.label.vehicle_type[scope.row.vehicle_type] }}
           </template>
         </el-table-column> -->
+        <el-table-column prop="vehicle_type" label="物料类型" :min-width="flexWidth('vehicle_type',crud.data,'物料类型')" />
         <el-table-column prop="vehicle_code" label="载具编码" :min-width="flexWidth('vehicle_code',crud.data,'载具编码')" />
         <el-table-column prop="vehicle_qty" label="载具数量" :min-width="flexWidth('vehicle_qty',crud.data,'载具数量')" />
         <el-table-column label="是否锁定" :min-width="flexWidth('vehicle_qty',crud.data,'是否锁定')">