From 327dbcbe3e6ee5fea207422c7792fc35a1027638 Mon Sep 17 00:00:00 2001
From: zongzhibin <zongzhibin@weben-smart.com>
Date: 周二, 26 11月 2024 09:15:24 +0800
Subject: [PATCH] add

---
 CC/iWareCC_ASRS/ThreadService/04_BZ21(搬运整垛机器人)/DataProcess_BZ21_FinishTask.cs |   12 
 CC/iWareSql/DataAccess/TaskHandler.cs                                         |   12 
 CC/iWareCC_ASRS/Common/SystemWarningMsg.cs                                    |    5 
 CC/iWareSql/WmsDBModel/mes_batchOrderUPI_new.cs                               |   69 ++++
 SDA/iWareSda/Devices/4-Station/StationService/StationService.cs               |   67 ++++
 SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs              |    9 
 CC/iWareCommon/Utils/Log4Net/LogType.cs                                       |    2 
 CC/iWareCC_ASRS/FormCC.cs                                                     |    3 
 SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs                     |   65 ++++
 CC/iWareCC_ASRS/Connected Services/StationService/StationService.wsdl         |   38 ++
 CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd                   |   46 +++
 SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs            |   32 ++
 CC/iWareCC_ASRS/ThreadService/03_BZ12(机器人码包工位)/DataProcess_BZ12_FinishTask.cs |    8 
 CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd                   |    6 
 CC/iWareCC_ASRS/ThreadService/03_BZ12(机器人码包工位)/DataProcess_BZ12.cs            |   11 
 CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs                |  136 +++++++++
 SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs                  |  138 +++++++++
 CC/iWareCC_ASRS/ThreadService/04_BZ21(搬运整垛机器人)/DataProcess_BZ21.cs            |  128 +++++++++
 CC/iWareCC_ASRS/iWareCC.csproj                                                |    1 
 19 files changed, 759 insertions(+), 29 deletions(-)

diff --git a/CC/iWareCC_ASRS/Common/SystemWarningMsg.cs b/CC/iWareCC_ASRS/Common/SystemWarningMsg.cs
index 22792ea..7c8e007 100644
--- a/CC/iWareCC_ASRS/Common/SystemWarningMsg.cs
+++ b/CC/iWareCC_ASRS/Common/SystemWarningMsg.cs
@@ -122,7 +122,10 @@
         /// 鑷姩鐮佹澘浠诲姟 鐨勮鍛婃秷鎭�
         /// </summary>
         public static string _lbl_alert_DataProcess_BZ12 = string.Empty;
-
+        /// <summary>
+        /// 鑷姩鐮佹澘浠诲姟 鐨勮鍛婃秷鎭�
+        /// </summary>
+        public static string _lbl_alert_DataProcess_BZ21 = string.Empty;
         /// <summary>
         /// 鑷姩缁勭洏浠诲姟涓嬪彂 鐨勮鍛婃秷鎭�
         /// </summary>
