zongzhibin
2024-11-23 52ea328589f08585046bd519e4c57e5dce24e1dd
Merge branch 'master' of http://222.71.245.114:9086/r/LA24030-LuLI_PackageLine
已添加6个文件
已修改17个文件
1964 ■■■■■ 文件已修改
CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/FormCC.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/01_BZ01工位(清灰,洗板后工位)/DataProcess_BZ01.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/02_BZ39工位(补板后工位)/DataProcess_RobotBuffer_ModeChange.cs 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/02_BZ39工位(补板后工位)/Inbound/1、DataProcess_BZ39.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/02_BZ39工位(补板后工位)/Inbound/2、DataProcess_RobotBuffer_FinishTask.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/02_BZ39工位(补板后工位)/Outbound/2、DataProcess_RobotBuffer_IssueOutboundTask.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/02_BZ39工位(补板后工位)/Outbound/3、DataProcess_RobotBuffer_FinishTaskForOutbound.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCommon/BusinessHelper/BusinessHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/WmsStockQuan/wmsStockQuan.ts 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsStockQuan/wmsStockQuan/component/editDialog.vue 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsStockQuan/wmsStockQuan/index.vue 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/WmsBasePlaceService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanInput.cs 383 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SDA/iWareSda/Devices/4-Station/StationService/StationService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/Connected Services/StationService/Reference.cs
@@ -200,6 +200,9 @@
        private string R_InboundNumberField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private short R_Inbound_TaskIDField;
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private short R_ModelField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -207,6 +210,9 @@
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private string R_OutboundNumberField;
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private short R_Outbound_TaskIDField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private string R_ReadCodeResultField;
@@ -315,6 +321,19 @@
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public short R_Inbound_TaskID {
            get {
                return this.R_Inbound_TaskIDField;
            }
            set {
                if ((this.R_Inbound_TaskIDField.Equals(value) != true)) {
                    this.R_Inbound_TaskIDField = value;
                    this.RaisePropertyChanged("R_Inbound_TaskID");
                }
            }
        }
        [System.Runtime.Serialization.DataMemberAttribute()]
        public short R_Model {
            get {
                return this.R_ModelField;
@@ -349,6 +368,19 @@
                if ((object.ReferenceEquals(this.R_OutboundNumberField, value) != true)) {
                    this.R_OutboundNumberField = value;
                    this.RaisePropertyChanged("R_OutboundNumber");
                }
            }
        }
        [System.Runtime.Serialization.DataMemberAttribute()]
        public short R_Outbound_TaskID {
            get {
                return this.R_Outbound_TaskIDField;
            }
            set {
                if ((this.R_Outbound_TaskIDField.Equals(value) != true)) {
                    this.R_Outbound_TaskIDField = value;
                    this.RaisePropertyChanged("R_Outbound_TaskID");
                }
            }
        }
@@ -481,7 +513,7 @@
        private bool W_IsRotateField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private string W_KittingInfoField;
        private short W_KittingInfoField;
        
        [System.Runtime.Serialization.OptionalFieldAttribute()]
        private short W_LengthField;
