using Newtonsoft.Json; using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using System.Linq; using Tiger.Business.SqlSugarHepler; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Entitys.WMS.DTOS; namespace Tiger.Business.WMS { /// /// /// public class ProductOutputBusiness : IProductOutputBusiness { /// /// 成品出库 /// /// /// /// public int GetProductOutputInfo(ProductOutputDTO input) { //var db = Biz.Db;// 数据库链接地址 var db = Biz.DataSource["WMS57"].Client; var snLst = input.details.Select(i => i.SN).Distinct().ToList(); var inData = db.Queryable().Where(i => snLst.Contains(i.SN)).ToList();// 获取库存信息数据 var insnData = inData.Select(i => i.SN).Distinct(); var nosnData = snLst.Except(insnData).ToList(); if (nosnData.Any()) { throw new Exception($"未能查询到{string.Join(",", nosnData)} 数据的库存信息,请确认当前数据是否入库!"); } var masterData = db.Queryable().Where(i => i.BILLCODE == input.Order).First(); if (masterData.IsNullOrEmpty()) { throw new Exception($"未能查询到出库单:{input.Order}\t信息,请确认!"); } // 表身数据 var dtlData = db.Queryable().Where(i => i.BILLCODE == input.Order).ToList(); var Data = ChangeDTL(dtlData, input.details.Count());// 更新DTL表身数据状态 // SN明细表 var snData = new List(); foreach (var item in input.details) { snData.Add(new BIZ_ERP_SALE_OUT_SN() { AUTH_ORG = input.AuthORG, ORDER_NO = input.Order, SN = item.SN, MES_BILLCODE = item.MES_BILLCODE, ITEM_CODE = input.ItemCode }); } foreach (var item in inData) { item.STATUS = WMS_ITEM.STATUSs.Returned.GetValue();// 更新库存信息数据的状态 } int res = 0; try { BizSqlsugar.CreateTran(() => { if (snData.Any()) { BizSqlsugar.InsertDataTable(snData, db);// 更新SN明细表 } if (Data.Any()) { BizSqlsugar.UpdateDataTable(Data, db);// 更新DTL表 } if (inData.Any()) { BizSqlsugar.UpdateDataTable(inData, db);// 更新库存信息状态 } }, db); } catch (Exception) { } var outdtlData = db.Queryable().Where(i => i.BILLCODE == input.Order && i.LINESTATUS != WMS_ITEM.STATUSs.Returned.GetValue()).ToList(); if (!outdtlData.Any()) { masterData.STATUS = BIZ_ERP_PROD_OUT.STATUSs.COMPLETE.GetValue(); db.Updateable(masterData).ExecuteCommand(); } return res; } /// /// 更新明细数据的出库数量 /// /// /// /// public List ChangeDTL(List input, decimal Count) { var model = new List(); var data = input.Where(i => i.QTY < i.PRQTY).OrderBy(i => i.BILLLINE).ToList(); foreach (var item in data) { var prqty = item.PRQTY; if (prqty >= Count + item.QTY) { item.QTY = Count + item.QTY; model.Add(item); return model;// 如果当前传入数量小于当前需求数量,则直接更新 } else { Count -= item.QTY; item.QTY = prqty; item.LINESTATUS = WMS_ITEM.STATUSs.Returned.GetValue(); model.Add(item);// 否则循环更新多条数量 } } return model; } } }