diff --git a/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs b/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs index fa53aa4..ba90201 100644 --- a/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs +++ b/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs @@ -99,10 +99,10 @@ public class WorkOrderProgressController : BaseController //TODO 开始某个工单 [HttpGet("start_workorder")] - public IActionResult StartWorkOrder(string workorder) + public async Task StartWorkOrder(string workorder) { if (string.IsNullOrEmpty(workorder)) return SUCCESS(null); - var response = workorderProgressService.StartWorkOrder(workorder); + var response = await workorderProgressService.StartWorkOrder(workorder); return SUCCESS(response); } diff --git a/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs b/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs index caf4b6a..f56d6f7 100644 --- a/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs +++ b/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs @@ -106,10 +106,10 @@ namespace DOAN.Admin.Mobile.Controllers //TODO 开始某个工单 [HttpGet("start_workorder")] - public IActionResult StartWorkOrder(string workorder) + public async Task StartWorkOrder(string workorder) { if (string.IsNullOrEmpty(workorder)) return SUCCESS(null); - var response = padReportWorkService.StartWorkOrder(workorder); + var response =await padReportWorkService.StartWorkOrder(workorder); return SUCCESS(response); } diff --git a/DOAN.Admin.WebApi/DOAN.WebApi.csproj b/DOAN.Admin.WebApi/DOAN.WebApi.csproj index 8e4ddf0..5768209 100644 --- a/DOAN.Admin.WebApi/DOAN.WebApi.csproj +++ b/DOAN.Admin.WebApi/DOAN.WebApi.csproj @@ -25,6 +25,9 @@ + + + true diff --git a/DOAN.Admin.WebApi/appsettings.Production.json b/DOAN.Admin.WebApi/appsettings.Production.json index 4d9a8d0..4050603 100644 --- a/DOAN.Admin.WebApi/appsettings.Production.json +++ b/DOAN.Admin.WebApi/appsettings.Production.json @@ -59,7 +59,7 @@ "RefreshTokenTime": 5, //分钟 "TokenType": "Bearer" }, - "InjectClass": [ "DOAN.Repository", "DOAN.Service", "DOAN.Tasks", "DOAN.ServiceCore" ], //自动注入类 + "InjectClass": [ "DOAN.Repository", "DOAN.Service", "DOAN.Tasks", "DOAN.ServiceCore" ,"MDM"], //自动注入类 "ShowDbLog": false, //是否打印db日志 "InitDb": false, //是否初始化db "DemoMode": false, //是否演示模式 diff --git a/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs b/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs index 1f7a165..213a61e 100644 --- a/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs +++ b/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs @@ -61,8 +61,10 @@ namespace DOAN.Model.MES.product.Dto /// public string Specification { get; set; } - - //public string Project { get; set; } + /// + /// 项目号 + /// + public string Project { get; set; } /// /// 客户编码 /// diff --git a/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs b/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs index d753dea..b178760 100644 --- a/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs +++ b/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs @@ -25,7 +25,7 @@ namespace DOAN.Service.JobKanban.IService ProWorkorderDto4 GetWorkOrderDetail(string workorder); KanbanInfo GetKanbanNum(DateTime today, string line_code, string group_code); - int StartWorkOrder(string workorder); + Task StartWorkOrder(string workorder); int FinishWorkOrder(string workorder); ProWorkorder GetProductingWorkorder(string line_code, DateTime handleDate); int AddLabelLog(string labelContext, string workOrder); diff --git a/DOAN.Service/JobKanban/WorkorderProgressService.cs b/DOAN.Service/JobKanban/WorkorderProgressService.cs index 0478fc9..da41c43 100644 --- a/DOAN.Service/JobKanban/WorkorderProgressService.cs +++ b/DOAN.Service/JobKanban/WorkorderProgressService.cs @@ -1,8 +1,10 @@ -using DOAN.Model.JobKanban; +using DOAN.Infrastructure.Helper; +using DOAN.Model.JobKanban; using DOAN.Model.MES.base_; using DOAN.Model.MES.mm; using DOAN.Model.MES.product; using DOAN.Model.MES.product.Dto; +using DOAN.Model.MES.recipe; using DOAN.Model.Mobile; using DOAN.Service.JobKanban.IService; using DOAN.Service.MES.mm.line; @@ -120,7 +122,7 @@ public class WorkorderProgressService : BaseService, IWorkorderPro return kanbanInfo; } - public int StartWorkOrder(string workorder) + public async Task StartWorkOrder(string workorder) { var result = 0; // 获取同一天 同一组 同一线 的所有工单 把状态2 设为init 1 @@ -139,7 +141,68 @@ public class WorkorderProgressService : BaseService, IWorkorderPro result = Context.Updateable().SetColumns(it => it.Status == 2) .SetColumns(it => it.StartTime == DateTime.Now) .Where(it => it.Workorder == workorder).ExecuteCommand(); + + }); + //TODO 拼接MQTT消息,发送给设备,工单信息和配方信息 + var spec = handleWorkorder.Specification; + + var RecipeMesg = Context.Queryable() + .LeftJoin((rpr, r) => rpr.RecipeCode == r.RecipeCode) + .Where((rpr, r) => SqlFunc.Like(spec, rpr.RecipeCode + "%")) + .Where((rpr, r) => r.Status == 1) + .Select((rpr, r) => new + { + RecipeCode = r.RecipeCode, + Version = r.Version, + ParamList = SqlFunc.Subqueryable() + .Where(it => it.RecipeCode == r.RecipeCode && it.Version == r.Version) + .ToList(), + // 添加匹配长度用于排序 + MatchLength = rpr.RecipeCode.Length + }) + .MergeTable() + .OrderByDescending(x => x.MatchLength) // 按匹配长度降序排列 + .First(); // 取第一个(匹配最长的) + + + // 合并两个对象为匿名对象 + var combinedObject = new + { + WorkorderInfo = handleWorkorder, + RecipeInfo = RecipeMesg + }; + + + string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(combinedObject, Newtonsoft.Json.Formatting.Indented); + //插入配方派发日志 + if (RecipeMesg != null && !string.IsNullOrEmpty(RecipeMesg.RecipeCode)) + { + PfRecipeIssueLog pfRecipeIssueLog = new PfRecipeIssueLog(); + pfRecipeIssueLog.RecipeCode = RecipeMesg.RecipeCode; + pfRecipeIssueLog.Version = RecipeMesg.Version; + pfRecipeIssueLog.IssueTime = DateTime.Now; + pfRecipeIssueLog.Workorder = handleWorkorder.Workorder; + pfRecipeIssueLog.Productcode = handleWorkorder.ProductionCode; + pfRecipeIssueLog.Productname = handleWorkorder.ProductionName; + pfRecipeIssueLog.CreatedBy = "PDA"; + pfRecipeIssueLog.CreatedTime = DateTime.Now; + Context.Insertable(pfRecipeIssueLog).ExecuteCommand(); + + } + + + MqttHelper _mqttHelper = new MqttHelper("192.168.50.163", 1883); + + // 连接 + await _mqttHelper.ConnectAsync(); + + // 发送多条消息 + + await _mqttHelper.PublishMessageAsync("MES/Workorder/Start", jsonString); + + // 断开连接 + await _mqttHelper.DisconnectAsync(); return result; } @@ -174,7 +237,7 @@ public class WorkorderProgressService : BaseService, IWorkorderPro log.Id = XueHua; log.ProductionLabelCode = labelContext; log.Workorder = workOrder; - // log.Status = 1; + // log.Status = 1; log.CreatedTime = DateTime.Now; log.CreatedBy = "终检台"; @@ -202,10 +265,10 @@ public class WorkorderProgressService : BaseService, IWorkorderPro var checked_workorder = Context.Queryable().Where(it => it.Workorder == workorder) .First(); //if (!labelContext.Contains(checked_workorder.Specification)) - // 产品不属于这个工单里 + // 产品不属于这个工单里 if (labelContext.IndexOf(checked_workorder.Specification, StringComparison.OrdinalIgnoreCase) < 0) { - return -1; + return -1; } // 增加标签长度判断 36个字符 //if (labelContext.Length != 40) @@ -234,7 +297,7 @@ public class WorkorderProgressService : BaseService, IWorkorderPro reportWork.CreatedBy = "kanban"; reportWork.UpdatedBy = "kanban"; reportWork.UpdatedTime = DateTime.Now; - var ExistReportwork =Context.Queryable().Where(it => it.FkWorkorder == workorder).First(); + var ExistReportwork = Context.Queryable().Where(it => it.FkWorkorder == workorder).First(); var result = 0; if (ExistReportwork != null) { @@ -256,27 +319,27 @@ public class WorkorderProgressService : BaseService, IWorkorderPro } // TODO 线边库出库(产线触摸屏) -/* try - { - // 计算Bom表 - string InvCode = checked_workorder.ProductionCode; - // 查看需要的子件 - var bomList = Context.Queryable().Where(it => it.InvCode == InvCode).ToList(); - foreach(BaseMaterialBom bom in bomList) - { - int quantity = 0; - if (int.TryParse(bom.Iusequantity, out int res)) + /* try { - quantity = res; + // 计算Bom表 + string InvCode = checked_workorder.ProductionCode; + // 查看需要的子件 + var bomList = Context.Queryable().Where(it => it.InvCode == InvCode).ToList(); + foreach(BaseMaterialBom bom in bomList) + { + int quantity = 0; + if (int.TryParse(bom.Iusequantity, out int res)) + { + quantity = res; + } + MmLineInventoryService mmLineInventoryService = new MmLineInventoryService(); + mmLineInventoryService.outboundLineMaterial(2,reportWork.LineCode, bom.SubInvCode, checked_workorder.Workorder, reportWork.LineCode, quantity); + } } - MmLineInventoryService mmLineInventoryService = new MmLineInventoryService(); - mmLineInventoryService.outboundLineMaterial(2,reportWork.LineCode, bom.SubInvCode, checked_workorder.Workorder, reportWork.LineCode, quantity); - } - } - catch (Exception) - { - throw; - }*/ + catch (Exception) + { + throw; + }*/ return result; @@ -326,7 +389,7 @@ public class WorkorderProgressService : BaseService, IWorkorderPro } - + /// /// 根据工单号 查询每个工单号进度 @@ -358,7 +421,7 @@ public class WorkorderProgressService : BaseService, IWorkorderPro { var result = Context.Queryable().Where(it => it.Workorder == pre_workorder) .Select(it => it.EndLabel).First(); - if (!string.IsNullOrEmpty(result) ) + if (!string.IsNullOrEmpty(result)) { return true; } diff --git a/DOAN.Service/Mobile/PADReportWorkService.cs b/DOAN.Service/Mobile/PADReportWorkService.cs index 6a9eee8..52b2c2a 100644 --- a/DOAN.Service/Mobile/PADReportWorkService.cs +++ b/DOAN.Service/Mobile/PADReportWorkService.cs @@ -186,19 +186,26 @@ namespace DOAN.Service.Mobile }); //TODO 拼接MQTT消息,发送给设备,工单信息和配方信息 - var RecipeMesg = Context.Queryable().LeftJoin((rpr, r) => rpr.RecipeCode == r.RecipeCode) - .Where((rpr, r) => rpr.Productcode == handleWorkorder.ProductionCode) - .Where((rpr, r) => r.Status == 1) - .Select((rpr, r) => new - { - RecipeCode = r.RecipeCode, - Version = r.Version, - ParamList = Context.Queryable().Where(it => it.RecipeCode == r.RecipeCode && it.Version == r.Version).ToList() - }).First(); - if (RecipeMesg == null) - { - throw new Exception("未找到对应的配方信息,请检查产品与配方的关联关系,或配方状态是否有效"); - } + var spec = handleWorkorder.Specification; + + var RecipeMesg = Context.Queryable() + .LeftJoin((rpr, r) => rpr.RecipeCode == r.RecipeCode) + .Where((rpr, r) => SqlFunc.Like(spec, rpr.RecipeCode + "%")) + .Where((rpr, r) => r.Status == 1) + .Select((rpr, r) => new + { + RecipeCode = r.RecipeCode, + Version = r.Version, + ParamList = SqlFunc.Subqueryable() + .Where(it => it.RecipeCode == r.RecipeCode && it.Version == r.Version) + .ToList(), + // 添加匹配长度用于排序 + MatchLength = rpr.RecipeCode.Length + }) + .MergeTable() + .OrderByDescending(x => x.MatchLength) // 按匹配长度降序排列 + .First(); // 取第一个(匹配最长的) + // 合并两个对象为匿名对象 var combinedObject = new @@ -210,19 +217,23 @@ namespace DOAN.Service.Mobile string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(combinedObject, Newtonsoft.Json.Formatting.Indented); //插入配方派发日志 - PfRecipeIssueLog pfRecipeIssueLog = new PfRecipeIssueLog(); - pfRecipeIssueLog.RecipeCode = RecipeMesg.RecipeCode; - pfRecipeIssueLog.Version = RecipeMesg.Version; - pfRecipeIssueLog.IssueTime = DateTime.Now; - pfRecipeIssueLog.Workorder = handleWorkorder.Workorder; - pfRecipeIssueLog.Productcode = handleWorkorder.ProductionCode; - pfRecipeIssueLog.Productname = handleWorkorder.ProductionName; - pfRecipeIssueLog.CreatedBy = "PDA"; - pfRecipeIssueLog.CreatedTime = DateTime.Now; - Context.Insertable(pfRecipeIssueLog).ExecuteCommand(); + if (RecipeMesg != null && !string.IsNullOrEmpty(RecipeMesg.RecipeCode)) + { + PfRecipeIssueLog pfRecipeIssueLog = new PfRecipeIssueLog(); + pfRecipeIssueLog.RecipeCode = RecipeMesg.RecipeCode; + pfRecipeIssueLog.Version = RecipeMesg.Version; + pfRecipeIssueLog.IssueTime = DateTime.Now; + pfRecipeIssueLog.Workorder = handleWorkorder.Workorder; + pfRecipeIssueLog.Productcode = handleWorkorder.ProductionCode; + pfRecipeIssueLog.Productname = handleWorkorder.ProductionName; + pfRecipeIssueLog.CreatedBy = "PDA"; + pfRecipeIssueLog.CreatedTime = DateTime.Now; + Context.Insertable(pfRecipeIssueLog).ExecuteCommand(); + + } - MqttHelper _mqttHelper = new MqttHelper("mqtt://192.168.50.163", 8883); + MqttHelper _mqttHelper = new MqttHelper("192.168.50.163", 1883); // 连接 await _mqttHelper.ConnectAsync();