@@ -651,12 +683,12 @@
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public string W_KittingInfo {
        public short W_KittingInfo {
            get {
                return this.W_KittingInfoField;
            }
            set {
                if ((object.ReferenceEquals(this.W_KittingInfoField, value) != true)) {
                if ((this.W_KittingInfoField.Equals(value) != true)) {
                    this.W_KittingInfoField = value;
                    this.RaisePropertyChanged("W_KittingInfo");
                }
@@ -1468,16 +1500,16 @@
        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> WriteQiTaoInfoAsync(int deviceId, string stationCode, bool value);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/InboundFinishConfirm", ReplyAction="http://tempuri.org/IStationService/InboundFinishConfirmResponse")]
        iWareCC.StationService.SdaResEntity InboundFinishConfirm(int deviceId, string stationCode);
        iWareCC.StationService.SdaResEntity InboundFinishConfirm(int deviceId, bool value, string stationCode);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/InboundFinishConfirm", ReplyAction="http://tempuri.org/IStationService/InboundFinishConfirmResponse")]
        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> InboundFinishConfirmAsync(int deviceId, string stationCode);
        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> InboundFinishConfirmAsync(int deviceId, bool value, string stationCode);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/OutboundFinishConfirm", ReplyAction="http://tempuri.org/IStationService/OutboundFinishConfirmResponse")]
        iWareCC.StationService.SdaResEntity OutboundFinishConfirm(int deviceId, string stationCode);
        iWareCC.StationService.SdaResEntity OutboundFinishConfirm(int deviceId, bool value, string stationCode);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/OutboundFinishConfirm", ReplyAction="http://tempuri.org/IStationService/OutboundFinishConfirmResponse")]
        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> OutboundFinishConfirmAsync(int deviceId, string stationCode);
        System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> OutboundFinishConfirmAsync(int deviceId, bool value, string stationCode);
        
        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStationService/WriteInStoreTaskInfo", ReplyAction="http://tempuri.org/IStationService/WriteInStoreTaskInfoResponse")]
        iWareCC.StationService.SdaResEntity WriteInStoreTaskInfo(int deviceId, string stationCode, string toPlaceNo, short length, short width, short height, int inbound_TaskID);
@@ -1617,20 +1649,20 @@
            return base.Channel.WriteQiTaoInfoAsync(deviceId, stationCode, value);
        }
        
        public iWareCC.StationService.SdaResEntity InboundFinishConfirm(int deviceId, string stationCode) {
            return base.Channel.InboundFinishConfirm(deviceId, stationCode);
        public iWareCC.StationService.SdaResEntity InboundFinishConfirm(int deviceId, bool value, string stationCode) {
            return base.Channel.InboundFinishConfirm(deviceId, value, stationCode);
        }
        
        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> InboundFinishConfirmAsync(int deviceId, string stationCode) {
            return base.Channel.InboundFinishConfirmAsync(deviceId, stationCode);
        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> InboundFinishConfirmAsync(int deviceId, bool value, string stationCode) {
            return base.Channel.InboundFinishConfirmAsync(deviceId, value, stationCode);
        }
        
        public iWareCC.StationService.SdaResEntity OutboundFinishConfirm(int deviceId, string stationCode) {
            return base.Channel.OutboundFinishConfirm(deviceId, stationCode);
        public iWareCC.StationService.SdaResEntity OutboundFinishConfirm(int deviceId, bool value, string stationCode) {
            return base.Channel.OutboundFinishConfirm(deviceId, value, stationCode);
        }
        
        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> OutboundFinishConfirmAsync(int deviceId, string stationCode) {
            return base.Channel.OutboundFinishConfirmAsync(deviceId, stationCode);
        public System.Threading.Tasks.Task<iWareCC.StationService.SdaResEntity> OutboundFinishConfirmAsync(int deviceId, bool value, string stationCode) {
            return base.Channel.OutboundFinishConfirmAsync(deviceId, value, stationCode);
        }
        
        public iWareCC.StationService.SdaResEntity WriteInStoreTaskInfo(int deviceId, string stationCode, string toPlaceNo, short length, short width, short height, int inbound_TaskID) {
CC/iWareCC_ASRS/Connected Services/StationService/item2.xsd
@@ -159,6 +159,7 @@
    <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>
@@ -174,6 +175,7 @@
    <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>
CC/iWareCC_ASRS/Connected Services/StationService/item3.xsd
@@ -14,9 +14,11 @@
      <xs:element minOccurs="0" name="R_Destination" type="xs:short" />
      <xs:element minOccurs="0" name="R_InboundFinish" type="xs:boolean" />
      <xs:element minOccurs="0" name="R_InboundNumber" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="R_Inbound_TaskID" type="xs:short" />
      <xs:element minOccurs="0" name="R_Model" type="xs:short" />
      <xs:element minOccurs="0" name="R_OutboundFinish" type="xs:boolean" />
      <xs:element minOccurs="0" name="R_OutboundNumber" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="R_Outbound_TaskID" type="xs:short" />
      <xs:element minOccurs="0" name="R_ReadCodeResult" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="R_ReqParseData" type="xs:boolean" />
      <xs:element minOccurs="0" name="R_Shape" type="xs:short" />
@@ -44,7 +46,7 @@
      <xs:element minOccurs="0" name="W_InboundFinishConfirm" type="xs:boolean" />
      <xs:element minOccurs="0" name="W_Inbound_TaskID" type="xs:int" />
      <xs:element minOccurs="0" name="W_IsRotate" type="xs:boolean" />
      <xs:element minOccurs="0" name="W_KittingInfo" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="W_KittingInfo" type="xs:short" />
      <xs:element minOccurs="0" name="W_Length" type="xs:short" />
      <xs:element minOccurs="0" name="W_OutboundFinishConfirm" type="xs:boolean" />
      <xs:element minOccurs="0" name="W_Outbound_TaskID" type="xs:int" />
CC/iWareCC_ASRS/FormCC.cs
@@ -31,6 +31,12 @@
{
    public partial class FormCC : Form
    {
        /// <summary>
        /// å…¨å±€â€”是否可以运行执行出库模式
        /// </summary>
        public static bool IsAllowRunOutMode = false;
        /// <summary>
        /// 1号堆垛机入库口扫码强制验证通过
        /// </summary>
CC/iWareCC_ASRS/ThreadService/01_BZ01¹¤Î»£¨Çå»Ò£¬Ï´°åºó¹¤Î»£©/DataProcess_BZ01.cs
@@ -9,6 +9,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Reflection.Emit;
using System.ServiceModel.Configuration;
using System.Text;
using System.Threading;
@@ -37,6 +39,12 @@
                {
                    if (SystemValue.isAllowRuning_DataProcess_BZ01 && SystemValue.isStartedModel)
                    {
                        if (FormCC.IsAllowRunOutMode == true)
                        {
                            SystemWarningMsg._lbl_alert_DataProcess_BZ01 = $"正在干出库模式,此方法暂停。。 ";
                            continue;
                        }
                        var rgvLocation = StationLocationEnum.BZ01.ToString();
                        /*
                         * 1、从数据库中判断是否齐套
@@ -61,6 +69,14 @@
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ01 = $"{rgvLocation.ToString()},根据UPI:{upiCode}没有找到对象 ";
                                    continue;
                                }
                                var isAllow = IsAllloRunOutTaskMode(wmsDB, upiObj);
                                if (isAllow)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ01 = $"{rgvLocation.ToString()},判断要执行出库模式了,此方法暂停。。 ";
                                    continue;
                                }
                                //查询是否齐包
                                var allList = wmsDB.mes_batchOrderUPI_new.Where(x => x.PackageCode == upiObj.PackageCode).ToList();
                                var isQiTaoList = allList.Where(x => x.AreaCode == (int)AreaCodeEnum.待缓存分拣区
@@ -117,8 +133,13 @@
                                wmsDB.SaveChanges();
                            }
                        }
                        else
                        {
                            using (WmsDBModel wmsDB = new WmsDBModel())
                            {
                                var isAllow = IsAllloRunOutTaskMode(wmsDB, null);
                            }
                        }
                    }
                }
@@ -130,5 +151,82 @@
            }
        }
        /// <summary>
        /// æ˜¯å¦å¯ä»¥æ‰§è¡Œå‡ºåº“模式
        /// </summary>
        /// <param name="wmsDB"></param>
        /// <param name="curUpiObj"></param>
        /// <returns></returns>
        private static bool IsAllloRunOutTaskMode(WmsDBModel wmsDB, mes_batchOrderUPI_new curUpiObj)
        {
            //首先查询数据库中是否有 è¦å‡ºåº“的数据
            var isExistOutTaskForNewCreated = wmsDB.wms_rbline_task.Where(x => x.RbTaskType == (int)RbTaskTypeEnum.出库任务
               && x.TaskStatus == (int)TaskStatusEnum.新建
              ).Count();
            if (isExistOutTaskForNewCreated == 0)
            {
                FormCC.IsAllowRunOutMode = false;
                return false;//不能执行 å‡ºåº“模式
            }
            var rbRunMode = wmsDB.wms_rbline_runmode.FirstOrDefault();
            var lastUpi = rbRunMode.UPI;
            var lastPackageCode = rbRunMode.PackageCode;
            if (curUpiObj == null)
            {//表示此时无新板过来
                if (!string.IsNullOrEmpty(lastUpi))
                {
                    var lastObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == lastUpi).FirstOrDefault();
                    if (lastObj.UpiStatus == (int)UpiStatusEnum.不齐包 || lastObj.UpiStatus == (int)UpiStatusEnum.初始)
                    {//表示最后过去的板是不齐包的板
                        //可以运行执行 å‡ºåº“模式
                    }
                    else
                    {//表示最后过去的板是齐包的板
                        //要继续判断后面 å¾…分拣区域还存在相同包的板数据吗
                        var isExistSamePackageCode = wmsDB.mes_batchOrderUPI_new.Where(x => x.PackageCode == lastPackageCode
                                && x.AreaCode == (int)AreaCodeEnum.待缓存分拣区).Count();
                        if (isExistSamePackageCode > 0)
                        {
                            FormCC.IsAllowRunOutMode = false;
                            return false;//不能执行 å‡ºåº“模式
                        }
                        else
                        {
                            //可以运行执行 å‡ºåº“模式
                        }
                    }
                }
                else
                {
                    //可以运行执行 å‡ºåº“模式
                }
            }
            else
            {//表示此时有新板过来
                if (!string.IsNullOrEmpty(lastUpi))
                {
                    if (lastPackageCode == curUpiObj.PackageCode)
                    {
                        FormCC.IsAllowRunOutMode = false;
                        return false;//不能执行 å‡ºåº“模式
                    }
                    else
                    {//新包过来了
                        //可以运行执行 å‡ºåº“模式
                    }
                }
                else
                {
                    //可以运行执行 å‡ºåº“模式
                }
            }
            FormCC.IsAllowRunOutMode = true;
            return true;
        }
    }
}
CC/iWareCC_ASRS/ThreadService/02_BZ39¹¤Î»£¨²¹°åºó¹¤Î»£©/DataProcess_RobotBuffer_ModeChange.cs
@@ -36,91 +36,36 @@
                {
                    if (SystemValue.isAllowRuning_DataProcess_BZ39 && SystemValue.isStartedModel)
                    {
                        var rgvLocation = StationLocationEnum.BZ39.ToString();
                        /*
                         * 1、如果 bz01 çš„æ¿æ–™æ˜¯æ–°åŒ… ï¼Œå¹¶ä¸”有要出库的需求,就切换到出库模式,否则是入库模式
                         * 2、
                         */
                        var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault();
                        if (obj.R_ReqParseData)
                        if (FormCC.IsAllowRunOutMode)
                        {
                            var result = obj.R_ReadCodeResult;
                            if (string.IsNullOrEmpty(result))
                            {
                                SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-请求了解码,但是结果是空的,此次循环结束";
                                continue;
                            }
                            var upiCode = result;
                            var qitaoReault = false;
                            using (WmsDBModel wmsDB = new WmsDBModel())
                            {
                                var rbRunMode = wmsDB.wms_rbline_runmode.FirstOrDefault();
                                var lastUpi = rbRunMode.UPI;
                                var lastPackageCode = rbRunMode.PackageCode;
                                var rgvLocation_BZ01 = StationLocationEnum.BZ01.ToString();
                                var currUpi_BZ01 = "";
                                var obj_BZ01 = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation_BZ01.ToString()).FirstOrDefault();
                                if (obj.R_ReqParseData)
                                if (rbRunMode.LineRunMode == (int)RbRunModeEnum.出库模式)
                                {
                                    currUpi_BZ01 = obj_BZ01.R_ReadCodeResult;
                                }
                                if (string.IsNullOrEmpty(currUpi_BZ01))
                                {
                                }
                                var rgvLocation22 = StationLocationEnum.BZ01.ToString();
                                /*
                                 * 1、从数据库中判断是否齐套
                                 * 2、根据齐套结果,推送给PLC
                                 */
                                //要是有已下发的任务,就不要执行
                                var isValidate = TaskHandler.ValidateIssueTaskForRobotBuffer(wmsDB);
                                if (!isValidate)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-有‘已下发’的任务,不能处理,此次循环结束";
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"已经是出库模式了,此次循环结束";
                                    continue;
                                }
                                rbRunMode.LineRunMode = (int)RbRunModeEnum.出库模式;
                                rbRunMode.LineRunModeName = RbRunModeEnum.出库模式.ToString();
                                rbRunMode.UpdateTime = DateTime.Now;
                                //推送给PLC切换模式
                                //using (StationServiceClient client = new StationServiceClient())
                                //{
                                //    var res = await client.WriteOutStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, doTask.PlaceCode, Convert.ToInt32(doTask.TaskNo));
                                //    if (!res.result)
                                //    {
                                //        SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-下发出库任务 å¤±è´¥,WriteOutStoreTaskInfoAsync è¿”回:{res.resMsg}";
                                //        continue;
                                //    }
                                //    else
                                //    {
                                //        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发出库任务 æˆåŠŸ,WriteOutStoreTaskInfoAsync,参数: ç«™ç‚¹{rgvLocation}");
                                //    }
                                //}
                                var taskList = wmsDB.wms_rbline_task.Where(x => x.PlaceCode == obj.R_OutboundNumber
                              && x.RbTaskType == (int)RbTaskTypeEnum.出库任务
                              && x.TaskStatus == (int)TaskStatusEnum.新建).OrderBy(x => x.PackageCode).ToList();
                                if (taskList == null)
                                {
                                    SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()},根据 R_OutboundNumber:{obj.R_OutboundNumber}没有找到已下发的任务 ";
                                    continue;
                                }
                                var doTask = taskList.FirstOrDefault();
                                var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault();
                                if (upiObj == null)
                                {
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()},根据UPI:{upiCode}没有找到对象 ";
                                    continue;
                                }
                                //这里改为 ä¸‹å‘ å‡ºåº“任务
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var res = await client.WriteOutStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, doTask.PlaceCode, Convert.ToInt32(doTask.TaskNo));
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-下发出库任务 å¤±è´¥,WriteOutStoreTaskInfoAsync è¿”回:{res.resMsg}";
                                        continue;
                                    }
                                    else
                                    {
                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发出库任务 æˆåŠŸ,WriteOutStoreTaskInfoAsync,参数: ç«™ç‚¹{rgvLocation}");
                                    }
                                }
                                wmsDB.SaveChanges();
                            }
CC/iWareCC_ASRS/ThreadService/02_BZ39¹¤Î»£¨²¹°åºó¹¤Î»£©/Inbound/1¡¢DataProcess_BZ39.cs
@@ -110,9 +110,21 @@
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var res = await client.WriteInStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, place.PlaceCode,
                                        (short)upiObj.Length,
                                        (short)upiObj.Width, (short)upiObj.Thk, Convert.ToInt32(task.TaskNo));
                                    //首先先清理
                                    var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, false, rgvLocation);
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-下发入库任务 å¤±è´¥,InboundFinishConfirmAsync è¿”回:{res.resMsg}";
                                        continue;
                                    }
                                    else
                                    {
                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发入库任务 æˆåŠŸ,InboundFinishConfirmAsync,参数: ç«™ç‚¹{rgvLocation}");
                                    }
                                    res = await client.WriteInStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, place.PlaceCode,
                                       (short)upiObj.Length,
                                       (short)upiObj.Width, (short)upiObj.Thk, Convert.ToInt32(task.TaskNo));
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-下发入库任务 å¤±è´¥,WriteInStoreTaskInfoAsync è¿”回:{res.resMsg}";
CC/iWareCC_ASRS/ThreadService/02_BZ39¹¤Î»£¨²¹°åºó¹¤Î»£©/Inbound/2¡¢DataProcess_RobotBuffer_FinishTask.cs
@@ -39,11 +39,19 @@
                        var rgvLocation = StationLocationEnum.BZ39.ToString();
                        var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault();
                        if (obj.R_InboundFinish)
                        //if (true)//模拟
                        {
                            var result = obj.R_InboundNumber;
                            if (string.IsNullOrEmpty(result))
                            //var result = obj.R_InboundNumber;
                            //if (string.IsNullOrEmpty(result))
                            //{
                            //    SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}- å…¥åº“库位号是空的,此次循环结束";
                            //    continue;
                            //}
                            //obj.R_Inbound_TaskID = 17797;//模拟
                            var result2 = obj.R_Inbound_TaskID;
                            if (result2 == 0)
                            {
                                SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}- å…¥åº“库位号是空的,此次循环结束";
                                SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}- å…¥åº“任务号是空的,此次循环结束";
                                continue;
                            }
@@ -51,7 +59,8 @@
                            var qitaoReault = false;
                            using (WmsDBModel wmsDB = new WmsDBModel())
                            {
                                var task = wmsDB.wms_rbline_task.Where(x => x.PlaceCode == obj.R_InboundNumber
                                var task = wmsDB.wms_rbline_task.Where(x =>
                                 x.TaskNo == obj.R_Inbound_TaskID.ToString()
                                && x.RbTaskType == (int)RbTaskTypeEnum.入库任务
                                && x.TaskStatus == (int)TaskStatusEnum.已下发).FirstOrDefault();
                                if (task == null)
@@ -73,6 +82,8 @@
                                    Id = Yitter.IdGenerator.YitIdHelper.NextId(),
                                    Upi = upiCode,
                                    PlanNo = task.PlanNo,
                                    DetailName = upiObj.DetailName,
                                    OrderId = task.OrderId,
                                    CreateTime = DateTime.Now,
                                    CreateUserName = "CC",
                                    InTime = DateTime.Now,
@@ -98,7 +109,7 @@
                                //给PLC推送任务完成确认信号
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, rgvLocation);
                                    var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation);
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}-下发入库任务 å¤±è´¥,InboundFinishConfirmAsync è¿”回:{res.resMsg}";
CC/iWareCC_ASRS/ThreadService/02_BZ39¹¤Î»£¨²¹°åºó¹¤Î»£©/Outbound/2¡¢DataProcess_RobotBuffer_IssueOutboundTask.cs
@@ -85,7 +85,19 @@
                                //这里改为 ä¸‹å‘ å‡ºåº“任务
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var res = await client.WriteOutStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, doTask.PlaceCode, Convert.ToInt32(doTask.TaskNo));
                                    //首先要清理
                                    var res = await client.OutboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation);
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()}-下发出库任务 å¤±è´¥,OutboundFinishConfirmAsync è¿”回:{res.resMsg}";
                                        continue;
                                    }
                                    else
                                    {
                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发出库任务 æˆåŠŸ,OutboundFinishConfirmAsync,参数: ç«™ç‚¹{rgvLocation}");
                                    }
                                    res = await client.WriteOutStoreTaskInfoAsync((int)EDevice.Station, rgvLocation, doTask.PlaceCode, Convert.ToInt32(doTask.TaskNo));
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_alert_DataProcess_BZ39 = $"{rgvLocation.ToString()}-下发出库任务 å¤±è´¥,WriteOutStoreTaskInfoAsync è¿”回:{res.resMsg}";
CC/iWareCC_ASRS/ThreadService/02_BZ39¹¤Î»£¨²¹°åºó¹¤Î»£©/Outbound/3¡¢DataProcess_RobotBuffer_FinishTaskForOutbound.cs
@@ -1,4 +1,5 @@
using Admin.NET.Application;
using iWareCC.StationService;
using iWareCommon.Common.Globle;
using iWareCommon.Utils;
using iWareModel;
@@ -31,17 +32,26 @@
                        var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault();
                        if (obj.R_OutboundFinish)
                        {
                            var result = obj.R_OutboundNumber;
                            if (string.IsNullOrEmpty(result))
                            //var result = obj.R_OutboundNumber;
                            //if (string.IsNullOrEmpty(result))
                            //{
                            //    SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()}- å‡ºåº“库位号是空的,此次循环结束";
                            //    continue;
                            //}
                            var result2 = obj.R_Outbound_TaskID;
                            if (result2 == 0)
                            {
                                SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()}- å‡ºåº“库位号是空的,此次循环结束";
                                SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()}- å‡ºåº“任务号是空的,此次循环结束";
                                continue;
                            }
                            using (WmsDBModel wmsDB = new WmsDBModel())
                            {
                                var task = wmsDB.wms_rbline_task.Where(x => x.PlaceCode == obj.R_OutboundNumber
                                var task = wmsDB.wms_rbline_task.Where(x =>
                                 x.TaskNo == obj.R_Outbound_TaskID.ToString()
                                && x.RbTaskType == (int)RbTaskTypeEnum.出库任务
                                && x.TaskStatus == (int)TaskStatusEnum.已下发).FirstOrDefault();
                                if (task == null)
@@ -68,6 +78,21 @@
                                var place = StationHandler.GetPlaceByPlaceCode(task.PlaceCode, wmsDB);
                                place.PlaceStatus = (int)PlaceStatusEnum.正常;
                                //给PLC推送任务完成确认信号
                                using (StationServiceClient client = new StationServiceClient())
                                {
                                    var res = await client.OutboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation);
                                    if (!res.result)
                                    {
                                        SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTaskForOutbound = $"{rgvLocation.ToString()}-下发出库任务 å¤±è´¥,OutboundFinishConfirmAsync è¿”回:{res.resMsg}";
                                        continue;
                                    }
                                    else
                                    {
                                        Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发出库任务 æˆåŠŸ,OutboundFinishConfirmAsync,参数: ç«™ç‚¹{rgvLocation}");
                                    }
                                }
                                wmsDB.SaveChanges();
                            }
                        }