diff --git a/CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs b/CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs
index 15f96cd..ba6bf67 100644
--- a/CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs
+++ b/CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs
@@ -242,6 +242,12 @@
         private short R_StateField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool R_SurrouondTaskFinishField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private short R_SurrouondTaskNoField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private int R_TaskIDField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -518,6 +524,32 @@
         }
         
         [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool R_SurrouondTaskFinish {
+            get {
+                return this.R_SurrouondTaskFinishField;
+            }
+            set {
+                if ((this.R_SurrouondTaskFinishField.Equals(value) != true)) {
+                    this.R_SurrouondTaskFinishField = value;
+                    this.RaisePropertyChanged("R_SurrouondTaskFinish");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public short R_SurrouondTaskNo {
+            get {
+                return this.R_SurrouondTaskNoField;
+            }
+            set {
+                if ((this.R_SurrouondTaskNoField.Equals(value) != true)) {
+                    this.R_SurrouondTaskNoField = value;
+                    this.RaisePropertyChanged("R_SurrouondTaskNo");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
         public int R_TaskID {
             get {
                 return this.R_TaskIDField;
@@ -584,6 +616,9 @@
         private bool W_EndMarkField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool W_FirstMarkField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private short W_HeightField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -623,6 +658,9 @@
         private short W_PalletizingPlaceYField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private short W_PalletizingPlaceZField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private short W_PalletizingStationField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -636,6 +674,12 @@
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
         private short W_RotateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool W_SurroundTaskFinishField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int W_SurroundTaskNoField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
         private short W_WidthField;
@@ -743,6 +787,19 @@
                 if ((this.W_EndMarkField.Equals(value) != true)) {
                     this.W_EndMarkField = value;
                     this.RaisePropertyChanged("W_EndMark");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool W_FirstMark {
+            get {
+                return this.W_FirstMarkField;
+            }
+            set {
+                if ((this.W_FirstMarkField.Equals(value) != true)) {
+                    this.W_FirstMarkField = value;
+                    this.RaisePropertyChanged("W_FirstMark");
                 }
             }
         }
@@ -917,6 +974,19 @@
         }
         
         [System.Runtime.Serialization.DataMemberAttribute()]
+        public short W_PalletizingPlaceZ {
+            get {
+                return this.W_PalletizingPlaceZField;
+            }
+            set {
+                if ((this.W_PalletizingPlaceZField.Equals(value) != true)) {
+                    this.W_PalletizingPlaceZField = value;
+                    this.RaisePropertyChanged("W_PalletizingPlaceZ");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
         public short W_PalletizingStation {
             get {
                 return this.W_PalletizingStationField;
@@ -977,6 +1047,32 @@
                 if ((this.W_RotateField.Equals(value) != true)) {
                     this.W_RotateField = value;
                     this.RaisePropertyChanged("W_Rotate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool W_SurroundTaskFinish {
+            get {
+                return this.W_SurroundTaskFinishField;
+            }
+            set {
+                if ((this.W_SurroundTaskFinishField.Equals(value) != true)) {
+                    this.W_SurroundTaskFinishField = value;
+                    this.RaisePropertyChanged("W_SurroundTaskFinish");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int W_SurroundTaskNo {
+            get {
+                return this.W_SurroundTaskNoField;
+            }
+            set {
+                if ((this.W_SurroundTaskNoField.Equals(value) != true)) {
+                    this.W_SurroundTaskNoField = value;
+                    this.RaisePropertyChanged("W_SurroundTaskNo");
                 }
             }
         }
@@ -1738,16 +1834,28 @@
         System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WriteOutStoreTaskInfoAsync(int deviceId, string stationCode, string sourcePlaceNo, int outbound_TaskID);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WritePalletizingTaskInfo", ReplyAction="http://tempuri.org/IStationService/WritePalletizingTaskInfoResponse")]
-        iWareCC.StationService.SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY);
+        iWareCC.StationService.SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WritePalletizingTaskInfo", ReplyAction="http://tempuri.org/IStationService/WritePalletizingTaskInfoResponse")]
-        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WritePalletizingTaskInfoAsync(int deviceId, string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY);
+        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WritePalletizingTaskInfoAsync(int deviceId, string stationCode, int taskID, bool isLast, bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/SetPalletizingTaskFinishAck", ReplyAction="http://tempuri.org/IStationService/SetPalletizingTaskFinishAckResponse")]
         iWareCC.StationService.SdaResEntity SetPalletizingTaskFinishAck(int deviceId, bool value, string stationCode);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/SetPalletizingTaskFinishAck", ReplyAction="http://tempuri.org/IStationService/SetPalletizingTaskFinishAckResponse")]
         System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> SetPalletizingTaskFinishAckAsync(int deviceId, bool value, string stationCode);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WriteSurroundTaskInfo", ReplyAction="http://tempuri.org/IStationService/WriteSurroundTaskInfoResponse")]
+        iWareCC.StationService.SdaResEntity WriteSurroundTaskInfo(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WriteSurroundTaskInfo", ReplyAction="http://tempuri.org/IStationService/WriteSurroundTaskInfoResponse")]
+        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WriteSurroundTaskInfoAsync(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/SetSurroundTaskFinishAck", ReplyAction="http://tempuri.org/IStationService/SetSurroundTaskFinishAckResponse")]
+        iWareCC.StationService.SdaResEntity SetSurroundTaskFinishAck(int deviceId, bool value, string stationCode);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/SetSurroundTaskFinishAck", ReplyAction="http://tempuri.org/IStationService/SetSurroundTaskFinishAckResponse")]
+        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> SetSurroundTaskFinishAckAsync(int deviceId, bool value, string stationCode);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WriteStation_FinishACK", ReplyAction="http://tempuri.org/IStationService/WriteStation_FinishACKResponse")]
         iWareCC.StationService.SdaResEntity WriteStation_FinishACK(int deviceId, bool value, int plcTaskId);
@@ -1915,12 +2023,12 @@
             return base.Channel.WriteOutStoreTaskInfoAsync(deviceId, stationCode, sourcePlaceNo, outbound_TaskID);
         }
         
-        public iWareCC.StationService.SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY) {
-            return base.Channel.WritePalletizingTaskInfo(deviceId, stationCode, taskID, isLast, length, width, height, rotate, toplace, placeX, placeY);
+        public iWareCC.StationService.SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ) {
+            return base.Channel.WritePalletizingTaskInfo(deviceId, stationCode, taskID, isLast, isFirst, length, width, height, rotate, toplace, placeX, placeY, placeZ);
         }
         
-        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WritePalletizingTaskInfoAsync(int deviceId, string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY) {
-            return base.Channel.WritePalletizingTaskInfoAsync(deviceId, stationCode, taskID, isLast, length, width, height, rotate, toplace, placeX, placeY);
+        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WritePalletizingTaskInfoAsync(int deviceId, string stationCode, int taskID, bool isLast, bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ) {
+            return base.Channel.WritePalletizingTaskInfoAsync(deviceId, stationCode, taskID, isLast, isFirst, length, width, height, rotate, toplace, placeX, placeY, placeZ);
         }
         
         public iWareCC.StationService.SdaResEntity SetPalletizingTaskFinishAck(int deviceId, bool value, string stationCode) {
@@ -1931,6 +2039,22 @@
             return base.Channel.SetPalletizingTaskFinishAckAsync(deviceId, value, stationCode);
         }
         
+        public iWareCC.StationService.SdaResEntity WriteSurroundTaskInfo(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey) {
+            return base.Channel.WriteSurroundTaskInfo(deviceId, stationCode, taskID, length, width, cartonhigh, cartonwidth, placex, placey);
+        }
+        
+        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WriteSurroundTaskInfoAsync(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey) {
+            return base.Channel.WriteSurroundTaskInfoAsync(deviceId, stationCode, taskID, length, width, cartonhigh, cartonwidth, placex, placey);
+        }
+        
+        public iWareCC.StationService.SdaResEntity SetSurroundTaskFinishAck(int deviceId, bool value, string stationCode) {
+            return base.Channel.SetSurroundTaskFinishAck(deviceId, value, stationCode);
+        }
+        
+        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> SetSurroundTaskFinishAckAsync(int deviceId, bool value, string stationCode) {
+            return base.Channel.SetSurroundTaskFinishAckAsync(deviceId, value, stationCode);
+        }
+        
         public iWareCC.StationService.SdaResEntity WriteStation_FinishACK(int deviceId, bool value, int plcTaskId) {
             return base.Channel.WriteStation_FinishACK(deviceId, value, plcTaskId);
         }
diff --git a/CC/iWareCC_ASRS/Connected Services/StationService/StationService.wsdl b/CC/iWareCC_ASRS/Connected Services/StationService/StationService.wsdl
index 68448b7..f48a7f4 100644
--- a/CC/iWareCC_ASRS/Connected Services/StationService/StationService.wsdl
+++ b/CC/iWareCC_ASRS/Connected Services/StationService/StationService.wsdl
@@ -111,6 +111,18 @@
   <wsdl:message name="IStationService_SetPalletizingTaskFinishAck_OutputMessage">
     <wsdl:part name="parameters" element="tns:SetPalletizingTaskFinishAckResponse" />
   </wsdl:message>
+  <wsdl:message name="IStationService_WriteSurroundTaskInfo_InputMessage">
+    <wsdl:part name="parameters" element="tns:WriteSurroundTaskInfo" />
+  </wsdl:message>
+  <wsdl:message name="IStationService_WriteSurroundTaskInfo_OutputMessage">
+    <wsdl:part name="parameters" element="tns:WriteSurroundTaskInfoResponse" />
+  </wsdl:message>
+  <wsdl:message name="IStationService_SetSurroundTaskFinishAck_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetSurroundTaskFinishAck" />
+  </wsdl:message>
+  <wsdl:message name="IStationService_SetSurroundTaskFinishAck_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetSurroundTaskFinishAckResponse" />
+  </wsdl:message>
   <wsdl:message name="IStationService_WriteStation_FinishACK_InputMessage">
     <wsdl:part name="parameters" element="tns:WriteStation_FinishACK" />
   </wsdl:message>
@@ -197,6 +209,14 @@
     <wsdl:operation name="SetPalletizingTaskFinishAck">
       <wsdl:input wsaw:Action="http://tempuri.org/IStationService/SetPalletizingTaskFinishAck" message="tns:IStationService_SetPalletizingTaskFinishAck_InputMessage" />
       <wsdl:output wsaw:Action="http://tempuri.org/IStationService/SetPalletizingTaskFinishAckResponse" message="tns:IStationService_SetPalletizingTaskFinishAck_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="WriteSurroundTaskInfo">
+      <wsdl:input wsaw:Action="http://tempuri.org/IStationService/WriteSurroundTaskInfo" message="tns:IStationService_WriteSurroundTaskInfo_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IStationService/WriteSurroundTaskInfoResponse" message="tns:IStationService_WriteSurroundTaskInfo_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetSurroundTaskFinishAck">
+      <wsdl:input wsaw:Action="http://tempuri.org/IStationService/SetSurroundTaskFinishAck" message="tns:IStationService_SetSurroundTaskFinishAck_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IStationService/SetSurroundTaskFinishAckResponse" message="tns:IStationService_SetSurroundTaskFinishAck_OutputMessage" />
     </wsdl:operation>
     <wsdl:operation name="WriteStation_FinishACK">
       <wsdl:input wsaw:Action="http://tempuri.org/IStationService/WriteStation_FinishACK" message="tns:IStationService_WriteStation_FinishACK_InputMessage" />
@@ -366,6 +386,24 @@
         <soap:body use="literal" />
       </wsdl:output>
     </wsdl:operation>
+    <wsdl:operation name="WriteSurroundTaskInfo">
+      <soap:operation soapAction="http://tempuri.org/IStationService/WriteSurroundTaskInfo" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetSurroundTaskFinishAck">
+      <soap:operation soapAction="http://tempuri.org/IStationService/SetSurroundTaskFinishAck" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
     <wsdl:operation name="WriteStation_FinishACK">
       <soap:operation soapAction="http://tempuri.org/IStationService/WriteStation_FinishACK" style="document" />
       <wsdl:input>
diff --git a/CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd b/CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd
index 69d2d9c..d4a1fed 100644
--- a/CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd
+++ b/CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd
@@ -247,6 +247,7 @@
         <xs:element minOccurs="0" name="stationCode" nillable="true" type="xs:string" />
         <xs:element minOccurs="0" name="taskID" type="xs:int" />
         <xs:element minOccurs="0" name="isLast" type="xs:boolean" />
+        <xs:element minOccurs="0" name="isFirst" type="xs:boolean" />
         <xs:element minOccurs="0" name="length" type="xs:short" />
         <xs:element minOccurs="0" name="width" type="xs:short" />
         <xs:element minOccurs="0" name="height" type="xs:short" />
@@ -254,6 +255,7 @@
         <xs:element minOccurs="0" name="toplace" type="xs:short" />
         <xs:element minOccurs="0" name="placeX" type="xs:short" />
         <xs:element minOccurs="0" name="placeY" type="xs:short" />
+        <xs:element minOccurs="0" name="placeZ" type="xs:short" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
@@ -280,6 +282,44 @@
       </xs:sequence>
     </xs:complexType>
   </xs:element>
+  <xs:element name="WriteSurroundTaskInfo">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="deviceId" type="xs:int" />
+        <xs:element minOccurs="0" name="stationCode" nillable="true" type="xs:string" />
+        <xs:element minOccurs="0" name="taskID" type="xs:int" />
+        <xs:element minOccurs="0" name="length" type="xs:short" />
+        <xs:element minOccurs="0" name="width" type="xs:short" />
+        <xs:element minOccurs="0" name="cartonhigh" type="xs:short" />
+        <xs:element minOccurs="0" name="cartonwidth" type="xs:short" />
+        <xs:element minOccurs="0" name="placex" type="xs:short" />
+        <xs:element minOccurs="0" name="placey" type="xs:short" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="WriteSurroundTaskInfoResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteSurroundTaskInfoResult" nillable="true" type="q18:SdaResEntity" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetSurroundTaskFinishAck">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="deviceId" type="xs:int" />
+        <xs:element minOccurs="0" name="value" type="xs:boolean" />
+        <xs:element minOccurs="0" name="stationCode" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetSurroundTaskFinishAckResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q19="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="SetSurroundTaskFinishAckResult" nillable="true" type="q19:SdaResEntity" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
   <xs:element name="WriteStation_FinishACK">
     <xs:complexType>
       <xs:sequence>
@@ -292,7 +332,7 @@
   <xs:element name="WriteStation_FinishACKResponse">
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteStation_FinishACKResult" nillable="true" type="q18:SdaResEntity" />
+        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteStation_FinishACKResult" nillable="true" type="q20:SdaResEntity" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
@@ -310,7 +350,7 @@
   <xs:element name="WriteScanValidateACKResponse">
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q19="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteScanValidateACKResult" nillable="true" type="q19:SdaResEntity" />
+        <xs:element xmlns:q21="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteScanValidateACKResult" nillable="true" type="q21:SdaResEntity" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
@@ -328,7 +368,7 @@
   <xs:element name="WriteStation_XigangGetDataForOutResponse">
     <xs:complexType>
       <xs:sequence>
-        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteStation_XigangGetDataForOutResult" nillable="true" type="q20:SdaResEntity" />
+        <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/iWareSda" minOccurs="0" name="WriteStation_XigangGetDataForOutResult" nillable="true" type="q22:SdaResEntity" />
       </xs:sequence>
     </xs:complexType>
   </xs:element>
diff --git a/CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd b/CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd
index 4afaded..9020b6a 100644
--- a/CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd
+++ b/CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd
@@ -28,6 +28,8 @@
       <xs:element minOccurs="0" name="R_ReqParseData" type="xs:boolean" />
       <xs:element minOccurs="0" name="R_Shape" type="xs:short" />
       <xs:element minOccurs="0" name="R_State" type="xs:short" />
+      <xs:element minOccurs="0" name="R_SurrouondTaskFinish" type="xs:boolean" />
+      <xs:element minOccurs="0" name="R_SurrouondTaskNo" type="xs:short" />
       <xs:element minOccurs="0" name="R_TaskID" type="xs:int" />
       <xs:element minOccurs="0" name="StationCode" nillable="true" type="xs:string" />
     </xs:sequence>
@@ -48,6 +50,7 @@
       <xs:element minOccurs="0" name="W_Destination_In" type="xs:int" />
       <xs:element minOccurs="0" name="W_Destination_Out" type="xs:int" />
       <xs:element minOccurs="0" name="W_EndMark" type="xs:boolean" />
+      <xs:element minOccurs="0" name="W_FirstMark" type="xs:boolean" />
       <xs:element minOccurs="0" name="W_Height" type="xs:short" />
       <xs:element minOccurs="0" name="W_InboundFinishConfirm" type="xs:boolean" />
       <xs:element minOccurs="0" name="W_Inbound_TaskID" type="xs:short" />
@@ -61,11 +64,14 @@
       <xs:element minOccurs="0" name="W_PackageWidth" nillable="true" type="xs:string" />
       <xs:element minOccurs="0" name="W_PalletizingPlaceX" type="xs:short" />
       <xs:element minOccurs="0" name="W_PalletizingPlaceY" type="xs:short" />
+      <xs:element minOccurs="0" name="W_PalletizingPlaceZ" type="xs:short" />
       <xs:element minOccurs="0" name="W_PalletizingStation" type="xs:short" />
       <xs:element minOccurs="0" name="W_PalletizingTaskFinish" type="xs:boolean" />
       <xs:element minOccurs="0" name="W_PalletizingTaskID" type="xs:short" />
       <xs:element minOccurs="0" name="W_ReqOut" type="xs:boolean" />
       <xs:element minOccurs="0" name="W_Rotate" type="xs:short" />
+      <xs:element minOccurs="0" name="W_SurroundTaskFinish" type="xs:boolean" />
+      <xs:element minOccurs="0" name="W_SurroundTaskNo" type="xs:int" />
       <xs:element minOccurs="0" name="W_Width" type="xs:short" />
       <xs:element minOccurs="0" name="W_X_Offset" nillable="true" type="xs:string" />
       <xs:element minOccurs="0" name="W_Y_Offset" nillable="true" type="xs:string" />
diff --git a/CC/iWareCC_ASRS/FormCC.cs b/CC/iWareCC_ASRS/FormCC.cs
index 2eba145..928fb05 100644
--- a/CC/iWareCC_ASRS/FormCC.cs
+++ b/CC/iWareCC_ASRS/FormCC.cs
@@ -6,6 +6,7 @@
 using iWareCC.StationService;
 using iWareCC.ThreadService;
 using iWareCC.ThreadService._03_BZ12_鏈哄櫒浜虹爜鍖呭伐浣峗;
+using iWareCC.ThreadService._04_BZ21_鎼繍鏁村灈鏈哄櫒浜篲;
 using iWareCC.WCF;
 using iWareCommon.Common.Globle;
 using iWareCommon.Utils;
@@ -242,6 +243,8 @@
             new Thread(DataProcess_BZ12.Hander).Start();
             new Thread(DataProcess_BZ12_FinishTask.Handler).Start();
 
+            new Thread(DataProcess_BZ21.Hander).Start();
+            new Thread(DataProcess_BZ21_FinishTask.Handler).Start();
             new Thread(DeleteData).Start();
 
             new Thread(PrintHandler.Handler).Start();
diff --git "a/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12.cs" "b/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12.cs"
index 93a2133..33c1b32 100644
--- "a/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12.cs"
+++ "b/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12.cs"
@@ -44,14 +44,16 @@
                             }
                             var upiCode = result.Replace("/r", ""); ;
                             bool islast = false;//鏄惁鏈澘
+                            bool isfirst = false;//鏄惁鏈澘
                             short isrotate = 0;//鏄惁鏃嬭浆
                             short placeX = 0;
                             short placeY = 0;
+                            short placeZ = 0;
                             string place = "";
                             using (WmsDBModel wmsDB = new WmsDBModel())
                             {
                                 //瑕佹槸鏈夊凡涓嬪彂鐨勪换鍔★紝灏变笉瑕佹墽琛�
-                                var isValidate = TaskHandler.ValidateIssueTaskForBZ12(wmsDB);
+                                var isValidate = TaskHandler.ValidateIssueTaskForBZ12(wmsDB,result);
                                 if (!isValidate)
                                 {
                                     SystemWarningMsg._lbl_alert_DataProcess_BZ12 = $"{rgvLocation.ToString()}-鏈夆�樺凡涓嬪彂鈥欑殑浠诲姟锛屼笉鑳藉鐞�,姝ゆ寰幆缁撴潫";
@@ -66,6 +68,8 @@
                                 isrotate = 1;
                                 placeX = (short)upiObj.MachineXCenter;
                                 placeY = (short)upiObj.MachineYCenter;
+                                placeZ = (short)upiObj.MachineZCenter;
+
                                 //鏌ュ杩欏寘鎵�鏈夌殑鏁伴噺
                                 var upiList = wmsDB.mes_batchOrderUPI_new.Where(x => x.PackageCode == upiObj.PackageCode).ToList();
                                 //鏌ヨ鏄惁鏈澘骞朵笖鍒ゆ柇鏈夋病鏈夋贩鎵�
@@ -88,6 +92,7 @@
                                     }
                                     else
                                     {
+                                        isfirst = true;
                                         wms_rbline_runmode.PalletizingUPI = upiObj.PackageCode;
                                         if (obj.R_PalletizingStation1 == 1)
                                         {
@@ -153,8 +158,8 @@
                                 using (StationServiceClient client = new StationServiceClient())
                                 {
 
-                                    var res = client.WritePalletizingTaskInfo((int)EDevice.Station, rgvLocation, Convert.ToInt32(task.TaskNo), islast,
-                                          (short)upiObj.Length, (short)upiObj.Width, (short)upiObj.Thk, isrotate, short.Parse(task.PlaceCode), placeX, placeY);
+                                    var res = client.WritePalletizingTaskInfo((int)EDevice.Station, rgvLocation, Convert.ToInt32(task.TaskNo), islast,isfirst,
+                                          (short)upiObj.Length, (short)upiObj.Width, (short)upiObj.Thk, isrotate, short.Parse(task.PlaceCode), placeX, placeY,placeZ);
                                     if (!res.result)
                                     {
                                         SystemWarningMsg._lbl_alert_DataProcess_BZ12 = $"{rgvLocation.ToString()}-涓嬪彂鍏ュ簱浠诲姟 澶辫触,WriteInStoreTaskInfoAsync 杩斿洖:{res.resMsg}";
diff --git "a/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12_FinishTask.cs" "b/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12_FinishTask.cs"
index 114543a..103abe3 100644
--- "a/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12_FinishTask.cs"
+++ "b/CC/iWareCC_ASRS/ThreadService/03_BZ12\050\346\234\272\345\231\250\344\272\272\347\240\201\345\214\205\345\267\245\344\275\215\051/DataProcess_BZ12_FinishTask.cs"
@@ -52,7 +52,7 @@
                             using (WmsDBModel wmsDB = new WmsDBModel())
                             {
                                 var task = wmsDB.wms_rbline_task.Where(x =>
-                                 x.TaskNo == obj.R_Inbound_TaskID.ToString()
+                                 x.TaskNo == obj.R_PalletizingTaskNo.ToString()
                                 && x.RbTaskType == (int)RbTaskTypeEnum.鐮佹澘浠诲姟
                                 && x.TaskStatus == (int)TaskStatusEnum.宸蹭笅鍙�).FirstOrDefault();
                                 if (task == null)
@@ -60,7 +60,11 @@
                                     SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()},鏍规嵁 R_InboundNumber:{obj.R_InboundNumber}娌℃湁鎵惧埌宸蹭笅鍙戠殑浠诲姟 ";
                                     continue;
                                 }
-
+                                var upiobj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == task.UPI).FirstOrDefault();
+                                if (upiobj != null)
+                                {
+                                    upiobj.UpiStatus = 3;
+                                }
                                 task.TaskStatus = (int)TaskStatusEnum.宸插畬鎴�;
                                 task.TaskStatusName = TaskStatusEnum.宸插畬鎴�.ToString();
                                 task.FinishedTime = DateTime.Now;
diff --git "a/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21.cs" "b/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21.cs"
index 9c62d16..3b873f0 100644
--- "a/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21.cs"
+++ "b/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21.cs"
@@ -1,4 +1,9 @@
-锘縰sing iWareCommon.Utils;
+锘縰sing Admin.NET.Application;
+using iWareCC.StationService;
+using iWareCommon.Common.Globle;
+using iWareCommon.Utils;
+using iWareModel;
+using iWareSql.DataAccess;
 using iWareSql.WmsDBModel;
 using System;
 using System.Collections.Generic;
@@ -11,7 +16,128 @@
 {
     public class DataProcess_BZ21
     {
+        public static void Hander()
+        {
+            var alertMsg = "";
+            LogType logType = LogType.DataProcess_BZ21;
+            while (true)
+            {
+                Thread.Sleep(2000);//浼戠湢2绉掞紝灏嗕紤鐪犲啓鍒板墠闈紝鏄负浜嗕笅闈㈢殑continue鏂规硶鎵ц鍚庝笉鏄剧ず閿欒淇℃伅鐨勬彁绀猴紒锛侊紒銆怑ditBy shaocx,2022-05-24銆�
+                SystemWarningMsg._lbl_alert_DataProcess_BZ21 = string.Empty;
+                try
+                {
+                    if (SystemValue.isStartedModel)
+                    {
+                        var rgvLocation = StationLocationEnum.BZ21.ToString();
+                        /*
+                         * 1銆佷粠鏁版嵁搴撲腑鍒ゆ柇鏄惁榻愬
+                         * 2銆佹牴鎹綈濂楃粨鏋滐紝鎺ㄩ�佺粰PLC
+                         */
+                        var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault();
+                        if (obj.R_ReqParseData)
+                        {
+                            var result = obj.R_ReadCodeResult;
+                            if (string.IsNullOrEmpty(result))
+                            {
+                                SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()}-璇锋眰浜嗚В鐮侊紝浣嗘槸缁撴灉鏄┖鐨�,姝ゆ寰幆缁撴潫";
+                                continue;
+                            }
+                            var upiCode = result.Replace("/r", ""); ;
+                            short cartonwidth = 0;//鏄惁鏈澘
+                            short cartonhigh = 0;//鏄惁鏃嬭浆
+                            short placeX = 0;
+                            short placeY = 0;
+                            short placeZ = 0;
+                            string place = "";
+                            using (WmsDBModel wmsDB = new WmsDBModel())
+                            {
+                                //瑕佹槸鏈夊凡涓嬪彂鐨勪换鍔★紝灏变笉瑕佹墽琛�
+                                var isValidate = TaskHandler.ValidateIssueTaskForBZ21(wmsDB,result);
+                                if (!isValidate)
+                                {
+                                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()}-鏈夆�樺凡涓嬪彂鈥欑殑浠诲姟锛屼笉鑳藉鐞�,姝ゆ寰幆缁撴潫";
+                                    continue;
+                                }
+                                var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault();
+                                if (upiObj == null)
+                                {
+                                    SystemWarningMsg._lbl_alert_DataProcess_BZ21 = $"{rgvLocation.ToString()},鏍规嵁UPI:{upiCode}娌℃湁鎵惧埌瀵硅薄 ";
+                                    continue;
+                                }
+                                placeX = (short)upiObj.MachineXCenter;
+                                placeY = (short)upiObj.MachineYCenter;
+                                placeZ = (short)upiObj.MachineZCenter;
+                                cartonhigh = (short)upiObj.Info1;
+                                cartonwidth = (short)upiObj.Info2;
 
+                                //璁板綍浠诲姟
+                                var _id = Yitter.IdGenerator.YitIdHelper.NextId();
+                                var plcTaskNo = BusinessHelper.CreatePlcTaskIdForSrmTask();
+                                var putpakegecode = new mes_PushPackageCode()
+                                {
+                                    Id = _id,
+                                    PackageCode=upiObj.PackageCode,
+                                    PushStatus=0,
+                                    PushNum=0,
+                                    CreateTime = DateTime.Now,
+                                    CreateUserName = "CC",
+                                    UpdateTime = DateTime.Now,
+                                    UpdateUserName = "CC",
+                                };
+                                var task = new wms_rbline_task()
+                                {
+                                    Id = _id,
+                                    TaskNo = plcTaskNo,
+                                    UPI = upiObj.UPI,
+                                    Length = upiObj.Length,
+                                    Width = upiObj.Width,
+                                    Thk = upiObj.Thk,
+                                    IssueTime = DateTime.Now,
+                                    PlanNo = upiObj.PlanNo,
+                                    OrderId = upiObj.OrderId,
+                                    PackageCode = upiObj.PackageCode,
+                                    RbTaskType = (int)RbTaskTypeEnum.澶规澘浠诲姟,
+                                    RbTaskTypeEnumName = RbTaskTypeEnum.鐮佹澘浠诲姟.ToString(),
+                                    TaskStatus = (int)TaskStatusEnum.宸蹭笅鍙�,
+                                    TaskStatusName = TaskStatusEnum.宸蹭笅鍙�.ToString(),
+                                    TaskMsg = "鐮佹澘",
+                                    CreateTime = DateTime.Now,
+                                    CreateUserName = "CC",
+                                    UpdateTime = DateTime.Now,
+                                    UpdateUserName = "CC",
+                                    PlaceCode = place
+                                };
+
+                                wmsDB.wms_rbline_task.Add(task);
+                                wmsDB.mes_PushPackageCode.Add(putpakegecode);
+                                using (StationServiceClient client = new StationServiceClient())
+                                {
+
+                                    var res = client.WriteSurroundTaskInfo((int)EDevice.Station, rgvLocation, Convert.ToInt32(task.TaskNo), 
+                                          (short)upiObj.Info1, (short)upiObj.Info2,cartonhigh,cartonwidth,placeX,placeY);
+                                    if (!res.result)
+                                    {
+                                        SystemWarningMsg._lbl_alert_DataProcess_BZ12 = $"{rgvLocation.ToString()}-涓嬪彂鍏ュ簱浠诲姟 澶辫触,WriteInStoreTaskInfoAsync 杩斿洖:{res.resMsg}";
+                                        continue;
+                                    }
+                                    else
+                                    {
+                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-涓嬪彂鍏ュ簱浠诲姟 鎴愬姛,WriteInStoreTaskInfoAsync锛屽弬鏁�: 绔欑偣{rgvLocation}");
+                                    }
+                                }
+
+                                wmsDB.SaveChanges();
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    SystemWarningMsg._lbl_alert_DataProcess_BZ39 += " 鍑虹幇寮傚父:" + ex.Message + SysGloble.SPLIT_STR;
+                    Log4NetHelper.WriteErrorLog(logType, " 鍑虹幇寮傚父锛�" + ex.Message, ex);
+                }
+            }
+        }
         public static void PushPackageCode()
         {
             while (true)
diff --git "a/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21_FinishTask.cs" "b/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21_FinishTask.cs"
new file mode 100644
index 0000000..89273a4
--- /dev/null
+++ "b/CC/iWareCC_ASRS/ThreadService/04_BZ21\357\274\210\346\220\254\350\277\220\346\225\264\345\236\233\346\234\272\345\231\250\344\272\272\357\274\211/DataProcess_BZ21_FinishTask.cs"
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace iWareCC.ThreadService._04_BZ21_鎼繍鏁村灈鏈哄櫒浜篲
+{
+    internal class DataProcess_BZ21_FinishTask
+    {
+    }
+}
diff --git a/CC/iWareCC_ASRS/iWareCC.csproj b/CC/iWareCC_ASRS/iWareCC.csproj
index 4b0289e..a4a5b7d 100644
--- a/CC/iWareCC_ASRS/iWareCC.csproj
+++ b/CC/iWareCC_ASRS/iWareCC.csproj
@@ -170,6 +170,7 @@
     <Compile Include="ThreadService\03_BZ12%28鏈哄櫒浜虹爜鍖呭伐浣�%29\DataProcess_BZ12.cs" />
     <Compile Include="ThreadService\03_BZ12%28鏈哄櫒浜虹爜鍖呭伐浣�%29\DataProcess_BZ12_FinishTask.cs" />
     <Compile Include="ThreadService\04_BZ21锛堟惉杩愭暣鍨涙満鍣ㄤ汉锛塡DataProcess_BZ21.cs" />
+    <Compile Include="ThreadService\04_BZ21锛堟惉杩愭暣鍨涙満鍣ㄤ汉锛塡DataProcess_BZ21_FinishTask.cs" />
     <Compile Include="WCF\CCWcfService.cs" />
     <Compile Include="WCF\ICCWcfService.cs" />
     <Compile Include="WmsTask\AutoUpdateEngineInfoTask.cs" />
diff --git a/CC/iWareCommon/Utils/Log4Net/LogType.cs b/CC/iWareCommon/Utils/Log4Net/LogType.cs
index 5d9dd1b..77b1216 100644
--- a/CC/iWareCommon/Utils/Log4Net/LogType.cs
+++ b/CC/iWareCommon/Utils/Log4Net/LogType.cs
@@ -108,5 +108,7 @@
         /// 鐮佹澘浠诲姟涓嬪彂
         /// </summary>
         DataProcess_BZ12 = 309,
+        DataProcess_BZ21 = 310,
+
     }
 }
diff --git a/CC/iWareSql/DataAccess/TaskHandler.cs b/CC/iWareSql/DataAccess/TaskHandler.cs
index 2ab6790..ddf08dd 100644
--- a/CC/iWareSql/DataAccess/TaskHandler.cs
+++ b/CC/iWareSql/DataAccess/TaskHandler.cs
@@ -40,7 +40,7 @@
         /// </summary>
         /// <param name="wmsDB"></param>
         /// <returns></returns>
-        public static bool ValidateIssueTaskForBZ12(WmsDBModel.WmsDBModel wmsDB)
+        public static bool ValidateIssueTaskForBZ12(WmsDBModel.WmsDBModel wmsDB,string str)
         {
             var isExist = wmsDB.wms_rbline_task.Where(x => x.TaskStatus == (int)TaskStatusEnum.宸蹭笅鍙�
                 && x.RbTaskType == (int)RbTaskTypeEnum.鐮佹澘浠诲姟).ToList();
@@ -50,6 +50,16 @@
             }
             return true;
         }
+        public static bool ValidateIssueTaskForBZ21(WmsDBModel.WmsDBModel wmsDB,string str)
+        {
+            var isExist = wmsDB.wms_rbline_task.Where(x => x.TaskStatus == (int)TaskStatusEnum.宸蹭笅鍙�
+                && x.RbTaskType == (int)RbTaskTypeEnum.澶规澘浠诲姟).ToList();
+            if (isExist?.Count() > 0)
+            {
+                return false;
+            }
+            return true;
+        }
         /// <summary>
         /// 楠岃瘉 鏈哄櫒浜虹紦瀛樺矝鏄惁瀛樺湪 鏈粨鏉�  鐨勫嚭搴撲换鍔�
         /// </summary>
diff --git a/CC/iWareSql/WmsDBModel/mes_batchOrderUPI_new.cs b/CC/iWareSql/WmsDBModel/mes_batchOrderUPI_new.cs
index 190dd61..ec32db4 100644
--- a/CC/iWareSql/WmsDBModel/mes_batchOrderUPI_new.cs
+++ b/CC/iWareSql/WmsDBModel/mes_batchOrderUPI_new.cs
@@ -85,5 +85,74 @@
         public string UpdateUserName { get; set; }
 
         public bool IsDelete { get; set; }
+        /// <summary>
+        /// 销售合同单号
+        /// </summary>
+        public string Info4 { get; set; }
+
+        /// <summary>
+        /// 生产单号
+        /// </summary>
+        public string Info5 { get; set; }
+
+        /// <summary>
+        /// 第几包
+        /// </summary>
+
+        public string Info6 { get; set; }
+
+        /// <summary>
+        /// 经销店名称
+        /// </summary>
+        public string Info7 { get; set; }
+
+        /// <summary>
+        /// 产品名称
+        /// </summary>
+        public string Info8 { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string Info10 { get; set; }
+
+        /// <summary>
+        /// 包装编码
+        /// </summary>
+        public string Info9 { get; set; }
+
+        /// <summary>
+        /// 自提or发货
+        /// </summary>
+        public string Info11 { get; set; }
+
+        /// <summary>
+        /// 包装部件总数量
+        /// </summary>
+        public string Info12 { get; set; }
+
+        /// <summary>
+        /// 包装面积
+        /// </summary>
+        public string Info13 { get; set; }
+
+        /// <summary>
+        /// 部件名称
+        /// </summary>
+        public string Info14 { get; set; }
+
+        /// <summary>
+        /// 部件数量
+        /// </summary>  
+        public int Info15 { get; set; }
+
+        /// <summary>
+        /// 部件尺寸
+        /// </summary>
+        public string Info16 { get; set; }
+        /// <summary>
+        /// 机械臂是否旋转
+        /// </summary>
+        public string Info17 { get; set; }
     }
 }
diff --git a/SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs b/SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs
index a0a49e0..5a8be1b 100644
--- a/SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs
+++ b/SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs
@@ -142,7 +142,11 @@
         /// </summary>
         [Description("鐮佸灈鏈澘鏍囧織")]
         public bool W_EndMark { get; set; }
-
+        /// <summary>
+        /// 鐮佸灈棣栨澘鏍囧織
+        /// </summary>
+        [Description("鐮佸灈棣栨澘鏍囧織")]
+        public bool W_FirstMark { get; set; }
         /// <summary>
         /// 鐮佸灈浠诲姟鍙�
         /// </summary>
@@ -169,6 +173,11 @@
         [Description("鐮佸灈浣嶇疆鍧愭爣Y")]
         public short W_PalletizingPlaceY { get; set; }
         /// <summary>
+        /// 鐮佸灈浣嶇疆鍧愭爣Z
+        /// </summary>
+        [Description("鐮佸灈浣嶇疆鍧愭爣Z")]
+        public short W_PalletizingPlaceZ { get; set; }
+        /// <summary>
         /// 鐮佸灈浠诲姟瀹屾垚纭
         /// </summary>
         [Description("鐮佸灈浠诲姟瀹屾垚纭")]
@@ -179,7 +188,16 @@
         /// </summary>
         [Description("妯″紡锛�1锛氬叆搴擄紝 2锛氬嚭搴�   3锛氬己鍒跺嚭搴擄級")]
         public short W_Mode { get; set; }
-
+        /// <summary>
+        /// 鍚堝寘浠诲姟瀹屾垚纭
+        /// </summary>
+        [Description("鍚堝寘浠诲姟瀹屾垚纭")]
+        public bool W_SurroundTaskFinish { get; set; }
+        /// <summary>
+        /// 鍚堝寘浠诲姟鍙�
+        /// </summary>
+        [Description("鍚堝寘浠诲姟鍙�")]
+        public int W_SurroundTaskNo { get; set; }
     }
 
     /// <summary>
@@ -204,7 +222,11 @@
         /// </summary>
         [Description("鐮佸灈鏈澘鏍囧織")]
         public string W_EndMark { get; set; }
-
+        /// <summary>
+        /// 鐮佸灈棣栨澘鏍囧織
+        /// </summary>
+        [Description("鐮佸灈棣栨澘鏍囧織")]
+        public string W_FirstMark { get; set; }
         /// <summary>
         /// 鐮佸灈浠诲姟鍙�
         /// </summary>
@@ -230,6 +252,11 @@
         /// </summary>
         [Description("鐮佸灈浣嶇疆鍧愭爣Y")]
         public string W_PalletizingPlaceY { get; set; }
+        /// <summary>
+        /// 鐮佸灈浣嶇疆鍧愭爣Z
+        /// </summary>
+        [Description("鐮佸灈浣嶇疆鍧愭爣Z")]
+        public string W_PalletizingPlaceZ { get; set; }
         /// <summary>
         /// 鐮佸灈浠诲姟瀹屾垚纭
         /// </summary>
@@ -336,7 +363,16 @@
         [Description("鍏ュ簱瀹屾垚宸茬‘璁�")]
         public string W_InboundFinishConfirm { get; set; }
 
-
+        /// <summary>
+        /// 鍚堝寘浠诲姟瀹屾垚纭
+        /// </summary>
+        [Description("鍚堝寘浠诲姟瀹屾垚纭")]
+        public string W_SurroundTaskFinish { get; set; }
+        /// <summary>
+        /// 鍚堝寘浠诲姟鍙�
+        /// </summary>
+        [Description("鍚堝寘浠诲姟鍙�")]
+        public string W_SurroundTaskNo { get; set; }
         #region 鍑哄簱鐩稿叧
 
         /// <summary>
@@ -507,7 +543,16 @@
         /// </summary>
         [Description("寮哄埗鍑哄簱妯″紡")]
         public bool R_ForceOutboundMode { get; set; }
-
+        /// <summary>
+        /// 鍚堝寘浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍚堝寘浠诲姟瀹屾垚")]
+        public bool R_SurrouondTaskFinish { get; set; }
+        /// <summary>
+        /// 鍚堝寘浠诲姟鍙�
+        /// </summary>
+        [Description("鍚堝寘浠诲姟鍙�")]
+        public short R_SurrouondTaskNo { get; set; }
     }
 
     public class StationDBForReadComm
@@ -594,5 +639,15 @@
         [Description("寮哄埗鍑哄簱妯″紡")]
         public string R_ForceOutboundMode { get; set; }
 
+        /// <summary>
+        /// 鍚堝寘浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍚堝寘浠诲姟瀹屾垚")]
+        public string R_SurrouondTaskFinish { get; set; }
+        /// <summary>
+        /// 鍚堝寘浠诲姟鍙�
+        /// </summary>
+        [Description("鍚堝寘浠诲姟鍙�")]
+        public string R_SurrouondTaskNo { get; set; }
     }
 }
diff --git a/SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs b/SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs
index d9b96f1..33d24f3 100644
--- a/SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs
+++ b/SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs
@@ -434,7 +434,7 @@
         /// <param name=""></param>
         /// <param name=""></param>
         /// <returns></returns>
-        public bool WritePalletizingTaskInfo(string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, out string msg)
+        public bool WritePalletizingTaskInfo(string stationCode, int taskID, bool isLast,bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ, out string msg)
         {
             try
             {
@@ -459,6 +459,13 @@
                     return false;
                 }
 
+                b2 = this.plcService.WriteValuePoint(stationObj.W_FirstMark, isFirst, view_stationObj.W_FirstMark);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鏄惁棣栨澘 " + isFirst + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Destination_In);
+                    return false;
+                }
                 b2 = this.plcService.WriteValuePoint(stationObj.W_Length, length, view_stationObj.W_Length);
                 if (!b2.result)
                 {
@@ -508,7 +515,13 @@
                      stationObj.W_Height);
                     return false;
                 }
-
+                b2 = this.plcService.WriteValuePoint(stationObj.W_PalletizingPlaceZ, placeZ, view_stationObj.W_PalletizingPlaceZ);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� Z鍧愭爣 " + placeZ + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                     stationObj.W_Height);
+                    return false;
+                }
                 b2 = this.plcService.WriteValuePoint(stationObj.W_DataFinish, true, view_stationObj.W_DataFinish);
                 if (!b2.result)
                 {
@@ -529,6 +542,101 @@
                 return false;
             }
         }
+        /// <summary>
+        /// 鍚堝寘涓嬪彂浠诲姟
+        /// </summary>
+        /// <param name="stationCode"></param>
+        /// <param name="taskID"></param>
+        /// <param name="length"></param>
+        /// <param name="width"></param>
+        /// <param name="cartonhigh"></param>
+        /// <param name="cartonwidth"></param>
+        /// <param name="placex"></param>
+        /// <param name="placey"></param>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public bool WriteSurroundTaskInfo(string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey, out string msg)
+        {
+            try
+            {
+                msg = "";
+                var stationObj = this.DBBlockForWrite.W_StationForWriteCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
+
+                var view_stationObj = this.View.W_StationForWriteCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
+
+                MessageModel b2 = this.plcService.WriteValuePoint(stationObj.W_SurroundTaskNo, taskID, view_stationObj.W_SurroundTaskNo);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鍚堝寘浠诲姟鍙� " + taskID + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Inbound_TaskID);
+                    return false;
+                }
+
+                b2 = this.plcService.WriteValuePoint(stationObj.W_PackageLength, length, view_stationObj.W_PackageLength);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鍚堝寘闀� " + length + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Destination_In);
+                    return false;
+                }
+
+                b2 = this.plcService.WriteValuePoint(stationObj.W_PackageWidth, width, view_stationObj.W_PackageWidth);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鍚堝寘瀹� " + width + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Destination_In);
+                    return false;
+                }
+                b2 = this.plcService.WriteValuePoint(stationObj.W_CartonHeight, cartonhigh, view_stationObj.W_CartonHeight);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 绾哥闀� " + cartonhigh + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Length);
+                    return false;
+                }
+                b2 = this.plcService.WriteValuePoint(stationObj.W_CartonWidth, cartonwidth, view_stationObj.W_CartonWidth);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 绾哥瀹� " + width + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                      stationObj.W_Width);
+                    return false;
+                }
+                b2 = this.plcService.WriteValuePoint(stationObj.W_X_Offset, placex, view_stationObj.W_X_Offset);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鏀炬枡x " + placex + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                     stationObj.W_Height);
+                    return false;
+                }
+                b2 = this.plcService.WriteValuePoint(stationObj.W_Y_Offset, placey, view_stationObj.W_Y_Offset);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 鏀炬枡y " + placey + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                     stationObj.W_Height);
+                    return false;
+                }
+   
+                b2 = this.plcService.WriteValuePoint(stationObj.W_DataFinish, true, view_stationObj.W_DataFinish);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation鍦板潃{0} 鍐� 璇荤爜瑙f瀽瀹屾垚 " + true + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                       stationObj.W_DataFinish);
+                    return false;
+                }
+
+
+                return true;
+            }
+            catch (Exception ex)
+            {
+                msg = ex.Message;
+                var logcontext = string.Format("WriteInStoreTaskInfo鍑虹幇寮傚父:" + JsonConvert.SerializeObject(ex),
+                        "");
+                Log4NetHelper.WriteErrorLog(Station_CacheEntity.curLogType, logcontext, ex);
+                return false;
+            }
+        }
+
 
         /// <summary>
         /// 鍐欏叆绔欑偣浠诲姟瀹屾垚纭
@@ -564,7 +672,33 @@
                 return false;
             }
         }
+        public bool WriteSurround_FinishACK(string stationCode, bool value, out string msg)
+        {
+            try
+            {
+                msg = "";
+                var stationObj = this.DBBlockForWrite.W_StationForWriteCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
 
+                var view_stationObj = this.View.W_StationForWriteCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
+                MessageModel b2 = this.plcService.WriteValuePoint(stationObj.W_SurroundTaskFinish, value, view_stationObj.W_SurroundTaskFinish);
+                if (!b2.result)
+                {
+                    msg = string.Format("鍚慡tation" + stationCode + " 鍐欏叆浠诲姟瀹屾垚纭 鍦板潃{0} 鍐�  " + value + "澶辫触,杩斿洖缁撴灉:" + b2.resMsg,
+                        stationObj.W_OutboundFinishConfirm);
+                    return false;
+                }
+
+                return true;
+            }
+            catch (Exception ex)
+            {
+                msg = ex.Message;
+                var logcontext = string.Format("鍚慡tatio 鍑哄簱浠诲姟瀹屾垚纭 鍑虹幇寮傚父:" + JsonConvert.SerializeObject(ex),
+                        "");
+                Log4NetHelper.WriteErrorLog(Station_CacheEntity.curLogType, logcontext, ex);
+                return false;
+            }
+        }
         public bool WriteOutStoreTaskInfo(string stationCode, string sourcePlaceNo, out string msg, int outbound_TaskID)
         {
             try
diff --git a/SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs b/SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs
index aa95371..f7acd63 100644
--- a/SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs
+++ b/SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs
@@ -22,6 +22,7 @@
         public static string W_DBHeaderWithSeparate_BZ39 = "3002" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
         public static string W_DBHeaderWithSeparate_BZ12 = "3003" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
         public static string W_DBHeaderWithSeparate_BZ01 = "3001" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
+        public static string W_DBHeaderWithSeparate_BZ21 = "3004" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
 
         /// <summary>
         /// 璇诲彇DB
@@ -188,10 +189,12 @@
 
                 W_DataFinish = W_DBHeaderWithSeparate_BZ12 + "0.0",
                 W_EndMark = W_DBHeaderWithSeparate_BZ12 + "0.1",
+                W_FirstMark= W_DBHeaderWithSeparate_BZ12 + "0.3",
                 W_PalletizingPlaceX = W_DBHeaderWithSeparate_BZ12 + "12.0",
                 W_PalletizingPlaceY = W_DBHeaderWithSeparate_BZ12 + "14.0",
+                W_PalletizingPlaceZ = W_DBHeaderWithSeparate_BZ12 + "16.0",
 
-                W_PalletizingTaskID = W_DBHeaderWithSeparate_BZ12 + "16.0",
+                W_PalletizingTaskID = W_DBHeaderWithSeparate_BZ12 + "18.0",
                 W_Rotate = W_DBHeaderWithSeparate_BZ12 + "8.0",
 
                 W_Length = W_DBHeaderWithSeparate_BZ12 + "2.0",
@@ -202,6 +205,23 @@
                 W_PalletizingTaskFinish = W_DBHeaderWithSeparate_BZ12 + "0.2",
             });
 
+            _dbBlockForWrite.W_StationForWriteCommList.Add(new StationDBForWriteComm()
+            {
+                StationCode = StationLocationEnum.BZ21.ToString(),
+
+                W_DataFinish = W_DBHeaderWithSeparate_BZ21 + "0.0",
+                W_SurroundTaskFinish = W_DBHeaderWithSeparate_BZ21 + "0.1",
+                W_X_Offset = W_DBHeaderWithSeparate_BZ21 + "10.0",
+                W_Y_Offset = W_DBHeaderWithSeparate_BZ21 + "12.0",
+                W_SurroundTaskNo = W_DBHeaderWithSeparate_BZ21 + "14.0",
+
+                W_CartonHeight = W_DBHeaderWithSeparate_BZ21 + "6.0",
+                W_CartonWidth = W_DBHeaderWithSeparate_BZ21 + "8.0",
+
+                W_PackageLength = W_DBHeaderWithSeparate_BZ21 + "2.0",
+                W_PackageWidth = W_DBHeaderWithSeparate_BZ21 + "4.0",
+
+            });
             return _dbBlockForWrite;
         }
 
@@ -265,7 +285,17 @@
                 //R_Outbound_TaskID = W_DBHeaderWithSeparate_BZ12 + "114.0",
 
             });
