123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- 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<BILL_TRANSFERORDER, BILL_TRANSFERORDERLINE>((ord, detail) => new object[] { JoinType.Inner, ord.F_no == detail.F_pNo })
- .Where((ord, detail) => ord.F_orderStatus != (int)EOrderState.Executed).Select<BILL_TRANSFERORDERLINE>().ToList();
- List<dynamic> resInfos = new List<dynamic>();
- foreach (var detail in tranInfos)
- {
- var mat = ctx.Queryable<BASE_ITEM>().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<BILL_TRANSFERORDER, BILL_TRANSFERORDERLINE>((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<BILL_TRANSFERORDER>().First();
- if(stockOutEntity==null)
- throw SysExCore.ThrowFailException("未找到该托盘没有转仓任务!");
- ctx.Updateable<BILL_STOCKOUTLINE>().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<BILL_STOCKOUTLINE>().Where(w => w.F_pNo == stockOutEntity.F_relatedOrderNo).ToList();
- if (!stockOutLineLst.Any(a => a.F_actualQty != a.F_planQty))
- {
- ctx.Updateable<BILL_TRANSFERORDER>().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<BILL_STOCKOUT>().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<BILL_INVENTORY> lstInv = new List<BILL_INVENTORY>();
- request.TransferInfos.ForEach(info =>
- {
- var inv = ctx.Queryable<BILL_INVENTORY>().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<BILL_TRANSFERORDERLINE>().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<BILL_INVENTORY> invs)
- {
- /// 验证工单
- StringBuilder sb = new StringBuilder();
- sb.Append(@" <dsInventoryTransfer>");
- sb.Append("<inventoryTransfer>");
- sb.Append($"<part>{invs.First().F_matNo}</part>");
- foreach (var item in invs)
- {
- sb.Append("<inventoryDetail>");
- sb.Append($"<lotserialQty>{item.F_quantity}</lotserialQty>");
- sb.Append($" <siteFrom>SUZ</siteFrom>");
- sb.Append($"<nbr></nbr>");
- sb.Append($"<soJob></soJob>");
- sb.Append($"<rmks></rmks>");
- sb.Append($"<siteFrom>SUZ</siteFrom>");
- sb.Append($"<locFrom>{item.F_trayNo}</locFrom>");
- sb.Append($"<lotserFrom></lotserFrom>");
- sb.Append($"<lotrefFrom>{item.F_uid}</lotrefFrom>");
- sb.Append($" <siteTo>SUZ</siteTo>");
- sb.Append($"<locTo>{item.F_trayNo}</locTo>");
- sb.Append($"<lotserTo></lotserTo>");
- sb.Append($"<lotrefTo>{item.F_uid}</lotrefTo>");
- sb.Append(@"</inventoryDetail>");
- }
- sb.Append(@"</inventoryTransfer>");
- sb.Append(@" </dsInventoryTransfer>");
- var res = WebServiceCall.callWebService(SysSetCore.GetSysSet().FxWebServiceUrl, "transferInventory", sb.ToString());
- if (res.Contains("<ns1:result>error</ns1:result>"))
- throw SysExCore.ThrowFailException($"QAD验证转仓数据失败!{string.Join(",", WebSerciceResponse(res))}");
- }
-
- public List<string> WebSerciceResponse(string res)
- {
- try
- {
- var lstRes = new List<string>();
- if (string.IsNullOrWhiteSpace(res))
- return default;
- string str = res.Substring(res.IndexOf("<ns3:tt_msg_desc>"), res.Length - res.LastIndexOf("</ns3:tt_msg_desc>"));
- while (str.Contains("<ns3:tt_msg_desc>"))
- {
- string value = str.Substring(str.IndexOf("<ns3:tt_msg_desc>") + 17, str.IndexOf("</ns3:tt_msg_desc>") - 18);
- str = str.Substring(str.IndexOf("</ns3:tt_msg_desc>"), str.Length - str.IndexOf("</ns3:tt_msg_desc>") - 1);
- lstRes.Add(value);
- }
- return lstRes;
- }
- catch (Exception)
- {
- return default;
- }
- }
- }
- }
|