CC/iWareCommon/BusinessHelper/BusinessHelper.cs
@@ -135,7 +135,7 @@
        /// <returns></returns>
        public static string CreatePlcTaskIdForSrmTask()
        {
            int iSeed = 99999;
            int iSeed = 65534;
            //从101-9999,为什么要从101开始,因为1-100作为手动任务下发。【EditBy shaocx,2022-05-10】
            return new Random(Guid.NewGuid().GetHashCode()).Next(101, iSeed).ToString();
        }
LA24030_LuLiPackageLine_Web/src/api/main/WmsStockQuan/wmsStockQuan.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
import request from '/@/utils/request';
enum Api {
  AddWmsStockQuan = '/api/wmsStockQuan/add',
  DeleteWmsStockQuan = '/api/wmsStockQuan/delete',
  UpdateWmsStockQuan = '/api/wmsStockQuan/update',
  PageWmsStockQuan = '/api/wmsStockQuan/page',
  ListWmsStockQuan = '/api/wmsStockQuan/list',
  DetailWmsStockQuan = '/api/wmsStockQuan/detail',
  ImportExcelWmsStockQuan = '/api/wmsStockQuan/importExcel',
  DownloadExcelTemplateWmsStockQuan = '/api/wmsStockQuan/downloadExcelTemplate',
}
// å¢žåŠ åº“å­˜ä¿¡æ¯
export const addWmsStockQuan = (params?: any) =>
    request({
        url: Api.AddWmsStockQuan,
        method: 'post',
        data: params
    });
// åˆ é™¤åº“存信息
export const deleteWmsStockQuan = (params?: any) =>
    request({
            url: Api.DeleteWmsStockQuan,
            method: 'post',
            data: params
        });
// ç¼–辑库存信息
export const updateWmsStockQuan = (params?: any) =>
    request({
            url: Api.UpdateWmsStockQuan,
            method: 'post',
            data: params
        });
// å¯¼å…¥åº“存信息
export const importExcelWmsStockQuan = (params?: any) =>
    request({
        url: Api.ImportExcelWmsStockQuan,
        method: 'post',
        data: params
    });
// ä¸‹è½½å¯¼å…¥åº“存信息模板
export const downloadExcelTemplateWmsStockQuan = (params?: any) =>
    request({
            url: Api.DownloadExcelTemplateWmsStockQuan,
            method: 'get',
            data: params,
            responseType: 'blob'
        });
// åˆ†é¡µæŸ¥è¯¢åº“存信息
export const pageWmsStockQuan = (params?: any) =>
    request({
            url: Api.PageWmsStockQuan,
            method: 'post',
            data: params
        });
// ä¸åˆ†é¡µæŸ¥è¯¢åº“存信息
export const listWmsStockQuan = (params?: any) =>
    request({
            url: Api.ListWmsStockQuan,
            method: 'get',
            data: params
        });
