已添加20个文件
已重命名1个文件
已修改48个文件
2505 ■■■■ 文件已修改
项目代码/WCS/WCSServer/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Server/appsettings.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJobTZ/CommonConveyorLineTZJob.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServer/WIDESEAWCS_Tasks/TT/CommonConveyorLineTTJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/extension/widesea_wms/taskinfo/Dt_Task.jsx 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/router/tables.js 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue 415 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue 461 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/WCS/IWCSService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_RoadWay.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Stock/VV_StockInfo.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_Model/Models/Inbound/Dt_CarBodyInfo_hty.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/lock.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pullLock.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/HZPassTZ.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/RequestEmptyInboundRoadWayNo.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/RequestInboundRoadWayNo.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/TZPassZZ.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/BackgroundJob.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/QuartzJobMildd.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/WhiteCarAutoOutJob.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer.sln 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/WCS/WCSController.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
@@ -56,6 +56,8 @@
        public const string TZPassZZ = "TZPassZZ";
        public const string HZPassTZ = "HZPassTZ";
        public const string Queue = "Queue";
        public const string RequestInboundRoadWayNo = "RequestInboundRoadWayNo";
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -24,14 +24,14 @@
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 202,
        //[Description("分拣入库")]
        //InPick = 202,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
        [Description("质检入库")]
        InQuality = 203,
        //[Description("质检入库")]
        //InQuality = 203,
        /// <summary>
        /// ç©ºæ‰˜ç›˜å…¥åº“
@@ -42,20 +42,20 @@
        /// <summary>
        /// NG入库
        /// </summary>
        [Description("NG入库")]
        InNG = 205,
        //[Description("NG入库")]
        //InNG = 205,
        /// <summary>
        /// è½¦è½®å…¥åº“
        /// </summary>
        [Description("车轮入库")]
        InWheels = 206,
        //[Description("车轮入库")]
        //InWheels = 206,
        /// <summary>
        /// åˆ¶åŠ¨ç›˜å…¥åº“
        /// </summary>
        [Description("制动盘入库")]
        InBrake = 207,
        //[Description("制动盘入库")]
        //InBrake = 207,
    }
    public enum TaskOutboundTypeEnum
@@ -75,14 +75,14 @@
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 102,
        //[Description("分拣出库")]
        //OutPick = 102,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 103,
        //[Description("质检出库")]
        //OutQuality = 103,
        /// <summary>
        /// ç©ºæ‰˜ç›˜å‡ºåº“
@@ -93,8 +93,8 @@
        /// <summary>
        /// NG出库
        /// </summary>
        [Description("NG出库")]
        OutNG = 105,
        //[Description("NG出库")]
        //OutNG = 105,
        /// <summary>
        /// ç›´æŽ¥å‡ºåº“
@@ -105,14 +105,14 @@
        /// <summary>
        /// è½¦è½®å‡ºåº“
        /// </summary>
        [Description("车轮出库")]
        OutWheels = 107,
        //[Description("车轮出库")]
        //OutWheels = 107,
        /// <summary>
        /// åˆ¶åŠ¨ç›˜å‡ºåº“
        /// </summary>
        [Description("制动盘出库")]
        OutBrake = 108,
        //[Description("制动盘出库")]
        //OutBrake = 108,
    }
    public enum TaskRelocationTypeEnum
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs
@@ -24,11 +24,16 @@
        public string PalletCode { get; set; }
        /// <summary>
        /// å··é“号
        /// å··é“设备号
        /// </summary>
        public string RoadWay { get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        public string RoadwayNo { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        public int TaskType { get; set; }
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -156,6 +156,12 @@
        public int CarType { get; set; }
        /// <summary>
        /// å··é“号
        ///</summary>
        [SugarColumn(ColumnName = "RoadwayNo", ColumnDescription = "巷道号")]
        public string RoadwayNo { get; set; }
        /// <summary>
        /// å¤‡  æ³¨:PVI码
        /// é»˜è®¤å€¼:
        ///</summary>
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs
@@ -54,12 +54,20 @@
        public string PalletCode { get; set; }
        /// <summary>
        /// å··é“机
        /// </summary>
        [ImporterHeader(Name = "巷道机")]
        [ExporterHeader(DisplayName = "巷道机")]
        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "巷道机")]
        public string Roadway { get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        [ImporterHeader(Name = "巷道号")]
        [ExporterHeader(DisplayName = "巷道号")]
        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "巷道号")]
        public string Roadway { get; set; }
        public string RoadwayNo { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Server/appsettings.json
@@ -11,18 +11,9 @@
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True",
  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=LP_WIDESEAWCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=.;Initial Catalog=ZCLDY_WIDESEAWCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=MX_LDY_WCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True",
  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=LP_WIDESEAWCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=172.21.1.139;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=Admin123;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs
@@ -129,9 +129,9 @@
        // æ£€æŸ¥å½“前托盘是否存在任务
        private async Task<bool> HasTask(string PVI)
        private async Task<bool> HasTask(string palletCode)
        {
            var hasTask = await BaseDal.QueryFirstAsync(x => x.PVI == PVI);
            var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
            return hasTask != null;
        }
@@ -191,10 +191,10 @@
                StaticVariable.isLineRun = false;
                // æ£€æŸ¥å½“前托盘是否存在任务
                if (await HasTask(palletCode))
                {
                    return content.Error("当前托盘存在任务");
                }
                //if (await HasTask(palletCode))
                //{
                //    return content.Error("当前托盘存在任务");
                //}
                //PVI = "J26000456TF12"; // æ¨¡æ‹ŸPVI请求任务
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -4,7 +4,6 @@
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common;
@@ -19,12 +18,9 @@
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.DTO;
namespace WIDESEAWCS_TaskInfoService
{
@@ -97,6 +93,7 @@
                    task.CarType = item.CarType;
                    task.PVI = item.PVI;
                    task.NextAddress = item.NextAddress;
                    task.RoadwayNo = item.RoadwayNo;
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå‡ºåº“ä»»åŠ¡
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -665,7 +662,7 @@
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    if(task.NextAddress == task.TargetAddress)
                    if (task.NextAddress == task.TargetAddress)
                    {
                        task.ModifyDate = DateTime.Now;
                        task.Modifier = "System";
@@ -674,11 +671,11 @@
                        task.TaskState = nextStatus;
                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                        task_Hty.TaskId = 0;
                        //task_Hty.CarType = task.CarType;
                        task_Hty.CarType = task.CarType;
                        task_Hty.PVI = task.PVI;
                        task_Hty.RoadwayNo = task.RoadwayNo;
                        BaseDal.DeleteData(task);
                        _taskHtyRepository.AddData(task_Hty);
                    }
                    else
                    {
@@ -695,8 +692,6 @@
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    }
                    //暂不考虑多个出库口
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
@@ -708,7 +703,6 @@
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
@@ -716,10 +710,8 @@
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = (int)TaskStatusGroup.Completed;
                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
                    task_Hty.TaskId = 0;
                    BaseDal.DeleteData(task);
                    _taskHtyRepository.AddData(task_Hty);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -117,7 +117,21 @@
                                if (station.stationModel == "1") //直通模式
                                {
                                    //todo BDC02过点  ç„Šæ¶‚绑定
                                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.HZPassTZ)?.ConfigValue;
                                    if (wmsBase == null || requestTask == null)
                                    {
                                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                                    }
                                    var wmsIpAddrss = wmsBase + requestTask;
                                    var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletcode, Roadways = station.Roadway, area = station.stationArea, Position = station.stationChildCode, PVI = pvi }.ToJsonString());
                                    WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                                    if (!content.Status)
                                    {
                                        throw new Exception(content.Message);
                                    }
                                    conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.Spare6, 2, station.stationChildCode);
                                    conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                                }
@@ -138,59 +152,14 @@
                                            _taskService.UpdateTaskStatusToNext(task);
                                        }
                                    }
                                    //else
                                    //{
                                    //    conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 12, station.stationChildCode);
                                    //}
                                }
                            }
                            //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                            //var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestInboundRoadWayNo)?.ConfigValue;
                            //if (wmsBase == null || requestTask == null)
                            //{
                            //    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                            //}
                            //var wmsIpAddrss = wmsBase + requestTask;
                            //var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletcode, Roadways = station.Roadway, area = station.stationArea, Position = station.stationChildCode, PVI = pvi }.ToJsonString());
                            //WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                            //if (!content.Status)
                            //{
                            //    return;
                            //}
                            ////焊涂提升机  ç›´é€šäººæ¶‚装-2  å…¥åº“-3
                            //conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.Spare6, 3, station.stationChildCode);
                            //conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.Spare5, 5, station.stationChildCode);
                            //conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                        }
                        //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == request.ToString());
                        //if (deviceProtocolDetails != null)
                        //{
                        //    MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                        //    if (method != null)
                        //    {
                        //        method.Invoke(this, new object[] { conveyorLine, conveyorLine, station });
                        //    }
                        //}
                        //ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode);
                        //command.PVI.Replace("/0", "").Replace("\"\\u0010\\u000f", "");
                        //command.CarColor.Replace("/0", "");
                        //command.CarType.Replace("/0", "");
                        //command.CarCate.Replace("/0", "");
                        //command.CatSkyWindow.Replace("/0", "");
                        //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == command.Request.ToString());
                        ////x.DeviceProParamName == nameof(ConveyorLineTaskCommand.ConveyorLineSingal)
                        //if (deviceProtocolDetails != null)
                        //{
                        //    MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                        //    if (method != null)
                        //    {
                        //        method.Invoke(this, new object[] { conveyorLine, command, station });
                        //    }
                        //}
                        #region è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                        //var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Tasks/ConveyorLineJobTZ/CommonConveyorLineTZJob.cs
@@ -165,7 +165,7 @@
                            }
                        }
                        if (station.stationType == 1)  //入库口
                        if (station.stationType == 1 )  //入库口
                        {
                            var requestInbound = conveyorLine.GetValue<ConveyorLineDBName, bool>(ConveyorLineDBName.EntApply, station.stationChildCode);
                            if (requestInbound)
@@ -193,7 +193,7 @@
                            }
                        }
                        if (station.stationType == 3)
                        if (station.stationType == 3)  //RB043精排点
                        {
                            var requestFolw = conveyorLine.GetValue<ConveyorLineDBName, bool>(ConveyorLineDBName.EntApply, station.stationChildCode);
                            if (requestFolw)
@@ -242,11 +242,24 @@
                                //var pvi = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.PVI, station.stationChildCode);
                                WebResponseContent response = _taskService.RequestRoadWayTask(palletcode.ToString(), palletcode.ToString(), station).Result;
                                if (!response.Status)
                                if (response.Status)
                                {
                                    var task = _taskService.QueryBarCodeConveyorLineTask(palletcode.ToString(), station.stationChildCode);
                                    if (task != null)
                                    {
                                        var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
                                        conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.Spare6, Convert.ToInt16(stationInfo.stationTCLocation), station.stationChildCode);
                                        Thread.Sleep(200);
                                        //conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.Spare5, 3, station.stationChildCode);
                                        conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                                        _taskService.UpdateTaskStatusToNext(task);
                                    }
                                }
                                conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                                //else
                                //{
                                //    conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                                //}
                            }
                        }
