分支自 SuZhouGuanHong/TaiYuanTaiZhong

陈勇
2024-02-23 c9dd47185d603ccd09dd567f7eb5baeaf03b2746
上传MES及MES下发工单接口
已修改7个文件
已添加11个文件
779 ■■■■■ 文件已修改
.gitignore 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_Comm/MES_Info/Response/Mes_WorkInfo.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_Entity/DomainModels/System/dt_inventory.cs 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_Entity/DomainModels/System/partial/dt_inventory.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_Entity/DomainModels/ToMES/dt_mes_head.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/PCS/WCS_Server/WIDESEA_WCS/ToMES/ToMesServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/BasicSN.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/MES_Response.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvInWarehousePara.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvMoveWarehousePara.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvOutWarehousePara.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvTransferListPara.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Response/Mes_WorkInfo.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/System/dt_inventory.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/Taskinfo/dt_agvtask.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask_Mes.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/MESAPIAddress.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -2,3 +2,6 @@
代码管理/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json
*.json
代码管理/PCS/WCS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/System/dt_materielinfo.cs
代码管理/WMS/WMS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/System/dt_materielinfo.cs
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_Comm/MES_Info/Response/Mes_WorkInfo.cs
@@ -14,6 +14,16 @@
        public string workOrder { get; set; } 
        /// <summary>
        /// å·¥å•类型
        /// </summary>
        public string processCode { get; set; }
        /// <summary>
        /// å®Œæˆæ•°é‡
        /// </summary>
        public int finishNum { get; set; }
        /// <summary>
        /// å·¥å•号
        /// </summary>
        public string jobID { get; set; }
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_Entity/DomainModels/System/dt_inventory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
/*
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *如果数据库字段发生变化,请在代码生器重新生成此Model
 */
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Entity.SystemModels;
namespace WIDESEA_Entity.DomainModels
{
    [Entity(TableCnName = "库存查询", TableName = "dt_inventory")]
    public partial class dt_inventory : BaseEntity
    {
        /// <summary>
        ///车轮SN号
        /// </summary>
        [Display(Name = "车轮SN号")]
        [MaxLength(255)]
        [Column(TypeName = "nvarchar(255)")]
        [Editable(true)]
        public string SN { get; set; }
        /// <summary>
        ///产品名称
        /// </summary>
        [Display(Name = "产品名称")]
        [MaxLength(255)]
        [Column(TypeName = "nvarchar(255)")]
        [Editable(true)]
        public string Name { get; set; }
        /// <summary>
        ///产品图号
        /// </summary>
        [Display(Name = "产品图号")]
        [MaxLength(255)]
        [Column(TypeName = "nvarchar(255)")]
        [Editable(true)]
        public string FigureNumber { get; set; }
        /// <summary>
        ///熔炼炉号
        /// </summary>
        [Display(Name = "熔炼炉号")]
        [MaxLength(255)]
        [Column(TypeName = "varchar(255)")]
        [Editable(true)]
        public string HearthNumber { get; set; }
        /// <summary>
        ///炉代号
        /// </summary>
        [Display(Name = "炉代号")]
        [MaxLength(50)]
        [Column(TypeName = "nvarchar(50)")]
        [Editable(true)]
        public string HeatNumber { get; set; }
        /// <summary>
        ///钢坯号
        /// </summary>
        [Display(Name = "钢坯号")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? BilletNumber { get; set; }
        /// <summary>
        ///入库时间
        /// </summary>
        [Display(Name = "入库时间")]
        [Column(TypeName = "datetime")]
        [Editable(true)]
        public DateTime? OnlineTime { get; set; }
        /// <summary>
        ///操作人员
        /// </summary>
        [Display(Name = "操作人员")]
        [MaxLength(50)]
        [Column(TypeName = "nvarchar(50)")]
        [Editable(true)]
        public string Operator { get; set; }
        /// <summary>
        ///描述
        /// </summary>
        [Display(Name = "描述")]
        [Column(TypeName = "nvarchar(max)")]
        [Editable(true)]
        public string remark { get; set; }
        /// <summary>
        ///ID
        /// </summary>
        [Key]
        [Display(Name = "ID")]
        [Column(TypeName = "int")]
        [Editable(true)]
        [Required(AllowEmptyStrings = false)]
        public int ID { get; set; }
        /// <summary>
        ///货位编号
        /// </summary>
        [Display(Name = "货位编号")]
        [MaxLength(30)]
        [Column(TypeName = "nvarchar(30)")]
        public string stationCode { get; set; }
        [Display(Name = "区域代码")]
        [Column(TypeName = "nvarchar(15)")]
        [Editable(true)]
        public string area { get; set; }
        [Display(Name = "工单编号")]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public string jobID { get; set; }
    }
}
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_Entity/DomainModels/System/partial/dt_inventory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
/*
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *如果数据库字段发生变化,请在代码生器重新生成此Model
 */
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Entity.SystemModels;
namespace WIDESEA_Entity.DomainModels
{
    public partial class dt_inventory
    {
        //此处配置字段(字段配置见此model的另一个partial),如果表中没有此字段请加上 [NotMapped]属性,否则会异常
    }
}
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_Entity/DomainModels/ToMES/dt_mes_head.cs
@@ -72,6 +72,14 @@
        public string processCode { get; set; }
        /// <summary>
        ///完成数量
        /// </summary>
        [Display(Name = "完成数量")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? finishNum { get; set; }
        /// <summary>
        ///物料编码
        /// </summary>
        [Display(Name = "物料编码")]
@@ -117,9 +125,9 @@
        public string productDesc { get; set; }
        /// <summary>
        ///完成数量
        ///工单数量
        /// </summary>
        [Display(Name = "完成数量")]
        [Display(Name = "工单数量")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? quantity { get; set; }
@@ -177,5 +185,7 @@
        [MaxLength(40)]
        [Column(TypeName = "nvarchar(40)")]
        public string creator { get; set; }
        //public string processCode { get; set; }
    }
}
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs
@@ -9,6 +9,7 @@
using WIDESEA_Core.FreeDB;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Comm;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WCS.JobsPart.Common
{
@@ -27,8 +28,9 @@
            foreach (var item in stationinfos)
            {
                //根据下料口的绑定信息查询对应工单,检测此工单是否已完成  å®Œæˆå³å¯å°†å…¶é€å…¥åº“
                dt_Workinfo workinfo = workinfoRepository.FindFirst(x => x.WorkNumber == item.Number);
                int CompeletedNum = Convert.ToInt32(workinfo.PlannedQuantity) - Convert.ToInt32(workinfo.QuantityCompletion);
                dt_mes_head mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == item.Number).First();
                int CompeletedNum = Convert.ToInt32(mesinfo.quantity) - Convert.ToInt32(mesinfo.finishNum);
                //判定任务是否已创建//如已存在  
                if (freeDB.Select<dt_agvtask>().Where(x => x.agv_fromaddress == item.stationCode).Count() > 0)
@@ -36,7 +38,25 @@
                if (item.quantity == 5 || CompeletedNum == 0)  //循环读取车轮数为5或者订单已完成数量的下料口    â†’工单人工关闭的工单
                {
                    dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, workinfo, item);
                    if (mesinfo.quantity <= 50)    //小于50件直接出库
                    {
                        //todo å¯»æ‰¾å¯æ”¾è´§å¤–协放货台
                        dt_agvtask agvtask = new dt_agvtask()
                        {
                            agv_fromaddress = item.stationCode,
                            agv_id = Guid.NewGuid(),
                            agv_grade = 0,
                            agv_barcode = "",
                            agv_createtime = DateTime.Now,
                            agv_taskstate = TaskStatus.Created.ToString(),
                            //agv_toaddress = ,
                        };
                        freeDB.Add(agvtask);
                    }
                    else
                    {
                        dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item);
                    if (TargetLocation != null)
                    {
@@ -50,7 +70,6 @@
                            agv_createtime = DateTime.Now,
                            agv_taskstate = TaskStatus.Created.ToString(),
                            agv_toaddress = TargetLocation.stationCode,
                        };
                        freeDB.Add(agvtask);
@@ -58,7 +77,7 @@
                        freeDB.Update(TargetLocation);
                    }
                }
                }
            }
        }