// è¯¦æƒ…库存信息
export const detailWmsStockQuan = (id: any) =>
    request({
            url: Api.DetailWmsStockQuan,
            method: 'get',
            data: { id }
        });
LA24030_LuLiPackageLine_Web/src/views/main/WmsStockQuan/wmsStockQuan/component/editDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,297 @@
<template>
    <div class="wmsStockQuan-container">
        <el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
            <template #header>
                <div style="color: #fff">
                    <!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
                    <span>{{ props.title }}</span>
                </div>
            </template>
            <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules" v-loading="loading">
                <el-row :gutter="35">
                    <el-form-item v-show="false">
                        <el-input v-model="ruleForm.id" />
                    </el-form-item>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="库位编码" prop="placeCode">
                            <el-input v-model="ruleForm.placeCode" placeholder="请输入库位编码" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="进入时间" prop="inTime">
                            <el-date-picker v-model="ruleForm.inTime" type="date" placeholder="进入时间" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="部件条码" prop="upi">
                            <el-input v-model="ruleForm.upi" placeholder="请输入部件条码" maxlength="100" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="部件名称" prop="detailName">
                            <el-input v-model="ruleForm.detailName" placeholder="请输入部件名称" maxlength="100" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="批次" prop="planNo">
                            <el-input v-model="ruleForm.planNo" placeholder="请输入批次" maxlength="100" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="订单号" prop="orderId">
                            <el-input v-model="ruleForm.orderId" placeholder="请输入订单号" maxlength="100" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="包装号" prop="packageCode">
                            <el-input v-model="ruleForm.packageCode" placeholder="请输入包装号" maxlength="100" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="长" prop="length">
                            <el-input v-model="ruleForm.length" placeholder="请输入长" maxlength="53" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="宽" prop="width">
                            <el-input v-model="ruleForm.width" placeholder="请输入宽" maxlength="53" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="厚" prop="thk">
                            <el-input v-model="ruleForm.thk" placeholder="请输入厚" maxlength="53" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="库存状态" prop="stockStatus">
                            <el-select clearable v-model="ruleForm.stockStatus" placeholder="请选择库存状态">
                                <el-option v-for="(item,index) in  getEnumStockStatusData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="库存状态名称" prop="stockStatusName">
                            <el-input v-model="ruleForm.stockStatusName" placeholder="请输入库存状态名称" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="操作原因" prop="operReason">
                            <el-input v-model="ruleForm.operReason" placeholder="请输入操作原因" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="操作人" prop="operUser">
                            <el-input v-model="ruleForm.operUser" placeholder="请输入操作人" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="操作时间" prop="operTime">
                            <el-date-picker v-model="ruleForm.operTime" type="date" placeholder="操作时间" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="锁定状态" prop="lockStatus">
                            <el-select clearable v-model="ruleForm.lockStatus" placeholder="请选择锁定状态">
                                <el-option v-for="(item,index) in  getEnumLockStatusData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="锁定原因" prop="lockReason">
                            <el-input v-model="ruleForm.lockReason" placeholder="请输入锁定原因" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="锁定人" prop="lockUser">
                            <el-input v-model="ruleForm.lockUser" placeholder="请输入锁定人" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="锁定时间" prop="lockTime">
                            <el-date-picker v-model="ruleForm.lockTime" type="date" placeholder="锁定时间" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="备注" prop="remarks">
                            <el-input v-model="ruleForm.remarks" placeholder="请输入备注" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancel">取 æ¶ˆ</el-button>
                    <el-button type="primary" @click="submit" :disabled="disabled_btn">ç¡® å®š</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<style scoped>
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
<script lang="ts" setup>
    import { ref,onMounted } from "vue";
    import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
    import { ElMessage } from "element-plus";
    import type { FormRules } from "element-plus";
    import { addWmsStockQuan, updateWmsStockQuan, detailWmsStockQuan } from "/@/api/main/WmsStockQuan/wmsStockQuan";
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
    const getEnumStockStatusData = ref<any>([]);
    const getEnumLockStatusData = ref<any>([]);
    //父级传递来的参数
    var props = defineProps({
        title: {
        type: String,
        default: "",
    },
    });
    //父级传递来的函数,用于回调
    const emit = defineEmits(["reloadTable"]);
    const ruleFormRef = ref();
    const isShowDialog = ref(false);
    const loading = ref(false);
    const disabled_btn = ref(false);
    const ruleForm = ref<any>({});
    //自行添加其他规则
    const rules = ref<FormRules>({
        placeCode: [{required: true, message: '请输入库位编码!', trigger: 'blur',},],
        upi: [{required: true, message: '请输入部件条码!', trigger: 'blur',},],
        detailName: [{required: true, message: '请输入部件名称!', trigger: 'blur',},],
        planNo: [{required: true, message: '请输入批次!', trigger: 'blur',},],
        orderId: [{required: true, message: '请输入订单号!', trigger: 'blur',},],
        packageCode: [{required: true, message: '请输入包装号!', trigger: 'blur',},],
        length: [{required: true, message: '请输入长!', trigger: 'blur',},],
        width: [{required: true, message: '请输入宽!', trigger: 'blur',},],
        thk: [{required: true, message: '请输入厚!', trigger: 'blur',},],
        stockStatus: [{required: true, message: '请选择库存状态!', trigger: 'change',},],
        stockStatusName: [{required: true, message: '请输入库存状态名称!', trigger: 'blur',},],
        lockStatus: [{required: true, message: '请选择锁定状态!', trigger: 'change',},],
        isDelete: [{required: true, message: '请选择软删除!', trigger: 'change',},],
    });
    /*
     * æ‰“开弹窗
     * @param flag æ ‡è®°ï¼ˆ1新增 2编辑 3查看)
     * @param row  è¡Œæ•°æ®
     */
    const openDialog = async (flag: number,row: any) => {
        // ruleForm.value = JSON.parse(JSON.stringify(row));
        // æ”¹ç”¨detail获取最新数据来编辑
        let rowData = JSON.parse(JSON.stringify(row));
        if (rowData.id)
            ruleForm.value = (await detailWmsStockQuan(rowData.id)).data.result;
        else {
            ruleForm.value = rowData;
        }
        isShowDialog.value = true;
    };
    // å…³é—­å¼¹çª—
    const closeDialog = () => {
        emit("reloadTable");
        isShowDialog.value = false;
    };
    // å–消
    const cancel = () => {
        isShowDialog.value = false;
    };
    // æäº¤
    const submit = async () => {
        disabled_btn.value = true;
        ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
            if (isValid) {
                loading.value = true;
                let values = ruleForm.value;
                let ret={};
                let title='新增';
                if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
                    ret = await addWmsStockQuan(values);
                } else {
                    title='编辑';
                    ret = await updateWmsStockQuan(values);
                }
                loading.value = false;
                disabled_btn.value = false;
                if(ret.data.type=="success"){
                    ElMessage.success(title+'成功');
                    closeDialog();
                }
            } else {
                disabled_btn.value = false;
                ElMessage({
                    message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
                    type: "error",
                });
            }
        });
    };
    // é¡µé¢åŠ è½½æ—¶
    onMounted(async () => {
            getEnumStockStatusData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
            getEnumLockStatusData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
    });
    //将属性或者函数暴露给父组件
    defineExpose({ openDialog });