@@ -269,6 +282,35 @@
                            }
                        }
                        if (station.stationType == 6)  //空滑橇入库口
                        {
                            var requestInbound = conveyorLine.GetValue<ConveyorLineDBName, bool>(ConveyorLineDBName.EntApply, station.stationChildCode);
                            if (requestInbound)
                            {
                                var palletcode = conveyorLine.GetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.SkidNo, station.stationChildCode);
                                //var pvi = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.PVI, station.stationChildCode);
                                //_taskService.QueryBarCodeConveyorLineTask();
                                var task = _taskService.QueryExecutingTaskByBarcode(palletcode.ToString(), station.stationChildCode);
                                if (task != null)
                                {
                                    _taskService.UpdateTaskStatusToNext(task);
                                    conveyorLine.SetValue<ConveyorLineDBName, Int16>(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode);
                                }
                                else
                                {
                                    continue;
                                    //如找不到对应入库任务,则根据托盘 PVI申请入库
                                    //WebResponseContent response = _taskService.RequestTask(palletcode.ToString(), pvi, station).Result;
                                    //if (!response.Status)
                                    //{
                                    //    continue;
                                    //}
                                }
                            }
                        }
                        #region æ ¹æ®åè®®è¯»å–方案
                        //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == request.ToString());
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Tasks/SC/SCJob.cs
@@ -67,6 +67,7 @@
                if (flag && value != null && value is STK commonStackerCrane)
                {
                    List<string> childCodes = commonStackerCrane.DeviceProDTOs.GroupBy(d => d.DeviceChildCode).Select(g => g.Key).ToList();
                    childCodes = new List<string> { "SC01", "SC03", "SC05", "SC07" };  //测试使用
                    Parallel.For(0, childCodes.Count, (i, state) =>
                    {
                        //ConsoleHelper.WriteColorLine($"【{childCodes[i]}】时间【{DateTime.Now}】】【{Thread.CurrentThread.ManagedThreadId}】", ConsoleColor.Magenta);
@@ -135,7 +136,7 @@
                                    Thread.Sleep(500);
                                    WebResponseContent responseContent = SendStackerTask(commonStackerCrane, task, childCodes[i]);
                                    if(responseContent.Status)
                                    if (responseContent.Status)
                                    {
                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                    }
@@ -253,7 +254,7 @@
        {
            //return task;
            var stationList = _stationManagerRepository.QueryData(x => x.stationType == 2 && x.Roadway == task.Roadway);
            //var stationList = _stationManagerRepository.QueryData(x => x.stationType == 2 && x.Roadway == task.Roadway);
            //foreach (var item in stationList)
            //{
@@ -377,7 +378,7 @@
            {
                return responseContent.Error(ex.Message);
            }
        }
    }
ÏîÄ¿´úÂë/WCS/WCSServer/WIDESEAWCS_Tasks/TT/CommonConveyorLineTTJob.cs
@@ -105,7 +105,7 @@
                            Dt_Task task = null;
                            if (station.stationChildCode == "TC05")
                            {
                                //var executeTaks =  _taskRepository.QueryData(x => (x.Roadway == "SC02" || x.Roadway == "SC04") && x.TaskState <= (int)TaskOutStatusEnum.SC_OutFinish).OrderBy(x => x.CreateDate).FirstOrDefault();
                                //var executeTaks = _taskRepository.QueryData(x => (x.Roadway == "SC02" || x.Roadway == "SC04") && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting).OrderBy(x => x.CreateDate).FirstOrDefault();
                                var leftTask = _taskRepository.QueryData(x => (x.Roadway == "SC02" || x.Roadway == "SC04") && x.TaskState <= (int)TaskOutStatusEnum.SC_OutFinish).OrderBy(x => x.CreateDate).FirstOrDefault();
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
     //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前,
        //示例:在按钮的最前面添加一个按钮
        //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
        //     name: '按钮', //按钮名称
        //     icon: 'el-icon-document', //按钮图标vue2版本见iview文档icon,vue3版本见element ui文档icon(注意不是element puls文档)
        //     type: 'primary', //按钮样式vue2版本见iview文档button,vue3版本见element ui文档button
        //     onClick: function () {
        //       this.$Message.success('点击了按钮');
        //     }
        //   });
        //示例:设置修改新建、编辑弹出框字段标签的长度
        this.boxOptions.labelWidth = 150;
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false,则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
      //(1)判断是编辑还是新建操作: this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    }
  }
};
export default extension;
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelFooter: ''
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
      //框架初始化配置前,
      //设置查询界面弹出框的label宽度
      this.boxOptions.labelWidth = 50;
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false,则不会执行查询
      return true;
    },
    searchAfter(result) {
      //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
      return true;
    },
    addBefore(formData) {
      //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
      return true;
    },
    updateBefore(formData) {
      //编辑保存前formData为对象,包括明细表、删除行的Id
      return true;
    },
    addrow() {
      return true;
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      //this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
      //(1)判断是编辑还是新建操作: this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    }
  }
};
export default extension;
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/widesea_wms/taskinfo/Dt_Task.jsx
@@ -47,28 +47,28 @@
        }
      }
      let confirmTask=this.buttons.find(x=>x.value=='confirmTask');
      if(confirmTask){
        confirmTask.onClick=function(){
          let row = this.$refs.table.getSelected() //获取选中的行
          if (row <= 0) {
            //如果没有选中行
            this.$Message.error('请选择一行数据')
            return
          }
          let taskNum = row[0].taskNum
          this.http.get(`/api/Task/confirmTask?taskNum=${taskNum}`, {}, "正在确认完成任务").then((res) => {
            //示例:调用后台接口
            if (res.status) {
              this.$Message.success('确认任务完成');
              this.refresh();
            } else {
              this.$Message.error(res.message) //错误提示
              this.refresh();
            }
          })
        }
      }
      // let confirmTask=this.buttons.find(x=>x.value=='confirmTask');
      // if(confirmTask){
      //   confirmTask.onClick=function(){
      //     let row = this.$refs.table.getSelected() //获取选中的行
      //     if (row <= 0) {
      //       //如果没有选中行
      //       this.$Message.error('请选择一行数据')
      //       return
      //     }
      //     let taskNum = row[0].taskNum
      //     this.http.get(`/api/Task/confirmTask?taskNum=${taskNum}`, {}, "正在确认完成任务").then((res) => {
      //       //示例:调用后台接口
      //       if (res.status) {
      //         this.$Message.success('确认任务完成');
      //         this.refresh();
      //       } else {
      //         this.$Message.error(res.message) //错误提示
      //         this.refresh();
      //       }
      //     })
      //   }
      // }
      //示例:在按钮的最前面添加一个按钮
      // this.buttons.unshift({
      //   //也可以用push或者splice方法来修改buttons数组
ÏîÄ¿´úÂë/WMS/WMSClient/src/router/tables.js
@@ -292,6 +292,14 @@
    }
  },
  {
    path: '/Eliteselection',
    name: 'Eliteselection',
    component: () => import('@/views/widesea_wms/stock/Eliteselection.vue'),
    meta: {
      keepAlive: false
    }
  },
  {
    path: '/Dt_PaintingOrderInfo',
    name: 'Dt_PaintingOrderInfo',
    component: () => import('@/views/widesea_wms/OrderInfo/Dt_PaintingOrderInfo.vue'),
@@ -326,9 +334,23 @@
    path: '/VV_MesLockInfo',
    name: 'VV_MesLockInfo',
    component: () => import('@/views/widesea_wms/stock/VV_MesLockInfo.vue'),
    // meta: {
    //   keepAlive: true
    // }
    meta: {
      keepAlive: false
    }
  },{
    path: '/Dt_StockQuantityChangeRecord',
    name: 'Dt_StockQuantityChangeRecord',
    component: () => import('@/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue'),
    meta: {
      keepAlive: false
    }
  },{
    path: '/Dt_PassPointRecord',
    name: 'Dt_PassPointRecord',
    component: () => import('@/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue'),
    meta: {
      keepAlive: false
    }
  },
]
export default tables
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
<!--
*Author:jxx
 *Contact:283591387@qq.com
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/extension/widesea_wms/basicinfo/PointStackerRelation.js此处编写
 -->
<template>
    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
        :table="table" :extend="extend">
    </view-grid>
</template>
<script>
import extend from "@/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
    setup() {
        const table = ref({
            key: 'PointID',
            footer: "Foots",
            cnName: 'MES过点记录',
            name: 'Dt_PassPointRecord',
            url: "/Dt_PassPointRecord/",
            sortName: "Id"
        });
        const editFormFields = ref({
        });
        const editFormOptions = ref([
        ]);
        const searchFormFields = ref({});
        const searchFormOptions = ref([
            [
                { "title": "站台编号", "field": "pointCode", type: "text" },
                { "title": "堆垛机编号", "field": "stackerCode", type: "text" },
            ],
            [
                { "title": "关系的方向", "field": "direction", type: "text" },
                { "title": "关系的区域", "field": "area", type: "text" },
            ]
        ]);
        const columns = ref([{ field: 'id', title: '主键', type: 'int', sort: true, hidden: true, width: 110, readonly: true, require: true, align: 'left' },
        { field: 'palletCode', title: '滑橇号', type: 'string', sort: true, width: 110, require: true, align: 'left', sort: true },
        { field: 'position', title: '过点', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'pvi', title: 'PVI', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'passPointTime', title: '过点时间', type: 'int', sort: true, width: 110, align: 'left' },
        { field: 'lineCode', title: '行号', type: 'int', sort: true, width: 110, align: 'left' },
        { field: 'content', title: '请求参数', type: 'int', sort: true, width: 250, align: 'left' },
        { field: 'creater', title: '创建人', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'createDate', title: '创建时间', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
        { field: 'modifier', title: '修改人', type: 'string', sort: true, width: 100, hidden: true, align: 'left' },
        { field: 'modifyDate', title: '修改时间', type: 'datetime', sort: true, width: 150, hidden: true, align: 'left', sort: true },])
        const detail = ref({
            cnName: "#detailCnName",
            table: "#detailTable",
            columns: [],
            sortName: "",
            key: ""
        });
        return {
            table,
            extend,
            editFormFields,
            editFormOptions,
            searchFormFields,
            searchFormOptions,
            columns,
            detail,
        };
    },
});
</script>
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
<!--
*Author:jxx
 *Contact:283591387@qq.com
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/extension/widesea_wms/invoices/Dt_InboundOrder.js此处编写
 -->
<template>
    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
        :table="table" :extend="extend">
    </view-grid>
</template>
<script>
import extend from "@/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
    setup() {
        const table = ref({
            key: 'id',
            footer: "Foots",
            cnName: '库存变动记录',
            name: 'StockQuantityChangeRecord',
            url: "/StockQuantityChangeRecord/",
            sortName: "id"
        });
        const editFormFields = ref({
        });
        const editFormOptions = ref([
        ]);
        const searchFormFields = ref({
        });
        const searchFormOptions = ref([
            [
                { "title": "滑橇号", "field": "palletCode", type: "text" },
                { "title": "库位号", "field": "locationCode", type: "text" },
                { "title": "变动类型", "field": "changeType", type: "select", dataKey: "ChangeType", data: [] },
                { "title": "任务号", "field": "taskNum", type: "text" },
            ],
            [
                { "title": "PVI", "field": "pvi", type: "string" },
                { "title": "车身ID", "field": "carBodyID", type: "int" },
                { "title": "巷道号", "field": "roadwayNo", type: "int" },
                { "title": "库存ID", "field": "stockId", type: "int" },
            ],
            [
                { "title": "白车身物料号", "field": "biwMaterialCode", type: "int" },
                { "title": "车身类型", "field": "carType", type: "select", dataKey: "BodyType", data: [] },
                { "title": "工单类型", "field": "workOrderType", type: "select", dataKey: "OrderType", data: [] },
                { "title": "车型", "field": "vehicleCharacteristic", type: "string" },
            ],
            [
                { "title": "彩车身物料号", "field": "pbMaterial", type: "string" },
                { "title": "车身颜色", "field": "carBodyCharacteristic", type: "string" },
                { "title": "天窗特征", "field": "skylightCharacteristic", type: "string" },
            ]
        ]);
        const columns = ref([
            { field: 'id', title: '主键ID', type: 'int', width: 110, readonly: true, hidden: true, require: true, align: 'left' },
            { field: 'stockId', title: '库存ID', type: 'string', width: 90, align: 'left' },
            { field: 'taskNum', title: '任务号', type: 'string', width: 60, align: 'left' },
            { field: 'changeType', title: '变动类型', type: 'int', width: 90, align: 'left', bind: { key: "ChangeType", data: [] } },
            { field: 'palletCode', title: '滑橇号', type: 'string', width: 75, align: 'left' },
            { field: 'locationCode', title: '库位号', type: 'int', width: 120, align: 'left' },
            { field: 'roadwayNo', title: '巷道号', type: 'string', width: 60, align: 'left' },
            { field: 'pvi', title: 'PVI码', type: 'string', width: 120, align: 'left' },
            { field: 'carBodyID', title: '车身ID', type: 'int', width: 90, align: 'left' },
            { field: 'vehicleCharacteristic', title: '车型', type: 'string', width: 75, align: 'left' },
            { field: 'carType', title: '车身类型', type: 'int', width: 80, align: 'left', bind: { key: "BodyType", data: [] } },
            { field: 'workOrderType', title: '工单类型', type: 'string', width: 100, align: 'left', bind: { key: "OrderType", data: [] } },
            { field: 'skylightCharacteristic', title: '天窗特征', type: 'string', width: 75, align: 'left' },
            { field: 'carBodyCharacteristic', title: '车身颜色', type: 'string', width: 75, align: 'left' },
            { field: 'biwMaterialCode', title: '白车身物料号', type: 'string', width: 120, align: 'left' },
            { field: 'pbMaterial', title: '彩车身物料号', type: 'string', width: 120, align: 'left' },
            { field: 'biwInPassTime', title: '焊装上线时间', type: 'datetime', width: 130, align: 'left' },
            { field: 'createDate', title: '创建时间', type: 'datetime', sort: true, width: 100, align: 'left' },
        ]);
        const detail = ref({
            cnName: "#detailCnName",
            table: "#detailTable",
            columns: [],
            sortName: "",
            key: ""
        });
        return {
            table,
            extend,
            editFormFields,
            editFormOptions,
            searchFormFields,
            searchFormOptions,
            columns,
            detail,
        };
    },
});
</script>
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,415 @@
<template>
    <div class="container">
        <div class="header">
            <div class="title">精排显示</div>
            <div class="legend-section">
                <div class="legend-item">
                    <div class="legend-label">虚拟精排</div>
                    <span class="color-box color-green"></span>
                </div>
                <div class="legend-item">
                    <div class="legend-label">虚拟精排无任务</div>
                    <span class="color-box color-lightgreen"></span>
                </div>
            </div>
        </div>
        <div class="content-wrapper">
            <div class="content">
                <div v-if="displayItems.length === 0" class="no-data">
                    <div class="no-data-text">暂无数据</div>
                </div>
                <div v-for="(item, index) in displayItems" :key="index" class="box">
                    <div class="box-content color-green" v-if="item.lockStatue == 1" @click="mouseClick(item.pvi)">
                        <div class="text-line">{{ item.pvi }}</div>
                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
                    </div>
                    <div class="box-content color-lightgreen" v-else-if="item.lockStatue == 0"
                        @click="mouseClick(item.pvi)">
                        <div class="text-line">{{ item.pvi }}</div>
                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
                    </div>
                    <div class="box-content color-font" v-else-if="item.lockStatue != 1 || item.lockStatue != 0"
                        @click="mouseClick(item.pvi)">
                        <div class="text-line">{{ item.pvi }}</div>
                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
                    </div>
                    <div class="box-index">{{ index + 1 }}</div>
                </div>
            </div>
        </div>
    </div>
    <el-dialog v-model="dialogVisible" title="车身信息查看" :before-close="handleClose">
        <div v-if="stockInfos.message" class="no-data-message">{{ stockInfos.message }}</div>
        <el-form v-else ref="$form" :model="stockInfos" label-position="left" label-width="120px" size="medium">
            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="库位编号:">
                        <j-el-description :value="stockInfos.locationCode" type="primary" ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="PVI:">
                        <j-el-description :value="stockInfos.pvi" type="primary" ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="车型:">
                        <j-el-description :value="stockInfos.vehicleCharacteristic" type="primary"
                            ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="车身类型">
                        <j-el-description :value="getcarType(stockInfos.carType)" type="primary"
                            ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="工单类型:">
                        <j-el-description :value="getOrderType(stockInfos.workOrderType)" type="primary"
                            ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="天窗特征:">
                        <j-el-description :value="stockInfos.skylightCharacteristic" type="primary"
                            ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="车身颜色:">
                        <j-el-description :value="stockInfos.carBodyCharacteristic" type="primary"
                            ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="白车身物料号:">
                        <j-el-description :value="stockInfos.biwMaterialCode" type="primary" ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="彩车身物料号:">
                        <j-el-description :value="stockInfos.pbMaterial" type="primary" ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
                    <el-form-item label="焊装上线时间:">
                        <j-el-description :value="stockInfos.biwInPassTime" type="primary" ellipsis></j-el-description>
                    </el-form-item>
                </el-col>
            </el-row>
            <el-divider />
        </el-form>
        <template #footer>
            <div class="dialog-footer">
                <el-button @click="dialogVisible = false">取消</el-button>
                <el-button type="primary" @click="dialogVisible = false">
                    ç¡®è®¤
                </el-button>
            </div>
        </template>
    </el-dialog>