@@ -69,68 +88,67 @@
        /// <param name="workinfo">订单</param>
        /// <param name="stationinfo">下料口信息</param>
        /// <returns></returns>
        private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_Workinfo workinfo, dt_stationinfo stationinfo)
        private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo)
        {
            //放货位
            dt_stationinfo TargetLocation = null;
            //根据订单数量来寻找对应库区且同物料类型库位
            if (workinfo.PlannedQuantity < 50)    //库区1 ç‰©æ–™ç±»åž‹å¤š
            {
                dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == "1").OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
                if (station != null)
                {
                    //如存在同物料类型且在1行的库存则新入库的物料放至同列 ä¸å­˜åœ¨åˆ™å¯»æ‰¾æ–°è¡Œåº“位
                    if (station.line == 1)
                    {
                        TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.column == station.column && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                    }
                    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
            }
            else
            {
            #region æ ¹æ®è®¢å•数量来寻找对应库区且同物料类型库位
            //if (workinfo.PlannedQuantity < 50)    //库区1 ç‰©æ–™ç±»åž‹å¤š
            //{
            //    dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == "1").OrderByDescending(x => x.lastUpdateTime).FirstOrDefault();
            //    if (station != null)
            //    {
            //        //如存在同物料类型且在1行的库存则新入库的物料放至同列 ä¸å­˜åœ¨åˆ™å¯»æ‰¾æ–°è¡Œåº“位
            //        if (station.line == 1)
            //        {
            //            TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.column == station.column && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //        }
            //        TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //    }
            //    else
            //    {
            //        TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.line == 1 && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
            //    }
            //}
            //else
            //{
                //int quantity = Convert.ToInt32(workinfo.PlannedQuantity);
                //string area = GetArea(quantity);
                dt_materielinfo materielinfo = freeDB.Select<dt_materielinfo>().Where(x => x.materiel_id == stationinfo.stationType).First();
            //dt_materielinfo materielinfo = freeDB.Select<dt_materielinfo>().Where(x => x.materiel_id == stationinfo.stationType).First();
                if (materielinfo == null)
                    throw new Exception($"无此物料类型{stationinfo.stationType}库区");
            //if (materielinfo == null)
            //    throw new Exception($"无此物料类型{stationinfo.stationType}库区");
                string area = materielinfo.materiel_areaid.ToString();
            //string area = materielinfo.materiel_areaid.ToString();
                //如存在同类型物料则放置同行库位 ä¸å­˜åœ¨åˆ™æ”¾ç½®æ–°è¡Œçš„第一列中
                dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == area).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
                if (station != null)
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.line == station.line).OrderBy(x => x.column).FirstOrDefault();
                    if (TargetLocation == null)
                    {
                        TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                    }
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                }
            //dt_stationinfo station = stationinfoRepository.Find(x => x.stationType == stationinfo.stationType && x.area == area).OrderBy(x => x.lastUpdateTime).FirstOrDefault();
            //if (station != null)
            //{
            //    TargetLocation = stationinfoRepository.Find(x => x.area == station.area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.line == station.line).OrderBy(x => x.column).FirstOrDefault();
            //    if (TargetLocation == null)
            //    {
            //        TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
            //    }
            //}
            //else
            //{
            //    TargetLocation = stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
            //}
                //todo  å¦‚物料已满则放置其他库区
                //if (TargetLocation == null)
                //{
                //    stationinfoRepository.Find(x => x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.column == '1').OrderBy(x => x.line).FirstOrDefault();
                //}
            }
            if (TargetLocation == null)
            {
                throw new Exception("库位已满");
            }
            //}
            //if (TargetLocation == null)
            //{
            //    throw new Exception("库位已满");
            //}
            //else if (workinfo.PlannedQuantity >= 50 && workinfo.PlannedQuantity < 110)  //库区2 
            //{