</script>
LA24030_LuLiPackageLine_Web/src/views/main/WmsStockQuan/wmsStockQuan/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,387 @@
<template>
  <div class="wmsStockQuan-container">
    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
      <el-form :model="queryParamsWmsStockQuan" ref="queryForm" labelWidth="90">
        <el-row>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="queryParamsWmsStockQuan.searchKey" clearable="" placeholder="库位编码,部件条码,部件名称,批次,订单号,包装号,库存状态名称,操作原因,操作人,锁定原因,锁定人,备注,创建人,修改人"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="库位编码">
              <el-input v-model="queryParamsWmsStockQuan.placeCode" clearable="" placeholder="请输入库位编码"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="进入时间">
              <el-date-picker placeholder="请选择进入时间" value-format="YYYY/MM/DD" type="daterange" v-model="queryParamsWmsStockQuan.inTimeRange" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="部件条码">
              <el-input v-model="queryParamsWmsStockQuan.upi" clearable="" placeholder="请输入部件条码"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="部件名称">
              <el-input v-model="queryParamsWmsStockQuan.detailName" clearable="" placeholder="请输入部件名称"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="批次">
              <el-input v-model="queryParamsWmsStockQuan.planNo" clearable="" placeholder="请输入批次"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="订单号">
              <el-input v-model="queryParamsWmsStockQuan.orderId" clearable="" placeholder="请输入订单号"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="包装号">
              <el-input v-model="queryParamsWmsStockQuan.packageCode" clearable="" placeholder="请输入包装号"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="长">
              <el-input v-model="queryParamsWmsStockQuan.length" clearable="" placeholder="请输入长"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="宽">
              <el-input v-model="queryParamsWmsStockQuan.width" clearable="" placeholder="请输入宽"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="厚">
              <el-input v-model="queryParamsWmsStockQuan.thk" clearable="" placeholder="请输入厚"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="库存状态">
              <el-select clearable="" v-model="queryParamsWmsStockQuan.stockStatus" placeholder="请选择库存状态">
                <el-option v-for="(item,index) in getEnumStockStatusData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="库存状态名称">
              <el-input v-model="queryParamsWmsStockQuan.stockStatusName" clearable="" placeholder="请输入库存状态名称"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="操作原因">
              <el-input v-model="queryParamsWmsStockQuan.operReason" clearable="" placeholder="请输入操作原因"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="操作人">
              <el-input v-model="queryParamsWmsStockQuan.operUser" clearable="" placeholder="请输入操作人"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="操作时间">
              <el-date-picker placeholder="请选择操作时间" value-format="YYYY/MM/DD" type="daterange" v-model="queryParamsWmsStockQuan.operTimeRange" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="锁定状态">
              <el-select clearable="" v-model="queryParamsWmsStockQuan.lockStatus" placeholder="请选择锁定状态">
                <el-option v-for="(item,index) in getEnumLockStatusData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="锁定原因">
              <el-input v-model="queryParamsWmsStockQuan.lockReason" clearable="" placeholder="请输入锁定原因"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="锁定人">
              <el-input v-model="queryParamsWmsStockQuan.lockUser" clearable="" placeholder="请输入锁定人"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="锁定时间">
              <el-date-picker placeholder="请选择锁定时间" value-format="YYYY/MM/DD" type="daterange" v-model="queryParamsWmsStockQuan.lockTimeRange" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
            <el-form-item label="备注">
              <el-input v-model="queryParamsWmsStockQuan.remarks" clearable="" placeholder="请输入备注"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center;">
                <el-button type="primary"  icon="ele-Search" @click="handleQueryWmsStockQuan" v-auth="'wmsStockQuan:page'" :disabled="disabled_btnWmsStockQuan"> æŸ¥è¯¢ </el-button>
                      <el-button icon="ele-Refresh" @click="resetWmsStockQuan"> é‡ç½® </el-button>
                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan" v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left:5px;"> é«˜çº§æŸ¥è¯¢ </el-button>
                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan" v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left:5px;"> éšè— </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWmsStockQuan" v-auth="'wmsStockQuan:add'"> æ–°å¢ž </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Download" @click="handleExportExcelWmsStockQuan"  v-auth="'wmsStockQuan:exportExcel'" > å¯¼å‡º </el-button>
              </el-button-group>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </el-card>
    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
      <el-table
                ref="tableRefWmsStockQuan"
                :data="tableDataWmsStockQuan"
                style="width: 100%"
                v-loading="loadingWmsStockQuan"
                tooltip-effect="light"
                                row-key="id"
                @sort-change="sortChangeWmsStockQuan"
                border="">
        <el-table-column type="index" label="序号" width="55" align="center"/>
        <el-table-column prop="placeCode" label="库位编码"  show-overflow-tooltip="" />
         <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="upi" label="部件条码"  show-overflow-tooltip="" />
        <el-table-column prop="detailName" label="部件名称"  show-overflow-tooltip="" />
        <el-table-column prop="planNo" label="批次"  show-overflow-tooltip="" />
        <el-table-column prop="orderId" label="订单号"  show-overflow-tooltip="" />
        <el-table-column prop="packageCode" label="包装号"  show-overflow-tooltip="" />
        <el-table-column prop="length" label="长"  show-overflow-tooltip="" />
        <el-table-column prop="width" label="宽"  show-overflow-tooltip="" />
        <el-table-column prop="thk" label="厚"  show-overflow-tooltip="" />
          <el-table-column prop="stockStatus" label="库存状态"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.stockStatus, getEnumStockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="stockStatusName" label="库存状态名称"  show-overflow-tooltip="" />
        <el-table-column prop="operReason" label="操作原因"  show-overflow-tooltip="" />
        <el-table-column prop="operUser" label="操作人"  show-overflow-tooltip="" />
         <el-table-column prop="operTime" label="操作时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
          <el-table-column prop="lockStatus" label="锁定状态"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.lockStatus, getEnumLockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="lockReason" label="锁定原因"  show-overflow-tooltip="" />
        <el-table-column prop="lockUser" label="锁定人"  show-overflow-tooltip="" />
         <el-table-column prop="lockTime" label="锁定时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="remarks" label="备注"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wmsStockQuan:update') || auth('wmsStockQuan:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWmsStockQuan(scope.row)" v-auth="'wmsStockQuan:update'"> ç¼–辑 </el-button>
            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWmsStockQuan(scope.row)" v-auth="'wmsStockQuan:delete'"> åˆ é™¤ </el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
                v-model:currentPage="tableParamsWmsStockQuan.page"
                v-model:page-size="tableParamsWmsStockQuan.pageSize"
                :total="tableParamsWmsStockQuan.total"
                :page-sizes="[10, 20, 50, 100, 200, 500]"
                small=""
                background=""
                @size-change="handleSizeChangeWmsStockQuan"
                @current-change="handleCurrentChangeWmsStockQuan"
                layout="total, sizes, prev, pager, next, jumper"
    />
      <printDialogWmsStockQuan
        ref="printDialogRefWmsStockQuan"
        :title="printWmsStockQuanTitle"
        @reloadTable="handleQueryWmsStockQuan" />
      <editDialogWmsStockQuan
        ref="editDialogRefWmsStockQuan"
        :title="editWmsStockQuanTitle"
        @reloadTable="handleQueryWmsStockQuan"
      />
    </el-card>
  </div>