+            _dbBlockForRead.R_StationForReadCommList.Add(new StationDBForReadComm()
+            {
+                StationCode = StationLocationEnum.BZ21.ToString(),
 
+                R_ReqParseData = W_DBHeaderWithSeparate_BZ21 + "50.0",
+                R_SurrouondTaskFinish = W_DBHeaderWithSeparate_BZ21 + "50.1",
+                R_SurrouondTaskNo = W_DBHeaderWithSeparate_BZ21 + "104.0",
+                R_ReadCodeResult = W_DBHeaderWithSeparate_BZ21 + "52.0",
+
+
+            });
 
             return _dbBlockForRead;
 
diff --git a/SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs b/SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs
index 808f7e2..dcb8665 100644
--- a/SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs
+++ b/SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs
@@ -148,9 +148,8 @@
         /// <param name="value"></param>
         /// <returns></returns>
         [OperationContract]
+        SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, bool isFirst, short length, short width, short height, short rotate, short toplace, short placeX, short placeY, short placeZ);
 
-        SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode, int taskID, bool isLast, short length, short width, short height, short rotate, short toplace, short placeX, short placeY);
-        
             /// <summary>
             /// 鐮佸灈瀹屾垚宸茬‘璁�
             /// </summary>
@@ -160,6 +159,12 @@
             [OperationContract]
         SdaResEntity SetPalletizingTaskFinishAck(int deviceId, bool value, string stationCode);
 
