Tiger.Business.MES/Transaction/InStoreOrderNo.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/iERP/MES_U9C.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Tiger.Business.MES/Transaction/InStoreOrderNo.cs
@@ -38,7 +38,7 @@ OrgCode = input.OrgCode; pageSize = input.pageSize; _GetScannedList(); CurBatchNo = !inStoreInfos.IsNullOrEmpty() && inStoreInfos.InStoreScanInfos.Count>0? InStoreScanInfos[0].BATCH_NO: DateTime.Now.ToString("yyyyMMddHHmmss"); CurBatchNo = !inStoreInfos.IsNullOrEmpty() && inStoreInfos.InStoreScanInfos.Count > 0 ? InStoreScanInfos[0].BATCH_NO : DateTime.Now.ToString("yyyyMMddHHmmss"); Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); return this; } @@ -66,8 +66,9 @@ #region Functions public ApiAction<InStoreInfos> GetInStoreInfos() { return new() { Data= inStoreInfos }; public ApiAction<InStoreInfos> GetInStoreInfos() { return new() { Data = inStoreInfos }; } /// <summary> /// 扫描条码 @@ -230,7 +231,7 @@ RcvRptInput.labels = new(); RcvRptInput.ErpProdInBths = ErpProdInBths; RcvRptInput.userId = UserCode; inStoreInfos= new() inStoreInfos = new() { ErpProdInBths = ErpProdInBths, InStoreScanInfos = InStoreScanInfos, @@ -294,7 +295,7 @@ { foreach (var sn in ErpProdInSns) { var d = action.Data.ErpProdInBths.Where(q=> q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault(); var d = action.Data.ErpProdInBths.Where(q => q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault(); if (!d.IsNullOrEmpty()) { sn.BUSINESSCODE = d.ORDER_NO; @@ -345,12 +346,13 @@ /// 查询已扫描列表 /// </summary> /// <returns></returns> public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedList() public async Task<ApiAction<InStoreInfos>> GetScannedList() { var action = new ApiAction<RcvRptDocCreateInput>(); var action = new ApiAction<InStoreInfos>(); try { action.Data = _GetScannedList(); _GetScannedList(); action.Data = inStoreInfos; } catch (Exception ex) { @@ -366,40 +368,71 @@ private RcvRptDocCreateInput _GetScannedList() { RcvRptInput.RcvRptDocBases = new(); RcvRptInput.ErpProdInBths = new(); RcvRptInput.PrintJsons = new(); RcvRptInput.labels = new(); RcvRptInput.userId = UserCode; if (RcvRptInput.ErpProdInBths.Count == 0) ErpProdInSns.Clear(); ErpProdIns.Clear(); ErpProdInBths.Clear(); InStoreScanInfos.Clear(); RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>() .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode && s.GHOST_ROW == false).Select(s => s.BATCH_NO)) .IncludesAllFirstLayer().ToList(); foreach (var item in RcvRptInput.ErpProdInBths) { RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>() .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode).Select(s => s.BATCH_NO)) .IncludesAllFirstLayer().ToList(); foreach (var item in RcvRptInput.ErpProdInBths) var values = item.ProdInSns.GroupBy(x => x.CARTONNO) .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() }); foreach (var t in values) { var values = item.ProdInSns.GroupBy(x => x.CARTONNO) .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() }); foreach (var t in values) InStoreScanInfos.Add(t); } item.CartonQty = values.Count(); ErpProdIns.Add(new() { AUTH_ORG = OrgCode, BILLCODE = UserCode, BILLDATE = DateTime.Now, STATUS = 0, HANDLED = -1, WAREHOUSECODE = "", SOURCECODE = item.WORK_ORDER, HANDLED_DATE = DateTime.Now, }); ErpProdInSns.AddRange(item.ProdInSns); //生成打印实体 if (RcvRptInput.PrintJsons.Count == 0) { RcvRptInput.PrintJsons.Add(new() { InStoreScanInfos.Add(t); ID = Guid.NewGuid().ToString("N"), Items = new() { item } }); } else { //拼分页 bool isAdded = false; foreach (var p in RcvRptInput.PrintJsons) { if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER)) { if (p.Items.Count < pageSize) { p.Items.Add(item); isAdded = true; } } else { isAdded = true; } } item.CartonQty = values.Count(); BIZ_ERP_PROD_IN prodIn = new() { AUTH_ORG = OrgCode, BILLCODE = UserCode, BILLDATE = DateTime.Now, STATUS = 0, HANDLED = -1, WAREHOUSECODE = "", SOURCECODE = item.WORK_ORDER, HANDLED_DATE = DateTime.Now, }; ErpProdIns.Add(prodIn); ErpProdInSns.AddRange(item.ProdInSns); //生成打印实体 if (RcvRptInput.PrintJsons.Count == 0) if (!isAdded) { RcvRptInput.PrintJsons.Add(new() { @@ -409,40 +442,10 @@ } }); } else { //拼分页 bool isAdded = false; foreach (var p in RcvRptInput.PrintJsons) { if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER)) { if (p.Items.Count < pageSize) { p.Items.Add(item); isAdded = true; } } else { isAdded = true; } } if (!isAdded) { RcvRptInput.PrintJsons.Add(new() { ID = Guid.NewGuid().ToString("N"), Items = new() { item } }); } } } ErpProdInBths = RcvRptInput.ErpProdInBths; } ErpProdInBths = RcvRptInput.ErpProdInBths; inStoreInfos = new() { ErpProdInBths = ErpProdInBths, @@ -451,6 +454,94 @@ return RcvRptInput; } /// <summary> /// 删除箱 /// </summary> /// <param name="SN"></param> /// <returns></returns> public async Task<ApiAction> Delete(string CartonNo) { var action = new ApiAction(); try { var ErpProdInSn = ErpProdInSns.Where(s => s.CARTONNO == CartonNo).ToList(); BIZ_ERP_PROD_IN_BTH erpbth = new(); if (!ErpProdInSn.IsNullOrEmpty()) { erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == ErpProdInSn[0].SOURCECODE).FirstOrDefault(); if (!erpbth.IsNullOrEmpty()) { erpbth.SCAN_QTY -= ErpProdInSn.Count(q => q.CARTONNO == CartonNo); erpbth.CartonQty--; } } //保存数据库 var db = Business.Biz.Db; var dbTran = db.UseTran(() => { db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode && x.CARTONNO == CartonNo).ExecuteCommand(); db.Updateable(erpbth, $"InStoreOrderNo_{UserCode}").ExecuteCommand(); if (erpbth.CartonQty == 0) { db.Deleteable(erpbth).ExecuteCommand(); } }); if (!dbTran.IsSuccess) { Logger.Default.Fatal(dbTran.ErrorException, "Database transaction delete exception"); this.Close(!dbTran.IsSuccess); throw dbTran.ErrorException; } } catch (Exception ex) { action.CatchExceptionWithLog(ex, $"查询已扫描列表异常"); } return action; } /// <summary> /// 清除 /// </summary> /// <returns></returns> public async Task<ApiAction> Clear() { var action = new ApiAction(); try { RcvRptInput = new(); ProdInBatchs = new() { }; ErpProdInBths = new() { }; ErpProdIns = new(); /// <summary> /// 扫描列表 /// </summary> InStoreScanInfos = new() { }; ErpProdInSns = new(); inStoreInfos = new() { }; //保存数据库 var db = Business.Biz.Db; var dbTran = db.UseTran(() => { db.Deleteable<BIZ_ERP_PROD_IN_BTH>().Where(x => x.ORDER_NO == UserCode && x.IS_HANDLED == "N").ExecuteCommand(); db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode).ExecuteCommand(); }); if (!dbTran.IsSuccess) { Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); this.Close(!dbTran.IsSuccess); throw dbTran.ErrorException; } } catch (Exception ex) { action.CatchExceptionWithLog(ex, $"查询已扫描列表异常"); } return action; } #endregion Functions public override bool Close(bool needSaveHistoryLog = false) Tiger.Business.MES/iERP/MES_U9C.cs
@@ -26,13 +26,16 @@ { public partial class MES_U9C : IMES_U9C { public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; 测试 public static string U9CAuthLoginUrl { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; 测试 //public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; //正式 public static string secret = "&entcode=02&orgcode=101&clientid=mes&clientsecret=12c8ee7e9bb74ad2a6a0fb3315c8af20"; public static string RcvRptDocCreateUrl { get; set; } = Cache.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE; //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; 测试 { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE; //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; 测试 //public static string RcvRptDocCreateUrl //{ get; set; } = Cache.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE; //正式 public static string U9CBarcodeCreateUrl { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["U9CBarcodeCreateUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["U9CBarcodeCreateUrl", "U9CUrl"].PARAM_VALUE; /// <summary> /// 入库单接口 @@ -132,6 +135,15 @@ } } Logger.Interface.Info($"生成入库单成功"); //条码主档 BarcodeCreateInput barcodeCreateInput = new() { RevDocId = result.Data[0].m_iD, userId = input.userId, token = token, IsLogin = false, }; U9CBarcodeCreate(barcodeCreateInput); } else { @@ -179,6 +191,65 @@ return action; } /// <summary> /// 入库单条码主档接口 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<ApiAction<BarcodeCreateInput>> U9CBarcodeCreate(BarcodeCreateInput input) { Logger.Interface.Info($"/**\r\n *进入入库单条码主档接口....\r\n */\r\n"); //固定写法 var action = new ApiAction<BarcodeCreateInput>(); try { if (input.IsLogin) { var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}"); if (u9CLoginResult.Success) { input.token = u9CLoginResult.Data; Logger.Interface.Info($"U9C登录token: {input.token}"); } } List<BarcodeCreateParam> param = new() { new() { CreateEntityKeys = new(){ new CreateEntityKeys { ID = input.RevDocId, //入库单ID EntityType="UFIDA.U9.Complete.RCVRpt.RcvRptDoc" } }, IsCreateHeadBarCode = true, BarCodeRuleCode = "DJCPRK01", GenerateCount = 1, BCQty = 1, } }; var response = await HttpHelper.PostAsync(U9CBarcodeCreateUrl, JsonConvert.SerializeObject(param), new Dictionary<string, string>() { { "token", input.token } }); var result = JsonConvert.DeserializeObject<U9CResult>(response.Message); if (result != null) { if (result.Success && result.Data[0].m_isSucess) { Logger.Interface.Info($"生成入库单条码主档接口提交Json: {JsonConvert.SerializeObject(param)},返回Json: {response.Message}"); } else { action.IsSuccessed = false; action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}"); Logger.Interface.Info($"生成入库单条码主档失败:{result.Data[0].m_errorMsg}"); } } } catch (System.Exception ex) { action.CatchExceptionWithLog(ex, "生成入库单条码主档异常"); } Logger.Interface.Info($"/* 入库单条码主档接口结束 */\r\n"); //固定写法 return action; } private List<BAS_LABEL_TEMP> GetLabels(List<InStorePrintJson> printJsons) { List<BAS_LABEL_TEMP> labels = new List<BAS_LABEL_TEMP>(); Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs
@@ -238,5 +238,95 @@ trans?.AddHistory(Request, action); return Ok(response); } /// <summary> /// 清除 /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/InStoreOrderNo/Clear")] public async Task<IActionResult> InStoreOrderNo_ClearAsync([FromBody] ApiAction action) { ApiAction response; IInStoreOrderNo trans = null; try { if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.Clear()); } else { lock (trans.TransLock) { response = action.GetResponse(trans.Clear().Result); } } } else { response = action.GetResponse($"Transaction Error: 入库单事务[ID:{action.ID}]已经关闭", false); } } else { response = action.GetResponse($"Transaction Error: 入库单事务[ID:{action.ID}]已经被关闭", false); } } catch (System.Exception ex) { response = action.GetResponse().CatchExceptionWithLog(ex); } trans?.AddHistory(Request, action); return Ok(response); } /// <summary> /// /// </summary> /// <param name="action"></param> /// <returns></returns> [HttpPost] [Route("api/[controller]/InStoreOrderNo/Delete")] public async Task<IActionResult> InStoreOrderNo_DeleteAsync([FromBody] ApiAction action) { ApiAction response; IInStoreOrderNo trans = null; try { if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID)) { trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo; if (!trans.IsFinished) { if (action.IsAsync) { response = action.GetResponse(await trans.Delete(action.Data?.ToString())); } else { lock (trans.TransLock) { response = action.GetResponse(trans.Delete(action.Data?.ToString()).Result); } } } else { response = action.GetResponse($"Transaction Error: 入库单事务[ID:{action.ID}]已经关闭", false); } } else { response = action.GetResponse($"Transaction Error: 入库单事务[ID:{action.ID}]已经被关闭", false); } } catch (System.Exception ex) { response = action.GetResponse().CatchExceptionWithLog(ex); } trans?.AddHistory(Request, action); return Ok(response); } } } Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs
@@ -15,9 +15,10 @@ public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input); public Task<ApiAction<InStoreInfos>> Submit(string code); public Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder(); public Task<ApiAction<RcvRptDocCreateInput>> GetScannedList(); public Task<ApiAction<InStoreInfos>> GetScannedList(); public ApiAction<InStoreInfos> GetInStoreInfos(); public Task<ApiAction> Clear(); public Task<ApiAction> Delete(string CartonNo); public bool Close(bool needSaveHistoryLog = false); } } Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
@@ -97,6 +97,29 @@ public int DocState { get; set; } = 1; } public class BarcodeCreateInput { public string RevDocId { get; set; } public string userId { get; set; } public string token { get; set; } public bool IsLogin { get; set; } } public class BarcodeCreateParam { public List<CreateEntityKeys> CreateEntityKeys { get; set; } public bool IsCreateHeadBarCode { get; set; } public string BarCodeRuleCode { get; set; } public int GenerateCount { get; set; } public int BCQty { get; set; } } public class CreateEntityKeys { public string ID { get; set; } public string EntityType { get; set; } } public class MOKey { public string DocNo { get; set; } Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs
@@ -132,7 +132,7 @@ [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_ERP_PROD_IN_BTHId), nameof(MappingClass.ClassAId))]//注意顺序 public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null */ [Navigate(NavigateType.OneToMany, nameof(BIZ_ERP_PROD_IN_SN.BUSINESSCODE), nameof(ORDER_NO), "GHOST_ROW = 0")]//一对一 ClassAId是BIZ_MES_WO类里面的外键ID字段 [Navigate(NavigateType.OneToMany, nameof(BIZ_ERP_PROD_IN_SN.SOURCECODE), nameof(WORK_ORDER), "GHOST_ROW = 0")]//一对一 ClassAId是BIZ_MES_WO类里面的外键ID字段 public List<BIZ_ERP_PROD_IN_SN> ProdInSns { get; set; } #endregion