分支自 SuZhouGuanHong/TaiYuanTaiZhong

陈勇
2024-03-12 96258536e0b40f0e7ee5c36549921d7ce3674ab1
后端PDA程序代码

1
已修改5个文件
已添加5个文件
586 ■■■■■ 文件已修改
.gitignore 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/BasicSN.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvTransferListPara.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/ToMES/VV_MES_Info.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/ToMES/partial/VV_MES_Info.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask_Mes.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/OutsourceInbound.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/SendEpmtyTask.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WMS/ToMes/agvTransferList.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/ToWms/ToWMSController.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -5,3 +5,17 @@
代码管理/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
代码管理/WMS/WMS_Server/.editorconfig
代码管理/PCS/WCS_Server/.editorconfig
代码管理/PCS/WCS_Server/WIDESEA_System/WIDESEA_System.csproj
*.sln
代码管理/PCS/WCS_Server/WIDESEA_WebApi/appsettings.json
代码管理/WMS/WMS_Server/WIDESEA_Comm/StateEnum/LocationStateEnum.cs
代码管理/WMS/WMS_Server/WIDESEA_Entity/DomainModels/System/dt_materielinfo.cs
代码管理/WMS/WMS_Server/WIDESEA_System/WIDESEA_System.csproj
代码管理/WMS/WMS_Server/WIDESEA_WebApi/appsettings.json
代码管理/WMS/WMS_Server/WIDESEA_WMS/WIDESEA_WMS.csproj
代码管理/WMS/WMS_Server/WIDESEA_WMSServe.sln
代码管理/PCS/WCS_Server/WIDESEA_System/WIDESEA_System.csproj
代码管理/PCS/WCS_Server/WIDESEA_System/WIDESEA_System.csproj
*.csproj
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/BasicSN.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_Comm.MES_Info
{
    /// <summary>
    /// ç”¨äºŽä¸Šä¼ MES信息的车轮信息
    /// </summary>
    public class BasicSN
    {
        public class detail
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Comm/MES_Info/Request/agvTransferListPara.cs
@@ -6,36 +6,46 @@
namespace WIDESEA_Comm.MES_Info.Request
{
    /// <summary>
    /// è½¦è½®ç§»åº“交接,由AGV库交接给毛轮库或者其他库房
    /// </summary>
    public class agvTransferListPara : BasicSN
    {
        /// <summary>
        /// è½¬ç§»å•号
        /// ç§»åº“交接单号
        /// </summary>
        public string transferListID { get; set; }
        /// <summary>
        /// è½¦è½®ç‰©æ–™ç¼–码
        /// è½¦è½®ç‰©æ–™ç¼–号
        /// </summary>
        public string materialCode { get; set; }
        /// <summary>
        /// æŠ€æœ¯çŠ¶æ€
        /// </summary>
        public string drawingNoVer { get; set; }
        /// <summary>
        /// æºåº“房名称
        /// åŽŸåº“æˆ¿åç§°
        /// </summary>
        public string fromWarehouse { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“房名称
        /// </summary>
        public string toWarehouse { get; set; }
        /// <summary>
        /// æ“ä½œäººå‘˜
        /// </summary>
        public string Operator { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime updateTime { get; set; }
        public string updateTime { get; set; }
        /// <summary>
        /// è½¦è½®ä¿¡æ¯
        /// </summary>
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Entity/DomainModels/ToMES/VV_MES_Info.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Entity.DomainModels
{
    public partial class VV_MES_Info
    {
        /// <summary>
        ///ID
        /// </summary>
        [Key]
        [Display(Name = "mes_id")]
        [Column(TypeName = "uniqueidentifier")]
        [Required(AllowEmptyStrings = false)]
        public Guid mes_id { get; set; }
        /// <summary>
        ///工作令号
        /// </summary>
        [Display(Name = "工作令号")]
        [MaxLength(50)]
        [Column(TypeName = "nvarchar(50)")]
        [Editable(true)]
        public string workOrder { get; set; }
        /// <summary>
        ///工单编号
        /// </summary>
        [Display(Name = "工单编号")]
        [MaxLength(40)]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public string jobID { get; set; }
        /// <summary>
        ///需求单号
        /// </summary>
        [Display(Name = "需求单号")]
        [MaxLength(40)]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public string reqID { get; set; }
        /// <summary>
        ///需求单号行号
        /// </summary>
        [Display(Name = "需求单号行号")]
        [MaxLength(20)]
        [Column(TypeName = "nvarchar(20)")]
        [Editable(true)]
        public string reqIDLineNo { get; set; }
        /// <summary>
        ///工单类型 (17-机加工 28-检测线)
        /// </summary>
        [Display(Name = "工单类型")]
        [MaxLength(20)]
        [Column(TypeName = "nvarchar(20)")]
        [Editable(true)]
        public string processCode { get; set; }
        /// <summary>
        ///完成数量
        /// </summary>
        [Display(Name = "完成数量")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? finishNum { get; set; }
        /// <summary>
        ///物料编码
        /// </summary>
        [Display(Name = "物料编码")]
        [MaxLength(20)]
        [Column(TypeName = "nvarchar(20)")]
        [Editable(true)]
        public string materialCode { get; set; }
        /// <summary>
        ///图号
        /// </summary>
        [Display(Name = "图号")]
        [MaxLength(20)]
        [Column(TypeName = "nvarchar(20)")]
        [Editable(true)]
        public string drawingNo { get; set; }
        /// <summary>
        ///技术状态
        /// </summary>
        [Display(Name = "技术状态")]
        [MaxLength(10)]
        [Column(TypeName = "nvarchar(10)")]
        [Editable(true)]
        public string drawingNoVer { get; set; }
        /// <summary>
        ///产品名称
        /// </summary>
        [Display(Name = "产品名称")]
        [MaxLength(40)]
        [Column(TypeName = "nvarchar(40)")]
        [Editable(true)]
        public string productName { get; set; }
        /// <summary>
        ///产品描述
        /// </summary>
        [Display(Name = "产品描述")]
        [Column(TypeName = "nvarchar(200)")]
        [Editable(true)]
        [MaxLength(200)]
        public string productDesc { get; set; }
        /// <summary>
        ///工单数量
        /// </summary>
        [Display(Name = "工单数量")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? quantity { get; set; }
        /// <summary>
        ///轮型代码
        /// </summary>
        [Display(Name = "轮型代码")]
        [MaxLength(20)]
        [Column(TypeName = "nvarchar(20)")]
        [Editable(true)]
        public string typeID { get; set; }
        /// <summary>
        ///打包数量
        /// </summary>
        [Display(Name = "打包数量")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? stackNoRange { get; set; }
        /// <summary>
        ///轮径偏差
        /// </summary>
        [Display(Name = "轮径偏差")]
        [Column(TypeName = "nmberic(18,2)")]
        [Editable(true)]
        public decimal? maxDiameterDiff { get; set; }
        /// <summary>
        ///工单开始时间
        /// </summary>
        [Display(Name = "工单开始时间")]
        [Column(TypeName = "datetime")]
        public DateTime? expectedStartTime { get; set; }
        /// <summary>
        ///工单结束时间
        /// </summary>
        [Display(Name = "工单结束时间")]
        [Column(TypeName = "datetime")]
        public DateTime? expectedFinishTime { get; set; }
        /// <summary>
        ///创建时间
        /// </summary>
        [Display(Name = "创建时间")]
        [Column(TypeName = "datetime")]
        public DateTime CreateTime { get; set; }
        /// <summary>
        ///创建者
        /// </summary>
        [Display(Name = "创建者")]
        [MaxLength(40)]
        [Column(TypeName = "nvarchar(40)")]
        public string creator { get; set; }
        ///// <summary>
        /////工单明细ID
        ///// </summary>
        //[Key]
        //[Display(Name = "mes_detail_id")]
        //[Column(TypeName = "uniqueidentifier")]
        //[Required(AllowEmptyStrings = false)]
        //public Guid mes_detail_id { get; set; }
        ///// <summary>
        /////工单头表ID
        ///// </summary>
        //[Display(Name = "mes_headID")]
        //[Column(TypeName = "uniqueidentifier")]
        //[Required(AllowEmptyStrings = false)]
        //public Guid mes_headID { get; set; }
        /// <summary>
        ///炉代号
        /// </summary>
        [Display(Name = "炉代号")]
        [MaxLength(50)]
        [Column(TypeName = "nvarchar(50)")]
        [Editable(true)]
        public string heatID { get; set; }
        /// <summary>
        ///钢坯号
        /// </summary>
        [Display(Name = "钢坯号")]
        [Column(TypeName = "int")]
        [Editable(true)]
        public int? billetID { get; set; }
        /// <summary>
        ///车轮SN号
        /// </summary>
        [Display(Name = "车轮SN号")]
        [MaxLength(50)]
        [Column(TypeName = "nvarchar(50)")]
        [Editable(true)]
        public string SN { get; set; }
        /// <summary>
        ///热处理批次
        /// </summary>
        [Display(Name = "热处理批次")]
        [MaxLength(30)]
        [Column(TypeName = "varchar(30)")]
        [Editable(true)]
        public string heatBatchID { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_Entity/DomainModels/ToMES/partial/VV_MES_Info.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Entity.DomainModels
{
    public partial class VV_MES_Info
    {
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/Common/AGVTask/HandleTask_Mes.cs
@@ -102,7 +102,7 @@
                        fromWarehouse = "AGV库",
                        toWarehouse = "毛轮库",
                        Operator = task.agv_userid,
                        updateTime = task.agv_createtime
                        updateTime = task.agv_createtime.ToString(),
                    };
                    obj = agvTransferListPara;
                    ActionName = "agvTransferList";
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/ToMes/OutsourceInbound.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using WIDESEA_Comm;
using WIDESEA_Comm.LogInfo;
using WIDESEA_Comm.MES_Info;
using WIDESEA_Comm.MES_Info.Request;
using WIDESEA_Common;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Core.ManageUser;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.Common;
using WIDESEA_WMS.IRepositories;
using WIDESEA_WMS.Repositories;
using static WIDESEA_Comm.MES_Info.BasicSN;
namespace WIDESEA_WMS
{
    public partial class ToMesServer
    {
        /// <summary>
        /// å¤–协入库(检测上料)
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent OutsourceInbound(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string stationNo = saveModel.MainData["stationNo"].ToString();  //缓存架编号
                string user = saveModel.MainData["creator"].ToString();
                string sn = saveModel.MainData["dataSN"].ToString();   //车轮SN号
                int i = 1;  //车轮数量
                foreach (var item in sn.Split(","))
                {
                    if(item!= null)
                    {
                        var info = freeDB.Select<VV_MES_Info>().Where(x => x.SN == item).First();
                        if (info == null)
                        {
                            return content.Error($"第{i}个车轮无检测上料工单信息,请核查工单后在扫描!");
                        }
                        i++;
                    }
                }
                dt_agvtask agvtask = new dt_agvtask
                {
                    agv_barcode = stationNo,
                    agv_code = user,
                    agv_createtime = DateTime.Now,
                    agv_fromaddress = stationNo,
                    agv_qty = i,
                    agv_grade = 1,
                    agv_tasktype = AGVTaskTypeEnum.TaskType_Inbound.ToString(),
                    agv_taskstate = AGVTaskStateEnum.Create.ToString(),
                    agv_toaddress = "",
                };
                freeDB.Add(agvtask);
                return content.OK();
            }
            catch (Exception ex)
            {
                return content.Error($"呼叫AGV失败:{ex.Message}");
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/ToMes/SendEpmtyTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using WIDESEA_Comm;
using WIDESEA_Comm.LogInfo;
using WIDESEA_Comm.MES_Info;
using WIDESEA_Comm.MES_Info.Request;
using WIDESEA_Common;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Core.ManageUser;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.Common;
using WIDESEA_WMS.IRepositories;
using WIDESEA_WMS.Repositories;
using static WIDESEA_Comm.MES_Info.BasicSN;
namespace WIDESEA_WMS
{
    public partial class ToMesServer
    {
        /// <summary>
        /// ç©ºç›˜æ“ä½œ  (外协空盘入库,空盘补送)
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent SendEpmtyTask(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string cacheNo = saveModel.MainData["cacheNo"].ToString();  //缓存架编号
                string user = saveModel.MainData["creator"].ToString();
                string type = saveModel.MainData["radio"].ToString();   //1为空盘入库 2为空盘出库
                int number = Convert.ToInt32(saveModel.MainData["number"].ToString());
                if (type == "1")  //空盘入库
                {
                    //寻找空盘库位
                    dt_stationinfo emptyLocation = GetEmptyLocation();
                    dt_agvtask agvtask = new dt_agvtask
                    {
                        agv_barcode = cacheNo,
                        agv_code = user,
                        agv_createtime = DateTime.Now,
                        agv_fromaddress = cacheNo,
                        agv_qty = number,
                        agv_grade = 1,
                        agv_tasktype = AGVTaskTypeEnum.TaskType_Inbound.ToString(),
                        agv_taskstate = AGVTaskStateEnum.Create.ToString(),
                        agv_toaddress = emptyLocation.stationCode,
                    };
                    freeDB.Add(agvtask);
                }
                else
                {
                    //根据库存查询空盘库存信息
                    dt_inventory inventory = freeDB.Select<dt_inventory>().Where(x => x.area == "11").OrderByDescending(x => x.OnlineTime).First(); //取最晚的入库车轮
                    //数量?
                    //var stationinfo = freeDB.Select<dt_stationinfo>().Where(x => x.stationCode == inventory.stationCode).First();
                    //int num = Convert.ToInt16(stationinfo.quantity);
                    dt_agvtask agvtask = new dt_agvtask
                    {
                        agv_barcode = cacheNo,
                        agv_code = user,
                        agv_createtime = DateTime.Now,
                        agv_fromaddress = inventory.stationCode,
                        agv_qty = 5,   //inventory.,   //告诉AGV取第几个车轮?
                        agv_grade = 1,
                        agv_tasktype = AGVTaskTypeEnum.TaskType_Inbound.ToString(),
                        agv_taskstate = AGVTaskStateEnum.Create.ToString(),
                        agv_toaddress = cacheNo,
                    };
                    freeDB.Add(agvtask);
                }
                return content.OK();
            }
            catch (Exception ex)
            {
                return content.Error($"呼叫AGV失败:{ ex.Message}");
            }
        }
        private dt_stationinfo GetEmptyLocation()
        {
            VOLContext context = new VOLContext();
            Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
            var station = stationinfoRepository.Find(x => x.line == 9 && x.location_state == LocationStateEnum.Empty.ToString() && x.area == "11").FirstOrDefault();
            //  todo区分大小托盘
            if (station != null)
            {
                return station;
            }
            else
            {
                throw new Exception("空盘库位已满,无法入库!");
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/ToMes/agvTransferList.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using WIDESEA_Comm;
using WIDESEA_Comm.LogInfo;
using WIDESEA_Comm.MES_Info;
using WIDESEA_Comm.MES_Info.Request;
using WIDESEA_Common;
using WIDESEA_Core.ManageUser;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.Common;
using static WIDESEA_Comm.MES_Info.BasicSN;
namespace WIDESEA_WMS
{
    public partial class ToMesServer
    {
        /// <summary>
        /// PDA移库交接
        /// </summary>
        /// <param name="requestTemp"></param>
        /// <returns></returns>
        public WebResponseContent agvTransferList(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string sn = saveModel.MainData["sn"].ToString();
                string user = saveModel.MainData["creator"].ToString();
                //工单号生成
                string jobID = "TW" + DateTime.Now.ToString("HH-mm-ss-ff");
                //根据库存查询车轮信息
                dt_inventory inventory = freeDB.Select<dt_inventory>().Where(x => x.SN.Contains(sn)).First();
                if (inventory == null)
                {
                    return content.Error($"无此车轮{sn}SN号,请核查库存记录!");
                }
                List<detail> list = new List<detail>(); //车轮信息
                foreach (var item in inventory.SN.Split(","))
                {
                    detail detail = new detail();
                    detail.sn = item;
                    list.Add(detail);
                }
                agvTransferListPara listPara = new agvTransferListPara
                {
                    details = list,
                    transferListID = jobID,
                    toWarehouse = "毛轮库",
                    fromWarehouse = "AGV库",
                    updateTime = DateTime.Now.ToString(),
                    drawingNoVer = "",
                    materialCode = "",
                    Operator = user == null ? "admin" : user
                };
                var postJson = JsonConvert.SerializeObject(listPara);
                string mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + "agvTransferList");
                var requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
                if (requestMes.code == "200" && requestMes.Type == "success")
                {
                    return content.OK("移库交接成功!");
                    //日志记录上传数据成功
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WebApi/Controllers/ToWms/ToWMSController.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS;
@@ -21,5 +22,39 @@
            return new ToMesServer().AddToFloat3(request);
        }
        /// <summary>
        /// å¤–协移库
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost, Route("agvTransferList")]
        public WebResponseContent agvTransferList([FromBody] SaveModel saveModel)
        {
            return new ToMesServer().agvTransferList(saveModel);
        }
        /// <summary>
        /// å¤–协入库(检测上料)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost, Route("OutsourceInbound")]
        public WebResponseContent OutsourceInbound([FromBody] SaveModel saveModel)
        {
            return new ToMesServer().OutsourceInbound(saveModel);
        }
        /// <summary>
        /// ç©ºç›˜
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost, Route("SendEpmtyTask")]
        public WebResponseContent SendEpmtyTask([FromBody] SaveModel saveModel)
        {
            return new ToMesServer().SendEpmtyTask(saveModel);
        }
    }
}