Преглед изворни кода

Merge branch 'master' of http://49.235.130.76/LN/LPLocalhostMES

Eson пре 2 недеља
родитељ
комит
278b617a1e

+ 67 - 22
LocalhostMES/Api/Controllers/MesController.cs

@@ -1,5 +1,6 @@
 using LocalhostMES.Core;
 using LocalhostMES.DataBase;
+using LocalhostMES.Enums;
 using LocalhostMES.Helpers;
 using LocalhostMES.Models;
 using Newtonsoft.Json;
@@ -172,16 +173,16 @@ namespace LocalhostMES.Api.Controllers
 
                 LogHelper.WriteLogInfo("请求参数:");
                 LogHelper.WriteLogInfo(JsonConvert.SerializeObject(request, Formatting.Indented));
-                if ( workOrder[0].IsLocalhost)
+                if ( workOrder[ 0 ].IsLocalhost )
                 {
                     var Manualsninfo = DatabaseHelper.SelectSnInfo(request.workOrderNo);
                     var WorkOrder= DatabaseHelper.SelectWorkOrderInfo(request.workOrderNo);
                     DatabaseHelper.InsertSnInfo(new SnInfo()
                     {
-                        Sn = WorkOrder[0].MaterialCode+"000001" + DateCodeConverter.GetYearCode(DateTime.Now.Year) +
+                        Sn = WorkOrder[ 0 ].MaterialCode + "000001" + DateCodeConverter.GetYearCode(DateTime.Now.Year) +
                              DateCodeConverter.GetMonthCode(DateTime.Now.Month) +
                              DateCodeConverter.GetDayCode(DateTime.Now.Day) +
-                             "00000" +(Manualsninfo.Count+1),
+                             "00000" + ( Manualsninfo.Count + 1 ),
                         IsUsed = false,
                         WorkOrderNo = request.workOrderNo,
                         GenerateTime = DateTime.Now,
@@ -191,23 +192,23 @@ namespace LocalhostMES.Api.Controllers
                 else
                 {
                     var hassninfo = DatabaseHelper.SelectSnInfo(request.workOrderNo, true, false);
-                    if (hassninfo.Count == 0)
+                    if ( hassninfo.Count == 0 )
                     {
 
                         ApiResponse<SnPrintResponseData> mesres = await management.ApiClient.RequestSnPrintAsync(request);
-                        if (mesres.success && mesres.data != null && mesres.data.Sn.Count != 0)
+                        if ( mesres.success && mesres.data != null && mesres.data.Sn.Count != 0 )
                         {
-                            for (int i = 0; i < mesres.data.Sn.Count; i++)
+                            for ( int i = 0; i < mesres.data.Sn.Count; i++ )
                             {
-                                if (!DatabaseHelper.InsertSnInfo(new SnInfo()
+                                if ( !DatabaseHelper.InsertSnInfo(new SnInfo()
                                 {
                                     WorkOrderNo = mesres.data.WorkOrderNo,
-                                    Sn = mesres.data.Sn[i].Sn,
+                                    Sn = mesres.data.Sn[ i ].Sn,
                                     GenerateTime = DateTime.Now,
                                     PrintType = "1",
                                     IsUsed = false,
 
-                                }))
+                                }) )
                                 {
                                     mesres.msg = "插入SN到数据库出错";
                                     mesres.success = false;
@@ -330,7 +331,7 @@ namespace LocalhostMES.Api.Controllers
             {
 
                 LogHelper.WriteLogInfo($"收到请求: 接收SN和关键件");
-               
+
                 // 验证请求头
                 if ( !ValidateHeaders() )
                 {
@@ -340,28 +341,50 @@ namespace LocalhostMES.Api.Controllers
                 if ( string.IsNullOrEmpty(request.plant) ||
                     string.IsNullOrEmpty(request.stationCode) ||
                     string.IsNullOrEmpty(request.positionCode) ||
-                    string.IsNullOrEmpty(request.sn) ||
+                    //  string.IsNullOrEmpty(request.sn) ||  //之前这里需要扫SN,客户新需求  不扫码。直接按顺序走
                     string.IsNullOrEmpty(request.scanTime) )
                 {
                     return BadRequest("必填字段不能为空");
                 }
+
+
                 var res = DatabaseHelper.SelectWorkOrderInfo();
                 string stationOrder = "";
-                if (request.stationCode.Split('-')[2] == "L")
+                string _materialCode="";
+                if ( request.stationCode.Split('-')[ 2 ] == "L" )
                 {
                     stationOrder = res.LeftOrderNo;
+                    _materialCode = res.LeftCheckCode;
                 }
                 else
                 {
                     stationOrder = res.RightOrderNo;
+                    _materialCode = res.RightCheckCode;
                 }
                 var workOrder = DatabaseHelper.SelectWorkOrderInfo(stationOrder);
                 // 验证工单是否存在
-                if (workOrder.Count == 0)
+                if ( workOrder.Count == 0 )
                 {
                     return BadRequest($"工单 {res.LeftOrderNo} 不存在");
                 }
-                if (workOrder[0].IsLocalhost)
+                if ( string.IsNullOrEmpty(request.sn) )
+                {
+                    List<LocalhostPartInfo> partInfos= DatabaseHelper.SelectPartInfo(_materialCode, request.stationCode);
+                    if ( partInfos.Count != 0 )
+                    {
+                        SnInfo info= DatabaseHelper.SelectSnInfoForStation(stationOrder, partInfos[ 0 ].StationType);
+                        if ( info != null )
+                        {
+                            request.sn = info.Sn;
+                        }
+                    }
+                    else
+                    {
+                        return BadRequest($"工站信息不存在");
+                    }
+
+                }
+                if ( workOrder[ 0 ].IsLocalhost )
                 {
                     return Ok(new ApiResponse<bool?>() { data = true });
                 }
@@ -416,7 +439,6 @@ namespace LocalhostMES.Api.Controllers
                         ScanType = request.scanTpye
                     };
                     DatabaseHelper.InsertBindRecord(bindRecord);
-
                 }
                 if ( workOrder[ 0 ].IsLocalhost )
                 {
@@ -426,7 +448,6 @@ namespace LocalhostMES.Api.Controllers
                 var okresponse = await management.ApiClient.SendSnComponentAsync(request);
                 if ( okresponse.success && okresponse.code == "200" )
                 {
-
                     LogHelper.WriteLogInfo($"收到请求: 接收SN和关键件  成功");
                     return Ok(okresponse);
                 }
@@ -504,7 +525,7 @@ namespace LocalhostMES.Api.Controllers
                 // 验证必填字段
                 if ( string.IsNullOrEmpty(request.plant) ||
                     string.IsNullOrEmpty(request.station) ||
-                    string.IsNullOrEmpty(request.sn) ||
+                    //string.IsNullOrEmpty(request.sn) ||
                     string.IsNullOrEmpty(request.overallResult) )
                 {
                     return BadRequest("必填字段不能为空");
@@ -517,20 +538,42 @@ namespace LocalhostMES.Api.Controllers
                 }
                 var res = DatabaseHelper.SelectWorkOrderInfo();
                 string stationOrder = "";
-                if (request.station.Split('-')[2] == "L")
+                string _materialCode="";
+                StationType stationtype= StationType.OP10;
+                if ( request.station.Split('-')[ 2 ] == "L" )
                 {
                     stationOrder = res.LeftOrderNo;
+                    _materialCode = res.LeftCheckCode;
                 }
-                else 
+                else
                 {
                     stationOrder = res.RightOrderNo;
+                    _materialCode = res.RightCheckCode;
                 }
-                    var workOrder = DatabaseHelper.SelectWorkOrderInfo(stationOrder);
+                var workOrder = DatabaseHelper.SelectWorkOrderInfo(stationOrder);
                 // 验证工单是否存在
-                if (workOrder.Count == 0)
+                if ( workOrder.Count == 0 )
                 {
-                    return BadRequest($"工单 {res.LeftOrderNo} 不存在");
+                    return BadRequest($"工单 {stationOrder} 不存在");
                 }
+                if ( string.IsNullOrEmpty(request.sn) )
+                {
+                    List<LocalhostPartInfo> partInfos= DatabaseHelper.SelectPartInfo(_materialCode, request.station);
+                    if ( partInfos.Count != 0 )
+                    {
+                        stationtype= partInfos[0].StationType;
+                        SnInfo info= DatabaseHelper.SelectSnInfoForStation(stationOrder, partInfos[ 0 ].StationType);
+                        if ( info != null )
+                        {
+                            request.sn = info.Sn;
+                        }
+                    }
+                    else
+                    {
+                        return BadRequest($"工站信息不存在");
+                    }
+                }
+
                 // 保存加工记录
                 var processRecord = new ProcessRecord
                 {
@@ -554,6 +597,7 @@ namespace LocalhostMES.Api.Controllers
                         data = true
                     };
                     LogHelper.WriteLogInfo($"收到请求:接收工件加工参数  成功");
+                    DatabaseHelper.UpdateSnInfo(request.sn, stationOrder,stationtype); 
                     return Ok(response);
                 }
                 var okresponse = await management.ApiClient.SendProcessParametersAsync(request);
@@ -561,6 +605,7 @@ namespace LocalhostMES.Api.Controllers
                 if ( okresponse.success && okresponse.code == "200" )
                 {
                     LogHelper.WriteLogInfo($"收到请求: 接收工件加工参数  成功");
+                    DatabaseHelper.UpdateSnInfo(request.sn, stationOrder, stationtype);
                     return Ok(okresponse);
                 }
                 else

+ 141 - 33
LocalhostMES/DataBase/DatabaseHelper.cs

@@ -3,6 +3,7 @@ using LocalhostMES.Enums;
 using LocalhostMES.Models;
 using SqlSugar;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.InteropServices;
@@ -51,10 +52,10 @@ namespace LocalhostMES.DataBase
                 EnsureLocalhostPartInfoColumns();
                 // 您的数据库操作代码
             }
-            catch (AggregateException ex)
+            catch ( AggregateException ex )
             {
                 // 遍历所有内部异常
-                foreach (var inner in ex.InnerExceptions)
+                foreach ( var inner in ex.InnerExceptions )
                 {
                     Console.WriteLine($"内部异常: {inner.Message}");
                     Console.WriteLine(inner.StackTrace);
@@ -62,20 +63,20 @@ namespace LocalhostMES.DataBase
                 // 或者只取第一个
                 // var actualException = ex.InnerException;
             }
-            catch (SqlSugarException ex)
+            catch ( SqlSugarException ex )
             {
                 Console.WriteLine($"错误消息:{ex.Message}");
                 Console.WriteLine($"内部异常:{ex.InnerException?.Message}");
                 Console.WriteLine($"堆栈:{ex.StackTrace}");
                 // 也可以记录日志
             }
-            catch (Exception e) 
+            catch ( Exception e )
             {
-            
-            
+
+
             }
 
-            
+
 
         }
 
@@ -127,19 +128,21 @@ namespace LocalhostMES.DataBase
             else
             {
                 var list = Db.Queryable<WorkOrderInfo>().
-                    Select(it=>new WorkOrderInfo 
-                    {OrderNo=it.OrderNo,
+                    Select(it=>new WorkOrderInfo
+                    {
+                        OrderNo=it.OrderNo,
                         LineCode=it.LineCode,
-                        CreateTime=it.CreateTime, 
-                        EndTime=it.EndTime, 
+                        CreateTime=it.CreateTime,
+                        EndTime=it.EndTime,
                         IsLocalhost=it.IsLocalhost,
-                        MaterialCode=it.MaterialCode, 
+                        MaterialCode=it.MaterialCode,
                         MaterialName=it.MaterialName,
                         PlannedQuantity=it.PlannedQuantity,
-                        StartTime=it.StartTime, 
+                        StartTime=it.StartTime,
                         Status=it.Status,
-                        WorkOrderNo=it.WorkOrderNo, 
-                        CompletedQuantity=SqlFunc.Subqueryable<SnInfo>().Where(s=>s.WorkOrderNo==it.WorkOrderNo && s.IsUsed).Count() }).ToList();
+                        WorkOrderNo=it.WorkOrderNo,
+                        CompletedQuantity=SqlFunc.Subqueryable<SnInfo>().Where(s=>s.WorkOrderNo==it.WorkOrderNo && s.IsUsed).Count()
+                    }).ToList();
                 NormalizeWorkOrderStatus(list);
                 return list;
             }
@@ -147,17 +150,17 @@ namespace LocalhostMES.DataBase
 
         private static void NormalizeWorkOrderStatus(List<WorkOrderInfo> workOrders)
         {
-            if (workOrders == null || workOrders.Count == 0)
+            if ( workOrders == null || workOrders.Count == 0 )
             {
                 return;
             }
 
             var changed = false;
-            foreach (var workOrder in workOrders)
+            foreach ( var workOrder in workOrders )
             {
-                if (workOrder.PlannedQuantity > 0 &&
+                if ( workOrder.PlannedQuantity > 0 &&
                     workOrder.CompletedQuantity >= workOrder.PlannedQuantity &&
-                    workOrder.Status != "6")
+                    workOrder.Status != "6" )
                 {
                     workOrder.Status = "6";
                     Db.Updateable<WorkOrderInfo>()
@@ -168,7 +171,7 @@ namespace LocalhostMES.DataBase
                 }
             }
 
-            if (changed)
+            if ( changed )
             {
                 NotifyChanged(MesDataScope.WorkOrder);
             }
@@ -224,6 +227,60 @@ namespace LocalhostMES.DataBase
                 return Db.Queryable<SnInfo>().ToList();
             }
         }
+
+        public static SnInfo SelectSnInfoForStation(string workOrderNo,StationType type)
+        {
+            if ( workOrderNo != null )
+            {
+               var query=Db.Queryable<SnInfo>();
+                switch ( type )
+                {
+                    case StationType.OP10:
+                        break;
+                    case StationType.OP20L:
+                    case StationType.OP20R:
+                        query = query.Where(it => it.OP20State==false);
+                        break;
+                    case StationType.OP30L:
+                    case StationType.OP30R:
+                        query = query.Where(it => it.OP30State == false);
+                        break;
+                    case StationType.OP40L:
+                    case StationType.OP40R:
+                        query = query.Where(it => it.OP40State == false);
+                        break;
+                    case StationType.OP50L:
+                    case StationType.OP50R:
+                        query = query.Where(it => it.OP50State == false);
+                        break;
+                    case StationType.OP60L:
+                    case StationType.OP60R:
+                        query = query.Where(it => it.OP60State == false);
+                        break;
+                    case StationType.OP70L:
+                    case StationType.OP70R:
+                        query = query.Where(it => it.OP70State == false);
+                        break;
+                    case StationType.OP80L:
+                    case StationType.OP80R:
+                        query = query.Where(it => it.OP80State == false);
+                        break;
+                    default:
+                        break;
+                }
+                List<SnInfo> snInfos= query.Where(it => it.WorkOrderNo == workOrderNo).OrderBy(it => it.GenerateTime).Take(1).ToList();
+                if ( snInfos.Count != 0 ) 
+                {
+                    return snInfos[ 0 ];
+                }
+                return null;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
         public static bool InsertSnInfo(SnInfo info)
         {
 
@@ -238,7 +295,7 @@ namespace LocalhostMES.DataBase
         public static bool InsertSnInfos(List<SnInfo> info)
         {
 
-            if (Db.Storageable(info).ExecuteCommand() == info.Count)
+            if ( Db.Storageable(info).ExecuteCommand() == info.Count )
             {
                 NotifyChanged(MesDataScope.Sn);
                 return true;
@@ -257,6 +314,53 @@ namespace LocalhostMES.DataBase
             return false;
         }
 
+        public static bool UpdateSnInfo(string sn,string workorder,StationType type)
+        {
+            var query= Db.Updateable<SnInfo>().Where(it => it.Sn == sn&&it.WorkOrderNo==workorder);
+
+            switch ( type )
+            {
+                case StationType.OP10:
+                    break;
+                case StationType.OP20L:
+                case StationType.OP20R:
+                    query= query.SetColumns(it => it.OP20State == true);
+                    break;
+                case StationType.OP30L:
+                case StationType.OP30R:
+                    query = query.SetColumns(it => it.OP30State == false);
+                    break;
+                case StationType.OP40L:
+                case StationType.OP40R:
+                    query = query.SetColumns(it => it.OP40State == false);
+                    break;
+                case StationType.OP50L:
+                case StationType.OP50R:
+                    query = query.SetColumns(it => it.OP50State == false);
+                    break;
+                case StationType.OP60L:
+                case StationType.OP60R:
+                    query = query.SetColumns(it => it.OP60State == false);
+                    break;
+                case StationType.OP70L:
+                case StationType.OP70R:
+                    query = query.SetColumns(it => it.OP70State == false);
+                    break;
+                case StationType.OP80L:
+                case StationType.OP80R:
+                    query = query.SetColumns(it => it.OP80State == false);
+                    break;
+                default:
+                    break;
+            }
+            if ( query.ExecuteCommand() == 1 )
+            {
+                NotifyChanged(MesDataScope.Sn);
+                return true;
+            }
+            return false;
+        }
+
         public static bool DeleteSnInfo(SnInfo info)
         {
 
@@ -386,32 +490,33 @@ namespace LocalhostMES.DataBase
             return false;
         }
 
-
         public static List<LocalhostPartInfo> SelectPartInfo(StationType stationType)
         {
-            return Db.Queryable<LocalhostPartInfo>().Where(it => it.StationType == stationType).ToList();
+          return  Db.Queryable<LocalhostPartInfo>().Where(it => it.StationType == stationType).ToList();
+        }
+        public static List<LocalhostPartInfo> SelectPartInfo(string _materialCode, string stationCode)
+        {
+           return Db.Queryable<LocalhostPartInfo>().Where(it => it.StationCode == stationCode&&it.MaterialCode==_materialCode).ToList();          
         }
-
         public static bool InsertPartInfo(LocalhostPartInfo info)
         {
             var ok = Db.Storageable(info).ExecuteCommand() > 0;
-            if (ok)
+            if ( ok )
             {
                 NotifyChanged(MesDataScope.KeyPart);
             }
-
             return ok;
         }
 
         public static int InsertPartInfos(List<LocalhostPartInfo> infos)
         {
-            if (infos == null || infos.Count == 0)
+            if ( infos == null || infos.Count == 0 )
             {
                 return 0;
             }
 
             var affected = Db.Storageable(infos).ExecuteCommand();
-            if (affected > 0)
+            if ( affected > 0 )
             {
                 NotifyChanged(MesDataScope.KeyPart);
             }
@@ -424,14 +529,17 @@ namespace LocalhostMES.DataBase
             var ok = Db.Deleteable<LocalhostPartInfo>()
                 .Where(it => it.StationType == stationType && it.PartNum == partNum)
                 .ExecuteCommand() >= 1;
-            if (ok)
+            if ( ok )
             {
                 NotifyChanged(MesDataScope.KeyPart);
             }
 
             return ok;
         }
-
+        /// <summary>
+        /// 零件
+        /// </summary>
+        /// <returns></returns>
         public static List<ParkingLot> SelectParkingLot()
         {
             return Db.Queryable<ParkingLot>().OrderBy(it => it.Id).ToList();
@@ -440,7 +548,7 @@ namespace LocalhostMES.DataBase
         public static bool InsertParkingLot(ParkingLot info)
         {
             var ok = Db.Storageable(info).ExecuteCommand() > 0;
-            if (ok)
+            if ( ok )
             {
                 NotifyChanged(MesDataScope.ParkingLot);
             }
@@ -451,7 +559,7 @@ namespace LocalhostMES.DataBase
         public static bool UpdateParkingLot(ParkingLot info)
         {
             var ok = Db.Updateable(info).Where(it => it.Id == info.Id).ExecuteCommand() == 1;
-            if (ok)
+            if ( ok )
             {
                 NotifyChanged(MesDataScope.ParkingLot);
             }
@@ -462,7 +570,7 @@ namespace LocalhostMES.DataBase
         public static bool DeleteParkingLot(int id)
         {
             var ok = Db.Deleteable<ParkingLot>().Where(it => it.Id == id).ExecuteCommand() == 1;
-            if (ok)
+            if ( ok )
             {
                 NotifyChanged(MesDataScope.ParkingLot);
             }

+ 21 - 0
LocalhostMES/Models/MesModel.cs

@@ -137,6 +137,27 @@ namespace LocalhostMES.Models
         public string WorkOrderNo { get; set; }           // 所属工单
         public string PrintType { get; set; }             // 条码类型
         public bool IsUsed { get; set; } = false;         // 是否已使用
+
+        public bool OP20State { get; set; } = false;         //20 是否已过
+
+        public bool OP30State { get; set; } = false;         //30 是否已过
+
+
+        public bool OP40State { get; set; } = false;         //40 是否已过
+
+
+        public bool OP50State { get; set; } = false;         //50 是否已过
+
+
+
+        public bool OP60State { get; set; } = false;         //60 是否已过
+
+
+
+        public bool OP70State { get; set; } = false;         //70 是否已过
+
+
+        public bool OP80State { get; set; } = true;         //80 是否已过
     }
 
     public class SnPrintResponseData