+        [OperationContract]
+        SdaResEntity WriteSurroundTaskInfo(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey);
+        
+        [OperationContract]
+        SdaResEntity SetSurroundTaskFinishAck(int deviceId, bool value, string stationCode);
+
         /// <summary>
         /// Station鐨勪换鍔″畬鎴怉CK璧嬪��
         /// </summary>
diff --git a/SDA/iWareSda/Devices/4-Station/StationService/StationService.cs b/SDA/iWareSda/Devices/4-Station/StationService/StationService.cs
index e58342b..9700a68 100644
--- a/SDA/iWareSda/Devices/4-Station/StationService/StationService.cs
+++ b/SDA/iWareSda/Devices/4-Station/StationService/StationService.cs
@@ -572,7 +572,7 @@
         /// <param name="deviceId"></param>
         /// <param name="value"></param>
         /// <returns></returns>
-        public SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode,int taskID, bool isLast, short length, short width, short height,short rotate,short toplace,short placeX,short placeY)
+        public SdaResEntity WritePalletizingTaskInfo(int deviceId, string stationCode,int taskID, bool isLast, bool isFirst, short length, short width, short height,short rotate,short toplace,short placeX,short placeY, short placeZ)
         {
             SdaResEntity _SdaResEntity = new SdaResEntity();
             try
@@ -585,7 +585,7 @@
                 var Station = StationResult.resData as StationEntity;
 
                 string msg = "";
-                var result = Station.WritePalletizingTaskInfo(stationCode, taskID,isLast, length, width, height,rotate,toplace,placeX,placeY,out msg);
+                var result = Station.WritePalletizingTaskInfo(stationCode, taskID,isLast,isFirst, length, width, height,rotate,toplace,placeX,placeY,placeZ, out msg);
                 _SdaResEntity.result = result;
                 _SdaResEntity.resMsg = msg;
                 return _SdaResEntity;
@@ -628,6 +628,69 @@
                 return _SdaResEntity;
             }
         }