@@ -149,6 +167,29 @@
            //{
            //}
            #endregion
            //根据订单炉号/工单号/类型
            if (mesinfo.quantity >= 180)
            {
                //查询库存记录中是否存在同类型/工单/炉号的记录  å¦‚有则放置同一行,无则寻找新库位
                var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
                var inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID /*&& x.*/).First();
                if (inventory != null)
                {
                    int line = Convert.ToInt16(inventory.stationCode.Split("-")[0]);
                    TargetLocation = stationinfoRepository.Find(x => x.line == line && x.location_state == LocationStateEnum.Empty.ToString() && x.area == inventory.area).FirstOrDefault();
                }
                else
                {
                    TargetLocation = stationinfoRepository.Find(x => x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
                }
            }
            if (TargetLocation == null)
            {
                throw new Exception("库位已满");
            }
            return TargetLocation;
        }
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/ToMES/ToMesServer.cs
@@ -58,7 +58,7 @@
                var mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == workInfo.jobID).First();
                if (mesinfo != null)
                {
                    return content.Error($"工单号{mesinfo.jobID}已存在,请核实后在发送!");
                    return content.Error($"工单号{mesinfo.jobID}已存在,请核实后重新发送!");
                }
                Guid head = Guid.NewGuid();
@@ -81,7 +81,9 @@
                    reqIDLineNo = workInfo.reqIDLineNo,
                    stackNoRange = workInfo.stackNoRange,
                    typeID = workInfo.typeID,
                    workOrder = workInfo.workOrder
                    workOrder = workInfo.workOrder,
                    processCode = workInfo.processCode,
                    finishNum = 0
                };
                freeDB.Add(mes_Head);
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/BasicSN.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info
{
    public class BasicSN
    {
        public class detail
        {
            public string sn { get; set; }
        }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/MES_Response.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info
{
    public class MES_Response
    {
        /// <summary>
        /// çŠ¶æ€ç 
        /// </summary>
        public string code { get; set; }
        /// <summary>
        /// æ¶ˆæ¯
        /// </summary>
        public string message { get; set; }
        /// <summary>
        /// å“åº”数据
        /// </summary>
        public string data { get; set; }
        /// <summary>
        /// å †æ ˆæ¶ˆæ¯
        /// </summary>
        public string stackMsg { get; set; }
        /// <summary>
        /// æ‰©å±•
        /// </summary>
        public string Extras { get; set; }
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// æ—¶é—´
        /// </summary>
        public DateTime Time { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvInWarehousePara.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info.Request
{
    public class agvInWarehousePara:BasicSN
    {
        /// <summary>
        /// å·¥å•编号
        /// </summary>
        public string JobID { get; set; }
        /// <summary>
        /// è½¦è½®ä¿¡æ¯
        /// </summary>
        public List<detail> details { get; set; }
        /// <summary>
        /// åº“房名称
        /// </summary>
        public string warehouseName { get; set; }
        /// <summary>
        /// åŒºä½åç§°
        /// </summary>
        public string zoneID { get; set; }
        /// <summary>
        /// åž›ä½åç§°
        /// </summary>
        public string stackID { get; set; }
        /// <summary>
        /// å±‚号
        /// </summary>
        public int? layerNo { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvMoveWarehousePara.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info.Request
{
    /// <summary>
    /// è½¦è½®ç§»åº“参数(库内移库)
    /// </summary>
    public class agvMoveWarehousePara : BasicSN
    {
        /// <summary>
        /// è½¦è½®SN
        /// </summary>
        public List<detail> details { get; set; }
        /// <summary>
        /// æºåº“房名称
        /// </summary>
        public string fromWarehouseName { get; set; }
        /// <summary>
        /// æºåŒºä½åç§°
        /// </summary>
        public string fromZoneID { get; set; }
        /// <summary>
        /// æºåž›ä½åç§°
        /// </summary>
        public string fromStackID { get; set; }
        /// <summary>
        /// æºå±‚号
        /// </summary>
        public string fromLayerNo { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“房名称
        /// </summary>
        public string toWarehouseName { get; set;}
        /// <summary>
        /// ç›®æ ‡åŒºä½åç§°
        /// </summary>
        public string toZoneID { get; set;}
        /// <summary>
        /// ç›®æ ‡åž›ä½åç§°
        /// </summary>
        public string toStackID { get; set;}
        /// <summary>
        /// ç›®æ ‡å±‚号
        /// </summary>
        public string toLayerNo { get; set;}
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvOutWarehousePara.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info
{
    public class agvOutWarehousePara : BasicSN
    {
        /// <summary>
        /// å·¥å•号
        /// </summary>
        public string JobID { get; set; }
        /// <summary>
        /// è½¦è½®
        /// </summary>
        public List<detail> details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvTransferListPara.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Comm.MES_Info.Request
{
    public class agvTransferListPara : BasicSN
    {
        public string transferListID { get; set; }
        public string materialCode { get; set; }
        public string drawingNoVer { get; set; }
        public string fromWarehouse { get; set; }
        public string toWarehouse { get; set; }
        public string Operator { get; set; }
        public string updateTime { get; set; }
        /// <summary>
        /// è½¦è½®ä¿¡æ¯
        /// </summary>
        public List<detail> details { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Response/Mes_WorkInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Text;
namespace WIDESEA_Common.Response
{
    public class Mes_WorkInfo
    {
        /// <summary>
        /// å·¥ä½œä»¤å·
        /// </summary>
        public string workOrder { get; set; }
        /// <summary>
        /// å·¥å•号
        /// </summary>
        public string jobID { get; set; }
        /// <summary>
        /// éœ€æ±‚单号
        /// </summary>
        public string reqID { get; set; }
        /// <summary>
        /// éœ€æ±‚单号
        /// </summary>
        public string reqIDLineNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        public string materialCode { get; set; }
        /// <summary>
        /// å›¾å·
        /// </summary>
        public string drawingNo { get; set; }
        /// <summary>
        /// æŠ€æœ¯çŠ¶æ€
        /// </summary>
        public string drawingNoVer { get; set; }
        /// <summary>
        /// äº§å“å
        /// </summary>
        public string productName { get; set; }
        /// <summary>
        /// äº§å“æè¿°
        /// </summary>
        public string productDesc { get; set; }
        /// <summary>
        /// è®¡åˆ’数量
        /// </summary>
        public int? quantity { get; set; }
        /// <summary>
        /// è½®åž‹ä»£ç 
        /// </summary>
        //[AllowNull]
        public string typeID { get; set; }
        /// <summary>
        /// æ‰“包数量
        /// </summary>
        public int? stackNoRange { get; set; }
        /// <summary>
        /// è½®å¾„偏差
        /// </summary>
        public decimal? maxDiameterDiff { get; set; }
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        public DateTime? expectedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’结束时间
        /// </summary>
        public DateTime? expectedFinishTime { get; set; }
        /// <summary>
        /// è½¦è½®ä¿¡æ¯é›†åˆ
        /// </summary>
        public List<detail> details { get; set; }
    }
    public class detail
    {
        /// <summary>
        /// å·¥å•编号
        /// </summary>
        public string jobID { get; set; }
        /// <summary>
        /// ç‚‰ä»£å·
        /// </summary>
        public string heatID { get; set; }
        /// <summary>
        ///钢坯号
        /// </summary>
        public int? billetID { get; set; }
        /// <summary>
        /// è½¦è½®SN号
        /// </summary>
        public string SN { get; set; }
        /// <summary>
        /// çƒ­å¤„理批次
        /// </summary>
        public string heatBatchID { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Entity/DomainModels/System/dt_inventory.cs
@@ -112,6 +112,14 @@
       [Column(TypeName="nvarchar(30)")]
       public string stationCode { get; set; }
        [Display(Name = "区域代码")]
        [Column(TypeName = "nvarchar(15)")]
        [Editable(true)]
        public string area { get; set; }
       
        [Display(Name = "工单编号")]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public string jobID { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Entity/DomainModels/Taskinfo/dt_agvtask.cs
@@ -206,12 +206,12 @@
        public DateTime? agv_completeBeginTime { get; set; }
        /// <summary>
        ///
        ///工单号
        /// </summary>
        [Display(Name = "unitag")]
        [Column(TypeName = "uniqueidentifier")]
        [Display(Name = "工单号")]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public Guid? unitag { get; set; }
        public string jobID { get; set; }
        /// <summary>
        ///车轮SN号
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask_Mes.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using WIDESEA_Comm.MES_Info;
using WIDESEA_Comm.MES_Info.Request;
using WIDESEA_Common;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.ToAGV;
using static WIDESEA_Comm.MES_Info.BasicSN;
namespace WIDESEA_WMS.Common.AGVTask
{
    public class HandleTask_Mes
    {
        public void UploadMESInfo(dt_agvtask task)
        {
            try
            {
                object obj = new object();  //上传MES数据
                string ActionName = "";  //调用MES方法名
                List<detail> list = new List<detail>(); //车轮信息
                if (task == null)
                {
                    throw new Exception("无任务数据");
                }
                foreach (var item in task.bindSN.Split(","))
                {
                    detail detail = new detail();
                    detail.sn = item;
                    list.Add(detail);
                }
                if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceOutbound.ToString())
                {
                    agvOutWarehousePara outWarehousePara = new agvOutWarehousePara()
                    {
                        JobID = task.jobID,
                        details = list
                    };
                    obj = outWarehousePara;
                    ActionName = "agvOutWarehouse";
                }
                else if (task.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString() || task.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString())
                {
                    agvInWarehousePara inWarehousePara = new agvInWarehousePara()
                    {
                        details = list,
                        JobID = task.jobID,
                        layerNo = 1,
                        stackID = task.agv_barcode,
                        warehouseName = "Agv库",
                        zoneID = task.agv_toaddress,
                    };
                    obj = inWarehousePara;
                    ActionName = "agvInWarehouse";
                }
                else if (task.agv_tasktype == "Transfer")  //移库区分  åº“内移库/外协移库
                {
                    agvMoveWarehousePara moveWarehousePara = new agvMoveWarehousePara()
                    {
                        details = list,
                        fromLayerNo = "1",
                        fromStackID = "",
                        fromWarehouseName = "Agv库",
                        fromZoneID = task.agv_fromaddress,
                        toLayerNo = "1",
                        toStackID = "",
                        toWarehouseName = "Agv库",
                        toZoneID = task.agv_toaddress,
                    };
                    obj = moveWarehousePara;
                    ActionName = "agvMoveWarehouse";
                }
                //else if (task.agv_tasktype == "Transfer")
                //{
                //}
                var postJson = JsonConvert.SerializeObject(obj);
                string mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + ActionName);
                var requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
                if (requestMes.code == "200" && requestMes.Type == "success")
                {
                    //日志记录上传数据成功
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/UploadMesInfo/MESAPIAddress.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_WMS.Common
{
    public class MESAPIAddress
    {
        public const string IPAddress_MES = "http://10.13.3.102:80/api/agv/";
    }
}