</template>
<script lang="ts" setup="" name="wmsStockQuan">
  import { ref,onMounted } from "vue";
  import { ElMessageBox, ElMessage } from "element-plus";
  import { auth } from '/@/utils/authFunction';
  import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
  import { formatDate,formatDate_T_Date,formatDate_T_Time,defaultTimeRange } from '/@/utils/formatTime';
  import { exportPageExcel } from '/@/utils/exportPageExcel' //引入导出方法
  import printDialogWmsStockQuan from '/@/views/system/print/component/hiprint/preview.vue'
  import { pageWmsStockQuan, deleteWmsStockQuan,importExcelWmsStockQuan,downloadExcelTemplateWmsStockQuan } from '/@/api/main/WmsStockQuan/wmsStockQuan';
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
  import commonFunction from '/@/utils/commonFunction';
  const getEnumStockStatusData_Index = ref<any>([]);
  const getEnumLockStatusData_Index = ref<any>([]);
    const { getEnumDesc } = commonFunction();
  /***************************************************[库存信息操作]开始***************************************************/
  const showAdvanceQueryUIWmsStockQuan = ref(false);
  const tableRefWmsStockQuan = ref(null);
  const printDialogRefWmsStockQuan = ref();
  const editDialogRefWmsStockQuan = ref();
  const loadingWmsStockQuan = ref(false);
  const disabled_btnWmsStockQuan = ref(false);
  const tableDataWmsStockQuan = ref<any>([]);
  const queryParamsWmsStockQuan = ref<any>({});
  const tableParamsWmsStockQuan = ref({
    page: 1,
    pageSize: 10,
    total: 0,
  });
  const printWmsStockQuanTitle = ref("");
  const editWmsStockQuanTitle = ref("");
  // æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
  const changeAdvanceQueryUIWmsStockQuan = () => {
    showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
  }
  // æŸ¥è¯¢åº“存信息
  const handleQueryWmsStockQuan = async () => {
    loadingWmsStockQuan.value = true;
    disabled_btnWmsStockQuan.value = true;
    var res = await pageWmsStockQuan(Object.assign(queryParamsWmsStockQuan.value, tableParamsWmsStockQuan.value));
    if(res.data.type=="success"){
      tableDataWmsStockQuan.value = res.data.result?.items ?? [];
      tableParamsWmsStockQuan.value.total = res.data.result?.total;
    }
    loadingWmsStockQuan.value = false;
    disabled_btnWmsStockQuan.value = false;
  };
  // é‡ç½®åº“存信息查询
  const resetWmsStockQuan = async () => {
    queryParamsWmsStockQuan.value = {}
  };
  // åº“存信息列排序
  const sortChangeWmsStockQuan = async (column: any) => {
    queryParamsWmsStockQuan.value.field = column.prop;
    queryParamsWmsStockQuan.value.order = column.order;
    await handleQueryWmsStockQuan();
  };
  // æ‰“开新增库存信息页面
  const openAddWmsStockQuan = () => {
    editWmsStockQuanTitle.value = '添加库存信息';
    editDialogRefWmsStockQuan.value.openDialog(1,{});
  };
  // æ‰“开打印库存信息页面
  const openPrintWmsStockQuan = async (row: any) => {
    printWmsStockQuanTitle.value = '打印库存信息';
  }
  // æ‰“开编辑库存信息页面
  const openEditWmsStockQuan = (row: any) => {
    editWmsStockQuanTitle.value = '编辑库存信息';
    editDialogRefWmsStockQuan.value.openDialog(2,row);
  };
  // åˆ é™¤åº“存信息
  const delWmsStockQuan = (row: any) => {
    ElMessageBox.confirm(`确定要删除吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
  .then(async () => {
    loadingWmsStockQuan.value = true;
    var ret = await deleteWmsStockQuan(row);
    if(ret.data.type=="success"){
        ElMessage.success("删除成功");
    }
    loadingWmsStockQuan.value = false;
    handleQueryWmsStockQuan();
  })
  .catch(() => {});
  };
  // æ”¹å˜åº“存信息页面容量
  const handleSizeChangeWmsStockQuan = (val: number) => {
    tableParamsWmsStockQuan.value.pageSize = val;
    handleQueryWmsStockQuan();
  };
  // æ”¹å˜åº“存信息页码序号
  const handleCurrentChangeWmsStockQuan = (val: number) => {
    tableParamsWmsStockQuan.value.page = val;
    handleQueryWmsStockQuan();
  };
/***************************************************[库存信息操作]结束***************************************************/
/***************************************************[库存信息导出]开始***************************************************/
//定义当前页面的方法组
const functionMapWmsStockQuan = {
      getEnumStockStatusData_Index,
      getEnumLockStatusData_Index,
      formatDate_T_Date,
      formatDate_T_Time
};
//点击导出按钮
const handleExportExcelWmsStockQuan = async (formData:Blob) => {
    loadingWmsStockQuan.value = true;
    disabled_btnWmsStockQuan.value = true;
    var new_tableParamsWmsStockQuan=JSON.parse(JSON.stringify(tableParamsWmsStockQuan.value));
    new_tableParamsWmsStockQuan.page = 1;
    new_tableParamsWmsStockQuan.pageSize = 100000;
    var res = await pageWmsStockQuan(Object.assign(queryParamsWmsStockQuan.value, new_tableParamsWmsStockQuan));
    if(res.data.type=="success"){
      exportExcelWmsStockQuan(res.data.result?.items ?? []);
    }
    loadingWmsStockQuan.value = false;
    disabled_btnWmsStockQuan.value = false;
};
//导出
const exportExcelWmsStockQuan  = async (exportDataList:Array) => {
  exportPageExcel(exportDataList, tableRefWmsStockQuan,"库存信息",functionMapWmsStockQuan);
};
/***************************************************[库存信息导出]结束***************************************************/
  // åº“存信息页面加载时
  onMounted(async () => {
    getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
    getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
  });
  handleQueryWmsStockQuan();
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/WmsBasePlaceService.cs
@@ -230,8 +230,8 @@
                    WmsBasePlace place = new WmsBasePlace();
                    place.PlaceType = placeTypeEnum;
                    place.PlaceTypeName = placeTypeEnum.ToString();
                    place.PlaceCode = aisle.ToString("00") + column.ToString("00") + layer.ToString("00");
                    place.PlaceName = aisle.ToString("00") + column.ToString("00") + layer.ToString("00");
                    place.PlaceCode = aisle.ToString("00") + layer.ToString("00") + column.ToString("00");
                    place.PlaceName = aisle.ToString("00") + layer.ToString("00") + column.ToString("00");
                    place.AreaCode = "";
                    place.PlaceStatus = PlaceStatusEnum.正常;
                    place.AreaName = "机器人岛缓存区";
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,383 @@
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application;
    /// <summary>
    /// åº“存信息基础输入参数
    /// </summary>
    public class WmsStockQuanBaseInput
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        public virtual string PlaceCode { get; set; }
        /// <summary>
        /// è¿›å…¥æ—¶é—´
        /// </summary>
        public virtual DateTime? InTime { get; set; }
        /// <summary>
        /// éƒ¨ä»¶æ¡ç 
        /// </summary>
        public virtual string Upi { get; set; }
        /// <summary>
        /// éƒ¨ä»¶åç§°
        /// </summary>
        public virtual string DetailName { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public virtual string PlanNo { get; set; }
        /// <summary>
        /// è®¢å•号
        /// </summary>
        public virtual string OrderId { get; set; }
        /// <summary>
        /// åŒ…装号
        /// </summary>
        public virtual string PackageCode { get; set; }
        /// <summary>
        /// é•¿
        /// </summary>
        public virtual float Length { get; set; }
        /// <summary>
        /// å®½
        /// </summary>
        public virtual float Width { get; set; }
        /// <summary>
        /// åŽš
        /// </summary>
        public virtual float Thk { get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        public virtual Admin.NET.Application.StockStatusEnum StockStatus { get; set; }
        /// <summary>
        /// åº“存状态名称
        /// </summary>
        public virtual string StockStatusName { get; set; }
        /// <summary>
        /// æ“ä½œåŽŸå› 
        /// </summary>
        public virtual string OperReason { get; set; }
        /// <summary>
        /// æ“ä½œäºº
        /// </summary>
        public virtual string OperUser { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public virtual DateTime? OperTime { get; set; }
        /// <summary>
        /// é”å®šçŠ¶æ€
        /// </summary>
        public virtual Admin.NET.Application.LockStatusEnum LockStatus { get; set; }
        /// <summary>
        /// é”å®šåŽŸå› 
        /// </summary>
        public virtual string LockReason { get; set; }
        /// <summary>
        /// é”å®šäºº
        /// </summary>
        public virtual string LockUser { get; set; }
        /// <summary>
        /// é”å®šæ—¶é—´
        /// </summary>
        public virtual DateTime? LockTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public virtual string Remarks { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual DateTime? CreateTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public virtual DateTime? UpdateTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäººId
        /// </summary>
        public virtual long? CreateUserId { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public virtual string CreateUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººId
        /// </summary>
        public virtual long? UpdateUserId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public virtual string UpdateUserName { get; set; }
        /// <summary>
        /// è½¯åˆ é™¤
        /// </summary>
        public virtual bool IsDelete { get; set; }
    }
    /// <summary>
    /// åº“存信息分页查询输入参数
    /// </summary>
    public class WmsStockQuanInput : BasePageInput
    {
        /// <summary>
        /// å…³é”®å­—查询
        /// </summary>
        public string? SearchKey { get; set; }
        /// <summary>
        /// åº“位编码
        /// </summary>
        public string? PlaceCode { get; set; }
        /// <summary>
        /// è¿›å…¥æ—¶é—´
        /// </summary>
        public DateTime? InTime { get; set; }
        /// <summary>
         /// è¿›å…¥æ—¶é—´èŒƒå›´
         /// </summary>
         public List<DateTime?> InTimeRange { get; set; }
        /// <summary>
        /// éƒ¨ä»¶æ¡ç 
        /// </summary>
        public string? Upi { get; set; }
        /// <summary>
        /// éƒ¨ä»¶åç§°
        /// </summary>
        public string? DetailName { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public string? PlanNo { get; set; }
        /// <summary>
        /// è®¢å•号
        /// </summary>
        public string? OrderId { get; set; }
        /// <summary>
        /// åŒ…装号
        /// </summary>
        public string? PackageCode { get; set; }
        /// <summary>
        /// é•¿
        /// </summary>
        public float? Length { get; set; }
        /// <summary>
        /// å®½
        /// </summary>
        public float? Width { get; set; }
        /// <summary>
        /// åŽš
        /// </summary>
        public float? Thk { get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        public Admin.NET.Application.StockStatusEnum? StockStatus { get; set; }
        /// <summary>
        /// åº“存状态名称
        /// </summary>
        public string? StockStatusName { get; set; }
        /// <summary>
        /// æ“ä½œåŽŸå› 
        /// </summary>
        public string? OperReason { get; set; }
        /// <summary>
        /// æ“ä½œäºº
        /// </summary>
        public string? OperUser { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperTime { get; set; }
        /// <summary>
         /// æ“ä½œæ—¶é—´èŒƒå›´
         /// </summary>
         public List<DateTime?> OperTimeRange { get; set; }
        /// <summary>
        /// é”å®šçŠ¶æ€
        /// </summary>
        public Admin.NET.Application.LockStatusEnum? LockStatus { get; set; }
        /// <summary>
        /// é”å®šåŽŸå› 
        /// </summary>
        public string? LockReason { get; set; }
        /// <summary>
        /// é”å®šäºº
        /// </summary>
        public string? LockUser { get; set; }
        /// <summary>
        /// é”å®šæ—¶é—´
        /// </summary>
        public DateTime? LockTime { get; set; }
        /// <summary>
         /// é”å®šæ—¶é—´èŒƒå›´
         /// </summary>
         public List<DateTime?> LockTimeRange { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remarks { get; set; }
    }
    /// <summary>
    /// åº“存信息增加输入参数
    /// </summary>
    public class AddWmsStockQuanInput : WmsStockQuanBaseInput
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        [Required(ErrorMessage = "库位编码不能为空")]
        public override string PlaceCode { get; set; }
        /// <summary>
        /// éƒ¨ä»¶æ¡ç 
        /// </summary>
        [Required(ErrorMessage = "部件条码不能为空")]
        public override string Upi { get; set; }
        /// <summary>
        /// éƒ¨ä»¶åç§°
        /// </summary>
        [Required(ErrorMessage = "部件名称不能为空")]
        public override string DetailName { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        [Required(ErrorMessage = "批次不能为空")]
        public override string PlanNo { get; set; }
        /// <summary>
        /// è®¢å•号
        /// </summary>
        [Required(ErrorMessage = "订单号不能为空")]
        public override string OrderId { get; set; }
        /// <summary>
        /// åŒ…装号
        /// </summary>
        [Required(ErrorMessage = "包装号不能为空")]
        public override string PackageCode { get; set; }
        /// <summary>
        /// é•¿
        /// </summary>
        [Required(ErrorMessage = "长不能为空")]
        public override float Length { get; set; }
        /// <summary>
        /// å®½
        /// </summary>
        [Required(ErrorMessage = "宽不能为空")]
        public override float Width { get; set; }
        /// <summary>
        /// åŽš
        /// </summary>
        [Required(ErrorMessage = "厚不能为空")]
        public override float Thk { get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        [Required(ErrorMessage = "库存状态不能为空")]
        public override Admin.NET.Application.StockStatusEnum StockStatus { get; set; }
        /// <summary>
        /// åº“存状态名称
        /// </summary>
        [Required(ErrorMessage = "库存状态名称不能为空")]
        public override string StockStatusName { get; set; }
        /// <summary>
        /// é”å®šçŠ¶æ€
        /// </summary>
        [Required(ErrorMessage = "锁定状态不能为空")]
        public override Admin.NET.Application.LockStatusEnum LockStatus { get; set; }
        /// <summary>
        /// è½¯åˆ é™¤
        /// </summary>
        [Required(ErrorMessage = "软删除不能为空")]
        public override bool IsDelete { get; set; }
    }
    /// <summary>
    /// åº“存信息删除输入参数
    /// </summary>
    public class DeleteWmsStockQuanInput : BaseIdInput
    {
    }
    /// <summary>
    /// åº“存信息更新输入参数
    /// </summary>
    public class UpdateWmsStockQuanInput : AddWmsStockQuanInput
    {
        /// <summary>
        /// ä¸»é”®Id
        /// </summary>
        [Required(ErrorMessage = "主键Id不能为空")]
        public long Id { get; set; }
    }
    /// <summary>
    /// åº“存信息主键查询输入参数
    /// </summary>
    public class QueryByIdWmsStockQuanInput : DeleteWmsStockQuanInput
    {
    }
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
namespace Admin.NET.Application;
/// <summary>
/// åº“存信息输出参数
/// </summary>
public class WmsStockQuanOutput
{
    /// <summary>
    /// ä¸»é”®Id
    /// </summary>
    public long? Id { get; set; }
    /// <summary>
    /// åº“位编码
    /// </summary>
    public string PlaceCode { get; set; }
    /// <summary>
    /// è¿›å…¥æ—¶é—´
    /// </summary>
    public DateTime? InTime { get; set; }
    /// <summary>
    /// éƒ¨ä»¶æ¡ç 
    /// </summary>
    public string Upi { get; set; }
    /// <summary>
    /// éƒ¨ä»¶åç§°
    /// </summary>
    public string DetailName { get; set; }
    /// <summary>
    /// æ‰¹æ¬¡
    /// </summary>
    public string PlanNo { get; set; }
    /// <summary>
    /// è®¢å•号
    /// </summary>
    public string OrderId { get; set; }
    /// <summary>
    /// åŒ…装号
    /// </summary>
    public string PackageCode { get; set; }
    /// <summary>
    /// é•¿
    /// </summary>
    public float Length { get; set; }
    /// <summary>
    /// å®½
    /// </summary>
    public float Width { get; set; }
    /// <summary>
    /// åŽš
    /// </summary>
    public float Thk { get; set; }
    /// <summary>
    /// åº“存状态
    /// </summary>
    public Admin.NET.Application.StockStatusEnum StockStatus { get; set; }
    /// <summary>
    /// åº“存状态名称
    /// </summary>
    public string StockStatusName { get; set; }
    /// <summary>
    /// æ“ä½œåŽŸå› 
    /// </summary>
    public string OperReason { get; set; }
    /// <summary>
    /// æ“ä½œäºº
    /// </summary>
    public string OperUser { get; set; }
    /// <summary>
    /// æ“ä½œæ—¶é—´
    /// </summary>
    public DateTime? OperTime { get; set; }
    /// <summary>
    /// é”å®šçŠ¶æ€
    /// </summary>
    public Admin.NET.Application.LockStatusEnum LockStatus { get; set; }
    /// <summary>
    /// é”å®šåŽŸå› 
    /// </summary>
    public string LockReason { get; set; }
    /// <summary>
    /// é”å®šäºº
    /// </summary>
    public string LockUser { get; set; }
    /// <summary>
    /// é”å®šæ—¶é—´
    /// </summary>
    public DateTime? LockTime { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remarks { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¶é—´
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// ä¿®æ”¹æ—¶é—´
    /// </summary>
    public DateTime? UpdateTime { get; set; }
    /// <summary>
    /// åˆ›å»ºäººId
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreateUserName { get; set; }
    /// <summary>
    /// ä¿®æ”¹äººId
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string UpdateUserName { get; set; }
    /// <summary>
    /// è½¯åˆ é™¤
    /// </summary>
    public bool IsDelete { get; set; }
    }
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,237 @@
using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using System.Data;
using System.Web;
using System.Text;
namespace Admin.NET.Application;
/// <summary>
/// åº“存信息服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.WmsStockQuanGroupName, Order = 100)]
public class WmsStockQuanService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WmsStockQuan> _rep;
    public WmsStockQuanService(SqlSugarRepository<WmsStockQuan> rep)
    {
        _rep = rep;
    }
    /// <summary>
    /// åˆ†é¡µæŸ¥è¯¢åº“存信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Page")]
    [Description("WmsStockQuan/Page")]
    public async Task<SqlSugarPagedList<WmsStockQuanOutput>> Page(WmsStockQuanInput input)
    {
        var query = CommonPageFilter(input);
        return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
    }
    /// <summary>
    /// ä¸åˆ†é¡µæŸ¥è¯¢åº“存信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "List")]
    [Description("WmsStockQuan/List")]
    public async Task<List<WmsStockQuanOutput>> List([FromQuery] WmsStockQuanInput input)
    {
        var query = CommonPageFilter(input);
        return await query.OrderBuilder(input, "", "Id").Select<WmsStockQuanOutput>().ToListAsync();
    }
    /// <summary>
    /// å¢žåŠ åº“å­˜ä¿¡æ¯
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Add")]
    [Description("WmsStockQuan/Add")]
    public async Task<long> Add(AddWmsStockQuanInput input)
    {
        var entity = input.Adapt<WmsStockQuan>();
        //重复性验证
        await CheckExist(entity);
        await _rep.InsertAsync(entity);
        return entity.Id;
    }
    /// <summary>
    /// åˆ é™¤åº“存信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Delete")]
    [Description("WmsStockQuan/Delete")]
    public async Task Delete(DeleteWmsStockQuanInput input)
    {
        var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        //await _rep.FakeDeleteAsync(entity);   //假删除
        await _rep.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// æ›´æ–°åº“存信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Update")]
    [Description("WmsStockQuan/Update")]
    public async Task Update(UpdateWmsStockQuanInput input)
    {
        var entity = input.Adapt<WmsStockQuan>();
        //重复性验证
        await CheckExist(entity,true);
        await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
    }
    /// <summary>
    /// èŽ·å–åº“å­˜ä¿¡æ¯
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "Detail")]
    [Description("WmsStockQuan/Detail")]
    public async Task<WmsStockQuan> Detail([FromQuery] QueryByIdWmsStockQuanInput input)
    {
        return await _rep.GetFirstAsync(u => u.Id == input.Id);
    }
    #region ç§æœ‰æ–¹æ³•
    /// <summary>
    /// å…¬å…±æŸ¥è¯¢åº“存信息条件
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    private ISugarQueryable<WmsStockQuanOutput> CommonPageFilter(WmsStockQuanInput input)
    {
        var query = _rep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
                u.PlaceCode.Contains(input.SearchKey.Trim())
                || u.Upi.Contains(input.SearchKey.Trim())
                || u.DetailName.Contains(input.SearchKey.Trim())
                || u.PlanNo.Contains(input.SearchKey.Trim())
                || u.OrderId.Contains(input.SearchKey.Trim())
                || u.PackageCode.Contains(input.SearchKey.Trim())
                || u.StockStatusName.Contains(input.SearchKey.Trim())
                || u.OperReason.Contains(input.SearchKey.Trim())
                || u.OperUser.Contains(input.SearchKey.Trim())
                || u.LockReason.Contains(input.SearchKey.Trim())
                || u.LockUser.Contains(input.SearchKey.Trim())
                || u.Remarks.Contains(input.SearchKey.Trim())
                || u.CreateUserName.Contains(input.SearchKey.Trim())
                || u.UpdateUserName.Contains(input.SearchKey.Trim())
            )
            .WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCode), u => u.PlaceCode.Contains(input.PlaceCode.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Upi), u => u.Upi.Contains(input.Upi.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.DetailName.Contains(input.DetailName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.PlanNo), u => u.PlanNo.Contains(input.PlanNo.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OrderId), u => u.OrderId.Contains(input.OrderId.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.PackageCode), u => u.PackageCode.Contains(input.PackageCode.Trim()))
            .WhereIF(input.StockStatus.HasValue, u => u.StockStatus == input.StockStatus)
            .WhereIF(!string.IsNullOrWhiteSpace(input.StockStatusName), u => u.StockStatusName.Contains(input.StockStatusName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperReason), u => u.OperReason.Contains(input.OperReason.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperUser), u => u.OperUser.Contains(input.OperUser.Trim()))
            .WhereIF(input.LockStatus.HasValue, u => u.LockStatus == input.LockStatus)
            .WhereIF(!string.IsNullOrWhiteSpace(input.LockReason), u => u.LockReason.Contains(input.LockReason.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LockUser), u => u.LockUser.Contains(input.LockUser.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim()))
            .Select<WmsStockQuanOutput>();
        if(input.InTimeRange != null && input.InTimeRange.Count >0)
        {
            DateTime? start= input.InTimeRange[0].Value.AddDays(-1);
            query = query.WhereIF(start.HasValue, u => u.InTime > start);
            if (input.InTimeRange.Count >1 && input.InTimeRange[1].HasValue)
            {
                var end = input.InTimeRange[1].Value.AddDays(1);
                query = query.Where(u => u.InTime < end);
            }
        }
        if(input.OperTimeRange != null && input.OperTimeRange.Count >0)
        {
            DateTime? start= input.OperTimeRange[0].Value.AddDays(-1);
            query = query.WhereIF(start.HasValue, u => u.OperTime > start);
            if (input.OperTimeRange.Count >1 && input.OperTimeRange[1].HasValue)
            {
                var end = input.OperTimeRange[1].Value.AddDays(1);
                query = query.Where(u => u.OperTime < end);
            }
        }
        if(input.LockTimeRange != null && input.LockTimeRange.Count >0)
        {
            DateTime? start= input.LockTimeRange[0].Value.AddDays(-1);
            query = query.WhereIF(start.HasValue, u => u.LockTime > start);
            if (input.LockTimeRange.Count >1 && input.LockTimeRange[1].HasValue)
            {
                var end = input.LockTimeRange[1].Value.AddDays(1);
                query = query.Where(u => u.LockTime < end);
            }
        }
        return query;
       }
        /// <summary>
        /// é‡å¤æ€§éªŒè¯
        /// </summary>
        /// <param name="input">验证对象</param>
        /// <param name="isEdit">是否是编辑</param>
        /// <returns></returns>
        private async Task CheckExist( WmsStockQuan input,bool isEdit=false)
        {
            //没有配置组合校验,不需要验重
            //没有配置单独校验,不需要验重
       }
       /// <summary>
        /// æ ¹æ®ç»„合校验和单独校验验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsStockQuan> inputs)
        {
            if (inputs?.Count <= 0)
            {
                throw Oops.Oh($"导入数据不能为空");
            }
            //根据组合校验验证表格中中是否已存在相同数据
           //根据单独校验验证表格中中是否已存在相同数据
        }
     #endregion
}
SDA/iWareSda/Devices/4-Station/StationModel/DB/RgvComm.cs
@@ -388,6 +388,19 @@
        /// </summary>
        [Description("机器人出库库位号")]
        public string R_OutboundNumber { get; set; }
        /// <summary>
        /// å…¥åº“任务号
        /// </summary>
        [Description("入库任务号")]
        public short R_Inbound_TaskID { get; set; }
        /// <summary>
        /// å‡ºåº“任务号
        /// </summary>
        [Description("出库任务号")]
        public short R_Outbound_TaskID { get; set; }
    }
    public class StationDBForReadComm
SDA/iWareSda/Devices/4-Station/StationModel/StationEntity.cs
@@ -234,7 +234,7 @@
        }
        public bool InboundFinishConfirm(string stationCode, out string msg)
        public bool InboundFinishConfirm(string stationCode, bool value, out string msg)
        {
            try
            {
@@ -242,10 +242,10 @@
                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_InboundFinishConfirm, true, view_stationObj.W_DataFinish);
                MessageModel b2 = this.plcService.WriteValuePoint(stationObj.W_InboundFinishConfirm, value, view_stationObj.W_DataFinish);
                if (!b2.result)
                {
                    msg = string.Format("向Station地址{0}  å…¥åº“完成确认 å†™  " + true + "失败,返回结果:" + b2.resMsg,
                    msg = string.Format("向Station地址{0}  å…¥åº“完成确认 å†™  " + value + "失败,返回结果:" + b2.resMsg,
                        stationObj.W_InboundFinishConfirm);
                    return false;
                }
@@ -262,7 +262,7 @@
            }
        }
        public bool OutboundFinishConfirm(string stationCode, out string msg)
        public bool OutboundFinishConfirm(string stationCode, bool value, out string msg)
        {
            try
            {
@@ -270,10 +270,10 @@
                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_OutboundFinishConfirm, true, view_stationObj.W_OutboundFinishConfirm);
                MessageModel b2 = this.plcService.WriteValuePoint(stationObj.W_OutboundFinishConfirm, value, view_stationObj.W_OutboundFinishConfirm);
                if (!b2.result)
                {
                    msg = string.Format("向Station å‡ºåº“任务完成确认 åœ°å€{0} å†™  " + true + "失败,返回结果:" + b2.resMsg,
                    msg = string.Format("向Station å‡ºåº“任务完成确认 åœ°å€{0} å†™  " + value + "失败,返回结果:" + b2.resMsg,
                        stationObj.W_OutboundFinishConfirm);
                    return false;
                }
@@ -298,16 +298,8 @@
                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_DataFinish, true, view_stationObj.W_DataFinish);
                if (!b2.result)
                {
                    msg = string.Format("向Station地址{0} å†™ è¯»ç è§£æžå®Œæˆ " + true + "失败,返回结果:" + b2.resMsg,
                       stationObj.W_DataFinish);
                    return false;
                }
                b2 = this.plcService.WriteValuePoint(stationObj.W_Inbound_TaskID, inbound_TaskID, view_stationObj.W_Inbound_TaskID);
                MessageModel b2 = this.plcService.WriteValuePoint(stationObj.W_Inbound_TaskID, inbound_TaskID, view_stationObj.W_Inbound_TaskID);
                if (!b2.result)
                {
                    msg = string.Format("向Station地址{0} å†™ å…¥åº“任务号 " + inbound_TaskID + "失败,返回结果:" + b2.resMsg,
@@ -345,6 +337,16 @@
                    return false;
                }
                b2 = this.plcService.WriteValuePoint(stationObj.W_DataFinish, true, view_stationObj.W_DataFinish);
                if (!b2.result)
                {
                    msg = string.Format("向Station地址{0} å†™ è¯»ç è§£æžå®Œæˆ " + true + "失败,返回结果:" + b2.resMsg,
                       stationObj.W_DataFinish);
                    return false;
                }
                return true;
            }
            catch (Exception ex)
SDA/iWareSda/Devices/4-Station/StationModel/Station_CacheEntity.cs
@@ -165,8 +165,8 @@
                W_InboundFinishConfirm = W_DBHeaderWithSeparate_BZ39 + "0.1",
                W_Destination_In = W_DBHeaderWithSeparate_BZ39 + "2.0",
                W_Inbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "",//TODO:?还没有配置呢
                W_Outbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "",//TODO:?还没有配置呢
                W_Inbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "20.0",
                W_Outbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "22.0",
                W_Length = W_DBHeaderWithSeparate_BZ39 + "6.0",
                W_Width = W_DBHeaderWithSeparate_BZ39 + "8.0",
@@ -176,7 +176,7 @@
                W_ReqOut = W_DBHeaderWithSeparate_BZ39 + "12.0",
                W_Destination_Out = W_DBHeaderWithSeparate_BZ39 + "14.0",
                W_Mode = W_DBHeaderWithSeparate_BZ39 + "18.0",
                W_OutboundFinishConfirm = W_DBHeaderWithSeparate_BZ39 + "" //TODO:?还没有配置呢
                W_OutboundFinishConfirm = W_DBHeaderWithSeparate_BZ39 + "0.2"
            });
@@ -213,15 +213,15 @@
            {
                StationCode = StationLocationEnum.BZ39.ToString(),
                R_ReqParseData = W_DBHeaderWithSeparate_BZ39 + "0.0",
                R_ReqParseData = W_DBHeaderWithSeparate_BZ39 + "50.0",
                R_InboundFinish = W_DBHeaderWithSeparate_BZ39 + "50.1",
                R_OutboundFinish = W_DBHeaderWithSeparate_BZ39 + "50.2",
                R_ReadCodeResult = W_DBHeaderWithSeparate_BZ39 + "52.0",
                R_InboundNumber = W_DBHeaderWithSeparate_BZ39 + "104.0",
                R_OutboundNumber = W_DBHeaderWithSeparate_BZ39 + "108.0",
                R_Inbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "",//TODO:?还没有配置呢
                R_Outbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "",//TODO:?还没有配置呢
                R_Inbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "112.0",
                R_Outbound_TaskID = W_DBHeaderWithSeparate_BZ39 + "114.0",
            });
SDA/iWareSda/Devices/4-Station/StationService/IStationService.cs
@@ -99,7 +99,7 @@
        /// <param name="value"></param>
        /// <returns></returns>
        [OperationContract]
        SdaResEntity InboundFinishConfirm(int deviceId, string stationCode);
        SdaResEntity InboundFinishConfirm(int deviceId, bool value, string stationCode);
        /// <summary>
        /// å‡ºåº“完成已确认
@@ -108,7 +108,7 @@
        /// <param name="value"></param>
        /// <returns></returns>
        [OperationContract]
        SdaResEntity OutboundFinishConfirm(int deviceId, string stationCode);
        SdaResEntity OutboundFinishConfirm(int deviceId, bool value, string stationCode);
        /// <summary>
        /// å†™å…¥å…¥åº“任务信息
SDA/iWareSda/Devices/4-Station/StationService/StationService.cs
@@ -444,7 +444,7 @@
        /// <param name="deviceId"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public SdaResEntity InboundFinishConfirm(int deviceId, string stationCode)
        public SdaResEntity InboundFinishConfirm(int deviceId, bool value, string stationCode)
        {
            SdaResEntity _SdaResEntity = new SdaResEntity();
            try
@@ -457,7 +457,7 @@
                var Station = StationResult.resData as StationEntity;
                string msg = "";
                var result = Station.InboundFinishConfirm(stationCode, out msg);
                var result = Station.InboundFinishConfirm(stationCode, value, out msg);
                _SdaResEntity.result = result;
                _SdaResEntity.resMsg = msg;
                return _SdaResEntity;
@@ -476,7 +476,7 @@
        /// <param name="deviceId"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public SdaResEntity OutboundFinishConfirm(int deviceId, string stationCode)
        public SdaResEntity OutboundFinishConfirm(int deviceId, bool value, string stationCode)
        {
            SdaResEntity _SdaResEntity = new SdaResEntity();
            try
@@ -489,7 +489,7 @@
                var Station = StationResult.resData as StationEntity;
                string msg = "";
                var result = Station.OutboundFinishConfirm(stationCode, out msg);
                var result = Station.OutboundFinishConfirm(stationCode, value, out msg);
                _SdaResEntity.result = result;
                _SdaResEntity.resMsg = msg;
                return _SdaResEntity;