diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
index 1b80bef..e407f84 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java
@@ -42,5 +42,5 @@ public class LogMessageConstant {
     public final static String BACKGROUND_YELLOW = "\u001B[43m";
 
     /** 索引路径 */
-    public final static String INDEX_DIR = "E:\\lucene\\index";
+    public final static String INDEX_DIR = "D:\\lucene\\index";
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java
new file mode 100644
index 0000000..aa15ae1
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java
@@ -0,0 +1,37 @@
+package org.nl.wms.cockpit.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.common.logging.annotation.Log;
+import org.nl.wms.cockpit.service.CockpitService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author: lyd
+ * @Description: 看板
+ * @Date: 2023/9/25
+ */
+@Slf4j
+@RestController
+@Api(tags = "看板接口")
+@RequestMapping("/api/cockpit")
+@SaIgnore
+public class CockPitController {
+
+    @Autowired
+    private CockpitService cockpitService;
+
+    @PostMapping("/press")
+    @Log("压制看板")
+    @ApiOperation("压制看板")
+    public ResponseEntity<Object> PressedMonitor(){
+        return new ResponseEntity<>(cockpitService.PressedMonitor(), HttpStatus.OK);
+    }
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java
new file mode 100644
index 0000000..807aecf
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java
@@ -0,0 +1,16 @@
+package org.nl.wms.cockpit.service;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Author: lyd
+ * @Description: 看板
+ * @Date: 2023/9/25
+ */
+public interface CockpitService {
+    /**
+     * 压制看板
+     * @return
+     */
+    ConcurrentHashMap<String,Object> PressedMonitor();
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PersonnelMonthlyProductionVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PersonnelMonthlyProductionVo.java
new file mode 100644
index 0000000..b215e26
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PersonnelMonthlyProductionVo.java
@@ -0,0 +1,14 @@
+package org.nl.wms.cockpit.service.dao;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 月生产总值
+ * @Date: 2023/9/25
+ */
+@Data
+public class PersonnelMonthlyProductionVo {
+    private String operator;
+    private String real_qty;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressProductHeaderVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressProductHeaderVo.java
new file mode 100644
index 0000000..7fcb7af
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressProductHeaderVo.java
@@ -0,0 +1,16 @@
+package org.nl.wms.cockpit.service.dao;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 当前班次、计划生产、已生产、不合格产品数
+ * @Date: 2023/9/25
+ */
+@Data
+public class PressProductHeaderVo {
+    private String plan_qty;
+    private String real_qty;
+    private String unqualified_qty;
+    private String qualified_qty;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ProductTaskVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ProductTaskVo.java
new file mode 100644
index 0000000..87fd72c
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ProductTaskVo.java
@@ -0,0 +1,25 @@
+package org.nl.wms.cockpit.service.dao;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 生产任务
+ * @Date: 2023/9/25
+ */
+@Data
+public class ProductTaskVo {
+    private String device;
+    private String workorder_code;
+    private String team;
+    private String material_name;
+    private String planproducestart_date;
+    private String plan_qty;
+    private String real_qty;
+    private String unqualified_qty;
+    private String qualified_rate;
+    private String workorder_status;
+    private String operator;
+    private String realproducestart_date;
+    private String realproduceend_date;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ShiftProductionVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ShiftProductionVo.java
new file mode 100644
index 0000000..cc59486
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ShiftProductionVo.java
@@ -0,0 +1,16 @@
+package org.nl.wms.cockpit.service.dao;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 当班生产VO
+ * @Date: 2023/9/25
+ */
+@Data
+public class ShiftProductionVo {
+    private String column_name;
+    private String qualified_qty;
+    private String unqualified_qty;
+    private String total_difference;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java
new file mode 100644
index 0000000..436b3a6
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java
@@ -0,0 +1,90 @@
+package org.nl.wms.cockpit.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.nl.config.thread.ThreadPoolExecutorUtil;
+import org.nl.wms.cockpit.service.CockpitService;
+import org.nl.wms.cockpit.service.dao.PersonnelMonthlyProductionVo;
+import org.nl.wms.cockpit.service.dao.PressProductHeaderVo;
+import org.nl.wms.cockpit.service.dao.ProductTaskVo;
+import org.nl.wms.cockpit.service.dao.ShiftProductionVo;
+import org.nl.wms.cockpit.service.mapper.CockPitMapper;
+import org.nl.wms.util.CommonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @Author: lyd
+ * @Description:
+ * @Date: 2023/9/25
+ */
+@Slf4j
+@Service
+public class CockpitServiceImpl implements CockpitService {
+    @Autowired
+    private CockPitMapper cockPitMapper;
+    @Override
+    public ConcurrentHashMap<String, Object> PressedMonitor() {
+        ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
+        ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
+        // 1、当前班次、计划生产、已生产、不合格产品数
+        String dayShift = CommonUtils.getDayShift(); // 白班、晚班
+        map.put("DayShift", dayShift);
+        CompletableFuture<List<PressProductHeaderVo>> listCompletableFuture = CompletableFuture.supplyAsync(
+                () -> cockPitMapper.getPressProductHeaderList(dayShift), pool);
+        listCompletableFuture.thenAccept(result -> {
+            map.put("DayShiftList", result);
+        }).exceptionally((e) -> {
+            log.error("获取当班信息: {}", e.getMessage(), e);
+            map.put("DayShiftList", null);
+            return null;
+        });
+        // 2、当班生产
+        CompletableFuture<List<ShiftProductionVo>> listShiftProductionFuture = CompletableFuture.supplyAsync(
+                () -> cockPitMapper.getShiftProductionList(dayShift), pool);
+        listShiftProductionFuture.thenAccept(result -> {
+            map.put("ShiftProductionList", result);
+        }).exceptionally((e) -> {
+            log.error("当班生产: {}", e.getMessage(), e);
+            map.put("ShiftProductionList", null);
+            return null;
+        });
+        // 3、人员月生产
+        CompletableFuture<List<PersonnelMonthlyProductionVo>> listPersonnelMonthlyProductionFuture = CompletableFuture.supplyAsync(
+                () -> cockPitMapper.getPersonnelMonthlyProductionList(dayShift), pool);
+        listPersonnelMonthlyProductionFuture.thenAccept(result -> {
+            map.put("PersonnelMonthlyProduction", result);
+        }).exceptionally((e) -> {
+            log.error("人员月生产: {}", e.getMessage(), e);
+            map.put("PersonnelMonthlyProduction", null);
+            return null;
+        });
+        // 4、生产任务
+        CompletableFuture<List<ProductTaskVo>> listProductionTaskFuture = CompletableFuture.supplyAsync(
+                () -> cockPitMapper.getProductionTaskList(), pool);
+        listProductionTaskFuture.thenAccept(result -> {
+            map.put("ProductionTask", result);
+        }).exceptionally((e) -> {
+            log.error("生产任务: {}", e.getMessage(), e);
+            map.put("ProductionTask", null);
+            return null;
+        });
+        // 提交
+        CompletableFuture<Void> allQuery = CompletableFuture.allOf(
+                listCompletableFuture,
+                listShiftProductionFuture,
+                listPersonnelMonthlyProductionFuture,
+                listProductionTaskFuture);
+        CompletableFuture<ConcurrentHashMap<String, Object>> future
+                = allQuery.thenApply((result) -> map).exceptionally((e) -> {
+            log.error(e.getMessage(), e);
+            return null;
+        });
+        future.join();
+        return map;
+    }
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java
new file mode 100644
index 0000000..182da07
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java
@@ -0,0 +1,23 @@
+package org.nl.wms.cockpit.service.mapper;
+
+import org.nl.wms.cockpit.service.dao.PersonnelMonthlyProductionVo;
+import org.nl.wms.cockpit.service.dao.PressProductHeaderVo;
+import org.nl.wms.cockpit.service.dao.ProductTaskVo;
+import org.nl.wms.cockpit.service.dao.ShiftProductionVo;
+
+import java.util.List;
+
+/**
+ * @Author: lyd
+ * @Description:
+ * @Date: 2023/9/25
+ */
+public interface CockPitMapper {
+    List<PressProductHeaderVo> getPressProductHeaderList(String dayShift);
+
+    List<ShiftProductionVo> getShiftProductionList(String dayShift);
+
+    List<PersonnelMonthlyProductionVo> getPersonnelMonthlyProductionList(String dayShift);
+
+    List<ProductTaskVo> getProductionTaskList();
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml
new file mode 100644
index 0000000..8f01a97
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.nl.wms.cockpit.service.mapper.CockPitMapper">
+    <select id="getPressProductHeaderList" resultType="org.nl.wms.cockpit.service.dao.PressProductHeaderVo">
+        SELECT
+            SUM(w.plan_qty) AS plan_qty,
+            SUM(w.real_qty) AS real_qty,
+            SUM(w.qualified_qty) AS qualified_qty,
+            SUM(w.unqualified_qty) AS unqualified_qty
+        FROM
+            pdm_bd_workorder w
+        WHERE
+            DATE( w.produce_date ) = CURDATE() AND w.team = #{dayShift};
+    </select>
+    <select id="getShiftProductionList" resultType="org.nl.wms.cockpit.service.dao.ShiftProductionVo">
+        SELECT
+            w.point_name AS column_name,
+            SUM(w.qualified_qty) AS qualified_qty,
+            SUM(w.unqualified_qty) AS unqualified_qty,
+            SUM(w.plan_qty - w.qualified_qty - w.unqualified_qty) AS total_difference
+        FROM
+            `pdm_bd_workorder` w
+        WHERE
+            DATE( w.produce_date ) = CURDATE()
+          AND w.team = #{dayShift}
+        GROUP BY w.point_name
+    </select>
+    <select id="getPersonnelMonthlyProductionList"
+            resultType="org.nl.wms.cockpit.service.dao.PersonnelMonthlyProductionVo">
+        SELECT
+            w.operator,
+            SUM(w.real_qty) AS real_qty
+        FROM
+            `pdm_bd_workorder` w
+        WHERE DATE_FORMAT(w.produce_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m') AND w.team = '白班'
+        GROUP BY w.operator
+    </select>
+    <select id="getProductionTaskList" resultType="org.nl.wms.cockpit.service.dao.ProductTaskVo">
+        SELECT
+            w.point_name AS device,
+            w.workorder_code,
+            w.team,
+            m.material_name,
+            w.planproducestart_date,
+            w.plan_qty,
+            w.real_qty,
+            w.unqualified_qty,
+            ((w.qualified_qty / w.plan_qty) * 100) AS qualified_rate,
+            CASE w.workorder_status
+                WHEN '1' THEN '未生产'
+                WHEN '2' THEN '已下发'
+                WHEN '3' THEN '生产中'
+                WHEN '4' THEN '暂停'
+                WHEN '5' THEN '完成'
+                ELSE ''
+                END AS workorder_status,
+            w.operator,
+            IF(LENGTH(w.realproducestart_date)>0,w.realproducestart_date,'-') AS realproducestart_date,
+            IF(LENGTH(w.realproduceend_date)>0,w.realproduceend_date,'-') AS realproduceend_date
+        FROM
+            `pdm_bd_workorder` w
+                LEFT JOIN md_base_material m ON m.material_id = w.material_id
+        ORDER BY w.team DESC, w.workorder_status
+    </select>
+</mapper>
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java
index c2964c3..aaedcef 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java
@@ -53,4 +53,18 @@ public interface IMdBaseBrickInfoService extends IService<MdBaseBrickInfo> {
      * @param deviceCode : 放砖位置-压制对接位
      */
     void setGroupByCurrentAllBrick(String deviceCode, String groupId);
+
+    /**
+     * 工单合格数量
+     * @param workorderCode
+     * @return
+     */
+    int getCountQualifiedQty(String workorderCode);
+
+    /**
+     * 工单不合格数量
+     * @param workorderCode
+     * @return
+     */
+    int getCountUnqualifiedQty(String workorderCode);
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java
index da08666..1407cca 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java
@@ -9,4 +9,12 @@ import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo;
 **/
 public interface MdBaseBrickInfoMapper extends BaseMapper<MdBaseBrickInfo> {
 
+    /**
+     * 合格数
+     * @param workorderCode
+     * @return
+     */
+    int getCountQualifiedQty(String workorderCode);
+
+    int getCountUnqualifiedQty(String workorderCode);
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml
index af568a1..01f21c2 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml
@@ -2,4 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.nl.wms.database.brick.service.dao.mapper.MdBaseBrickInfoMapper">
 
+    <select id="getCountQualifiedQty" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `md_base_brick_info` mi
+        WHERE mi.workorder_code = #{workorderCode} AND mi.put_station LIKE CONCAT(mi.get_station, '%')
+    </select>
+    <select id="getCountUnqualifiedQty" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `md_base_brick_info` mi
+        WHERE mi.workorder_code = #{workorderCode} AND mi.put_station LIKE 'YZBHGW%'
+    </select>
 </mapper>
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java
index b1a1690..5136335 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java
@@ -78,6 +78,16 @@ public class MdBaseBrickInfoServiceImpl extends ServiceImpl<MdBaseBrickInfoMappe
                 .eq(MdBaseBrickInfo::getIs_group, false));
     }
 
+    @Override
+    public int getCountQualifiedQty(String workorderCode) {
+        return mdBaseBrickInfoMapper.getCountQualifiedQty(workorderCode);
+    }
+
+    @Override
+    public int getCountUnqualifiedQty(String workorderCode) {
+        return mdBaseBrickInfoMapper.getCountUnqualifiedQty(workorderCode);
+    }
+
     private MdBaseBrickInfo toBrickInfoMapper(BrickInfoDto dto) {
         // 获取压机工单
         PdmBdWorkorder productionTask = workorderService.getDeviceProductionTask(dto.getGet_station());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
index d9dd6d4..f8fdf31 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
@@ -495,6 +495,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
         bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
         bdWorkorder.setRealproduceend_date(DateUtil.now());
         TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
+        // 统计合不合格数量到工单字段中
+        int qualified_qty = baseBrickInfoService.getCountQualifiedQty(bdWorkorder.getWorkorder_code());
+        int unqualified_qty = baseBrickInfoService.getCountUnqualifiedQty(bdWorkorder.getWorkorder_code());
+        bdWorkorder.setQualified_qty(qualified_qty);
+        bdWorkorder.setUnqualified_qty(unqualified_qty);
         workorderService.updateById(bdWorkorder);
         // todo: 统计当前设备的不合格位置的数量作为不合格数,并上报给mes
         wmsToMesService.reportPressUnusedMaterial(bdWorkorder);
@@ -504,23 +509,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
     /**
      * 扫码成功申请 - 判断是否静置完成
      */
+    @SneakyThrows
     @Override
     public ApplyTaskResponse barcodeSuccessApply(JSONObject param) {
         ApplyTaskRequest baseRequest = param.toJavaObject(ApplyTaskRequest.class);
         ApplyTaskResponse taskResponse = ApplyTaskResponse.responseOk(baseRequest.getRequestNo());
         String deviceCode = baseRequest.getDevice_code();
-        SchBasePoint basePoint = pointService.getById(deviceCode); // 获取点位实体
-        switch (basePoint.getRegion_code()) {
-            case GeneralDefinition.LZKLX: // 如果是困料线位置就是判断是否静置完成
-                return this.isStandingFinish(baseRequest); // 直接返回
-            case GeneralDefinition.GZY: // 如果是入窑口就是记录数据
-                return this.recordKilnTime(baseRequest); // 直接返回
-            default:
-                taskResponse.setMessage("参数错误!");
-                taskResponse.setCode(HttpStatus.HTTP_BAD_REQUEST);
-                return taskResponse;
+        RLock lock = redissonClient.getLock(deviceCode);
+        boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
+        try {
+            if (tryLock) {
+                SchBasePoint basePoint = pointService.getById(deviceCode); // 获取点位实体
+                switch (basePoint.getRegion_code()) {
+                    case GeneralDefinition.LZKLX: // 如果是困料线位置就是判断是否静置完成
+                        return this.isStandingFinish(baseRequest); // 直接返回
+                    case GeneralDefinition.GZY: // 如果是入窑口就是记录数据
+                        return this.recordKilnTime(baseRequest); // 直接返回
+                    default:
+                        taskResponse.setMessage("参数错误!");
+                        taskResponse.setCode(HttpStatus.HTTP_BAD_REQUEST);
+                        return taskResponse;
+                }
+            }
+        } finally {
+            if (tryLock) {
+                lock.unlock();
+            }
         }
-
+        return null;
     }
 
     /**
@@ -802,45 +818,58 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
     /**
      * 实时修改点位状态
      */
+    @SneakyThrows
     @Override
     public BaseResponse realTimeSetPoint(JSONObject param) {
         log.info("ACS修改点位状态:{}", param);
         ApplySignalStatusRequest actionRequest = param.toJavaObject(ApplySignalStatusRequest.class);
         String deviceCode = actionRequest.getDevice_code();
-        String move = null;
-        if (ObjectUtil.isNotEmpty(actionRequest.getMove())) {
-            move = (Integer.parseInt(actionRequest.getMove()) + 1) + "";
-        }
-        String action = actionRequest.getAction();
-        String vehicleType = actionRequest.getVehicle_type();
-        if (deviceCode == null) {
-            return BaseResponse.responseError(actionRequest.getRequestNo(), "设备编码不能为空");
-        }
-        // 找到点位
-        SchBasePoint schBasePoint = pointService.getById(deviceCode);
-        if (ObjectUtil.isEmpty(schBasePoint)) {
-            return BaseResponse.responseError(actionRequest.getRequestNo(), "设备: [" + deviceCode + "]未找到");
-        }
-        // 点位的状态如果是null,就默认是空位置
-        String pointStatus = ObjectUtil.isNotEmpty(schBasePoint.getPoint_status())
-                ? schBasePoint.getPoint_status()
-                : PointStatusEnum.EMPTY_POINT.getCode();
-        if ((pointStatus.equals(PointStatusEnum.FULL_POINT.getCode())
-                && move.equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) || (pointStatus.equals(move))) { // 不做操作
-            return BaseResponse.responseOk(actionRequest.getRequestNo());
-        }
-        // 载具类型不为空,并且不是0的情况,lmsVehicleTypeShift:转成lms的载具类型
-        if (ObjectUtil.isNotEmpty(vehicleType) && !vehicleType.equals(GeneralDefinition.NO)) {
-            schBasePoint.setVehicle_type(vehicleType);
-        }
-        if (ObjectUtil.isNotEmpty(action)) {
-            schBasePoint.setIs_used(!action.equals(GeneralDefinition.NO));
-        }
-        // move为空则表示无货
-        schBasePoint.setPoint_status(move == null ? PointStatusEnum.EMPTY_POINT.getCode() : move);
-        PointUtils.setUpdateByAcs(schBasePoint);
-        pointService.updateById(schBasePoint);
-        log.info("点位" + schBasePoint.getPoint_code() + "更新之后:{}", schBasePoint);
+        RLock lock = redissonClient.getLock(deviceCode);
+        boolean tryLock = lock.tryLock(3, TimeUnit.SECONDS);
+        try {
+            if (tryLock) {
+                String move = null;
+                if (ObjectUtil.isNotEmpty(actionRequest.getMove())) {
+                    move = (Integer.parseInt(actionRequest.getMove()) + 1) + "";
+                }
+                String action = actionRequest.getAction();
+                String vehicleType = actionRequest.getVehicle_type();
+                if (deviceCode == null) {
+                    return BaseResponse.responseError(actionRequest.getRequestNo(), "设备编码不能为空");
+                }
+                // 找到点位
+                SchBasePoint schBasePoint = pointService.getById(deviceCode);
+                if (ObjectUtil.isEmpty(schBasePoint)) {
+                    return BaseResponse.responseError(actionRequest.getRequestNo(), "设备: [" + deviceCode + "]未找到");
+                }
+                // 点位的状态如果是null,就默认是空位置
+                String pointStatus = ObjectUtil.isNotEmpty(schBasePoint.getPoint_status())
+                        ? schBasePoint.getPoint_status()
+                        : PointStatusEnum.EMPTY_POINT.getCode();
+                if ((pointStatus.equals(PointStatusEnum.FULL_POINT.getCode())
+                        && move.equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) || (pointStatus.equals(move))) { // 不做操作
+                    return BaseResponse.responseOk(actionRequest.getRequestNo());
+                }
+                // 载具类型不为空,并且不是0的情况,lmsVehicleTypeShift:转成lms的载具类型
+                if (ObjectUtil.isNotEmpty(vehicleType) && !vehicleType.equals(GeneralDefinition.NO)) {
+                    schBasePoint.setVehicle_type(vehicleType);
+                }
+                if (ObjectUtil.isNotEmpty(action)) {
+                    schBasePoint.setIs_used(!action.equals(GeneralDefinition.NO));
+                }
+                // move为空则不修改
+                if (ObjectUtil.isNotEmpty(move)) {
+                    schBasePoint.setPoint_status(move);
+                }
+                PointUtils.setUpdateByAcs(schBasePoint);
+                pointService.updateById(schBasePoint);
+                log.info("点位" + schBasePoint.getPoint_code() + "更新之后:{}", schBasePoint);
+            }
+        } finally {
+            if (tryLock) {
+                lock.unlock();
+            }
+        }
         return BaseResponse.responseOk(actionRequest.getRequestNo());
     }
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/autotask/AutoSaveWaitGdyInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/autotask/AutoSaveWaitGdyInfo.java
new file mode 100644
index 0000000..871fc8a
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/autotask/AutoSaveWaitGdyInfo.java
@@ -0,0 +1,63 @@
+package org.nl.wms.ext.mes.autotask;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.nl.system.service.notice.ISysNoticeService;
+import org.nl.wms.ext.mes.service.WmsToMesService;
+import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
+import org.nl.wms.ext.mes.service.dto.MesGdyInfoWaitDto;
+import org.nl.wms.sch.task_manage.GeneralDefinition;
+import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @Author: lyd
+ * @Description: 定时保存待入窑
+ * @Date: 2023/9/22
+ */
+
+@Slf4j
+@Component
+@Order(value = 1)
+public class AutoSaveWaitGdyInfo {
+    @Autowired
+    private WmsToMesService wmsToMesService;
+    @Autowired
+    private MesRequestMapper mesRequestMapper;
+    @Autowired
+    private ISysNoticeService noticeService;
+    @SneakyThrows
+    public void run() {
+        // 获取滚筒线内数据
+        List<MesGdyInfoWaitDto> list = wmsToMesService.getAllWaitIntoGdyInfos();
+        AtomicInteger successNum = new AtomicInteger();
+        long startTime = System.currentTimeMillis();
+        // 存入表中
+        list.forEach(mesGdyInfoWaitDto -> {
+            mesGdyInfoWaitDto.setMSGID(IdUtil.getSnowflake(1,1).nextIdStr());
+            mesGdyInfoWaitDto.setSEND_TM(DateUtil.now());
+            mesGdyInfoWaitDto.setPRO_SUBUNIT("块");
+            mesGdyInfoWaitDto.setCREATE_TM(DateUtil.now());
+            mesGdyInfoWaitDto.setOP_FLAG(GeneralDefinition.NO);
+            // 插入
+            try {
+                mesRequestMapper.insertGdyMaterialWait(mesGdyInfoWaitDto);
+                successNum.incrementAndGet();
+            } catch (Exception e) {
+                log.error("插入窑前失败的数据: {}", mesGdyInfoWaitDto);
+                log.error("插入窑前失败的信息:{}", e.getMessage());
+                // notice通知
+                noticeService.createNotice(e.getMessage(), "窑前数据同步失败" + mesGdyInfoWaitDto.getMSGID(), NoticeTypeEnum.NOTIFICATION.getCode());
+            }
+        });
+        long endTime = System.currentTimeMillis();
+        log.info("窑前数据有" + list.size() + "条,成功" + successNum.get() + "条, 消耗时长:" + (endTime - startTime) + "ms");
+    }
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java
index f4f7239..265d7a0 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java
@@ -1,6 +1,8 @@
 package org.nl.wms.ext.mes.service;
 
+import org.nl.wms.ext.mes.autotask.AutoSaveWaitGdyInfo;
 import org.nl.wms.ext.mes.service.dto.MesGdyInfoDto;
+import org.nl.wms.ext.mes.service.dto.MesGdyInfoWaitDto;
 import org.nl.wms.ext.mes.service.dto.MesMudConsumptionDto;
 import org.nl.wms.ext.mes.service.dto.MesSemiProductionInfo;
 import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
@@ -67,4 +69,10 @@ public interface WmsToMesService {
      * @param workorderCode
      */
     void reportPressUnusedMaterial(PdmBdWorkorder workorderCode);
+
+    /**
+     * 获取所有待入窑数据
+     * @return
+     */
+    List<MesGdyInfoWaitDto> getAllWaitIntoGdyInfos();
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.java
index d8f481a..7b70e43 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import org.apache.ibatis.annotations.Param;
 import org.nl.wms.database.material.service.dao.MdBaseMaterial;
+import org.nl.wms.ext.mes.autotask.AutoSaveWaitGdyInfo;
 import org.nl.wms.ext.mes.service.dto.*;
 
 import java.util.List;
@@ -48,4 +49,8 @@ public interface MesRequestMapper {
     int countFPNumber(String workorderCode, String pointCode);
     @DS("oracle")
     void insertMesUnusedInfo(MesUnusedDto mesUnusedDto);
+    @DS("mysql")
+    List<MesGdyInfoWaitDto> getAllWaitIntoGdyInfos();
+    @DS("oracle")
+    void insertGdyMaterialWait(MesGdyInfoWaitDto mesGdyInfoWaitDto);
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml
index 54f34ca..e108afc 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dao/mapper/MesRequestMapper.xml
@@ -64,6 +64,12 @@
         VALUES (#{MSGID}, #{FORDER_NO}, #{PWORKSCHE_ID}, #{FPRODUCT_MATERIAL_ID}, #{FPRODUCT_MATERIAL_NAME}, #{FMATSPEC}
         , #{FMATMODEL}, #{BATCHNO}, #{PRESSUNIT}, #{FTEAM}, #{FPSUBNUM}, #{FP_SUBUNIT}, #{PRODATE}, #{CREATE_TM}, #{OP_FLAG})
     </insert>
+    <insert id="insertGdyMaterialWait" parameterType="org.nl.wms.ext.mes.service.dto.MesGdyInfoWaitDto">
+        INSERT INTO "LMSTELCOM"."RECEIVE_GDY_MATWAIT"(MSGID, SEND_TM, TRAY_NO, FPRODUCT_MATERIAL_ID, FPRODUCT_MATERIAL_NAME
+        , FMATSPEC, FMATMODEL, BATCHNO, PRESSUNIT, PRO_SUBNUM, PRO_SUBUNIT, CREATE_TM, OP_FLAG)
+        VALUES (#{MSGID}, #{SEND_TM}, #{TRAY_NO}, #{FPRODUCT_MATERIAL_ID}, #{FPRODUCT_MATERIAL_NAME}, #{FMATSPEC}
+        , #{FMATMODEL}, #{BATCHNO}, #{PRESSUNIT}, #{PRO_SUBNUM}, #{PRO_SUBUNIT}, #{CREATE_TM}, #{OP_FLAG})
+    </insert>
     <update id="updateWorkOrderRead" parameterType="java.util.List">
         UPDATE "LMSTELCOM"."SEND_POP_SCHEDULE_PRESS"
         SET OP_FLAG = '1'
@@ -177,4 +183,24 @@
             `md_base_brick_info` mi
         WHERE mi.workorder_code = #{workorderCode} AND mi.get_station = #{pointCode} AND mi.put_station LIKE 'YZBHGW%'
     </select>
+    <select id="getAllWaitIntoGdyInfos" resultType="org.nl.wms.ext.mes.service.dto.MesGdyInfoWaitDto">
+        SELECT
+            vg.vehicle_code AS TRAY_NO,
+            mm.material_code AS FPRODUCT_MATERIAL_ID,
+            mm.material_name AS FPRODUCT_MATERIAL_NAME,
+            mm.material_spec AS FMATSPEC,
+            mm.material_model AS FMATMODEL,
+            pw.batch_no AS BATCHNO,
+            p2.ext_point_code AS PRESSUNIT,
+            vg.material_qty AS PRO_SUBNUM
+        FROM
+            `sch_base_vehiclematerialgroup` vg
+                LEFT JOIN pdm_bd_workorder pw ON pw.workorder_code = vg.workorder_code
+                LEFT JOIN md_base_material mm ON mm.material_id = vg.material_id
+                LEFT JOIN sch_base_point p ON p.point_code = vg.source_vehicle_code
+                LEFT JOIN sch_base_point p2 ON p.parent_point_code = p2.point_code
+        WHERE
+            vg.point_code IN ( 'HCSSX01', 'HCSSX63' )
+          AND pw.workorder_code IS NOT NULL
+    </select>
 </mapper>
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesGdyInfoWaitDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesGdyInfoWaitDto.java
new file mode 100644
index 0000000..a0f67a0
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/dto/MesGdyInfoWaitDto.java
@@ -0,0 +1,47 @@
+package org.nl.wms.ext.mes.service.dto;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 带入窑实体
+ * @Date: 2023/9/22
+ * 二维码
+ * 发送时间
+ * 托盘编号
+ * 物料编码
+ * 物料名称
+ * 规格
+ * 型号
+ * 批次号
+ * 压机号
+ * 重量
+ * 重量单位
+ * 数量
+ * 数量单位
+ * 单位转换率
+ * 写入时间
+ * 读取标志,0未读取,1已读取
+ * 读取时间
+ */
+@Data
+public class MesGdyInfoWaitDto {
+    private String MSGID;
+    private String SEND_TM;
+    private String TRAY_NO;
+    private String FPRODUCT_MATERIAL_ID;
+    private String FPRODUCT_MATERIAL_NAME;
+    private String FMATSPEC;
+    private String FMATMODEL;
+    private String BATCHNO;
+    private String PRESSUNIT;
+    private String PRO_NUM;
+    private String PRO_UNIT;
+    private String PRO_SUBNUM;
+    private String PRO_SUBUNIT;
+    private String FCONVERTRATE;
+    private String CREATE_TM;
+    private String OP_FLAG;
+    private String OP_TM;
+
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java
index 0c446a9..243d5dd 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.nl.system.service.notice.ISysNoticeService;
 import org.nl.wms.database.material.service.IMdBaseMaterialService;
 import org.nl.wms.database.material.service.dao.MdBaseMaterial;
+import org.nl.wms.ext.mes.autotask.AutoSaveWaitGdyInfo;
 import org.nl.wms.ext.mes.service.WmsToMesService;
 import org.nl.wms.ext.mes.service.dao.mapper.MesRequestMapper;
 import org.nl.wms.ext.mes.service.dto.*;
@@ -147,7 +148,7 @@ public class WmsToMesServiceImpl implements WmsToMesService {
 
     @Override
     public void reportSemiProductionInfoIn(String groupId) {
-        log.info("物料入滚筒线");
+        log.info("半成品入库");
         // 获取组盘信息
         SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(groupId);
         String workorderCode = vehiclematerialgroup.getWorkorder_code();
@@ -175,21 +176,21 @@ public class WmsToMesServiceImpl implements WmsToMesService {
         semiProductionInfoInDto.setPRODATE(workorder.getProduce_date());
         semiProductionInfoInDto.setCREATE_TM(DateUtil.now());
         semiProductionInfoInDto.setOP_FLAG(GeneralDefinition.NO);
-        log.info("入滚筒线返给MES的数据:{}", semiProductionInfoInDto);
+        log.info("半成品入库返给MES的数据:{}", semiProductionInfoInDto);
         // 插入mes数据库
         try {
             mesRequestMapper.insertSemiProductInfo(semiProductionInfoInDto);
         } catch (Exception e) {
-            log.error("入滚筒线插入mes数据库失败:{}", e.getMessage());
+            log.error("半成品入库插入mes数据库失败:{}", e.getMessage());
             // todo:发送通知
-            noticeService.createNotice("入滚筒线插入mes数据库失败", "入滚筒线" + semiProductionInfoInDto.getMSGID(),
+            noticeService.createNotice("半成品入库插入mes数据库失败", "半成品入库" + semiProductionInfoInDto.getMSGID(),
                     NoticeTypeEnum.EXCEPTION.getCode());
         }
     }
 
     @Override
     public void reportSemiProductionInfoOut(String groupId) {
-        log.info("物料出滚筒线");
+        log.info("半成品出库");
         // 获取组盘信息
         SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(groupId);
         String workorderCode = vehiclematerialgroup.getWorkorder_code();
@@ -214,14 +215,14 @@ public class WmsToMesServiceImpl implements WmsToMesService {
         semiProductionInfoOutDto.setOUTTYPE("成品出库");
         semiProductionInfoOutDto.setCREATE_TM(DateUtil.now());
         semiProductionInfoOutDto.setOP_FLAG(GeneralDefinition.NO);
-        log.info("出滚筒线返给MES的数据:{}", semiProductionInfoOutDto);
+        log.info("半成品出库返给MES的数据:{}", semiProductionInfoOutDto);
         // 插入mes数据库
         try {
             mesRequestMapper.insertSemiProductOutInfo(semiProductionInfoOutDto);
         } catch (Exception e) {
-            log.error("出滚筒线插入mes数据库失败:{}", e.getMessage());
+            log.error("半成品出库插入mes数据库失败:{}", e.getMessage());
             // todo:发送通知
-            noticeService.createNotice("入滚筒线插入mes数据库失败", "入滚筒线" + semiProductionInfoOutDto.getMSGID(),
+            noticeService.createNotice("半成品出库插入mes数据库失败", "半成品出库" + semiProductionInfoOutDto.getMSGID(),
                     NoticeTypeEnum.EXCEPTION.getCode());
         }
     }
@@ -354,6 +355,11 @@ public class WmsToMesServiceImpl implements WmsToMesService {
         }
     }
 
+    @Override
+    public List<MesGdyInfoWaitDto> getAllWaitIntoGdyInfos() {
+        return mesRequestMapper.getAllWaitIntoGdyInfos();
+    }
+
     public List<PdmBdWorkorder> toWorkOrderList(List<MesWorkOrderDto> mesWorkOrderInfos) {
         List<PdmBdWorkorder> list = new CopyOnWriteArrayList<>();
         mesWorkOrderInfos.forEach(mesWorkOrderDto -> {
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java
index cd54d40..1d88f3d 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/controller/PdaController.java
@@ -1,5 +1,6 @@
 package org.nl.wms.pda.controller;
 
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -10,6 +11,8 @@ import org.nl.wms.das.device.check.service.dao.DasDeviceCheckRecord;
 import org.nl.wms.das.device.operation.service.IDasDeviceOperationRecordService;
 import org.nl.wms.das.device.operation.service.dao.DasDeviceOperationRecord;
 import org.nl.wms.pda.service.PdaService;
+import org.nl.wms.pda.service.dao.dto.BlendingMoveDto;
+import org.nl.wms.pda.service.dao.dto.ForcedRestingDto;
 import org.nl.wms.pda.service.dao.dto.ManualGroupDto;
 import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
 import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
@@ -32,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @Api(tags = "手持接口")
 @RequestMapping("/api/pda")
+@SaIgnore
 public class PdaController {
     @Autowired
     private IDasDeviceCheckRecordService deviceCheckRecordService;
@@ -85,10 +89,18 @@ public class PdaController {
         return new ResponseEntity<>(pdaService.getDeviceInfo(), HttpStatus.OK);
     }
 
+    @PostMapping("/group/getVehicleType")
+    @Log("获取载具类型")
+    @ApiOperation("获取载具类型")
+    public ResponseEntity<Object> getVehicleType(){
+        return new ResponseEntity<>(pdaService.getVehicleType(), HttpStatus.OK);
+    }
+
     @PostMapping("/group/getPressWorkOrder")
-    @Log("获取压机编码")
-    @ApiOperation("获取压机编码")
-    public ResponseEntity<Object> getPressWorkOrder(JSONObject param){
+    @Log("获取工单编码")
+    @ApiOperation("获取工单编码")
+    @Deprecated
+    public ResponseEntity<Object> getPressWorkOrder(@RequestBody JSONObject param){
         return new ResponseEntity<>(workorderService.getDeviceProductionTask(param.getString("point_code")), HttpStatus.OK);
     }
 
@@ -96,6 +108,35 @@ public class PdaController {
     @Log("人工组盘")
     @ApiOperation("人工组盘")
     public ResponseEntity<PdaResponseVo> manualDiskAssembly(@Validated @RequestBody ManualGroupDto entity){
-        return new ResponseEntity<>(vehiclematerialgroupService.manualCreateByPda(entity), HttpStatus.OK);
+        return new ResponseEntity<>(pdaService.manualCreateByPda(entity), HttpStatus.OK);
     }
+
+    @PostMapping("/move/getBlendingCode")
+    @Log("获取混碾机编码")
+    @ApiOperation("获取混碾机编码")
+    public ResponseEntity<Object> getBlendingCode(){
+        return new ResponseEntity<>(pdaService.getBlendingCode(), HttpStatus.OK);
+    }
+
+    @PostMapping("/move/sendTask")
+    @Log("生成混碾->压机任务")
+    @ApiOperation("生成混碾->压机任务")
+    public ResponseEntity<PdaResponseVo> sendTask(@Validated @RequestBody BlendingMoveDto blendingMoveDto){
+        return new ResponseEntity<>(pdaService.sendTask(blendingMoveDto), HttpStatus.OK);
+    }
+
+    @PostMapping("/forcedResting/show")
+    @Log("显示静置时长")
+    @ApiOperation("显示静置时长")
+    public ResponseEntity<Object> forcedRestingShow(){
+        return new ResponseEntity<>(pdaService.forcedRestingShow(), HttpStatus.OK);
+    }
+
+    @PostMapping("/forcedResting/submit")
+    @Log("强制静置")
+    @ApiOperation("强制静置")
+    public ResponseEntity<PdaResponseVo> forcedResting(@Validated @RequestBody ForcedRestingDto forcedRestingDto){
+        return new ResponseEntity<>(pdaService.forcedResting(forcedRestingDto), HttpStatus.OK);
+    }
+
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java
index a1f4441..ea35a79 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/PdaService.java
@@ -1,6 +1,11 @@
 package org.nl.wms.pda.service;
 
+import org.nl.wms.pda.service.dao.dto.BlendingMoveDto;
+import org.nl.wms.pda.service.dao.dto.ForcedRestingDto;
+import org.nl.wms.pda.service.dao.dto.ManualGroupDto;
 import org.nl.wms.pda.service.dao.vo.DropdownListVo;
+import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
+import org.nl.wms.pda.service.dao.vo.StandTimeShowVo;
 
 import java.util.List;
 
@@ -15,4 +20,17 @@ public interface PdaService {
     List<DropdownListVo> getDeviceStatus();
 
     List<DropdownListVo> deviceAction();
+
+    PdaResponseVo manualCreateByPda(ManualGroupDto entity);
+
+    List<DropdownListVo> getBlendingCode();
+
+    PdaResponseVo sendTask(BlendingMoveDto blendingMoveDto);
+
+    PdaResponseVo forcedResting(ForcedRestingDto forcedRestingDto);
+
+
+    List<StandTimeShowVo> forcedRestingShow();
+
+    List<DropdownListVo> getVehicleType();
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java
new file mode 100644
index 0000000..8dce18c
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java
@@ -0,0 +1,18 @@
+package org.nl.wms.pda.service.dao.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author: lyd
+ * @Description: 混碾搬运参数
+ * @Date: 2023/9/21
+ */
+@Data
+public class BlendingMoveDto {
+    private String vehicle_code;
+    private String start_point_code;
+    private String end_point_code;
+    private BigDecimal material_weight;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java
new file mode 100644
index 0000000..987a165
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java
@@ -0,0 +1,14 @@
+package org.nl.wms.pda.service.dao.dto;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 强制静置实体
+ * @Date: 2023/9/25
+ */
+@Data
+public class ForcedRestingDto {
+    private Integer stand_time; // 静置时间
+    private String group_id; // 组盘标识
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java
index 63eae95..22d7f0d 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java
@@ -14,6 +14,6 @@ public class ManualGroupDto {
     private String vehicle_code;
     private String vehicle_type;
     private String point_code;
-    private String order_code;
+    private String order_code; // 不需要
     private BigDecimal material_weight;
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java
index 8ebdfc7..0ae562e 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.java
@@ -1,6 +1,8 @@
 package org.nl.wms.pda.service.dao.mapper;
 
 import org.nl.wms.pda.service.dao.vo.DropdownListVo;
+import org.nl.wms.pda.service.dao.vo.StandTimeShowVo;
+import org.nl.wms.sch.point.service.dao.SchBasePoint;
 
 import java.util.List;
 
@@ -13,4 +15,21 @@ public interface PdaMapper {
     List<DropdownListVo> getDeviceInfo();
 
     List<DropdownListVo> getDictByCode(String code);
+
+    /**
+     * 根据区域编码和点位名称获取信息
+     * @param device
+     * @param type
+     * @return
+     */
+    List<DropdownListVo> getDeviceInfos(String device, String type);
+
+    /**
+     * 获取压机对应可用的满盅位
+     * @param endPointCode
+     * @return
+     */
+    SchBasePoint findKLXPoint(String endPointCode);
+
+    List<StandTimeShowVo> forcedRestingShow();
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml
index af79ffd..e9815c3 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml
@@ -18,4 +18,38 @@
             `sys_dict`
         WHERE `code` = #{code}
     </select>
+    <select id="getDeviceInfos" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
+        SELECT
+            p.point_code AS `value`,
+            p.point_name AS text
+        FROM
+            `sch_base_point` p
+        WHERE p.region_code = #{device} AND p.point_type = #{type} AND is_used = TRUE
+    </select>
+    <select id="findKLXPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
+        SELECT
+            p.*
+        FROM
+            `sch_base_point` p
+                LEFT JOIN sch_base_task t ON t.point_code2 = p.point_code AND t.task_status IN ('2','3','4')
+        WHERE p.region_code = 'LZKLX' AND p.parent_point_code LIKE CONCAT('%', #{endPointCode}, '%') AND p.point_type = '5'
+          AND t.task_code IS NULL
+    </select>
+    <select id="forcedRestingShow" resultType="org.nl.wms.pda.service.dao.vo.StandTimeShowVo">
+        SELECT
+            vg.group_id,
+            vg.point_code,
+            p2.point_name AS device_code,
+            vg.standing_time,
+            TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE)) AS timeDifferenceMinutes,
+            DATE_FORMAT(DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE), '%Y-%m-%d %H:%i:%s') AS estimatedCompletionTimeString
+        FROM
+            `sch_base_vehiclematerialgroup` vg
+                LEFT JOIN sch_base_point p1 ON p1.point_code = vg.point_code
+                LEFT JOIN sch_base_point p2 ON p2.point_code = p1.parent_point_code
+        WHERE vg.point_code IN (
+            SELECT p.point_code FROM sch_base_point p WHERE p.region_code = 'LZKLX' AND p.point_type = '3'
+        )
+          AND vg.group_bind_material_status = '2'
+    </select>
 </mapper>
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/StandTimeShowVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/StandTimeShowVo.java
new file mode 100644
index 0000000..7f96a4c
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/dao/vo/StandTimeShowVo.java
@@ -0,0 +1,19 @@
+package org.nl.wms.pda.service.dao.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: lyd
+ * @Description: 显示静置时间
+ * @Date: 2023/9/25
+ */
+@Data
+public class StandTimeShowVo {
+    private String group_id;
+    private String point_code;
+    private String device_code;
+    private Integer standing_time;
+    private double timeDifferenceMinutes; // 剩余时间
+    // 格式化预计完成时间为字符串
+    private String estimatedCompletionTimeString;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java
index 3fb133b..e3413dd 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java
@@ -1,9 +1,31 @@
 package org.nl.wms.pda.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.nl.common.exception.BadRequestException;
+import org.nl.common.utils.SecurityUtils;
+import org.nl.wms.database.material.service.IMdBaseMaterialService;
+import org.nl.wms.database.material.service.dao.MdBaseMaterial;
 import org.nl.wms.pda.service.PdaService;
+import org.nl.wms.pda.service.dao.dto.BlendingMoveDto;
+import org.nl.wms.pda.service.dao.dto.ForcedRestingDto;
+import org.nl.wms.pda.service.dao.dto.ManualGroupDto;
 import org.nl.wms.pda.service.dao.mapper.PdaMapper;
 import org.nl.wms.pda.service.dao.vo.DropdownListVo;
+import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
+import org.nl.wms.pda.service.dao.vo.StandTimeShowVo;
+import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
+import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
+import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
+import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
+import org.nl.wms.sch.point.service.ISchBasePointService;
+import org.nl.wms.sch.point.service.dao.SchBasePoint;
+import org.nl.wms.sch.task.service.dao.SchBaseTask;
+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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -19,6 +41,14 @@ import java.util.List;
 public class PdaServiceImpl implements PdaService {
     @Autowired
     private PdaMapper pdaMapper;
+    @Autowired
+    private IPdmBdWorkorderService workorderService;
+    @Autowired
+    private ISchBasePointService pointService;
+    @Autowired
+    private IMdBaseMaterialService materialService;
+    @Autowired
+    private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
     @Override
     public List<DropdownListVo> getDeviceInfo() {
         // 暂定压机区域
@@ -34,4 +64,94 @@ public class PdaServiceImpl implements PdaService {
     public List<DropdownListVo> deviceAction() {
         return pdaMapper.getDictByCode("device_action");
     }
+
+    @Override
+    public PdaResponseVo manualCreateByPda(ManualGroupDto entity) {
+        if (ObjectUtil.isEmpty(entity)) {
+            throw new BadRequestException("组盘不能为空");
+        }
+        SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(entity.getVehicle_code(),
+                entity.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue());
+        if (ObjectUtil.isNotEmpty(groupInfo)) {
+            throw new BadRequestException("组盘信息已存在");
+        }
+        // 获取压机工单
+        PdmBdWorkorder bdWorkorder = workorderService.getDeviceProductionTask(entity.getPoint_code());
+//        PdmBdWorkorder bdWorkorder = workorderService.getByCode(entity.getOrder_code());
+        // 获取点位
+        SchBasePoint basePoint = pointService.getById(entity.getPoint_code());
+        // 获取物料
+        MdBaseMaterial material = materialService.getById(bdWorkorder.getMaterial_id());
+        SchBaseVehiclematerialgroup group = new SchBaseVehiclematerialgroup();
+        group.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
+        group.setVehicle_type(entity.getVehicle_type());
+        group.setVehicle_code(entity.getVehicle_code());
+        group.setMaterial_id(bdWorkorder.getMaterial_id());
+        group.setRedundance_material_code(bdWorkorder.getRaw_material_code());
+        group.setSource_vehicle_code(entity.getPoint_code());
+        group.setPoint_code(entity.getPoint_code());
+        group.setPoint_name(basePoint.getPoint_name());
+        group.setInstorage_time(DateUtil.now());
+        group.setStanding_time(material.getStanding_time());
+        group.setMaterial_weight(entity.getMaterial_weight());
+        group.setWorkorder_code(bdWorkorder.getWorkorder_code());
+        group.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
+        group.setMove_way(basePoint.getPoint_code());
+        group.setBuss_move_id(IdUtil.getSnowflake(1,1).nextIdStr());
+        group.setCreate_id(SecurityUtils.getCurrentUserId());
+        group.setCreate_name(SecurityUtils.getCurrentNickName());
+        group.setCreate_time(DateUtil.now());
+        vehiclematerialgroupService.save(group);
+        return PdaResponseVo.pdaResultOk("组盘成功");
+    }
+
+    @Override
+    public List<DropdownListVo> getBlendingCode() {
+        return pdaMapper.getDeviceInfos("HL", GeneralDefinition.DOCKING_POINT);
+    }
+
+    @Override
+    // todo
+    public PdaResponseVo sendTask(BlendingMoveDto blendingMoveDto) {
+        if (ObjectUtil.isEmpty(blendingMoveDto.getStart_point_code())) {
+            throw new BadRequestException("混碾位不能为空");
+        }
+        if (ObjectUtil.isEmpty(blendingMoveDto.getEnd_point_code())) {
+            throw new BadRequestException("目标压机位不能为空");
+        }
+        // 获取压机对应的困料线、空位、无任务
+        SchBasePoint point = pdaMapper.findKLXPoint(blendingMoveDto.getEnd_point_code());
+        if (ObjectUtil.isEmpty(point)) {
+            throw new BadRequestException("创建失败,已有搬运到【" + blendingMoveDto.getEnd_point_code() + "】的任务, 请稍后在试!");
+        }
+        // 获取压机当前工单
+        PdmBdWorkorder workorder = workorderService.getDeviceProductionTask(blendingMoveDto.getEnd_point_code());
+        // 组盘
+
+        // 创建任务
+        SchBaseTask task = new SchBaseTask(); // 任务实体
+
+        return null;
+    }
+
+    @Override
+    public PdaResponseVo forcedResting(ForcedRestingDto forcedRestingDto) {
+        if (ObjectUtil.isEmpty(forcedRestingDto.getGroup_id())) {
+            throw new BadRequestException("请选择需要设置静置的料盅!");
+        }
+        SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(forcedRestingDto.getGroup_id());
+        vehiclematerialgroup.setStanding_time(forcedRestingDto.getStand_time());
+        vehiclematerialgroupService.updateById(vehiclematerialgroup);
+        return PdaResponseVo.pdaResultOk("设置静置时长完成");
+    }
+
+    @Override
+    public List<StandTimeShowVo> forcedRestingShow() {
+        return pdaMapper.forcedRestingShow();
+    }
+
+    @Override
+    public List<DropdownListVo> getVehicleType() {
+        return pdaMapper.getDictByCode("vehicle_type");
+    }
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
index ba27fbf..c1c6261 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java
@@ -128,6 +128,12 @@ public class PdmBdWorkorder implements Serializable {
 
     @ApiModelProperty(value = "是否加急")
     private Boolean is_urgent;
+    @ApiModelProperty(value = "开工人")
+    private String operator;
+    @ApiModelProperty(value = "合格数")
+    private Integer qualified_qty;
+    @ApiModelProperty(value = "不合格数")
+    private Integer unqualified_qty;
 
     @TableField(exist = false)
     private String material_name;
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java
index 59cea79..8f2d418 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java
@@ -137,9 +137,8 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
         if (ObjectUtil.isNotEmpty(bdWorkorder)) {
             throw new BadRequestException("该设备已有生产工单,不能重复下发");
         }
-        /**
-         * todo: 待优化-虽然一次性下发一个工单,为了方便后续多个一起下发,此处接口设置为list形式
-         */
+        // 设置开工人
+        pdmBdWorkorder.setOperator(SecurityUtils.getCurrentNickName());
         List<AcsWorkOrderVo> list = new CopyOnWriteArrayList<>();
         // 重装数据回ACS,重新根据id找一遍,省的改动以上代码
         AcsWorkOrderVo acsWorkOrderVo = pdmBdWorkorderMapper.toAcsWorkOrderById(pdmBdWorkorder.getWorkorder_id());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java
index 8bb9233..2803a59 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java
@@ -79,6 +79,4 @@ public interface ISchBaseVehiclematerialgroupService extends IService<SchBaseVeh
      * @return
      */
     SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String value);
-
-    PdaResponseVo manualCreateByPda(ManualGroupDto entity);
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java
index 53bcde2..df54f3a 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java
@@ -129,38 +129,4 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
         return selectOne;
     }
 
-    @Override
-    public PdaResponseVo manualCreateByPda(ManualGroupDto entity) {
-        if (ObjectUtil.isEmpty(entity)) {
-            throw new BadRequestException("组盘不能为空");
-        }
-        // 获取压机工单
-        PdmBdWorkorder bdWorkorder = workorderService.getByCode(entity.getOrder_code());
-        // 获取点位
-        SchBasePoint basePoint = pointService.getById(entity.getPoint_code());
-        // 获取物料
-        MdBaseMaterial material = materialService.getById(bdWorkorder.getWorkorder_id());
-        SchBaseVehiclematerialgroup group = new SchBaseVehiclematerialgroup();
-        group.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
-        group.setVehicle_type(entity.getVehicle_type());
-        group.setVehicle_code(entity.getVehicle_code());
-        group.setMaterial_id(bdWorkorder.getMaterial_id());
-        group.setRedundance_material_code(bdWorkorder.getRaw_material_code());
-        group.setSource_vehicle_code(entity.getPoint_code());
-        group.setPoint_code(entity.getPoint_code());
-        group.setPoint_name(basePoint.getPoint_name());
-        group.setInstorage_time(DateUtil.now());
-        group.setStanding_time(material.getStanding_time());
-        group.setMaterial_weight(entity.getMaterial_weight());
-        group.setWorkorder_code(bdWorkorder.getWorkorder_code());
-        group.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
-        group.setMove_way(basePoint.getPoint_code());
-        group.setBuss_move_id(IdUtil.getSnowflake(1,1).nextIdStr());
-        group.setCreate_id(SecurityUtils.getCurrentUserId());
-        group.setCreate_name(SecurityUtils.getCurrentNickName());
-        group.setCreate_time(DateUtil.now());
-        vehiclematerialgroupMapper.insert(group);
-        return PdaResponseVo.pdaResultOk("组盘成功");
-    }
-
 }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
index c9777ec..52199eb 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.nl.common.exception.BadRequestException;
 import org.nl.system.service.notice.ISysNoticeService;
+import org.nl.wms.ext.mes.service.WmsToMesService;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
 import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
 import org.nl.wms.sch.point.service.ISchBasePointService;
@@ -49,6 +50,8 @@ public class FJSKTask extends AbstractTask {
     private ISchBaseTaskconfigService taskConfigService;
     @Autowired
     private FJMapper fjMapper;
+    @Autowired
+    private WmsToMesService wmsToMesService;
 
     @Autowired
     private ISysNoticeService noticeService;
@@ -197,6 +200,14 @@ public class FJSKTask extends AbstractTask {
             endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
             PointUtils.setUpdateByType(endPointObj, taskFinishedType);
             pointService.updateById(endPointObj);
+            // 组盘状态改变
+            SchBaseVehiclematerialgroup vehicleMaterialGroupObj =
+                    vehiclematerialgroupService.getById(taskObj.getGroup_id());
+            vehicleMaterialGroupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
+            TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType);
+            vehiclematerialgroupService.updateById(vehicleMaterialGroupObj);
+            // todo: 上报mes, 物料出库
+            wmsToMesService.reportSemiProductionInfoOut(taskObj.getGroup_id());
         }
         taskObj.setTask_status(TaskStatus.FINISHED.getCode());
         taskObj.setRemark(GeneralDefinition.TASK_FINISH);
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
index cdba8b5..f8d9ed6 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
@@ -311,9 +311,9 @@ public class HNMLTask extends AbstractTask {
         String vehicleType = param.getString("vehicle_type");
         // 泥料物料对应不出物料标识
         // todo: 暂未处理
-        String materialCode = param.getString("material_code"); // 泥料编码: 吨袋号,泥料前
-//        String materialCode = packNo.substring(0, 12);
-//        String mixTimes = param.getString("mix_number"); // 碾次
+        String packNo = param.getString("material_code"); // 泥料编码: 吨袋号,泥料前
+        String materialCode = packNo.substring(0, 12);
+        String mixTimes = packNo.substring(18, packNo.length()); // 碾次
         // 载具类型默认料盅
         if (vehicleType == null || vehicleType.equals(GeneralDefinition.NO)) {
             vehicleType = GeneralDefinition.MATERIAL_CUP;
@@ -349,7 +349,7 @@ public class HNMLTask extends AbstractTask {
         groupEntity.setPoint_code(basePoint.getPoint_code()); // 当前位置
         groupEntity.setPoint_name(basePoint.getPoint_name());
         groupEntity.setMove_way(basePoint.getPoint_code()); // 头次
-//        groupEntity.setMix_times(mixTimes); // 碾次
+        groupEntity.setMix_times(mixTimes); // 碾次
         groupEntity.setInstorage_time(DateUtil.now());
         groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)// 重量
                 ? weight
@@ -357,7 +357,7 @@ public class HNMLTask extends AbstractTask {
         groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定
         groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
         groupEntity.setIs_delete(false);
-//        groupEntity.setExt_data(packNo);// todo: 对于混碾的组盘 暂时存吨袋号
+        groupEntity.setExt_data(packNo);// todo: 对于混碾的组盘 暂时存吨袋号
         vehiclematerialgroupService.saveOrUpdate(groupEntity);
         return groupEntity.getGroup_id();
     }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
index 04536bf..0869e49 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
@@ -21,7 +21,7 @@
         </foreach>
         ORDER BY r.create_time
     </select>
-    <select id="findPointForHNMLAndWorkOrder" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
+        <select id="findPointForHNMLAndWorkOrder" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
         SELECT
             p.*,
             p2.point_code AS device_code
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java
index 55d7b43..a8dc5de 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java
@@ -171,8 +171,6 @@ public class GZYQLTask extends AbstractTask {
         }
         if (status.equals(TaskStatus.FINISHED)) { // 完成
             this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
-            // todo 上传mes出滚筒线
-            wmsToMesService.reportSemiProductionInfoOut(taskObj.getGroup_id());
             // todo 记录入窑数据
             wmsToMesService.reportGdyMaterialInfoIn(taskObj.getGroup_id());
         }
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
index 29c63e2..902a6a1 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
@@ -3,6 +3,7 @@ package org.nl.wms.sch.task_manage.task.tasks.yz;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.nl.common.exception.BadRequestException;
 import org.nl.system.service.notice.ISysNoticeService;
 import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
@@ -36,6 +37,7 @@ import java.util.stream.Collectors;
  * @Description: 压制送空盅任务
  * @Date: 2023/5/25
  */
+@Slf4j
 @Component
 @TaskType("LZKLXSKTask")
 public class YZSKTask extends AbstractTask {
@@ -69,6 +71,7 @@ public class YZSKTask extends AbstractTask {
                     NoticeTypeEnum.WARN.getCode());
             throw new BadRequestException("送空盅任务未找到混料机空位!");
         }
+        log.warn("送空盅找到点位的信息:{}", point);
         // 设置终点并修改创建成功状态
         task.setPoint_code2(point.getPoint_code());
         task.setTask_status(TaskStatus.CREATED.getCode());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java
index 5b82196..1377a0a 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java
@@ -8,6 +8,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
@@ -53,19 +54,42 @@ public class CommonUtils {
             // 计算距离静置完成还有多少毫秒
             long timeDifferenceMillis = inputDate.getTime() + (staticDurationMinutes * 60 * 1000) - currentDate.getTime();
             // 将毫秒转换为分钟
-            long timeDifferenceMinutes = timeDifferenceMillis / (60 * 1000);
+            double timeDifferenceMinutes = (double) timeDifferenceMillis / (60 * 1000);
 //            System.out.println("距离静置完成还有 " + timeDifferenceMinutes + " 分钟");
             // 计算预计完成时间
             Date estimatedCompletionTime = new Date(currentDate.getTime() + timeDifferenceMillis);
             // 格式化预计完成时间为字符串
             String estimatedCompletionTimeString = dateFormat.format(estimatedCompletionTime);
-            return "距离静置完成还有 " + timeDifferenceMinutes + " 分钟" + ", 预计完成时间为:" + estimatedCompletionTimeString;
+            return "距离静置完成还有 " +  String.format("%.2f", timeDifferenceMinutes) + " 分钟" + ", 预计完成时间为:" + estimatedCompletionTimeString;
         } catch (ParseException e) {
             e.printStackTrace();
         }
         return null;
     }
 
+    /**
+     * 获取当前时间是白晚班
+     * @return
+     */
+    public static String getDayShift() {
+        // 获取当前时间
+        LocalTime currentTime = LocalTime.now();
+        // 设置白班和晚班的时间范围
+        LocalTime dayShiftStart = LocalTime.of(8, 0);   // 白班开始时间:8:00 AM
+        LocalTime dayShiftEnd = LocalTime.of(17, 0);    // 白班结束时间:5:00 PM
+        LocalTime nightShiftStart = LocalTime.of(17, 0); // 晚班开始时间:5:00 PM
+        LocalTime nightShiftEnd = LocalTime.of(23, 59);  // 晚班结束时间:11:59 PM
+
+        // 检查当前时间属于哪个班次
+        if (currentTime.isAfter(dayShiftStart) && currentTime.isBefore(dayShiftEnd)) {
+            return "白班";
+        } else if (currentTime.isAfter(nightShiftStart) || currentTime.isBefore(dayShiftStart)) {
+            return "晚班";
+        } else {
+            return "白班";
+        }
+    }
+
     public static <T> T toJavaObject(String objectString, Class<T> clazz) {
         JSONObject jsonObject = JSONObject.parseObject(objectString);
         return jsonObject.toJavaObject(clazz);
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/DatabaseBackup.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/DatabaseBackup.java
new file mode 100644
index 0000000..ff1b7db
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/DatabaseBackup.java
@@ -0,0 +1,57 @@
+package org.nl.wms.util;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Author: lyd
+ * @Description: 备份数据库
+ * @Date: 2023/9/25
+ */
+public class DatabaseBackup {
+    public static void main(String[] args) {
+        String jdbcUrl = "jdbc:mysql://localhost:3306/rtmg_lms";
+        String username = "root";
+        String password = "12356";
+
+        try {
+            Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
+            // 在这里执行备份操作
+            String backupPath = "D:\\backup.sql"; // 备份文件保存的路径
+            // 构建备份命令
+            List<String> command = Arrays.asList(
+                    "mysqldump",
+                    "--host=localhost",
+                    "--port=3306",
+                    "--user=" + username,
+                    "--password=" + password,
+                    "--result-file=" + backupPath,
+                    "--databases", "rtmg_lms",
+                    "--force"
+            );
+            // 执行备份命令
+            ProcessBuilder processBuilder = new ProcessBuilder(command);
+            Process process = processBuilder.start();
+            int exitCode = process.waitFor();
+
+            if (exitCode == 0) {
+                System.out.println("备份成功!");
+            } else {
+                System.out.println("备份失败!");
+            }
+            connection.close();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+}
+
diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml
index a37104c..7e2aa7b 100644
--- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml
+++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application.yml
@@ -42,7 +42,7 @@ spring:
   freemarker:
     check-template-location: false
   profiles:
-    active: prod
+    active: dev
   jackson:
     time-zone: GMT+8
   data:
diff --git a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/test.java b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/test.java
index 1a6f940..755afd2 100644
--- a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/test.java
+++ b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/test.java
@@ -112,4 +112,10 @@ public class test {
         System.out.println("2");
     }
 
+    public static void main(String[] args) {
+        String f = "14070300003423092216085408190002";
+        System.out.println(f.substring(0, 12));
+        System.out.println(f.substring(18, f.length()));
+    }
+
 }