</template>
<script>
import JElDescription from "./JElDescription";
export default {
    data() {
        return {
            mesLockInfos: [],
            timer: null,
            dialogVisible: false,
            stockInfos: {
            },
        }
    },
    computed: {
        displayItems() {
            return this.mesLockInfos.slice(0, 50)
        }
    },
    methods: {
        GetViewData() {
            this.http.post('/api/VV_MesLockInfo/GetMesLockInfo', '', '查询中').then((x) => {
                this.mesLockInfos = x.data
            })
        },
        mouseClick(pvi) {
            this.http.post('/api/VV_MesLockInfo/GetStockInfo?PVI=' + pvi, '', '查询中').then((x) => {
                if (x.data === null) {
                    this.stockInfos = { message: '无库存数据' };
                } else {
                    this.stockInfos = x.data;
                }
                this.dialogVisible = true;
            })
        },
        getcarType(carType) {
            if (carType == 1) return '白车身'
            if (carType == 2) return '彩车身'
            if (carType == 3) return '空滑橇'
        },
        getOrderType(OrderType) {
            if (OrderType == 1) return '国内销售车'
            if (OrderType == 2) return '国际销售车'
            if (OrderType == 3) return '展车'
            if (OrderType == 4) return '企业用车'
            if (OrderType == 6) return '试制车'
            if (OrderType == 7) return 'SKD/CKD车'
            if (OrderType == 8) return '特殊配置车'
            if (OrderType == 11) return '验证订单'
        },
        startTimer() {
            // æ¸…除可能存在的旧定时器
            if (this.timer) {
                clearInterval(this.timer)
            }
            // è®¾ç½®æ–°çš„定时器,每30秒刷新一次
            this.timer = setInterval(() => {
                this.GetViewData()
            }, 30000)
        },
        stopTimer() {
            if (this.timer) {
                clearInterval(this.timer)
                this.timer = null
            }
        }
    },
    mounted() {
        this.GetViewData()
        this.startTimer()
    },
    beforeUnmount() {
        this.stopTimer()
    },
    components: { JElDescription }
}
</script>
<style scoped>
.header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 24px;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    border-bottom: none;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.title {
    font-size: 24px;
    font-weight: 700;
    color: #ffffff;
    margin-left: 0;
    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
    letter-spacing: 0.5px;
}
.legend-section {
    display: flex;
    gap: 24px;
    align-items: center;
}
.legend-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    background-color: rgba(255, 255, 255, 0.2);
    border-radius: 20px;
    backdrop-filter: blur(10px);
}
.legend-label {
    font-size: 15px;
    color: #ffffff;
    font-weight: 500;
    letter-spacing: 0.3px;
}
.color-box {
    display: inline-block;
    width: 18px;
    height: 18px;
    border-radius: 4px;
    border: 2px solid rgba(255, 255, 255, 0.3);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.color-green {
    background-color: #167C07;
}
.color-lightgreen {
    background-color: #9dc88d;
}
.color-font {
    background-color: #6ec0f0;
}
.box-content.color-green {
    background-color: #167C07;
    border-radius: 8px;
    padding: 12px;
    margin: -12px;
    margin-bottom: -12px;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.box-content.color-lightgreen {
    background-color: #9dc88d;
    border-radius: 8px;
    padding: 12px;
    margin: -12px;
    margin-bottom: -12px;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.box-content.color-font {
    background-color: #6ec0f0;
    border-radius: 8px;
    padding: 12px;
    margin: -12px;
    margin-bottom: -12px;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.content-wrapper {
    padding: 24px;
    height: calc(100vh - 72px);
    overflow-y: auto;
    background: linear-gradient(180deg, #f8f9fa 0%, #e9ecef 100%);
    display: flex;
    align-items: center;
    justify-content: center;
}
.content {
    display: grid;
    grid-template-columns: repeat(10, 1fr);
    gap: 12px;
    width: 100%;
}
.box {
    width: 100%;
    height: 100%;
    border: none;
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    padding: 12px;
    font-size: 13px;
    font-weight: 500;
    color: #333;
    cursor: pointer;
    background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
    position: relative;
    overflow: hidden;
}
.box-content {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    overflow: hidden;
}
.text-line {
    line-height: 1.6;
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #ffffff;
    font-weight: 600;
    font-size: 13px;
    letter-spacing: 0.3px;
}
.box-index {
    text-align: center;
    margin-top: 8px;
    font-size: 16px;
    color: #756767;
    font-weight: 800;
    padding-top: 8px;
    border-top: 1px solid rgba(255, 255, 255, 0.2);
    letter-spacing: 0.5px;
}
.color-box {
    display: inline-block;
    width: 20px;
    height: 20px;
    margin-right: 15px;
    border-radius: 3px;
}
/* æ— æ•°æ®æç¤ºæ ·å¼ */
.no-data-message {
    text-align: center;
    padding: 40px 20px;
    font-size: 16px;
    color: #909399;
    background-color: #f4f4f5;
    border-radius: 4px;
}
/* é¡µé¢æ— æ•°æ®æç¤ºæ ·å¼ */
.no-data {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    min-height: 300px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
.no-data-icon {
    font-size: 80px;
    margin-bottom: 20px;
    opacity: 0.6;
}
.no-data-text {
    font-size: 18px;
    color: #909399;
    font-weight: 500;
}
</style>
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
<template>
  <div class="j-description wordwrap" :class="class__" :style="style__">{{value}}</div>
</template>
<script>
  export default {
    name: "j-el-description",
    inject: {
      elForm: {
        default: ''
      },
      elFormItem: {
        default: ''
      }
    },
    props: {
      value: [String, Number],    // å†…容
      type: {                     // ä¸»é¢˜
        type: String,
        validator(value) {
          return ['primary', 'success', 'info', 'warning', 'danger'].indexOf(value) !== -1;
        }
      },
      size: {                     // å°ºå¯¸
        type: String,
        validator(value) {
          return ['medium', 'small', 'mini'].indexOf(value) !== -1;
        }
      },
      height: [String, Number],   // é™åˆ¶é«˜åº¦
      ellipsis: Boolean,          // çœç•¥å·
    },
    computed: {
      elFormItemSize__() {
        return (this.elFormItem || {}).elFormItemSize;
      },
      size__() {
        return this.size || this.elFormItemSize__ || (this.$ELEMENT || {}).size;
      },
      class__() {
        let _class = [];
        if (this.type) {
          _class.push(this.type);
        }
        if (this.size__) {
          _class.push(this.size__);
        }
        if (this.height) {
          _class.push('scroll');
        }
        if (this.ellipsis) {
          _class.push('ellipsis');
        }
        return _class;
      },
      style__() {
        let _style = {};
        if (!this.ellipsis && this.height) {
          if (isNaN(this.height)) {
            _style.height = this.height;
          } else {
            _style.height = this.height + 'px';
          }
        }
        return _style;
      }
    }
  }
</script>
<style scoped>
  .j-description {
    min-height: 40px;
    line-height: 40px;
    padding: 0 50%;
  }
  /*大小*/
  .j-description.medium {
    min-height: 36px;
    line-height: 36px;
  }
  .j-description.small {
    min-height: 32px;
    line-height: 32px;
  }
  .j-description.mini {
    min-height: 28px;
    line-height: 28px;
  }
  /*滚动*/
  .j-description.scroll {
    overflow-x: hidden;
    overflow-y: auto;
  }
  .j-description.scroll::-webkit-scrollbar {
    width: 9px;
    height: 9px;
    background: #F3F3F3;
  }
  .j-description.scroll::-webkit-scrollbar-thumb {
    border: 1px solid #ffffff;
    border-radius: 6px;
    background: #c9c9c9;
  }
  .j-description.scroll::-webkit-scrollbar-thumb:hover {
    background: #b5b5b5;
  }
  /*换行*/
  .j-description.wordwrap {
    table-layout: fixed;
    word-break: break-all;
    word-wrap: break-word;
  }
  /*省略号*/
  .j-description.ellipsis {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
  }
  /*主题*/
  .j-description.primary {
    background-color: #ecf5ff;
    border: 1px solid #d9ecff;
    color: #409eff;
  }
  .j-description.success {
    background-color: #f0f9eb;
    border-color: #e1f3d8;
    color: #67c23a;
  }
  .j-description.info {
    background-color: #f4f4f5;
    border-color: #e9e9eb;
    color: #909399;
  }
  .j-description.warning {
    background-color: #fdf6ec;
    border-color: #faecd8;
    color: #e6a23c;
  }
  .j-description.danger {
    background-color: #fef0f0;
    border-color: #fde2e2;
    color: #f56c6c;
  }
</style>
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue
@@ -7,13 +7,13 @@
    <div class="content-wrapper">
      <!-- æŽ§åˆ¶é¢æ¿åŒºåŸŸ -->
      <div class="control-panel">
        <div class="form-group">
        <!-- <div class="form-group">
          <label>区域:</label>
          <el-select size="mini" filterable v-model="Area.areaCode" placeholder="请选择" class="full-width">
            <el-option v-for="item in slectData" :value="item.areaCode" :label="item.areaName"
              :key="item.areaName"></el-option>
          </el-select>
        </div>
        </div> -->
        <!-- <div class="form-group">
          <label>排:</label>
@@ -35,9 +35,7 @@
          </el-select>
        </div> -->
        <el-button type="success" class="refresh-btn" @click="GetViewData">
          åˆ·æ–°
        </el-button>
        <el-button type="success" class="refresh-btn" @click="GetViewData"> åˆ·æ–° </el-button>
        <div class="legend-section">
          <h4>说明</h4>
@@ -63,153 +61,264 @@
        </div>
      </div>
      <!-- æ‚¬æµ®æç¤ºæ¡† -->
      <div v-if="showTooltipFlag" class="location-tooltip" :style="{
        left: tooltipPosition.x + 'px',
        top: tooltipPosition.y + 'px',
      }">
        <div v-if="currentLocation">
          <p><strong>货位号:</strong>{{ currentLocation.locationCode }}</p>
          <!-- <p>
            <strong>货位排列层:</strong> {{ currentLocation.row }}排{{
              currentLocation.layer
            }}列{{ currentLocation.layer }}层
          </p> -->
          <p><strong>状态:</strong> {{ getStatusText(currentLocation) }}</p>
          <p>
            <strong>禁用:</strong>
            {{ currentLocation.location_lock == 2 ? "是" : "否" }}
          </p>
          <!-- <p v-if="currentLocation.location_state > 0">
            <strong>物料编码:</strong>
            {{ currentLocation.material_code || "无" }}
          </p>
          <p v-if="currentLocation.location_state > 0">
            <strong>数量:</strong> {{ currentLocation.quantity || "无" }}
          </p> -->
      <transition name="tooltip-fade">
        <div v-if="showTooltipFlag" class="location-tooltip" :style="{
          left: tooltipPosition.x + 'px',
          top: tooltipPosition.y + 'px'
        }">
          <div v-if="currentLocation" class="tooltip-content">
            <div class="tooltip-header">
              <h4>{{ currentLocation.locationCode }}</h4>
              <span class="status-badge" :class="getStatusClass(currentLocation)">
                {{ getStatusText(currentLocation) }}
              </span>
            </div>
            <div class="tooltip-body">
              <div class="info-section">
                <h5>基本信息</h5>
                <div class="info-row">
                  <span class="label">货位号:</span>
                  <span class="value">{{ currentLocation.locationCode }}</span>
                </div>
                <div class="info-row">
                  <span class="label">状态:</span>
                  <span class="value status-highlight" :class="getStatusClass(currentLocation)">
                    {{ getStatusText(currentLocation) }}
                  </span>
                </div>
                <div class="info-row">
                  <span class="label">禁用:</span>
                  <span class="value" :class="{ 'disabled': currentLocation.location_lock == 2 }">
                    {{ currentLocation.location_lock == 2 ? '是' : '否' }}
                  </span>
                </div>
              </div>
              <div v-if="currentLocation.stockInfo != null" class="info-section">
                <h5>库存信息</h5>
                <div class="info-row">
                  <span class="label">PVI:</span>
                  <span class="value">{{ currentLocation.stockInfo.pvi }}</span>
                </div>
                <div class="info-row">
                  <span class="label">滑橇号:</span>
                  <span class="value">{{ currentLocation.stockInfo.palletCode }}</span>
                </div>
                <div class="info-row">
                  <span class="label">巷道号:</span>
                  <span class="value">{{ currentLocation.stockInfo.roadwayNo }}</span>
                </div>
                <div class="info-row">
                  <span class="label">车型:</span>
                  <span class="value">{{ currentLocation.stockInfo.vehicleCharacteristic }}</span>
                </div>
                <div class="info-row">
                  <span class="label">工单类型:</span>
                  <span class="value">{{ currentLocation.stockInfo.workOrderType }}</span>
                </div>
                <div class="info-row">
                  <span class="label">车身颜色:</span>
                  <span class="value">{{ currentLocation.stockInfo.carBodyCharacteristic }}</span>
                </div>
                <div class="info-row">
                  <span class="label">车身类型:</span>
                  <span class="value">{{ getcarType(currentLocation.stockInfo.carType) }}</span>
                </div>
                <div class="info-row">
                  <span class="label">彩车身物料号:</span>
                  <span class="value">{{ currentLocation.stockInfo.pbMaterial }}</span>
                </div>
                <div class="info-row">
                  <span class="label">白车身物料号:</span>
                  <span class="value">{{ currentLocation.stockInfo.biwMaterialCode }}</span>
                </div>
                <div class="info-row">
                  <span class="label">焊装上线时间:</span>
                  <span class="value">{{ currentLocation.stockInfo.biwInPassTime }}</span>
                </div>
                <div class="info-row">
                  <span class="label">天窗特征:</span>
                  <span class="value">{{ currentLocation.stockInfo.skylightCharacteristic }}</span>
                </div>
                <div class="info-row">
                  <span class="label">拉动锁定:</span>
                  <span class="value">{{ getlockOrder(currentLocation.stockInfo.lockOrder) }}</span>
                </div>
                <div class="info-row">
                  <span class="label">锁定状态:</span>
                  <span class="value">{{ getstockStatus(currentLocation.stockInfo.stockStatus) }}</span>
                </div>
                <div class="info-row">
                  <span class="label">任务状态:</span>
                  <span class="value">{{ gettaskStatus(currentLocation.stockInfo.taskStatus) }}</span>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      </transition>
    </div>
  </div>
</template>
<script>
import { ElButton } from "element-plus";
import { ElButton } from 'element-plus'
export default {
  data() {
    return {
      slectData: [],
      scList: [],
      Area: { areaName: "", areaCode: "" },
      mian_height: "",
      Area: { areaName: '', areaCode: '' },
      mian_height: '',
      infoMsg: [
        { bgcolor: "lightgreen", msg: "空货位", state: 0 },
        { bgcolor: "orange", msg: "有货", state: 2 },
        { bgcolor: "#2BB3D5", msg: "锁定", state: 1 },
        { bgcolor: "#ccc", msg: "禁用", state: 9 },
        // { bgcolor: "red", msg: "禁用", state: 3 },
        { bgcolor: "blue", msg: "出库", state: "3" },
         { bgcolor: "pink", msg: "入库", state: "4" },
        { bgcolor: 'lightgreen', msg: '空货位', state: 0 },
        { bgcolor: 'orange', msg: '有货', state: 2 },
        { bgcolor: '#2BB3D5', msg: '锁定', state: 1 },
        { bgcolor: '#ccc', msg: '禁用', state: 9 },
        { bgcolor: 'blue', msg: '出库', state: '3' },
        { bgcolor: 'pink', msg: '入库', state: '4' }
      ],
      locationData: [],
      showTooltipFlag: false,
      currentLocation: null,
      tooltipPosition: { x: 0, y: 0 },
    };
      tooltipPosition: { x: 20, y: 20 }
    }
  },
  computed: {
    GetBgColor(col) {
      return (col) => {
        var bgColor ='';
        var bgColor = ''
        //优先显示禁用状态
        if (col.location_lock == 2) {
          this.infoMsg.forEach((el) => {
            if (el.state == col.location_lock) {
              bgColor = "#ccc";
              bgColor = '#ccc'
            }
          });
        }
         else {
          })
        } else {
          this.infoMsg.forEach((el) => {
             if (el.state == col.location_state) {
              bgColor = el.bgcolor;
            if (el.state == col.location_state) {
              bgColor = el.bgcolor
            }
          });
          })
        }
        return bgColor;
      };
    },
        return bgColor
      }
    }
  },
  watch: {
    //切换库区
    "Area.areaCode"(newValue, oldValue) {
      this.scList = [];
    'Area.areaCode'(newValue, oldValue) {
      this.scList = []
      this.slectData.forEach((e) => {
        if (e.areaCode == newValue) {
          this.Area.areaCode = e.areaCode[0];
          this.Area.areaCode = e.areaCode[0]
          //this.scList = e.tunnel;
        }
      });
      this.GetViewData();
    },
      })
      this.GetViewData()
    }
  },
  methods: {
    GetViewData() {
      var _this = this;
      this.http
        .post("/api/LocationInfo/GetLocationStatu", _this.Area, "查询中")
        .then((x) => {
          _this.locationData = x;
          console.log("后端返回:", x);
        });
      var _this = this
      this.http.post('/api/LocationInfo/GetLocationStatu', _this.Area, '查询中').then((x) => {
        _this.locationData = x
        console.log('后端返回:', x)
      })
    },
    // åˆ‡æ¢æŽ’
    SCChange() {
      this.GetViewData();
      this.GetViewData()
    },
    showTooltip(location, event) {
      this.currentLocation = location;
      this.showTooltipFlag = true;
      this.currentLocation = location
      this.showTooltipFlag = true
      // è®¾ç½®æç¤ºæ¡†ä½ç½®ï¼Œç¨å¾®åç§»é¿å…é®æŒ¡é¼ æ ‡
      this.tooltipPosition = {
        x: event.clientX + 10,
        y: event.clientY + 10,
      };
      // èŽ·å–æç¤ºæ¡†çš„é¢„ä¼°å®½åº¦
      const tooltipWidth = 300
      const tooltipHeight = 400
      const offsetX = 15
      const offsetY = 15
      // è®¡ç®—提示框位置,优先显示在鼠标上方
      let x = event.clientX + offsetX
      let y = event.clientY - tooltipHeight - offsetY
      // å¦‚果上方空间不足,则显示在下方
      if (y < 10) {
        y = event.clientY + offsetY
      }
      // æ£€æŸ¥å³ä¾§è¾¹ç•Œ
      if (x + tooltipWidth > window.innerWidth) {
        x = event.clientX - tooltipWidth - offsetX
      }
      // ç¡®ä¿ä¸ä¼šè¶…出左边界和上边界
      x = Math.max(10, x)
      y = Math.max(10, y)
      this.tooltipPosition = { x, y }
    },
    hideTooltip() {
      this.showTooltipFlag = false;
      this.currentLocation = null;
      this.showTooltipFlag = false
      this.currentLocation = null
    },
    getStatusText(location) {
      // if (location.location_lock === 3) return "禁用";
      if (location.location_state === '0') return "空货位";
      if (location.location_state === '1') return "锁定";
      if (location.location_state === '3') return "有货锁定";
      if (location.location_state === '4') return "空闲锁定";
      if (location.location_state === '2') return "有货";
      if (location.location_state === '0') return '空货位'
      if (location.location_state === '1') return '锁定'
      if (location.location_state === '3') return '有货锁定'
      if (location.location_state === '4') return '空闲锁定'
      if (location.location_state === '2') return '有货'
      // if (location.location_state > 0 && location.location_state < 100)
      //   return "锁定";
      return "其他";
      return '其他'
    },
    getStatusClass(location) {
      if (location.location_state === '0') return 'status-empty'
      if (location.location_state === '1') return 'status-locked'
      if (location.location_state === '3') return 'status-locked-with-stock'
      if (location.location_state === '4') return 'status-locked-empty'
      if (location.location_state === '2') return 'status-with-stock'
      return 'status-other'
    },
    getcarType(carType) {
      if (carType == 1) return '白车身'
      if (carType == 2) return '彩车身'
      if (carType == 3) return '空滑橇'
    },
    getlockOrder(lockOrder) {
      if (lockOrder == 1) return '已锁车'
      if (lockOrder == 0) return '未拉动'
    },
    getstockStatus(stockStatus) {
      if (stockStatus == 1) return '已锁定'
      if (stockStatus == 0) return '未锁定'
    },
    gettaskStatus(taskStatus) {
      if (taskStatus == 1) return '任务中'
      if (taskStatus == 0) return '无任务'
    }
  },
  mounted() {
    var mainHeight = document.getElementById("vol-main");
    this.mian_height = mainHeight.offsetHeight - 40 + "px";
    var _this = this;
    var mainHeight = document.getElementById('vol-main')
    this.mian_height = mainHeight.offsetHeight - 40 + 'px'
    var _this = this
    //加载下拉选项
    this.http.get("/api/dt_AreaInfo/GetAreaInfo", {}, "查询中").then((x) => {
      console.log(x);
      _this.slectData = x;
    this.http.get('/api/dt_AreaInfo/GetAreaInfo', {}, '查询中').then((x) => {
      console.log(x)
      _this.slectData = x
      //加载第一个区域,第一排
      _this.Area.areaCode = _this.slectData[0].areaCode;
      _this.Area.areaCode = _this.slectData[0].areaCode
      //_this.scList = _this.slectData[0].tunnel;
    });
    })
  },
  components: { ElButton },
};
  components: { ElButton }
}
</script>
<style scoped>
@@ -330,23 +439,167 @@
  position: fixed;
  z-index: 9999;
  background-color: white;
  border: 1px solid #ddd;
  border-radius: 4px;
  padding: 10px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
  border: 1px solid #e4e7ed;
  border-radius: 8px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  pointer-events: none;
  max-width: 250px;
  max-width: 320px;
  min-width: 280px;
  overflow: hidden;
}
.location-tooltip p {
  margin: 5px 0;
.tooltip-content {
  display: flex;
  flex-direction: column;
}
.tooltip-header {
  padding: 12px 16px;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.tooltip-header h4 {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
}
.status-badge {
  padding: 4px 10px;
  border-radius: 12px;
  font-size: 12px;
  font-weight: 500;
  background-color: rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(4px);
}
.status-empty {
  background-color: rgba(144, 238, 144, 0.9);
}
.status-locked {
  background-color: rgba(43, 179, 213, 0.9);
}
.status-locked-with-stock {
  background-color: rgba(255, 165, 0, 0.9);
}
.status-locked-empty {
  background-color: rgba(255, 182, 193, 0.9);
}
.status-with-stock {
  background-color: rgba(255, 99, 71, 0.9);
}
.status-other {
  background-color: rgba(153, 153, 153, 0.9);
}
.tooltip-body {
  padding: 16px;
}
.info-section {
  margin-bottom: 16px;
}
.info-section:last-child {
  margin-bottom: 0;
}
.info-section h5 {
  margin: 0 0 10px 0;
  font-size: 13px;
  line-height: 1.4;
  color: #909399;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding-bottom: 6px;
  border-bottom: 1px solid #ebeef5;
}
.location-tooltip strong {
  display: inline-block;
  width: 70px;
  color: #666;
.info-row {
  display: flex;
  margin-bottom: 8px;
  align-items: center;
}
</style>
.info-row:last-child {
  margin-bottom: 0;
}
.info-row .label {
  flex-shrink: 0;
  width: 100px;
  color: #606266;
  font-size: 13px;
}
.info-row .value {
  flex: 1;
  color: #303133;
  font-size: 13px;
  word-break: break-all;
}
.info-row .value.disabled {
  color: #f56c6c;
  font-weight: 500;
  background-color: #fef0f0;
  padding: 2px 8px;
  border-radius: 4px;
}
.info-row .value.status-highlight {
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 4px;
}
.status-highlight.status-empty {
  color: #67c23a;
  background-color: #f0f9ff;
}
.status-highlight.status-locked {
  color: #409eff;
  background-color: #ecf5ff;
}
.status-highlight.status-locked-with-stock {
  color: #e6a23c;
  background-color: #fdf6ec;
}
.status-highlight.status-locked-empty {
  color: #f56c6c;
  background-color: #fef0f0;
}
.status-highlight.status-with-stock {
  color: #67c23a;
  background-color: #f0f9ff;
}
.status-highlight.status-other {
  color: #909399;
  background-color: #f4f4f5;
}
/* æ·»åŠ è¿‡æ¸¡åŠ¨ç”» */
.tooltip-fade-enter-active,
.tooltip-fade-leave-active {
  transition: opacity 0.2s, transform 0.2s;
}
.tooltip-fade-enter-from,
.tooltip-fade-leave-to {
  opacity: 0;
  transform: translateY(5px);
}
</style>
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/widesea_wms/taskinfo/Dt_Task.vue
@@ -57,7 +57,7 @@
        { field: 'roadway', title: '巷道', type: 'string', width: 110, align: 'left' },
        { field: 'taskType', title: '任务类型', type: 'int', width: 110, align: 'left', bind: { key: "TaskType", data: [] } },
        { field: 'taskState', title: '任务状态', type: 'int', width: 150, align: 'left', bind: { key: "TaskStatus", data: [] } },
        { field: 'carType', title: '车型', type: 'int', width: 150, align: 'left'},
        { field: 'carType', title: '车身类型', type: 'int', width: 150, align: 'left'},
        { field: 'sourceAddress', title: '起始位置', type: 'string', width: 110, align: 'left' },
        { field: 'targetAddress', title: '目标位置', type: 'string', width: 110, align: 'left' },
        { field: 'grade', title: '优先级', type: 'int', width: 60, align: 'left' },
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Core.Enums
{
    public enum StockChangeType
    {
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        Inbound,
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        Outbound,
        /// <summary>
        /// æ‰‹åŠ¨è°ƒæ•´
        /// </summary>
        [Description("手动调整")]
        ManualAdjust,
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.Basic
{
    public class MesLockDTO
    {
        public string pvi { get; set; }
        public string vehicleCharacteristic { get; set; }
        public string carBodyCharacteristic { get; set; }
        public int lockStatue { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs
ÎļþÃû´Ó ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Common/LocationAreaView/LocationView.cs ÐÞ¸Ä
@@ -3,14 +3,15 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Model.Models;
namespace WIDESEA_Common
namespace WIDESEA_DTO.Location
{
    public class LocationLayer
    {
        public int index { get; set; }
        /// <summary>
        /// 
@@ -45,5 +46,8 @@
        /// é”å®šçŠ¶æ€
        /// </summary>
        public string location_lock { get; set; }
        public VV_StockInfo stockInfo { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs
@@ -25,7 +25,7 @@
        public string PalletCode { get; set; }
        /// <summary>
        /// å··é“号
        /// å··é“机
        /// </summary>
        public string RoadWay { get; set; }
@@ -54,9 +54,24 @@
        /// </summary>
        public int Grade { get; set; }
        /// <summary>
        /// PVI码
        /// </summary>
        public string pvi { get; set; }
        /// <summary>
        /// è½¦èº«ç±»åž‹
        /// </summary>
        public int CarType { get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        public string RoadwayNo { get; set; }
        /// <summary>
        /// (下一位置)入库口
        /// </summary>
        public string NextAddress { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStoragIntegrationServices/WCS/IWCSService.cs
@@ -18,11 +18,18 @@
        WebResponseContent RequstCarBodyInfo(RequestTaskDto json);
        /// <summary>
        /// æ¶‚总提升机入库请求
        /// ç„Šæ¶‚/涂总提升机入库请求
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        WebResponseContent RequestInboundRoadWayNo(RequestTaskDto json);
        /// <summary>
        /// ç©ºæ»‘橇入库
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        WebResponseContent RequestEmptyInboundRoadWayNo(RequestTaskDto json);
        /// <summary>
        /// æ¶‚装直通总装
@@ -32,6 +39,13 @@
        WebResponseContent TZPassZZ(RequestTaskDto json);
        /// <summary>
        /// ç„Šè£…装直通涂装
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        WebResponseContent HZPassTZ(RequestTaskDto json);
        /// <summary>
        /// æ¶‚总精排点
        /// </summary>
        /// <param name="json"></param>
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IRecordRepository
{
    public interface IDt_PassPointRecordRepository : IRepository<Dt_PassPointRecord>
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IStorageBasicRepository
{
    public interface IStockQuantityChangeRecordRepository : IRepository<Dt_StockQuantityChangeRecord>
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_DTO;
using WIDESEA_IRecordRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IRecordService
{
    public interface IDt_PassPointRecordService : IService<Dt_PassPointRecord>
    {
        void AddPassPointRecord(PassPointInfo info, RequestTaskDto request);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_IRecordRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IStorageBasicService
{
    public interface IStockQuantityChangeRecordService : IService<Dt_StockQuantityChangeRecord>
    {
        void AddStockChangeRecord(VV_StockInfo stockInfo, StockChangeType changeType, int taskNum);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs
@@ -2,4 +2,7 @@
public interface IVV_MesLockInfoService : IService<VV_MesLockInfo>
{
    WebResponseContent GetMesLockInfo();
    WebResponseContent GetStockInfo(string PVI);
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs
@@ -5,4 +5,5 @@
    WebResponseContent stockLock(object[] keys);
    WebResponseContent stockUnLock(object[] keys);
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs
@@ -53,6 +53,13 @@
    public string? Roadway { get; set; }
    /// <summary>
    /// å¤‡  æ³¨:巷道号
    /// é»˜è®¤å€¼:
    ///</summary>
    [SugarColumn(ColumnName = "RoadwayNo", ColumnDescription = "巷道号")]
    public string RoadwayNo { get; set; }
    /// <summary>
    /// å¤‡  æ³¨:任务类型(100 å‡ºåº“;盘点出库 101; 102 åˆ†æ‹£å‡ºåº“;103 è´¨æ£€å‡ºåº“;200 å…¥åº“;盘点入库 201;分拣入库 202;质检入库 203;移库 300;库内移库 301;库外移库 302  ï¼‰
    /// é»˜è®¤å€¼:
    ///</summary>
@@ -124,7 +131,7 @@
    public string? ErrorMessage { get; set; }
    /// <summary>
    /// è½¦åž‹
    /// è½¦èº«ç±»åž‹  1-白 2-彩 3-空撬组
    ///</summary>
    [SugarColumn(ColumnName = "CarType", ColumnDescription = "车型")]
    public int CarType { get; set; }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/BasicInfo/Dt_RoadWay.cs
@@ -63,6 +63,5 @@
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = false, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    [SugarTable(nameof(Dt_PassPointRecord), "MES过点记录")]
    public class Dt_PassPointRecord : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "主键")]
        [ExporterHeader(DisplayName = "主键")]
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// PVI码
        /// </summary>
        [ImporterHeader(Name = "PVI码")]
        [ExporterHeader(DisplayName = "PVI码")]
        [SugarColumn(IsNullable = true, ColumnDescription = "PVI码")]
        public string PVI { get; set; }
        /// <summary>
        /// æ»‘橇号
        /// </summary>
        [ImporterHeader(Name = "滑橇号")]
        [ExporterHeader(DisplayName = "滑橇号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "滑橇号")]
        public string PalletCode { get; set; }
        [ImporterHeader(Name = "点位")]
        [ExporterHeader(DisplayName = "点位")]
        [SugarColumn(IsNullable = false, ColumnDescription = "点位")]
        public string Position { get; set; }
        [ImporterHeader(Name = "线号")]
        [ExporterHeader(DisplayName = "线号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "线号")]
        public string lineCode { get; set; }
        [ImporterHeader(Name = "线号")]
        [ExporterHeader(DisplayName = "线号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "线号")]
        public string Content { get; set; }
        [ImporterHeader(Name = "过点时间")]
        [ExporterHeader(DisplayName = "过点时间")]
        [SugarColumn(IsNullable = false, ColumnDescription = "过点时间")]
        public DateTime PassPointTime { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备注")]
        public string Remark { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare1 { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare2 { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare3 { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    [SugarTable(nameof(Dt_StockQuantityChangeRecord), "库存变动信息记录")]
    public class Dt_StockQuantityChangeRecord : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "主键")]
        [ExporterHeader(DisplayName = "主键")]
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æ‰€å±žå··é“
        /// </summary>
        [ImporterHeader(Name = "所属巷道")]
        [ExporterHeader(DisplayName = "所属巷道")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "所属巷道")]
        public string RoadwayNo { get; set; }
        /// <summary>
        /// è´§ä½ç¼–号
        /// </summary>
        [ImporterHeader(Name = "货位编号")]
        [ExporterHeader(DisplayName = "货位编号")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "货位编号")]
        public string LocationCode { get; set; }
        /// <summary>
        /// è½¦èº«ID
        /// </summary>
        [ImporterHeader(Name = "车身ID")]
        [ExporterHeader(DisplayName = "车身ID")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "车身ID")]
        public int carBodyID { get; set; }
        /// <summary>
        /// PVI码
        /// </summary>
        [ImporterHeader(Name = "PVI码")]
        [ExporterHeader(DisplayName = "PVI码")]
        [SugarColumn(IsNullable = true, ColumnDescription = "PVI码")]
        public string PVI { get; set; }
        /// <summary>
        /// æ»‘橇号
        /// </summary>
        [ImporterHeader(Name = "滑橇号")]
        [ExporterHeader(DisplayName = "滑橇号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "滑橇号")]
        public string PalletCode { get; set; }
        /// <summary>
        /// è½¦åž‹
        /// </summary>
        [ImporterHeader(Name = "车型")]
        [ExporterHeader(DisplayName = "车型")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "车型")]
        public string vehicleCharacteristic { get; set; }
        /// <summary>
        /// è½¦èº«ç±»åž‹  1-白 2-彩 3-空滑橇
        /// </summary>
        [ImporterHeader(Name = "车身类型")]
        [ExporterHeader(DisplayName = "车身类型")]
        [SugarColumn(IsNullable = true, ColumnDescription = "车身类型")]
        public int CarType { get; set; }
        /// <summary>
        /// è®¢å•类型
        /// </summary>
        [ImporterHeader(Name = "订单类型")]
        [ExporterHeader(DisplayName = "订单类型")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "订单类型")]
        public string workOrderType { get; set; }
        /// <summary>
        /// å¤©çª—特征
        /// </summary>
        [ImporterHeader(Name = "天窗特征")]
        [ExporterHeader(DisplayName = "天窗特征")]
        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "天窗特征")]
        public string skylightCharacteristic { get; set; }
        /// <summary>
        /// è½¦èº«é¢œè‰²
        /// </summary>
        [ImporterHeader(Name = "车身颜色")]
        [ExporterHeader(DisplayName = "车身颜色")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "车身颜色")]
        public string carBodyCharacteristic { get; set; }
        /// <summary>
        /// ç™½è½¦èº«ç‰©æ–™å·
        /// </summary>
        [ImporterHeader(Name = "白车身物料号")]
        [ExporterHeader(DisplayName = "白车身物料号")]
        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "白车身物料号")]
        public string biwMaterialCode { get; set; }
        /// <summary>
        /// å½©è½¦èº«ç‰©æ–™å·
        /// </summary>
        [ImporterHeader(Name = "彩车身物料号")]
        [ExporterHeader(DisplayName = "彩车身物料号")]
        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "彩车身物料号")]
        public string pbMaterial { get; set; }
        /// <summary>
        /// ç„Šè£…上线时间
        /// </summary>
        [ImporterHeader(Name = "焊装上线时间")]
        [ExporterHeader(DisplayName = "焊装上线时间")]
        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "焊装上线时间")]
        public DateTime? biwInPassTime { get; set; }
        /// <summary>
        /// ä¿ç•™çŠ¶æ€
        /// </summary>
        [ImporterHeader(Name = "保留状态")]
        [ExporterHeader(DisplayName = "保留状态")]
        [SugarColumn(IsNullable = true, ColumnDescription = "保留状态")]
        public int StayStatus { get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "库存Id")]
        public int StockId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "任务号")]
        public int? TaskNum { get; set; }
        /// <summary>
        /// å˜æ›´ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "变动类型(出库、入库、手动调整...)")]
        public int ChangeType { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备注")]
        public string Remark { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare1 { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare2 { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "备用")]
        public string Spare3 { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Stock/VV_StockInfo.cs
@@ -43,6 +43,7 @@
        [ExporterHeader(DisplayName = "车身ID")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "车身ID")]
        public int carBodyID { get; set; }
        /// <summary>
        /// PVI码
        /// </summary>
@@ -52,6 +53,14 @@
        public string PVI { get; set; }
        /// <summary>
        /// RFID
        /// </summary>
        [ImporterHeader(Name = "RFID")]
        [ExporterHeader(DisplayName = "RFID")]
        [SugarColumn(IsNullable = true, ColumnDescription = "RFID")]
        public string RFID { get; set; }
        /// <summary>
        /// æ»‘橇号
        /// </summary>
        [ImporterHeader(Name = "滑橇号")]
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_Model/Models/Inbound/Dt_CarBodyInfo_hty.cs
@@ -167,5 +167,11 @@
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "完成方式")]
        public int FinishType { get; set; }
        /// <summary>
        ///  æºID
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "完成方式")]
        public int sourceID { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs
@@ -6,6 +6,8 @@
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IBusinessesRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
using WIDESEA_IServices;
using WIDESEA_IStorageBasicRepository;
using WIDESEA_IStorageOutOrderRepository;
@@ -34,8 +36,10 @@
        private readonly IDt_PaintingOrderInfoRepository _paintingOrderInfoRepository;
        private readonly IVV_StockInfoRepository _VVStockInfoRepository;
        private readonly IDt_MESLockInfoRepository _MESLockInfoRepository;
        private readonly IDt_PassPointRecordRepository _passPointRecordRepository;
        private readonly IDt_PassPointRecordService _passPointRecordService;
        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyInfoRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository, IDt_PaintingOrderInfoRepository paintingOrderInfoRepository, IVV_StockInfoRepository VVStockInfoRepository, IDt_MESLockInfoRepository mESLockInfoRepository)
        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyInfoRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository, IDt_PaintingOrderInfoRepository paintingOrderInfoRepository, IVV_StockInfoRepository VVStockInfoRepository, IDt_MESLockInfoRepository mESLockInfoRepository,IDt_PassPointRecordRepository passPointRecordRepository, IDt_PassPointRecordService passPointRecordService)
        {
            _locationRepository = locationRepository;
            _taskRepository = taskRepository;
@@ -51,6 +55,8 @@
            _paintingOrderInfoRepository = paintingOrderInfoRepository;
            _VVStockInfoRepository = VVStockInfoRepository;
            _MESLockInfoRepository = mESLockInfoRepository;
            _passPointRecordRepository = passPointRecordRepository;
            _passPointRecordService = passPointRecordService;
        }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs
@@ -5,6 +5,8 @@
using WIDESEA_Core.Const;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_Model.Models;
using WIDESEA_RecordService;
using WIDESEA_StorageBasicRepository;
namespace WIDESEA_StoragIntegrationServices
@@ -54,6 +56,9 @@
                    pass_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                };
                //记录请求MES过点信息
                _passPointRecordService.AddPassPointRecord(passPoint, json);
                var MESrespon = HttpHelper.PostAsync(wmsIpAddress, passPoint.ToJson(), contentType, headers).Result;
                MesResponse responseContent = JsonConvert.DeserializeObject<MesResponse>(MESrespon.ToString());
@@ -64,7 +69,7 @@
                }
                LogFactory.GetLog("车身过点").Info(true, $"\r\r--------------------------------------");
                LogFactory.GetLog("车身过点").Info(true, $"工位号:{json.Position},RFID:{json.PVI},响应信息:{responseContent.ToJson}");
                LogFactory.GetLog("车身过点").Info(true, $"工位号:{json.Position},RFID:{json.PVI},响应信息:{MESrespon}");
                return content.OK();
            }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/bindWorkOrder.cs
@@ -41,7 +41,7 @@
                var carBodyInfo = _carBodyRepository.QueryFirst(x => x.RFID == rfid);
                //if (carBodyInfo == null) throw new Exception($"未找到PVI{rfid}的车身数据");
                if (carBodyInfo == null) throw new Exception($"未找到PVI{rfid}的车身数据");
                BindWorkOrder bindOrder = new BindWorkOrder()
                {
@@ -67,7 +67,7 @@
                BindWorkOrderRespon characterRespon = JsonConvert.DeserializeObject<BindWorkOrderRespon>(webResponse.Data.ToJson());
                _unitOfWorkManage.BeginTran();
                if (stationInfo.stationChildCode == "EL01RB")  //涂装精排点
                if (stationInfo.stationChildCode == "EL01RB")  //焊装-涂装提升机
                {
                    var paintingOrderInfo = _paintingOrderInfoRepository.QueryFirst(x => x.workOrderNo == characterRespon.workOrderNo);
@@ -79,7 +79,7 @@
                    carBodyInfo.carBodyCharacteristic = paintingOrderInfo.carBodyCharacteristic;
                    _carBodyRepository.UpdateData(carBodyInfo);
                }
                else if (stationInfo.stationChildCode == "EL01RB01")  //总装精排点
                else if (stationInfo.stationChildCode == "EL01RB01")  //涂装精排点
                {
                    var assemblyOrderInfo = _assemblyOrderInfoRepository.QueryFirst(x => x.workOrderNo == characterRespon.workOrderNo);
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/issuedCharacter.cs
@@ -53,6 +53,8 @@
                IssuedCharacterRespon characterRespon = JsonConvert.DeserializeObject<IssuedCharacterRespon>(webResponse.Data.ToJson());
                //_carBodyRepository.QueryFirst(x => x.PalletCode == palletCode);
                Dt_CarBodyInfo CarBody = new Dt_CarBodyInfo()
                {
                    biwInPassTime = Convert.ToDateTime(characterRespon.biwInPassTime),
@@ -75,7 +77,6 @@
                LogFactory.GetLog("请求焊装特征信息").Info(true, $"\r\r--------------------------------------");
                LogFactory.GetLog("请求焊装特征信息").Info(true, $"工位号:{stationNo},RFID:{rfidPrint},响应信息:{webResponse.ToJson()}");
                return content.OK("获取焊装白车身信息成功");
            }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/lock.cs
@@ -27,7 +27,7 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                LogFactory.GetLog("锁车上报").Info(true, $"\r\r--------------------------------------");
                LogFactory.GetLog("锁车上报").Info(true, jsondata.ToJsonString());
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/pullLock.cs
@@ -46,7 +46,7 @@
                    {
                        // carinfo = _palletStockInfoRepository.QueryFirst(x => x.PVI == item.pvi && x.pbMaterial == item.pbMaterial);
                        //carbodyinfo = _carBodyRepository.QueryFirst(x => x.pbMaterial == item.pbMaterial && x.PVI == item.pvi);
                        OutStock = _VVStockInfoRepository.QueryFirst(x => x.PVI == item.pvi && x.pbMaterial == item.pbMaterial && x.StockStatus == 0 && x.LockOrder == 0 && x.StayStatus == 0);
                        OutStock = _VVStockInfoRepository.QueryFirst(x => x.PVI == item.pvi /*&& x.pbMaterial == item.pbMaterial*/ && x.StockStatus == 0 && x.LockOrder == 0 && x.StayStatus == 0);
                        if (OutStock == null)
                        {
                            throw new Exception($"未找到指定PVI车身信息{item.pvi}");
@@ -131,12 +131,15 @@
                    //{
                    stockInfo.StockStatus = 0;
                    stockInfo.LockOrder = 1;
                    carBody.BodyStatus = 1;
                    //carBody.BodyStatus = 1;
                    assemblyOrderInfo.pvi = carBody.PVI;
                    carBody.assemblyWorrkNo = item.workOrderNo;
                    _MESLockInfoRepository.AddData(mESLockInfo);
                    _assemblyOrderInfoRepository.UpdateData(assemblyOrderInfo);
                    //_taskRepository.AddData(task);
                    _palletStockInfoRepository.UpdateData(stockInfo);
                    //_carBodyRepository.UpdateData(carbodyinfo);
                    _carBodyRepository.UpdateData(carBody);
                    _unitOfWorkManage.CommitTran();
                    //}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/HZPassTZ.cs
@@ -21,7 +21,7 @@
                //if (carInfo != null) throw new Exception($"涂装直通总装失败:PVI{json.Rfid}已存在。");
                var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position);
                if (station == null) throw new Exception("站台未找到");
                if (station == null) throw new Exception($"{json.Position}工位站台未找到");
                WebResponseContent webResponse = _mesService.bindWorkOrder(json.Position, json.PVI);
                if (!webResponse.Status) throw new Exception($"焊涂绑定失败:{webResponse.msg}");
@@ -34,7 +34,8 @@
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
                throw new Exception($"焊装提升机异常:{ex.Message}");
                //content.Error(ex.Message);
            }
            return content;
        }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/RequestEmptyInboundRoadWayNo.cs
@@ -11,6 +11,7 @@
using WIDESEA_DTO;
using WIDESEA_Model.Models;
using WIDESEA_Repository;
using WIDESEA_StorageBasicRepository;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
@@ -28,18 +29,30 @@
            WebResponseContent response = new WebResponseContent();
            try
            {
                //如任务已存在则 è¿”回此任务
                var checkTask = _taskRepository.QueryFirst(x => x.PalletCode == json.PalletCode && x.PVI == json.PVI);
                if (checkTask != null)
                {
                    return response.OK("申请入库成功", data: checkTask);
                }
                var carInfo = _carBodyInfoRepository.QueryFirst(x => x.RFID == json.PVI && x.PalletCode == json.PalletCode);
                if (carInfo == null) throw new Exception("未知空撬信息,无法入库");
                //{
                //    Dt_CarBodyInfo _CarBodyInfo = new Dt_CarBodyInfo  //测试
                //    {
                //        PVI = "J25000660",
                //        RFID = json.PVI,
                //        BodyStatus = 0,
                //        CarType = 1,
                //    };
                //}
                if (carInfo == null)
                {
                    Dt_CarBodyInfo dt_CarBodyInfo = new Dt_CarBodyInfo
                    {
                        PalletCode = json.PalletCode,
                        CarType = 3,
                        PVI = json.PalletCode,
                        RFID = json.PalletCode,
                        BodyStatus = 0
                    };
                    _carBodyInfoRepository.AddData(dt_CarBodyInfo);
                    carInfo = _carBodyInfoRepository.QueryFirst(x => x.RFID == json.PVI && x.PalletCode == json.PalletCode);
                }
                var maxGroup = _locationRepository.QueryData(x => x.LocationType == 3 && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable)
                                .GroupBy(x => x.RoadwayNo)
@@ -77,13 +90,11 @@
                    TaskNum = _taskRepository.GetTaskNo().Result,
                    Creater = "Systeam",
                    PVI = json.PVI,
                    CarType = carInfo.CarType
                };
                _unitOfWorkManage.BeginTran();
                _taskRepository.AddData(newtask);
                //location.LocationStatus = (int)LocationEnum.InStockDisable;
                //_locationRepository.UpdateData(location);
                _unitOfWorkManage.CommitTran();
                response.OK("空撬申请入库成功", data: newtask);
@@ -92,7 +103,7 @@
            }
            catch (Exception ex)
            {
                response.Error($"请求巷道号失败:{ex.Message}");
                response.Error($"空撬请求巷道号失败:{ex.Message}");
            }
            return response;
        }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/RequestInboundRoadWayNo.cs
@@ -28,6 +28,13 @@
            WebResponseContent response = new WebResponseContent();
            try
            {
                //如任务已存在则 è¿”回此任务
                var checkTask = _taskRepository.QueryFirst(x => x.PalletCode == json.PalletCode && x.PVI == json.PVI);
                if (checkTask != null)
                {
                    return response.OK("申请入库成功", data: checkTask);
                }
                //屏蔽MES
                if (json.Position == "EL01RB")
                {
@@ -63,15 +70,19 @@
                    roadWays = _roadWayRepository.QueryData(x => x.WirteCar == 2);
                }
                //var locations = _locationRepository.QueryData(x => (x.LocationType == carInfo.CarType || x.LocationType == 3) && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable);
                var maxGroup = _locationRepository.QueryData(x => (x.LocationType == carInfo.CarType || x.LocationType == 3) && x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == (int)EnableEnum.Enable)
                                .GroupBy(x => x.RoadwayNo)
                                .OrderByDescending(g => g.Count()) // æ ¹æ®æ¯ä¸ªç»„的元素数量排序
                                .ToList(); // å–出数量最多的组
                if (maxGroup.Count == 0) return response.Error(12, "无可用库位");
                Dictionary<string, int> result = new Dictionary<string, int>();
                foreach (var item in maxGroup)
                {
                    var number = _taskRepository.QueryData(x => x.TargetAddress == item.Key).Count();
                    var number = _taskRepository.QueryData(x => x.RoadwayNo == item.Key && x.CarType == carInfo.CarType && (x.TaskType == (int)TaskInboundTypeEnum.Inbound || x.TaskType == (int)TaskInboundTypeEnum.InTray)).Count();
                    if (item.Count() - number <= 0)
                    {
                        continue;
@@ -87,7 +98,7 @@
                if (stationList.Count > 1)
                {
                    var task = _taskRepository.QueryData(x => x.Roadway == stationList.FirstOrDefault().Roadway).OrderByDescending(x => x.CreateDate).FirstOrDefault();
                    var task = _taskRepository.QueryData(x => x.Roadway == stationList.FirstOrDefault().Roadway && x.TaskType == (int)TaskInboundTypeEnum.Inbound).OrderByDescending(x => x.CreateDate).FirstOrDefault();
                    if (task != null) station = stationList.Where(x => x.stationChildCode != task.NextAddress && x.stationChildCode != task.CurrentAddress).FirstOrDefault();
                    else station = stationList.FirstOrDefault();
                }
@@ -118,7 +129,8 @@
                    TaskNum = _taskRepository.GetTaskNo().Result,
                    Creater = "Systeam",
                    PVI = json.PVI,
                    CarType = carInfo.CarType
                    CarType = carInfo.CarType,
                    RoadwayNo = station.RoadwayNo
                };
                _unitOfWorkManage.BeginTran();
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StoragIntegrationServices/WCS/Partial/TZPassZZ.cs
@@ -49,7 +49,8 @@
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
                throw new Exception($"涂装提升机异常:{ex.Message}");
                //content.Error(ex.Message);
            }
            return content;
        }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_RecordRepository
{
    public class Dt_PassPointRecordRepository : RepositoryBase<Dt_PassPointRecord>, IDt_PassPointRecordRepository
    {
        public Dt_PassPointRecordRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_StorageBasicRepository
{
    public class StockQuantityChangeRecordRepository : RepositoryBase<Dt_StockQuantityChangeRecord>, IStockQuantityChangeRecordRepository
    {
        public StockQuantityChangeRecordRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
using WIDESEA_Model.Models;
using WIDESEA_RecordRepository;
namespace WIDESEA_RecordService
{
    public partial class Dt_PassPointRecordService : ServiceBase<Dt_PassPointRecord, IDt_PassPointRecordRepository>, IDt_PassPointRecordService
    {
        private readonly IMapper _mapper;
        public Dt_PassPointRecordService(IDt_PassPointRecordRepository BaseDal, IMapper mapper) : base(BaseDal)
        {
            _mapper = mapper;
        }
        public void AddPassPointRecord(PassPointInfo info, RequestTaskDto json)
        {
            try
            {
                Dt_PassPointRecord record = new Dt_PassPointRecord()
                {
                    Content = info.Serialize(),
                    Position = json.Position,
                    PalletCode = json.PalletCode,
                    PVI = json.PVI,
                    lineCode = info.line_code,
                    PassPointTime = DateTime.Now
                };
                BaseDal.AddData(record);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs
@@ -9,6 +9,7 @@
using WIDESEA_Core;
using WIDESEA_Core.HttpContextUser;
using WIDESEA_DTO;
using WIDESEA_DTO.Location;
using WIDESEA_Model.Models;
namespace WIDESEA_StorageBasicService;
@@ -26,6 +27,7 @@
    private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
    private readonly IMapper _mapper;
    private readonly IDt_PalletStockInfoRepository _palletStockInfoRepository;
    private readonly IVV_StockInfoRepository _stockrepository;
    public LocationInfoService(ILocationInfoRepository BaseDal,
                                    IUnitOfWorkManage unitOfWorkManage,
@@ -37,7 +39,8 @@
                                    IStockInfoDetailRepository stockInfoDetailRepository,
                                    IMapper mapper,
                                    IDt_TaskService taskService,
                                    IDt_PalletStockInfoRepository palletStockInfoRepository) : base(BaseDal)
                                    IDt_PalletStockInfoRepository palletStockInfoRepository,
                                    IVV_StockInfoRepository stockrepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _taskRepository = taskRepository;
@@ -49,6 +52,7 @@
        _mapper = mapper;
        _taskService = taskService;
        _palletStockInfoRepository = palletStockInfoRepository;
        _stockrepository = stockrepository;
    }
@@ -263,6 +267,8 @@
    {
        var data = BaseDal.QueryData(x => x.AreaId == Convert.ToInt32(area.areaCode));
        List<VV_StockInfo> stockInfos = _stockrepository.QueryData(x => true);
        List<LocationLayer> layers = new List<LocationLayer>();
        foreach (var layer in data.GroupBy(t => t.Layer))
        {
@@ -273,6 +279,8 @@
                var cols = new List<LocationCol>();
                foreach (var data_col in data_row)
                {
                    var stock = stockInfos.FirstOrDefault(x => x.LocationCode == data_col.LocationCode);
                    cols.Add(new LocationCol()
                    {
                        //列
@@ -280,6 +288,7 @@
                        locationCode = data_col.LocationCode,
                        location_state = data_col.LocationStatus.ToString(),
                        location_lock = data_col.EnalbeStatus.ToString(),
                        stockInfo = stock
                    });
                }
                cols = cols.OrderBy(t => t.index).ToList();
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
using WIDESEA_Model.Models;
namespace WIDESEA_StorageBasicService
{
    public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IStockQuantityChangeRecordRepository>, IStockQuantityChangeRecordService
    {
        private readonly IMapper _mapper;
        public StockQuantityChangeRecordService(IStockQuantityChangeRecordRepository BaseDal, IMapper mapper) : base(BaseDal)
        {
            _mapper = mapper;
        }
        public void AddStockChangeRecord(VV_StockInfo stockInfo,  StockChangeType changeType,int taskNum)
        {
            try
            {
                Dt_StockQuantityChangeRecord stockQuantityChangeRecords = new Dt_StockQuantityChangeRecord();
                stockQuantityChangeRecords = _mapper.Map<Dt_StockQuantityChangeRecord>(stockInfo);
                stockQuantityChangeRecords.TaskNum = taskNum;
                stockQuantityChangeRecords.ChangeType = Convert.ToInt32(changeType);
                BaseDal.AddData(stockQuantityChangeRecords);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs
@@ -6,13 +6,67 @@
using System.Drawing.Printing;
using System.Linq.Expressions;
using WIDESEA_Core;
using WIDESEA_DTO.Basic;
namespace WIDESEA_StorageBasicService;
public class VV_MesLockInfoService : ServiceBase<VV_MesLockInfo, IVV_MesLockInfoRepository>, IVV_MesLockInfoService
{
    public VV_MesLockInfoService(IVV_MesLockInfoRepository BaseDal) : base(BaseDal)
    private readonly IVV_StockInfoRepository _stockInfoRepository;
    public VV_MesLockInfoService(IVV_MesLockInfoRepository BaseDal, IVV_StockInfoRepository stockInfoRepository) : base(BaseDal)
    {
        _stockInfoRepository = stockInfoRepository;
    }
    public WebResponseContent GetMesLockInfo()
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            List<VV_MesLockInfo> mesLockInfos = BaseDal.QueryData(x => x.LockStatue == 1 || x.LockStatue == 0).OrderBy(x => x.sequenceNo).ToList();
            List<VV_StockInfo> stockInfos = _stockInfoRepository.QueryData(x => x.CarType == 2).OrderBy(x => x.CreateDate).Take(50).ToList();
            List<MesLockDTO> mesLockDTOs = new List<MesLockDTO>();
            mesLockInfos.ForEach(x =>
            {
                mesLockDTOs.Add(new MesLockDTO
                {
                    lockStatue = x.LockStatue,
                    pvi = x.PVI,
                    vehicleCharacteristic = x.vehicleCharacteristic,
                    carBodyCharacteristic = x.carBodyCharacteristic
                });
            });
            stockInfos.ForEach(x =>
            {
                mesLockDTOs.Add(new MesLockDTO
                {
                    lockStatue = 2,
                    pvi = x.PVI,
                    vehicleCharacteristic = x.vehicleCharacteristic,
                    carBodyCharacteristic = x.carBodyCharacteristic
                });
            });
            return content.OK(data: mesLockDTOs);
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
    public WebResponseContent GetStockInfo(string PVI)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            VV_StockInfo stockInfos = _stockInfoRepository.QueryFirst(x => x.PVI == PVI);
            return content.OK(data: stockInfos);
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs
@@ -6,15 +6,18 @@
using System.Drawing.Printing;
using System.Linq.Expressions;
using WIDESEA_Core;
using WIDESEA_IRecordService;
namespace WIDESEA_StorageBasicService;
public class VV_StockInfoService : ServiceBase<VV_StockInfo, IVV_StockInfoRepository>, IVV_StockInfoService
{
    private readonly IDt_PalletStockInfoRepository _repository;
    public VV_StockInfoService(IVV_StockInfoRepository BaseDal, IDt_PalletStockInfoRepository repository) : base(BaseDal)
    private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecord;
    public VV_StockInfoService(IVV_StockInfoRepository BaseDal, IDt_PalletStockInfoRepository repository, IStockQuantityChangeRecordService stockQuantityChangeRecord) : base(BaseDal)
    {
        _repository = repository;
        _stockQuantityChangeRecord = stockQuantityChangeRecord;
    }
    public WebResponseContent stockLock(object[] keys)
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/BackgroundJob.cs
@@ -8,6 +8,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Const;
using WIDESEA_DTO;
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEAWCS_BasicInfoRepository;
@@ -125,6 +126,7 @@
                    CreateDate = DateTime.Now,
                    TaskId = 0,
                    CarType = stock.CarType,
                    RoadwayNo = stock.RoadwayNo,
                };
                // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/QuartzJobMildd.cs
@@ -41,7 +41,7 @@
                         AssemblyName = "WIDESEA_StorageTaskServices",
                         ClassName = "WhiteCarAutoOutJob",
                         CreateTime = DateTime.Now,
                         IntervalSecond = 15,
                         IntervalSecond = 60,
                         IsDeleted = false,
                         IsStart = false,
                         JobGroup = "AutoTask",
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/AutoTask/WhiteCarAutoOutJob.cs
@@ -109,6 +109,7 @@
                    CreateDate = DateTime.Now,
                    TaskId = 0,
                    CarType = stock.CarType,
                    RoadwayNo = stock.RoadwayNo
                };
                // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -39,6 +39,7 @@
    private readonly IDt_BDCConfigurationService _bdcConfigurationService;
    private readonly IDt_RoadWayRepository _roadWayRepository;
    private readonly IDt_RoadWayInfoRepository _roadWayInfoRepository;
    private readonly IDt_CarBodyInfo_htyRepository _carBodyInfo_HtyRepository;
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
@@ -48,7 +49,7 @@
                                ITaskExecuteDetailRepository taskExecuteDetailRepository,
                                ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository,
                                IDt_StationManagerRepository stationManagerRepository,
                                ISys_ConfigService configService, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_PalletStockInfo_htyRepository palletStockInfo_HtyRepository, IDt_CarBodyInfoRepository carBodyRepository, IDt_BDCConfigurationRepository bdcConfigurationRepository, IDt_BDCConfigurationService bDCConfigurationService, IDt_RoadWayRepository roadWayRepository, IDt_RoadWayInfoRepository roadWayInfoRepository) : base(BaseDal)
                                ISys_ConfigService configService, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_PalletStockInfo_htyRepository palletStockInfo_HtyRepository, IDt_CarBodyInfoRepository carBodyRepository, IDt_BDCConfigurationRepository bdcConfigurationRepository, IDt_BDCConfigurationService bDCConfigurationService, IDt_RoadWayRepository roadWayRepository, IDt_RoadWayInfoRepository roadWayInfoRepository, IDt_CarBodyInfo_htyRepository carBodyInfo_HtyRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
@@ -66,6 +67,7 @@
        _bdcConfigurationService = bDCConfigurationService;
        _roadWayRepository = roadWayRepository;
        _roadWayInfoRepository = roadWayInfoRepository;
        _carBodyInfo_HtyRepository = carBodyInfo_HtyRepository;
    }
    #region å¤–部接口方法
@@ -157,25 +159,26 @@
            stockInfo_Hty.FinishTime = DateTime.Now;
            stockInfo_Hty.OperateType = (int)OperateTypeEnum.自动完成;
            var boxinfo = _carBodyRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
            var carInfo = _carBodyRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
            carInfo.BodyStatus = 2;
            // äº‹åŠ¡å¤„ç†
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                var isLocationUpdate = await _locationRepository.UpdateDataAsync(loc);                      //更新库位
                var isPalletHty = await _palletStockInfo_HtyRepository.AddDataAsync(stockInfo_Hty);         //添加历史库存记录
                var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId);                       //删除任务
                //await BaseDal.UpdateDataAsync(task);                                                        //取消删除任务,改为完成状态;并WMS界面由人工确认完成
                var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;                        //加入历史任务
                var isDelete = await _palletStockInfoRepository.DeleteDataAsync(stock);                     //删除库存
                //await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);                                  //删除库存明细
                //if (boxinfo != null)
                //{
                //    var isDeleteBoxing = await _boxingInfoRepository.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxinfo.Id)
                //                         .Include(x => x.BoxingInfoDetails)
                //                         .ExecuteCommandAsync();                                           //删除组盘
                //}
                if (task.CarType != 2)//非彩车身出库后 æ¸…除组盘数据
                {
                    //删除组盘
                    Dt_CarBodyInfo_hty carInfo_Hty = carInfo.Adapt<Dt_CarBodyInfo_hty>();
                    carInfo_Hty.FinishTime = DateTime.Now;
                    carInfo_Hty.FinishType = (int)OperateTypeEnum.自动完成;
                    carInfo_Hty.sourceID = carInfo.Id;
                    await _carBodyInfo_HtyRepository.AddDataAsync(carInfo_Hty);
                    await _carBodyRepository.DeleteDataAsync(carInfo);
                }
            });
            return content.OK("任务完成成功", task.Remark);
@@ -241,6 +244,7 @@
                return await CompleteInboundTaskAsync(task);
            case (int)TaskOutboundTypeEnum.Outbound:
            case (int)TaskOutboundTypeEnum.OutTray:
                LogFactory.GetLog("任务完成").InfoFormat(true, "出库任务", "");
                return await CompleteStackTaskAsync(task);
            default:
@@ -335,7 +339,7 @@
        try
        {
            string palletCode = saveModel.MainData["palletCode"].ToString();
            string station = saveModel.MainData["station"].ToString();
            //string station = saveModel.MainData["station"].ToString();
            var barcode = JsonConvert.DeserializeObject<List<string>>(saveModel.MainData["palletCode"].ToString());
@@ -351,7 +355,7 @@
                    return content.Error("未查询到对应的库存信息");
                }
                if (stockInfo.StockStatus != 0) return content.Error($"指定失败:托盘{item}当前状态不允许指定出库");
                if (stockInfo.StockStatus != 0) return content.Error($"指定失败:库存滑橇{item}已锁定不允许指定出库");
                stockInfo.StockStatus = 1;
@@ -399,19 +403,17 @@
                //}
                //var stationInfo = stationInfos.FirstOrDefault();
                // åˆ›å»ºå¹¶æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                task = new Dt_Task
                {
                    Grade = 1,
                    Roadway = Outstation.Roadway,
                    TargetAddress = "RB043",
                    TargetAddress = carBody.CarType == 2 ? "RB043" : Outstation.stationChildCode,
                    Dispatchertime = DateTime.Now,
                    NextAddress = Outstation.stationChildCode,
                    OrderNo = null,
                    PalletCode = carBody.PalletCode,
                    PVI = carBody.PVI,
                    PVI = carBody.RFID,
                    SourceAddress = stockInfo.LocationCode,
                    CurrentAddress = stockInfo.LocationCode,
                    TaskState = (int)TaskOutStatusEnum.OutNew,
@@ -420,6 +422,8 @@
                    Creater = "System",
                    CreateDate = DateTime.Now,
                    TaskId = 0,
                    CarType = carBody.CarType,
                    RoadwayNo = stockInfo.RoadwayNo
                };
                // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
@@ -431,7 +435,6 @@
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var tasks = new List<WMSTaskDTO>() { taskDTO };
                // å‘送任务请求到WMS
@@ -463,7 +466,6 @@
    }
    #endregion æŒ‡å®šä»»åŠ¡å‡ºåº“
    /// <summary>
    /// åˆ›å»ºä»»åŠ¡DTO
    /// </summary>
@@ -481,7 +483,8 @@
            Id = 0,
            TaskType = task.TaskType,
            pvi = task.PVI,
            NextAddress = task.NextAddress
            NextAddress = task.NextAddress,
            CarType = task.CarType
        };
    }
@@ -787,8 +790,7 @@
            {
                // åˆ›å»ºWebResponseContent对象
                var content = new WebResponseContent();
                var carInfo = _carBodyRepository.QueryFirst(x => x.PalletCode == task.PalletCode );
                var carInfo = _carBodyRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
                var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position);
                // èŽ·å–åº“ä½;
                var location = RequestLocation(stationInfo.RoadwayNo, carInfo.CarType);
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -157,17 +157,16 @@
        DtLocationInfo locationinfo = new DtLocationInfo();
        if (carType == 1 || carType == 3)
        {
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Column).ThenBy(x => x.Layer).ThenBy(x => x.Row).FirstOrDefault();
        }
        else if (carType == 2)
        {
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Layer).ThenByDescending(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
            locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderByDescending(x => x.Column).ThenBy(x => x.Layer).ThenBy(x => x.Row).FirstOrDefault();
        }
        //else if (carType == 3)
        //{
        //    locationinfo = dtLocationInfos.Where(x => x.LocationStatus == (int)LocationEnum.Free && x.EnalbeStatus == 1).OrderBy(x => x.Column).ThenBy(x => x.Row).ThenBy(x => x.Layer).FirstOrDefault();
        //}
        return locationinfo;
    }
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer.sln
@@ -74,9 +74,9 @@
        .editorconfig = .editorconfig
    EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEA_StoragIntegrationServices", "WIDESEA_StoragIntegrationServices\WIDESEA_StoragIntegrationServices.csproj", "{55326F38-372A-4606-B7FB-8C01BBAEC4FC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_StoragIntegrationServices", "WIDESEA_StoragIntegrationServices\WIDESEA_StoragIntegrationServices.csproj", "{55326F38-372A-4606-B7FB-8C01BBAEC4FC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEA_IStoragIntegrationServices", "WIDESEA_IStoragIntegrationServices\WIDESEA_IStoragIntegrationServices.csproj", "{94D572FA-810E-4897-B673-AF988FD4019E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEA_IStoragIntegrationServices", "WIDESEA_IStoragIntegrationServices\WIDESEA_IStoragIntegrationServices.csproj", "{94D572FA-810E-4897-B673-AF988FD4019E}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -465,6 +465,7 @@
        {986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1} = {A73C1AFF-FF92-4825-B607-2E908077EBA4}
        {4BDE58B2-5B2E-480B-932F-D63C2A7D557C} = {8498AA9D-CDC4-4FD2-81AE-DE6AD78F75ED}
        {9912BD12-4CF7-4A91-8203-47C9C125004C} = {8498AA9D-CDC4-4FD2-81AE-DE6AD78F75ED}
        {9BA96018-EF8A-4D84-8E72-DA697FA5EAF8} = {8498AA9D-CDC4-4FD2-81AE-DE6AD78F75ED}
        {55326F38-372A-4606-B7FB-8C01BBAEC4FC} = {8498AA9D-CDC4-4FD2-81AE-DE6AD78F75ED}
        {94D572FA-810E-4897-B673-AF988FD4019E} = {A73C1AFF-FF92-4825-B607-2E908077EBA4}
    EndGlobalSection
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEA_BusinessServices;
using WIDESEA_Core.BaseController;
using WIDESEA_IBusinessServices;
using WIDESEA_IRecordService;
using WIDESEA_Model.Models;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_WMSServer.Controllers
{
    [Route("api/Dt_PassPointRecord")]
    [ApiController]
    public class Dt_PassPointRecordController : ApiBaseController<IDt_PassPointRecordService, Dt_PassPointRecord>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Dt_PassPointRecordController(IDt_PassPointRecordService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEA_BusinessServices;
using WIDESEA_Core.BaseController;
using WIDESEA_IBusinessServices;
using WIDESEA_IRecordService;
using WIDESEA_Model.Models;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_WMSServer.Controllers
{
    [Route("api/StockQuantityChangeRecord")]
    [ApiController]
    public class Dt_StockQuantityChangeRecordController : ApiBaseController<IStockQuantityChangeRecordService, Dt_PassPointRecord>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Dt_StockQuantityChangeRecordController(IStockQuantityChangeRecordService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs
@@ -11,4 +11,16 @@
    {
    }
    [HttpGet,HttpPost,Route("GetMesLockInfo"),AllowAnonymous]
    public WebResponseContent GetMesLockInfo()
    {
        return Service.GetMesLockInfo();
    }
    [HttpGet, HttpPost, Route("GetStockInfo"), AllowAnonymous]
    public WebResponseContent GetStockInfo(string PVI)
    {
        return Service.GetStockInfo(PVI);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs
@@ -31,5 +31,4 @@
    {
        return Service.stockUnLock(keys);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Controllers/WCS/WCSController.cs
@@ -43,6 +43,17 @@
    }
    /// <summary>
    /// è¯·æ±‚入库巷道
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost, Route("RequestEmptyInboundRoadWayNo"), AllowAnonymous]
    public WebResponseContent RequestEmptyInboundRoadWayNo([FromBody] RequestTaskDto input)
    {
        return _WCSService.RequestEmptyInboundRoadWayNo(input);
    }
    /// <summary>
    /// æ¶‚装直通总装(临时方案)
    /// </summary>
    /// <param name="input"></param>
@@ -54,6 +65,17 @@
    }
    /// <summary>
    /// ç„Šè£…直通涂装(临时方案)
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost, Route("HZPassTZ"), AllowAnonymous]
    public WebResponseContent HZPassTZ([FromBody] RequestTaskDto input)
    {
        return _WCSService.HZPassTZ(input);
    }
    /// <summary>
    /// æ€»è£…精排点
    /// </summary>
    /// <param name="input"></param>
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -21,6 +21,8 @@
            CreateMap<RegistrationDTO, Sys_CompanyRegistration>();
            CreateMap<Dt_OutOrderAndStock, Dt_OutOrderAndStock_Hty>();
            CreateMap<Dt_Task, Dt_Task_Hty>();
            CreateMap<VV_StockInfo, Dt_StockQuantityChangeRecord>()
                .ForMember(a => a.StockId, b => b.MapFrom(b => b.Id));
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs
@@ -12,5 +12,4 @@
global using WIDESEA_Model.Models.System;
global using WIDESEA_Core.Authorization;
global using WIDESEA_Core.Utilities;
global using WIDESEA_Model;
//global using WIDESEA_StorageBasicServices;
global using WIDESEA_Model;