1
wangxinhui
2025-06-12 e7be74e711076896e7e841b54691daa95067c567
1
已修改17个文件
已添加9个文件
449 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1698ae63-4bb9-42cb-9eaf-dd8d45ad01c4.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3a1eae50-a889-44c4-9166-c889690bbbc8.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/96129156-96dd-45ed-b9d7-7265981a5200.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d796ed71-56e2-4bff-9e27-1a5715a7a17e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/StackerCraneJob_GM.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/AGV_ZHExtend.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/AGV_ZHJob.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1aa445a3-8c03-42e2-8c1a-1a0360d417ba.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8bae546c-39e9-428b-8290-97d10d47c63c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/99556534-0033-4f9b-a223-ea76f4271439.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ebfc3963-9e49-4674-a4bd-119fd8ccb8b4.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/SolderMaskModel.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1698ae63-4bb9-42cb-9eaf-dd8d45ad01c4.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3a1eae50-a889-44c4-9166-c889690bbbc8.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/96129156-96dd-45ed-b9d7-7265981a5200.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d796ed71-56e2-4bff-9e27-1a5715a7a17e.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs
@@ -41,7 +41,7 @@
        /// <summary>
        /// ZHAGV任务发送
        /// </summary>
        [Description("PPAGV任务发送")]
        [Description("ZHAGV任务发送")]
        Agv_ZHSendTask,
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -72,6 +72,28 @@
        [Description("成品MES提库")]
        OutMesRworkProduct = 250,
        /// <summary>
        /// é˜²ç„Šå‰æ´¾å·¥å°ä»¶
        /// </summary>
        [Description("防焊前派工小件")]
        MaskOutNoticeSmall = 260,
        /// <summary>
        /// é˜²ç„Šå‰æ´¾å·¥å¤§ä»¶
        /// </summary>
        [Description("防焊前派工大件")]
        MaskOutNoticeLarge = 265,
        /// <summary>
        /// é˜²ç„Šåˆ°çº¿è¾¹å°ä»¶
        /// </summary>
        [Description("防焊到线边小件")]
        MaskOutSmall = 270,
        /// <summary>
        /// é˜²ç„Šåˆ°çº¿è¾¹å¤§ä»¶
        /// </summary>
        [Description("防焊到线边大件")]
        MaskOutLarge = 275,
        /// <summary>
        /// é‡‡è´­å…¥åº“
        /// </summary>
        [Description("采购入库")]
