using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Info; using WMS.Info.Models; using WMS.Util; namespace WMS.Core.AppBll { public class TransferBLL : AppCoreBLL { public ResInfo TransferQueryByCode(TransferQueryRequest reqData) { if (string.IsNullOrWhiteSpace(reqData.TrayNo) || string.IsNullOrWhiteSpace(reqData.UidOrBoxNo)) throw SysExCore.ThrowFailException("参数不能为空!"); using (var ctx = SysDbCore.GetDbCtx()) { var tranInfos = ctx.Queryable((ord, detail) => new object[] { JoinType.Inner, ord.F_no == detail.F_pNo }) .Where((ord, detail) => ord.F_orderStatus != (int)EOrderState.Executed).Select().ToList(); List resInfos = new List(); foreach (var detail in tranInfos) { var mat = ctx.Queryable().First(f => f.F_matNo == detail.F_fromPart); resInfos.Add(new { MatNo = detail.F_fromPart, ProjectNo = mat.F_projectNo, Quantity = detail, }); } return new ResInfo { code = EResponseCode.Success, data = resInfos }; } } public ResInfo TransferSubmit(TransferSubmitRequest request) { using (var ctx = SysDbCore.GetDbCtx()) { ctx.BeginTran(); try { if (string.IsNullOrWhiteSpace(request?.TrayNo) || !request.TransferInfos.Any() || string.IsNullOrWhiteSpace(request.ToTrayNo)) throw SysExCore.ThrowFailException("参数不能为空"); //根据托盘码获取转仓单号 var stockOutEntity = ctx.Queryable((ord, detail) => new object[] { JoinType.Inner, ord.F_no == detail.F_pNo }) .Where((ord, detail) => detail.F_fromLoc == request.TrayNo && ord.F_orderStatus != (int)EOrderState.Executed).Select().First(); if(stockOutEntity==null) throw SysExCore.ThrowFailException("未找到该托盘没有转仓任务!"); ctx.Updateable().SetColumns(it => new BILL_STOCKOUTLINE { F_editTime = DateTime.Now, F_editUserNo = LoginUser.UserNo, F_actualQty = request.TransferInfos.Sum(s => s.Quantity) }).Where(w => w.F_matNo == request.TransferInfos.FirstOrDefault().MatNo && w.F_pNo == stockOutEntity.F_relatedOrderNo).ExecuteCommand(); var stockOutLineLst = ctx.Queryable().Where(w => w.F_pNo == stockOutEntity.F_relatedOrderNo).ToList(); if (!stockOutLineLst.Any(a => a.F_actualQty != a.F_planQty)) { ctx.Updateable().SetColumns(it => new BILL_TRANSFERORDER { F_editTime = DateTime.Now, F_editUserNo = LoginUser.UserNo, F_orderStatus = (int)EOrderState.Executed }).Where(w => w.F_no == stockOutEntity.F_no).ExecuteCommand(); ctx.Updateable().SetColumns(it => new BILL_STOCKOUT { F_editTime = DateTime.Now, F_editUserNo = LoginUser.UserNo, F_orderStatus = (int)EOrderState.Executed }).Where(w => w.F_no == stockOutEntity.F_relatedOrderNo).ExecuteCommand(); } List lstInv = new List(); request.TransferInfos.ForEach(info => { var inv = ctx.Queryable().WhereIF(!string.IsNullOrWhiteSpace(info.UidOrBoxNo),f=> (f.F_boxNo == info.UidOrBoxNo || f.F_uid == info.UidOrBoxNo)) .Where(f => f.F_trayNo == request.TrayNo && f.F_matNo == request.TransferInfos.First().MatNo).First(); inv.F_quantity = inv.F_quantity * -1; lstInv.Add(inv); ctx.Updateable().SetColumns(it => new BILL_TRANSFERORDERLINE { F_editTime = DateTime.Now, F_editUserNo = LoginUser.UserNo, F_toLoc = request.ToTrayNo, }).Where(w => w.F_pNo == stockOutEntity.F_no && w.F_fromPart == info.MatNo && (w.F_FromRef == info.UidOrBoxNo)).ExecuteCommand(); }); RequestFeixu(lstInv); //更新库存 UpdateInventory(lstInv, ctx); ctx.CommitTran(); return SysExCore.GetResSucc("出库成功!"); } catch (Exception ex) { ctx.RollbackTran(); throw ex; } finally { ctx.Dispose(); } } } public void RequestFeixu(List invs) { /// 验证工单 StringBuilder sb = new StringBuilder(); sb.Append(@" "); sb.Append(""); sb.Append($"{invs.First().F_matNo}"); foreach (var item in invs) { sb.Append(""); sb.Append($"{item.F_quantity}"); sb.Append($" SUZ"); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($"SUZ"); sb.Append($"{item.F_trayNo}"); sb.Append($""); sb.Append($"{item.F_uid}"); sb.Append($" SUZ"); sb.Append($"{item.F_trayNo}"); sb.Append($""); sb.Append($"{item.F_uid}"); sb.Append(@""); } sb.Append(@""); sb.Append(@" "); var res = WebServiceCall.callWebService(SysSetCore.GetSysSet().FxWebServiceUrl, "transferInventory", sb.ToString()); if (res.Contains("error")) throw SysExCore.ThrowFailException($"QAD验证转仓数据失败!{string.Join(",", WebSerciceResponse(res))}"); } public List WebSerciceResponse(string res) { try { var lstRes = new List(); if (string.IsNullOrWhiteSpace(res)) return default; string str = res.Substring(res.IndexOf(""), res.Length - res.LastIndexOf("")); while (str.Contains("")) { string value = str.Substring(str.IndexOf("") + 17, str.IndexOf("") - 18); str = str.Substring(str.IndexOf(""), str.Length - str.IndexOf("") - 1); lstRes.Add(value); } return lstRes; } catch (Exception) { return default; } } } }