+       
+        /// <summary>
+        /// 鍐欏叆鍚堝寘浠诲姟淇℃伅
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public SdaResEntity WriteSurroundTaskInfo(int deviceId, string stationCode, int taskID, short length, short width, short cartonhigh, short cartonwidth, short placex, short placey)
+        {
+            SdaResEntity _SdaResEntity = new SdaResEntity();
+            try
+            {
+                var StationResult = Station_CacheEntity.GetDeviceObj(deviceId);
+                if (!StationResult.result)
+                {
+                    return StationResult;
+                }
+                var Station = StationResult.resData as StationEntity;
+
+                string msg = "";
+                var result = Station.WriteSurroundTaskInfo(stationCode, taskID, length, width,  cartonhigh, cartonwidth, placex, placey, out msg);
+                _SdaResEntity.result = result;
+                _SdaResEntity.resMsg = msg;
+                return _SdaResEntity;
+            }
+            catch (Exception ex)
+            {
+                _SdaResEntity.result = false;
+                _SdaResEntity.resMsg = ex.Message;
+                return _SdaResEntity;
+            }
+        }
+        /// <summary>
+        /// 鍚堝寘瀹屾垚宸茬‘璁�
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public SdaResEntity SetSurroundTaskFinishAck(int deviceId, bool value, string stationCode)
+        {
+            SdaResEntity _SdaResEntity = new SdaResEntity();
+            try
+            {
+                var StationResult = Station_CacheEntity.GetDeviceObj(deviceId);
+                if (!StationResult.result)
+                {
+                    return StationResult;
+                }
+                var Station = StationResult.resData as StationEntity;
+
+                string msg = "";
+                var result = Station.WriteSurround_FinishACK(stationCode, value, out msg);
+                _SdaResEntity.result = result;
+                _SdaResEntity.resMsg = msg;
+                return _SdaResEntity;
+            }
+            catch (Exception ex)
+            {
+                _SdaResEntity.result = false;
+                _SdaResEntity.resMsg = ex.Message;
+                return _SdaResEntity;
+            }
+        }
         /// <summary>
         /// 鍐欏叆鍑哄簱浠诲姟淇℃伅
         /// </summary>

--
Gitblit v1.9.3