@@ -156,7 +178,16 @@
        /// </summary>
        [Description("成品空框回库")]
        EmptyProductBack = 630,
        /// <summary>
        /// é˜»ç„Šå…¥åº“小件
        /// </summary>
        [Description("阻焊入库小件")]
        InZHProductSmall = 640,
        /// <summary>
        /// é˜»ç„Šå…¥åº“大件
        /// </summary>
        [Description("阻焊入库大件")]
        InZHProductLarge = 645,
        /// <summary>
        /// å··é“内移库
        /// </summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -363,7 +363,14 @@
                            }
                            task.NextAddress = stationManger?.AGVStationCode ?? "";
                            task.DeviceCode = stationManger?.Remark ?? "";
                            task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                            if (task.Roadway != "SC01_ZH")
                            {
                                task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
                            }
                            else
                            {
                                task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                            }
                        }
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸ÉĤ²Ö/StackerCraneJob_GM.cs
@@ -315,7 +315,7 @@
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode);
            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x =>( x.StationCode == task.NextAddress || x.StackerCraneStationCode==task.NextAddress )&& x.StackerCraneCode == task.DeviceCode);
            if (stationManger != null)
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/×躸²Ö/AGV_ZHExtend.cs
@@ -16,46 +16,64 @@
{
    public partial class AGV_ZHJob
    {
        /// <summary>
        /// ä¸‹å‘任务
        /// </summary>
        public void SendAGVTask()
        {
            try
            {
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && nameof(AGV_PPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                foreach (var task in newTasks)
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt() && !string.IsNullOrEmpty(x.DeviceCode) && nameof(AGV_ZHJob).Contains(x.DeviceCode)).OrderByDescending(x => x.Grade).OrderBy(x => x.CreateDate).ToList();
                if (newTasks.Count > 0)
                {
                    try
                    foreach (var agvTask in newTasks)
                    {
                        AgvTaskDTO TaskDTO = new AgvTaskDTO()
                        try
                        {
                            TaskCode = task.AgvTaskNum,
                            ReqCode = DateTime.Now.ToString("yyyyMMddHHmmss") + task.AgvTaskNum,
                            TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "FLC" : "FLR",
                            ctnrCode = task.PalletCode,
                            PositionCodePath = new List<CodePath>()
                        {
                            AgvTaskDTO taskDTO = new AgvTaskDTO()
                            {
                                ReqCode = Guid.NewGuid().ToString().Replace("-", ""),
                                TaskTyp = "22",
                                PositionCodePath = new List<CodePath>()
                            {
                            new CodePath()
                            {
                                type="00",
                                positionCode=task.CurrentAddress
                                positionCode=agvTask.CurrentAddress
                            },
                            new CodePath()
                            {
                                type="00",
                                positionCode=task.NextAddress
                                positionCode=agvTask.NextAddress
                            }
                        },
                        };
                        WebResponseContent content = _taskService.AgvSendTask(TaskDTO, APIEnum.Agv_ZHSendTask);
                        if (!content.Status) throw new Exception(content.Message);
                        task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                            },
                                TaskCode = agvTask.AgvTaskNum,
                                PodTyp = agvTask.PalletType < 2 ? "XX" : "DD",
                            };
                            WebResponseContent content = _taskService.AgvSendTask(taskDTO);
                            if (content.Status)
                            {
                                agvTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
                                //agvTask.Remark = content.Data.ObjToString();
                                _taskService.UpdateTask(agvTask, TaskStatusEnum.AGV_Executing);
                            }
                            else
                            {
                                agvTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                //agvTask.Remark = content.Data.ObjToString();
                                agvTask.ExceptionMessage = content.Message;
                            }
                        }
                        catch (Exception ex)
                        {
                            agvTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
                            //agvTask.Remark = content.Data.ObjToString();
                            agvTask.ExceptionMessage = ex.Message;
                            WriteError(nameof(AGV_ZHJob), ex.Message, ex);
                        }
                    }
                    catch (Exception ex)
                    {
                        task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                        task.ExceptionMessage = ex.Message;
                    }
                    _taskService.UpdateData(newTasks);
                }
                _taskService.UpdateData(newTasks);
            }
            catch (Exception ex)
            {
@@ -69,7 +87,7 @@
        {
            try
            {
                var WaitToTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && nameof(AGV_CSJJob).Contains(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                var WaitToTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && nameof(AGV_ZHJob).Contains(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                foreach (var WaitToTask in WaitToTasks)
                {
                    if (WaitToTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
@@ -156,7 +174,7 @@
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(AGV_CSJJob) + ":" + ex.Message);
                Console.Out.WriteLine(nameof(AGV_ZHJob) + ":" + ex.Message);
            }
        }
    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/×躸²Ö/AGV_ZHJob.cs
@@ -42,6 +42,8 @@
            try
            {
                SendAGVTask();
                SendAGVWaitToTask();
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/charts/AssembleDist.vue
@@ -322,7 +322,7 @@
      monthLabel: {
        formatter: "{M}月",
      },
      range: "2025-05",
      range: dayjs().format('YYYY-MM'),
      yearLabel: {
        show: false,
      },
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1aa445a3-8c03-42e2-8c1a-1a0360d417ba.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8bae546c-39e9-428b-8290-97d10d47c63c.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/99556534-0033-4f9b-a223-ea76f4271439.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ebfc3963-9e49-4674-a4bd-119fd8ccb8b4.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs
@@ -62,10 +62,18 @@
                    if (mathCurrentRow <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                        if (beRelocation.Row> maxDepth)
                        {
                            locationInfos = locationInfos.Where(x=>x.Row>maxDepth).ToList();
                        }
                    }
                    else
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                        if (beRelocation.Row <= maxDepth)
                        {
                            locationInfos = locationInfos.Where(x => x.Row <= maxDepth).ToList();
                        }
                    }
                }
@@ -172,11 +180,11 @@
                        }
                    }
                }
                //判断如果已定义货位类型的货位和未定义类型的空货位都为空释放满足条件的货位
                if (!definedTypeEmptyLocations.Any() && !undefinedTypeEmptyLocations.Any())
                {
                ////判断如果已定义货位类型的货位和未定义类型的空货位都为空释放满足条件的货位
                //if (!definedTypeEmptyLocations.Any() && !undefinedTypeEmptyLocations.Any())
                //{
                }
                //}
                return null;
            }
        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -74,6 +74,29 @@
        /// </summary>
        [Description("成品MES提库")]
        OutMesRworkProduct =250,
        /// <summary>
        /// é˜²ç„Šå‰æ´¾å·¥å°ä»¶
        /// </summary>
        [Description("防焊前派工小件")]
        MaskOutNoticeSmall = 260,
        /// <summary>
        /// é˜²ç„Šå‰æ´¾å·¥å¤§ä»¶
        /// </summary>
        [Description("防焊前派工大件")]
        MaskOutNoticeLarge = 265,
        /// <summary>
        /// é˜²ç„Šåˆ°çº¿è¾¹å°ä»¶
        /// </summary>
        [Description("防焊到线边小件")]
        MaskOutSmall = 270,
        /// <summary>
        /// é˜²ç„Šåˆ°çº¿è¾¹å¤§ä»¶
        /// </summary>
        [Description("防焊到线边大件")]
        MaskOutLarge = 275,
        /// <summary>
        /// é‡‡è´­å…¥åº“
        /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs
@@ -24,18 +24,18 @@
                    using HttpClient httpClient = new HttpClient();
                    httpClient.Timeout = new TimeSpan(0, 0, 60);
                    //正式
                    //string authorization = "AppKey 1930944618148245504";
                    string authorization = "AppKey 1784536762910281728";
                    //测试
                    string authorization = "AppKey 1930944618148245504";
                    //string authorization = "AppKey 1930944618148245504";
                    headers = new Dictionary<string, string>
                    {
                        { "Authorization", authorization },
                        //正式
                        //{ "Site_tenant_id", "6ec60d66-b08e-4ff3-90fa-57748053f79b" }
                        { "Site_tenant_id", "0dc2d164-8a62-417e-8a00-808007464feb" }
                        //测试
                        { "Site_tenant_id", "6ec60d66-b08e-4ff3-90fa-57748053f79b" }
                        //{ "Site_tenant_id", "6ec60d66-b08e-4ff3-90fa-57748053f79b" }
                    };
                    if (headers != null)
                    {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs
@@ -6,13 +6,34 @@
namespace WIDESEA_DTO.MES
{
    /// <summary>
    /// MES防焊批次获取
    /// </summary>
    public class MesLotInfoModel
    {
        /// <summary>
        /// ç‰©æ–™æ–™å·
        /// </summary>
        public string Product { get; set; }
        /// <summary>
        /// ç‰©æ–™ç‰ˆæœ¬
        /// </summary>
        public string ProductVersion { get; set; }
        /// <summary>
        /// ç‰©æ–™æ•°é‡
        /// </summary>
        public decimal Qty { get; set; }
        /// <summary>
        /// å‘¨æœŸ
        /// </summary>
        public string DateCode { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public string LotNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ»¡Lot
        /// </summary>
        public bool IsFullNumber { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/SolderMaskModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.MES
{
    /// <summary>
    /// é˜²ç„Šå‰å¤„理派工通知WMS
    /// </summary>
    [ModelValidate]
    public class SolderMaskOutNotice
    {
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        [PropertyValidate("批次号", NotNullAndEmpty = true)]
        public string LotNo { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€ç 
        /// </summary>
        [PropertyValidate("目标地址码", NotNullAndEmpty = true)]
        public string TargetAddressCode { get; set; }
    }
    /// <summary>
    /// é˜²ç„Šç«‹åº“到线边点
    /// </summary>
    [ModelValidate]
    public class SolderMaskOut
    {
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        [PropertyValidate("批次号", NotNullAndEmpty = true)]
        public string LotNo { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€ç 
        /// </summary>
        [PropertyValidate("目标地址码", NotNullAndEmpty = true)]
        public string TargetAddressCode { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -147,6 +147,10 @@
        /// <returns></returns>
        MesResponseContent TestToolOut(TestToolOutModel model);
        //防焊到线边
        MesResponseContent SolderMaskOut(SolderMaskOut model);
        //防焊派工
        MesResponseContent SolderMaskOutNotice(SolderMaskOutNotice model);
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -359,6 +359,7 @@
                                ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                Remark = " "
                            };
                            //调用QMS来料检验接口
                            string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck);
                            MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
                            if (!mesResponseContent.BSucc)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -37,6 +37,8 @@
    {
        static object lock_out = new object();
        static object solderMask_out = new object();
        /// <summary>
        /// æµ‹è¯•架出仓
        /// </summary>
@@ -111,6 +113,165 @@
                    _unitOfWorkManage.CommitTran();
                    //将任务推送到WCS
                    PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_CSJ");
                    responseContent.OK();
                }
                catch (Exception ex)
                {
                    _unitOfWorkManage.RollbackTran();
                    responseContent.Error(ex.Message);
                }
                return responseContent;
            }
        }
        public MesResponseContent SolderMaskOutNotice(SolderMaskOutNotice model)
        {
            lock (solderMask_out)
            {
                MesResponseContent responseContent = new MesResponseContent();
                try
                {
                    Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
                    if (exsit != null)
                    {
                        return responseContent.Error($"目标地址重复");
                    }
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
                    //获取库存记录
                    List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                      x.WarehouseId == warehouse.WarehouseId &&
                      x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
                    Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo));
                    if (stockInfo == null)
                    {
                        return responseContent.Error($"防焊库:无{model.LotNo}可用库存");
                    }
                    Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
                    if (exsit2 != null)
                    {
                        return responseContent.Error($"防焊任务{stockInfo.PalletCode}已存在");
                    }
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
                      x.WarehouseId == stockInfo.WarehouseId &&
                      x.LocationStatus == (int)LocationStatusEnum.InStock &&
                      (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                    if (locationInfo == null)
                    {
                        return responseContent.Error($"防焊货位:{stockInfo.LocationCode}出库条件不满足");
                    }
                    //生成防焊出库任务 é”å®šåº“å­˜ æ›´æ”¹è´§ä½çŠ¶æ€
                    Dt_Task taskOut = new()
                    {
                        CurrentAddress = stockInfo.LocationCode,
                        Grade = 0,
                        PalletCode = stockInfo.PalletCode,
                        NextAddress = "",
                        Roadway = locationInfo.RoadwayNo,
                        SourceAddress = stockInfo.LocationCode,
                        TargetAddress = model.TargetAddressCode,
                        TaskStatus = (int)TaskStatusEnum.New,
                        TaskType = stockInfo.PalletType<2 ? (int)TaskTypeEnum.MaskOutNoticeSmall : (int)TaskTypeEnum.MaskOutNoticeLarge,
                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        PalletType = stockInfo.PalletType,
                        WarehouseId = stockInfo.WarehouseId,
                    };
                    stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
                    LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                    locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                    //判断是否有出库单信息
                    _unitOfWorkManage.BeginTran();
                    //更新库存状态
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    //更新货位状态
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                    //新建任务
                    BaseDal.AddData(taskOut);
                    //加入货位变动记录
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
                    _unitOfWorkManage.CommitTran();
                    //将任务推送到WCS
                    PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH");
                    responseContent.OK();
                }
                catch (Exception ex)
                {
                    _unitOfWorkManage.RollbackTran();
                    responseContent.Error(ex.Message);
                }
                return responseContent;
            }
        }
        public MesResponseContent SolderMaskOut(SolderMaskOut model)
        {
            lock (solderMask_out)
            {
                MesResponseContent responseContent = new MesResponseContent();
                try
                {
                    Dt_Task exsit = Repository.QueryFirst(x => x.TargetAddress == model.TargetAddressCode);
                    if (exsit != null)
                    {
                        return responseContent.Error($"目标地址重复");
                    }
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
                    //获取库存记录
                    List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                      x.WarehouseId == warehouse.WarehouseId &&
                      x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
                    Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo));
                    if (stockInfo == null)
                    {
                        return responseContent.Error($"防焊库:无{model.LotNo}可用库存");
                    }
                    Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
                    if (exsit2 != null)
                    {
                        return responseContent.Error($"防焊任务{stockInfo.PalletCode}已存在");
                    }
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
                      x.WarehouseId == stockInfo.WarehouseId &&
                      x.LocationStatus == (int)LocationStatusEnum.InStock &&
                      (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                    if (locationInfo == null)
                    {
                        return responseContent.Error($"防焊货位:{stockInfo.LocationCode}出库条件不满足");
                    }
                    //生成防焊出库任务 é”å®šåº“å­˜ æ›´æ”¹è´§ä½çŠ¶æ€
                    Dt_Task taskOut = new()
                    {
                        CurrentAddress = stockInfo.LocationCode,
                        Grade = 0,
                        PalletCode = stockInfo.PalletCode,
                        NextAddress = "",
                        Roadway = locationInfo.RoadwayNo,
                        SourceAddress = stockInfo.LocationCode,
                        TargetAddress = model.TargetAddressCode,
                        TaskStatus = (int)TaskStatusEnum.New,
                        TaskType = stockInfo.PalletType < 2 ? (int)TaskTypeEnum.MaskOutSmall : (int)TaskTypeEnum.m,
                        TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                        PalletType = stockInfo.PalletType,
                        WarehouseId = stockInfo.WarehouseId,
                    };
                    stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
                    LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                    locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                    //判断是否有出库单信息
                    _unitOfWorkManage.BeginTran();
                    //更新库存状态
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    //更新货位状态
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                    //新建任务
                    BaseDal.AddData(taskOut);
                    //加入货位变动记录
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
                    _unitOfWorkManage.CommitTran();
                    //将任务推送到WCS
                    PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH");
                    responseContent.OK();
                }
                catch (Exception ex)
@@ -451,10 +612,16 @@
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == palletTypeInfo.WarehouseId);
                //判断是否托盘库存是否已存在
                Dt_StockInfo stockInfoOld = _stockRepository.StockInfo_HtyRepository.QueryData(x => x.PalletCode == model.CarrierCode).First();
                if (stockInfoOld!=null)
                {
                    return MesResponseContent.Instance.Error($"托盘号{model.CarrierCode}已存在");
                }
                Dt_StockInfo_Hty stockInfo_Hty = _stockRepository.StockInfo_HtyRepository.QueryData(x => x.PalletCode == model.CarrierCode).OrderByDescending(x => x.SourceId).First();
                Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.StockId == stockInfo_Hty.SourceId);
                Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -765,13 +765,21 @@
                {
                    return content.Error($"托盘类型信息不存在");
                }
                //获取阻焊批次
                WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
                if (!requestLotInfo.Status)
                ////获取阻焊批次
                //WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
                //if (!requestLotInfo.Status)
                //{
                //    return content.Error($"请求阻焊批次信息失败,{requestLotInfo.Message}");
                //}
                //MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
                MesLotInfoModel mesLotInfo = new MesLotInfoModel()
                {
                    return content.Error($"请求阻焊批次信息失败,{requestLotInfo.Message}");
                }
                MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
                    Product="FH001",
                    ProductVersion="A1",
                    Qty=20,
                    LotNo= materialLot,
                    IsFullNumber=true
                };
                Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
                {
                    MaterielSpec = mesLotInfo.ProductVersion,
@@ -820,7 +828,7 @@
                //BaseDal.AddData(task);
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV_ZH"); ;
                PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV_ZH", agvTaskCode);
                content.OK(data: taskIn);
            }
            catch (Exception ex)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -75,7 +75,7 @@
                        heightType = 1;
                    }
                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(needRelocationItem.RoadwayNo, task.PalletType, task.WarehouseId, needRelocationItem.LocationCode, heightType);
                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(needRelocationItem.RoadwayNo, stockInfo.PalletType, task.WarehouseId, needRelocationItem.LocationCode, heightType);
                    if (newLocation != null)
                    {
                        Dt_Task newTask = new Dt_Task()
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -46,7 +46,26 @@
        {
            return _taskService.TestToolOut(model.Content);
        }
        /// <summary>
        /// æŽ¥æ”¶MES防焊派工
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("SolderMaskOutNotice"), AllowAnonymous, MethodParamsValidate]
        public MesResponseContent SolderMaskOutNotice([FromBody] Root<SolderMaskOutNotice> model)
        {
            return _taskService.SolderMaskOutNotice(model.Content);
        }
        /// <summary>
        /// æŽ¥æ”¶MES防焊到线边
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("SolderMaskOut"), AllowAnonymous, MethodParamsValidate]
        public MesResponseContent SolderMaskOut([FromBody] Root<SolderMaskOut> model)
        {
            return _taskService.SolderMaskOut(model.Content);
        }
        /// <summary>
        /// æŽ¥æ”¶MES测试架退库
        /// </summary>