From fcee1ab17f2cca5c1b058304a987cce43d0e7672 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期三, 01 一月 2025 21:34:20 +0800 Subject: [PATCH] 新增工单备料信息获取功能及相关接口 --- Tiger.Controllers.MES/Controllers/MESController.BIZ_MES_WO.cs | 21 +++++++ Tiger.IBusiness.MES/BIZ/IMES_WO.cs | 1 Tiger.Business.MES/BIZ/BIZ_MES_WO.cs | 110 ++++++++++++++++++++++++++++++++---- Tiger.Model.Net/Entitys/MES/ParameterEntity/BizMesWoParameter.cs | 27 +++++++++ 4 files changed, 145 insertions(+), 14 deletions(-) diff --git a/Tiger.Business.MES/BIZ/BIZ_MES_WO.cs b/Tiger.Business.MES/BIZ/BIZ_MES_WO.cs index 57ed2a5..4d9aab6 100644 --- a/Tiger.Business.MES/BIZ/BIZ_MES_WO.cs +++ b/Tiger.Business.MES/BIZ/BIZ_MES_WO.cs @@ -177,7 +177,7 @@ .WhereColumns(t => new { t.ORDER_NO, t.GHOST_ROW }) .ToStorage(); y.AsInsertable.ExecuteCommand(); - y.AsUpdateable.IgnoreColumns(x => x.ID).UpdateColumns(q=>new { q.STATUS, q.PLAN_DATE,q.ACT_LINE,q.RELEASE_TIME,q.RELEASE_USER,q.UPDATE_TIME,q.UPDATE_USER}).ExecuteCommand(); + y.AsUpdateable.IgnoreColumns(x => x.ID).UpdateColumns(q => new { q.STATUS, q.PLAN_DATE, q.ACT_LINE, q.RELEASE_TIME, q.RELEASE_USER, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); db.Insertable(input.WoBatch).ExecuteCommand(); }); @@ -281,8 +281,8 @@ var _woBatch = await Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(x => x.BATCH_NO == input.WoBatch).FirstAsync(); if (_woBatch != null) { - _woBatch.CHANGE_TIME = _woBatch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue() && input.Status == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()? DateTime.Now: _woBatch.CHANGE_TIME; - _woBatch.CHANGE_USER = _woBatch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue() && input.Status == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue() ? input.UserId: _woBatch.CHANGE_USER; + _woBatch.CHANGE_TIME = _woBatch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue() && input.Status == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue() ? DateTime.Now : _woBatch.CHANGE_TIME; + _woBatch.CHANGE_USER = _woBatch.STATUS == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue() && input.Status == BIZ_MES_WO_BATCH.STATUSs.Working.GetValue() ? input.UserId : _woBatch.CHANGE_USER; _woBatch.STATUS = input.Status < 0 ? _woBatch.STATUS : input.Status; if (input.Status == BIZ_MES_WO_BATCH.STATUSs.Paused.GetValue()) { @@ -325,7 +325,7 @@ //濡傛灉鏄笅鍙� if (input.Status == BIZ_MES_WO_BATCH.STATUSs.Release.GetValue()) { - db.Updateable(_woBatch, input.UserId).UpdateColumns(x => new { x.STATUS, x.RELEASE_USER, x.RELEASE_TIME, x.ACT_LINE, x.UPDATE_USER, x.UPDATE_TIME, x.CHANGE_USER,x.CHANGE_TIME }).ExecuteCommand(); + db.Updateable(_woBatch, input.UserId).UpdateColumns(x => new { x.STATUS, x.RELEASE_USER, x.RELEASE_TIME, x.ACT_LINE, x.UPDATE_USER, x.UPDATE_TIME, x.CHANGE_USER, x.CHANGE_TIME }).ExecuteCommand(); } else { @@ -384,7 +384,7 @@ var db = Biz.Db; var dbTran = db.UseTran(() => { - Expression<Func<BAS_LABEL_VAR_WO, object>> predicate = !input.WORK_ORDER.IsNullOrEmpty() ? t => new { t.LABEL_ID, t.WORK_ORDER, t.VAR_NAME, t.GHOST_ROW } : + Expression<Func<BAS_LABEL_VAR_WO, object>> predicate = !input.WORK_ORDER.IsNullOrEmpty() ? t => new { t.LABEL_ID, t.WORK_ORDER, t.VAR_NAME, t.GHOST_ROW } : !input.PROD_CODE.IsNullOrEmpty() ? t => new { t.LABEL_ID, t.PROD_CODE, t.VAR_NAME, t.GHOST_ROW } : t => new { t.LABEL_ID, t.VAR_NAME, t.GHOST_ROW }; var y = db.Storageable(input) .WhereColumns(predicate) @@ -492,7 +492,7 @@ var result = new ApiAction(); try { - var woSn = await Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q=>q.SN == code || q.FLOW_SN == code || q.OUTER_SN == code).FirstAsync(); + var woSn = await Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => q.SN == code || q.FLOW_SN == code || q.OUTER_SN == code).FirstAsync(); if (woSn == null) { result.IsSuccessed = false; @@ -592,7 +592,7 @@ result.LocaleMsg = new($"鏉$爜涓嶅瓨鍦紒"); return result; } - var woNode = await Biz.Db.Queryable<MES_WO_NODE>().Where(q => q.WORK_ORDER.Equals(woSn.WORK_ORDER) && q.OPER_CODE== "SpecPackingNode").FirstAsync(); + var woNode = await Biz.Db.Queryable<MES_WO_NODE>().Where(q => q.WORK_ORDER.Equals(woSn.WORK_ORDER) && q.OPER_CODE == "SpecPackingNode").FirstAsync(); if (woNode == null) { result.IsSuccessed = false; @@ -641,13 +641,15 @@ DbClient db = Biz.DataSource["YadaU9C"].Client; var org = await Biz.Db.Queryable<SYS_ORGANIZATION>().Where(q => q.ORG_CODE == input.orgCode).FirstAsync(); string wo = input.wo; - if (!input.SN.IsNullOrEmpty() && input.wo.IsNullOrEmpty()) { + if (!input.SN.IsNullOrEmpty() && input.wo.IsNullOrEmpty()) + { var woSn = Biz.Db.Queryable<BIZ_MES_WO_SN>().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN).First(); - if (!woSn.IsNullOrEmpty()) { + if (!woSn.IsNullOrEmpty()) + { wo = woSn.WORK_ORDER; } } - var ship = db.Queryable<mes_ShipList>().Where(q => q.MoDoc.Equals(wo) && q.Org == org.ID.ToInt64() && q.Status == 2 ).First(); + var ship = db.Queryable<mes_ShipList>().Where(q => q.MoDoc.Equals(wo) && q.Org == org.ID.ToInt64() && q.Status == 2).First(); if (!ship.IsNullOrEmpty()) { result.Data = ship.BusinessDate.Date == DateTime.Now.Date ? new() @@ -733,7 +735,7 @@ result.LocaleMsg = new($"鏉$爜涓嶅瓨鍦紒"); return result; } - var wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == woSns[0].WORK_ORDER ).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q._ItemInfos).FirstAsync(); + var wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == woSns[0].WORK_ORDER).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q._ItemInfos).FirstAsync(); if (wo == null) { result.IsSuccessed = false; @@ -743,8 +745,10 @@ //鍒ゆ柇宸ュ崟鏄惁宸茬粡鍏ㄩ儴鍏ュ簱 - InStoreInfo inStoreInfo = new() { - ErpProdInBth= new() { + InStoreInfo inStoreInfo = new() + { + ErpProdInBth = new() + { WORK_ORDER = wo.ORDER_NO, BATCH_NO = woSns[0].BATCH_NO, SALES_ORDER = wo.SALES_ORDER, @@ -754,7 +758,8 @@ SCAN_QTY = woSns.Count, IS_HANDLED = "N" //Y-宸茬敓鎴愶紝N-鏈敓鎴愶紝F-澶辫触 }, - InStoreScanInfo = new() { + InStoreScanInfo = new() + { SN = cartonSn, SALES_ORDER = wo.SALES_ORDER, WORK_ORDER = wo.ORDER_NO, @@ -772,6 +777,83 @@ return result; } + /// <summary> + /// 鑾峰彇宸ュ崟澶囨枡淇℃伅 + /// </summary> + /// <param name="code"></param> + /// <returns></returns> + public async Task<ApiAction<List<WoFlowCardPrintJson>>> GetWoPickList(string code) + { + var action = new ApiAction<List<WoFlowCardPrintJson>>($"鎴愬姛", new List<WoFlowCardPrintJson>()); + try + { + DbClient db = Biz.DataSource["YadaU9C"].Client; + var moPickLists = db.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == code).ToList(); + var ids = moPickLists.Select(x => SqlFunc.ToString(x.ItemMaster)).ToList(); + var items = Biz.Db.Queryable<BAS_ITEM>().Where(q => ids.Contains(q.ID)).IncludesAllFirstLayer().ToList(); + var wo = await Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == code).IncludesAllFirstLayer().FirstAsync(); + SugarParameter[] pars = Biz.Db.Ado.GetParameters(new { WO = code }); + var routeList = Biz.Db.Ado.UseStoredProcedure().SqlQuery<V_MES_WO_PTREE>("SP_MES_GET_WO_PTREE", pars);//杩斿洖List + var routeStr = string.Join("->", routeList.Where(q => q.type == "Node" && q.name != "瀹屽伐").OrderBy(x=>x.seq).Select(q=>q.name).ToList()); + List<WoFlowCardPrintJson> woFlowCardPrintJson = new(); + //鐢熸垚鎵撳嵃瀹炰綋 + int i = 1; + WoFlowCardPrintJson printJson = new() + { + ID = Guid.NewGuid().ToString("N"), + OrderNo = code, + ItemCode = wo.ITEM_CODE, + ItemDesc = wo.ItemInfo?.ITEM_DESC, + SapCode = wo.ItemInfo?.ExtInfo?.SapCode, + Qty = wo.PLAN_QTY, + Model = "", + Remark = wo.SALES_REMARK, + RouteStr = routeStr, + Items = new() { } + }; + foreach (var item in moPickLists) + { + PrintWoPickList list = new() + { + LineNo = item.DocLineNO, + SapCode = items.Where(q=> q.ID == SqlFunc.ToString(item.ItemMaster)).FirstOrDefault()?.ExtInfo?.SapCode, + ItemCode = item.Code, + ItemDesc = items.Where(q => q.ID == SqlFunc.ToString(item.ItemMaster)).FirstOrDefault()?.ITEM_DESC, + PickQty = item.ActualReqQty, + LineRemark = "", + WhCode = item.BinCode, + WhCode07 = item.WhCode == "10107" ? item.BinCode : "", + Method = item.IssueStyleName, + }; + printJson.Items.Add(list); + if (i % 6 == 0) + { + woFlowCardPrintJson.Add(printJson); + printJson = new() + { + ID = Guid.NewGuid().ToString("N"), + OrderNo = code, + ItemCode = wo.ITEM_CODE, + ItemDesc = wo.ItemInfo?.ITEM_DESC, + SapCode = wo.ItemInfo?.ExtInfo?.SapCode, + Qty = wo.PLAN_QTY, + Model = "", + Remark = wo.SALES_REMARK, + RouteStr = routeStr, + Items = new() { } + }; + } + i++; + } + action.Data = woFlowCardPrintJson; + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鑾峰彇宸ュ崟{code}澶囨枡淇℃伅寮傚父"); + } + return action; + } + #region 鎻愪氦鍓嶉�氱敤鏂规硶 /// <summary> /// 鎻愪氦鍓嶆鏌ユ槸鍚﹀矖浣嶃�佸伐鍗曞拰涓嶈壇浠g爜 diff --git a/Tiger.Controllers.MES/Controllers/MESController.BIZ_MES_WO.cs b/Tiger.Controllers.MES/Controllers/MESController.BIZ_MES_WO.cs index cb8cdb5..301f42f 100644 --- a/Tiger.Controllers.MES/Controllers/MESController.BIZ_MES_WO.cs +++ b/Tiger.Controllers.MES/Controllers/MESController.BIZ_MES_WO.cs @@ -304,6 +304,27 @@ } /// <summary> + /// 鑾峰彇宸ュ崟澶囨枡淇℃伅 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/[action]")] + public async Task<IActionResult> GetWoPickList([FromBody] ApiAction action) + { + ApiAction response = new(); + try + { + response = response.GetResponse(await DI.Resolve<IBIZ_MES_WO>().GetWoPickList(action.Data?.ToString())); + } + catch (System.Exception ex) + { + response = response.GetResponse().CatchExceptionWithLog(ex); + } + return Ok(response); + } + + /// <summary> /// 鎻愪氦鍓嶆鏌ユ槸鍚﹀矖浣嶃�佸伐鍗曞拰涓嶈壇浠g爜 /// </summary> /// <param name="action"></param> diff --git a/Tiger.IBusiness.MES/BIZ/IMES_WO.cs b/Tiger.IBusiness.MES/BIZ/IMES_WO.cs index f0535e1..caccf23 100644 --- a/Tiger.IBusiness.MES/BIZ/IMES_WO.cs +++ b/Tiger.IBusiness.MES/BIZ/IMES_WO.cs @@ -25,6 +25,7 @@ public Task<ApiAction> SavePrintLabelInAct(string code); public Task<ApiAction> UnbindWipSnFromWO(UnbindWipSnInput input); public Task<ApiAction<InStoreInfo>> GetErpProdInBth(string code); + public Task<ApiAction<List<WoFlowCardPrintJson>>> GetWoPickList(string code); public Task<ApiAction<CheckCodeOutput>> CheckCode(string code); } } diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/BizMesWoParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/BizMesWoParameter.cs index 49f0814..800f015 100644 --- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/BizMesWoParameter.cs +++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/BizMesWoParameter.cs @@ -73,4 +73,31 @@ public BIZ_MES_WO WorkOrder { get; set; } public BAS_DEFECT Defect { get; set; } } + + public class PrintWoPickList + { + public int LineNo { get; set; } + public string SapCode { get; set; } + public string ItemCode { get; set; } + public string ItemDesc { get; set; } + public decimal PickQty { get; set; } + public string LineRemark { get; set; } + public string WhCode { get; set; } + public string WhCode07 { get; set; } + public string Method { get; set; } + } + + public class WoFlowCardPrintJson + { + public string ID { get; set; } + public string OrderNo { get; set; } + public string ItemCode { get; set; } + public string ItemDesc { get; set; } + public string Model { get; set; } + public string SapCode { get; set; } + public string Remark { get; set; } + public string RouteStr { get; set; } + public decimal Qty { get; set; } + public List<PrintWoPickList> Items { get; set; } = new List<PrintWoPickList>(); + } } -- Gitblit v1.9.3