private decimal GetInveroryFromSaleNum(TBMMaterialFileCacheModel tBMMaterialFileCacheModel, decimal SaleNum) { decimal result = 0; decimal basicNum = 0; if (tBMMaterialFileCacheModel.SalesUnitId != null && tBMMaterialFileCacheModel.SalesRate != null) { basicNum = decimal.Round(SaleNum / (decimal)tBMMaterialFileCacheModel.SalesRate, 4); } else { basicNum = SaleNum; } if (tBMMaterialFileCacheModel.WarehouseUnitId != null && tBMMaterialFileCacheModel.WarehouseRate != null) { result = decimal.Round(basicNum * (decimal)tBMMaterialFileCacheModel.WarehouseRate, 4); } else { result = basicNum; } return(result); }
/// <summary> /// 单位转化 /// </summary> /// <param name="tBMMaterialFileCacheModel">物料</param> /// <param name="from">原单位</param> /// <param name="to">目的单位</param> /// <param name="num">原单位数量</param> /// <returns>转化后的单位值</returns> public static decimal TranserUnit(TBMMaterialFileCacheModel tBMMaterialFileCacheModel, UnitType from, UnitType to, decimal num) { if (from == to) { return(num); } else { if (from == UnitType.Unit) { int index = (int)to; return(basictoOters[index](tBMMaterialFileCacheModel, num)); } else if (to == UnitType.Unit) { int index = (int)from; return(othersToBasic[index](tBMMaterialFileCacheModel, num)); } else { int index1 = (int)from; int index2 = (int)to; decimal basic = othersToBasic[index1](tBMMaterialFileCacheModel, num); return(basictoOters[index2](tBMMaterialFileCacheModel, basic)); } } }
/// <summary> /// 销售数量转化为基本单位数量 /// </summary> /// <param name="tBMMaterialFileCacheModel"></param> /// <param name="Num">销售数量</param> /// <returns></returns> private static decimal SalesToBase(TBMMaterialFileCacheModel tBMMaterialFileCacheModel, decimal Num) { decimal result = 0; if (tBMMaterialFileCacheModel.SalesUnitId != null && tBMMaterialFileCacheModel.SalesRate != null) { result = decimal.Round(Num * (decimal)tBMMaterialFileCacheModel.SalesRate, 4); } else { result = Num; } return(result); }
/// <summary> /// 基本单位数量转化为仓库单位数量 /// </summary> /// <param name="tBMMaterialFileCacheModel"></param> /// <param name="Num">基本单位数量</param> /// <returns></returns> private static decimal BaseToWarehouse(TBMMaterialFileCacheModel tBMMaterialFileCacheModel, decimal Num) { decimal result = 0; if (tBMMaterialFileCacheModel.WarehouseUnitId != null && tBMMaterialFileCacheModel.WarehouseRate != null) { result = decimal.Round(Num / (decimal)tBMMaterialFileCacheModel.WarehouseRate, 4); } else { result = Num; } return(result); }
private MrpResultModel GetProcuctBomByOrderID(int orderID, CurrentUser currentUser) { MrpResultModel result = new MrpResultModel(); #region 明细 List <TMMProductionOrderBOMQueryModel> deatail = new List <TMMProductionOrderBOMQueryModel>(); List <TBMMaterialFileCacheModel> MMaterialList = BasicCacheGet.GetMaterial(currentUser); var query = _db.Instance.Queryable <TMMProductionOrderBOMDbModel, TMMColorSolutionMainDbModel, TBMMaterialFileDbModel, TBMDictionaryDbModel, TBMPackageDbModel>((t, t1, t2, t3, t4) => new object[] { JoinType.Left, t.ColorSolutionId == t1.ID, JoinType.Inner, t.MaterialId == t2.ID, JoinType.Inner, t2.ColorId == t3.ID, JoinType.Inner, t4.ID == t.PackageId }).Where((t, t1, t2, t3, t4) => t.ProOrderId == orderID).Select((t, t1, t2, t3, t4) => new TMMProductionOrderBOMQueryModel() { ID = t.ID, ProOrderId = t.ProOrderId, MaterialId = t.MaterialId, ColorSolutionCode = SqlFunc.IsNull(t1.SolutionCode, "无配色"), MaterialName = t2.MaterialName, SingleValue = t.SingleValue, ProductionNum = t.ProductionNum, ColorId = t2.ColorId, PackageId = t.PackageId, ColorName = SqlFunc.IsNull(t3.DicValue, "无色"), PackageName = t4.DicValue }); List <TMMProductionOrderBOMQueryModel> bomList = query.ToList(); var packBomGroup = bomList.GroupBy(p => new { p.PackageName, p.PackageId }); foreach (var item in packBomGroup) { var PackageName = item.Key.PackageName; var packageId = item.Key.PackageId; var itemDeatails = item.ToList(); var MaterialGroup = itemDeatails.GroupBy(p => new { p.MaterialName, p.MaterialId, p.ColorName, p.ColorId }); foreach (var itemChild in MaterialGroup) { var MaterialName = itemChild.Key.MaterialName; var materialID = itemChild.Key.MaterialId; var ColorName = itemChild.Key.ColorName; var colorId = itemChild.Key.ColorId; var singleGroup = itemChild.ToList().GroupBy(p => p.SingleValue); foreach (var itemChildChild in singleGroup) { var single = itemChildChild.Key; var list = itemChildChild.ToList(); TMMProductionOrderBOMQueryModel model = new TMMProductionOrderBOMQueryModel(); model.PackageId = packageId; model.MaterialId = materialID; model.MaterialName = MaterialName; model.PackageName = PackageName; model.ColorName = ColorName; model.ColorId = colorId; model.SingleValue = single; model.ProductionNum = list.Sum(p => p.ProductionNum); model.ColorSolutionCode = string.Join(",", list.Select(p => p.ColorSolutionCode).Distinct()); deatail.Add(model); } } } deatail.ForEach((x) => { TBMMaterialFileCacheModel item = MMaterialList.Where(p => p.ID == x.MaterialId).FirstOrDefault(); if (item != null) { x.MaterialName = item.MaterialName; x.MaterialCode = item.MaterialCode; x.BaseUnitId = item.BaseUnitId; x.BaseUnitName = item.BaseUnitName; x.ProduceUnitId = item.ProduceUnitId; x.ProduceUnitName = item.ProduceUnitName; } }); #endregion List <TMMProductionOrderBOMSumQueryModel> bomListSummary = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>(). Where((t) => t.ProOrderId == orderID).Select((t) => new TMMProductionOrderBOMSumQueryModel() { ID = t.ID, ProOrderId = t.ProOrderId, MaterialId = t.MaterialId, ColorSolutionCode = t.ColorSolutionCode, TotalValue = t.TotalValue, PurchaseNum = t.PurchaseNum, PurchaseTransNum = t.PurchaseTransNum, PickNum = t.PickNum, PickTransNum = t.PickTransNum, PickTotalNum = t.PickTotalNum, }).ToList(); bomListSummary.ForEach((x) => { TBMMaterialFileCacheModel item = MMaterialList.Where(p => p.ID == x.MaterialId).FirstOrDefault(); if (item != null) { x.MaterialName = item.MaterialName; x.MaterialCode = item.MaterialCode; x.BaseUnitId = item.BaseUnitId; x.BaseUnitName = item.BaseUnitName; x.ProduceUnitId = item.ProduceUnitId; x.ProduceUnitName = item.ProduceUnitName; } }); result.deatails = deatail; result.summary = bomListSummary; return(result); }
/// <summary> /// 自动计算 /// </summary> /// <param name="orderID">生产订单ID</param> /// <param name="Type">1,表示有配色,2表示无配色</param> /// <param name="currentUser">当前用户</param> /// <returns>计算是否成功</returns> public async Task <ResponseObject <MrpResultModel> > AutoComputeMRP(int orderID, int Type, CurrentUser currentUser) { try { TMMProductionOrderMainDbModel mainEntity = _db.Instance.Queryable <TMMProductionOrderMainDbModel>().Where(p => p.ID == orderID && p.CompanyId == currentUser.CompanyID && p.MRPStatus == false).First(); if (mainEntity == null) { return(ResponseUtil <MrpResultModel> .FailResult(null, "生产订单不存在,或MRP已经算过了不能重复计算")); } List <TBMMaterialFileCacheModel> MMaterialList = BasicCacheGet.GetMaterial(currentUser); _db.Instance.BeginTran(); var bomResult = await _iTMMProductionOrderMainService.CreateOrderBom(mainEntity.ID, currentUser); //生成BOM清单 if (!bomResult.Result) { throw new Exception(bomResult.ErrorInfo); } //数据字典 var tBMDictionary = _db.Instance.Queryable <TBMDictionaryDbModel>().Where(p => p.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => p.DicValue); //仓库 var warehouseDic = _db.Instance.Queryable <TBMWarehouseFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) != true && t.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => new { Name = p.WarehouseName, Code = p.Code }); List <InventoryResultModel> result = new List <InventoryResultModel>(); //其他出入库 var otherCount = _db.Instance.Queryable <TWMOtherCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //盘亏盘盈出入库 var pCount = _db.Instance.Queryable <TWMProfitDeficitCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //销售出入库 var SaleCount = _db.Instance.Queryable <TWMSalesCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //采购出入库 var PurchaseCount = _db.Instance.Queryable <TWMPurchaseCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //生产出入库 var ProductCount = _db.Instance.Queryable <TWMProductionCountDbModel>(). Select(p => new InAndOutModel() { MaterialId = p.MaterialId, WarehouseId = p.WarehouseId, WhNumber = p.WhNumber, WhSendNumber = p.WhSendNumber }); //出入库数量 var allCount = _db.Instance.UnionAll(otherCount, pCount, SaleCount, PurchaseCount, ProductCount).GroupBy(p => new { p.MaterialId }). Select(p => new TradeInventoryModel() { TradeNumber = SqlFunc.AggregateSum(p.WhNumber) - SqlFunc.AggregateSum(p.WhSendNumber), MaterialId = p.MaterialId, }).AS("t100"); var materialFileQuery = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID); var ts = _db.Instance.Queryable(materialFileQuery, allCount, JoinType.Inner, (p1, p2) => p1.MaterialId == p2.MaterialId).Select((p1, p2) => new InventoryOut { MaterialId = p2.MaterialId, Amount = p2.TradeNumber }); //销售单 所有物料的出入库数量 var tsout1 = ts.ToList(); var tsOut = tsout1.GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.Amount) }).ToList(); #region 待出库数量 //其他待出库 var otherToOut = _db.Instance.Queryable <TWMOtherWhSendMainDbModel, TWMOtherWhSendDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNumber }); //盘亏出库 var deficitToOut = _db.Instance.Queryable <TWMDeficitMainDbModel, TWMDeficitDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNumber }); //销售出库 var saleToOut = _db.Instance.Queryable <TWMSalesMainDbModel, TWMSalesDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNum }); //生产待出库 var productToOut = _db.Instance.Queryable <TWMProductionMainDbModel, TWMProductionDetailDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.ID == t2.MainId }).Where((t1, t2) => t1.AuditStatus != 2 && t1.DeleteFlag == false).Select((t1, t2) => new InventoryOut { MaterialId = t2.MaterialId, Amount = t2.ActualNum }); var allToOut = _db.Instance.UnionAll(otherToOut, deficitToOut, saleToOut, productToOut).AS("t101"); var materialFileQuery1 = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID); var tsToOut = _db.Instance.Queryable(materialFileQuery1, allToOut, JoinType.Inner, (p1, p2) => p1.ID == p2.MaterialId).Select((p1, p2) => new InventoryOut { MaterialId = p2.MaterialId, Amount = p2.Amount }); //销售单所有物料的待出库数量 var tsToOutSum = tsToOut.ToList().GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.Amount) }).ToList(); #endregion //期初 List <InventoryOut> prime = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel, TWMPrimeCountDbModel>((t, t1) => new object[] { JoinType.Inner, t.MaterialId == t1.MaterialId }).Select((t, t1) => t1).Distinct().ToList().GroupBy(p => p.MaterialId).Select(p => new InventoryOut() { MaterialId = p.Key, Amount = p.Sum(m => m.PrimeNum) }).ToList();; var Allmaterial = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList(); Dictionary <int, string> colorSolution = _db.Instance.Queryable <TMMColorSolutionMainDbModel, TBMPackageDbModel>((t1, t2) => new object[] { JoinType.Inner, t1.PackageId == t2.ID }). Where((t1, t2) => t2.CompanyId == currentUser.CompanyID).ToList().ToDictionary(p => p.ID, p => p.SolutionCode); List <int> colorIDS = colorSolution.Keys.ToList(); //生产订单的所有物料 List <TMMProductionOrderBOMSumDbModel> sumList = _db.Instance.Queryable <TMMProductionOrderBOMSumDbModel>().Where(p => p.ProOrderId == orderID).ToList(); foreach (var item in sumList) { decimal primeAmount = 0; //期初数量 decimal TradeNumber = 0; //出入库数量 decimal toOutAmount = 0; //待出数量 TBMMaterialFileCacheModel materialFile = MMaterialList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); if (materialFile == null) { throw new Exception($"物料ID:{item.MaterialId},不存在"); } InventoryOut primeEntity = prime.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (primeEntity != null) { primeAmount = primeEntity.Amount; } InventoryOut tradeEntity = tsOut.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (tradeEntity != null) { TradeNumber = tradeEntity.Amount; } InventoryOut toOutEntity = tsToOutSum.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (toOutEntity != null) { toOutAmount = toOutEntity.Amount; } decimal avaibleAmountUnit = primeAmount + TradeNumber - toOutAmount; //仓库数量 decimal avaibleAmount = UnitChange.TranserUnit(materialFile, UnitType.Warehouse, UnitType.Produce, avaibleAmountUnit); //生产数量 if (avaibleAmount >= item.TotalValue) { item.PurchaseNum = 0; item.PickNum = item.TotalValue; } else { if (avaibleAmount < 0) { avaibleAmount = 0; } item.PurchaseNum = item.TotalValue - avaibleAmount; item.PickNum = avaibleAmount; } item.PurchaseTransNum = 0; item.PickTransNum = 0; } if (sumList.Count() > 0) { _db.Instance.Updateable(sumList).ExecuteCommand(); } mainEntity.MRPStatus = true; mainEntity.MRPTime = DateTime.Now; _db.Instance.Updateable(mainEntity).UpdateColumns(p => new { p.MRPStatus, p.MRPTime }).ExecuteCommand(); _db.Instance.CommitTran(); MrpResultModel bomList; if (Type == 1) { bomList = GetProcuctBomByOrderID(orderID, currentUser); } else { bomList = GetProcuctBomByOrderID(orderID, currentUser); } return(ResponseUtil <MrpResultModel> .SuccessResult(bomList)); } catch (Exception ex) { _db.Instance.RollbackTran(); return(ResponseUtil <MrpResultModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 修改T_SSM_SalesOrderMain数据 /// </summary> /// <param name="requestObject">Put请求参数</param> /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns> public async Task <ResponseObject <bool> > PutAsync(RequestPut <TSSMSalesOrderMainEditModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { if (requestObject.PostData == null) { return(ResponseUtil <bool> .FailResult(false, "PostData不能为null")); } if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1) { return(ResponseUtil <bool> .FailResult(false, "PostData.ChildList至少包含一条数据")); } //开启事务 currDb.BeginTran(); //修改主表信息 var mainModel = _mapper.Map <TSSMSalesOrderMainDbModel>(requestObject.PostData); mainModel.SalesNum = requestObject.PostData.ChildList.Sum(p => p.SalesNum); mainModel.SalesAmount = requestObject.PostData.ChildList.Sum(p => p.SalesAmount); var mainFlag = await currDb.Updateable(mainModel) .UpdateColumns(p => new { p.CustomerId, p.SalesmanId, p.OrderTypeId, p.SettlementTypeId, p.ReceiptAddress, p.OrderDate, p.ContactName, p.ContactNumber, p.SalesAmount, p.SalesNum }) .Where(p => (SqlFunc.IsNullOrEmpty(p.AuditStatus) || p.AuditStatus != 2) && p.ID == mainModel.ID) .ExecuteCommandAsync() > 0; /* * 修改明细逻辑 * 1.根据主单ID查询现有明细数据 * 2.PostData.ChildList中明细ID <= 0的新增 * 3.PostData.ChildList中明细ID > 0的修改 * 4.删除不在PostData.CihldList中的数据 */ var detailFlag = true; var detailModels = _mapper.Map <List <TSSMSalesOrderDetailEditModel>, List <TSSMSalesOrderDetailDbModel> >(requestObject.PostData.ChildList); var cache = BasicCacheGet.GetMaterial(currentUser); detailModels.ForEach(x => { TBMMaterialFileCacheModel tBMMaterialFileCacheModel = GetMaterialFileByPackageColor(cache, currentUser, x.PackageId, x.ColorSolutionId); x.MaterialId = tBMMaterialFileCacheModel.ID; }); foreach (var item in detailModels) { if (!detailFlag) { break; } item.MainId = mainModel.ID; //新增或修改明细数据 detailFlag = item.ID <= 0 ? await currDb.Insertable(item).ExecuteCommandIdentityIntoEntityAsync() : await currDb.Updateable(item).ExecuteCommandAsync() > 0; } //删除明细数据 if (detailFlag) { var detailIds = detailModels.Select(p => p.ID).ToList(); detailFlag = currDb.Deleteable <TSSMSalesOrderDetailDbModel>() .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID) .ExecuteCommand() >= 0; } var detailModelLists = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Where(p => p.MainId == requestObject.PostData.ID).ToList(); var groupEntity = from p in detailModelLists group p by new { p.GoodsCode, p.GoodsName, p.MaterialId } into g select new { g.Key, MaxPrice = g.Max(p => p.UnitPrice), MinPrice = g.Min(p => p.UnitPrice) }; var differentEntity = groupEntity.Where(p => p.MaxPrice != p.MinPrice).ToList(); if (differentEntity.Count() > 0) { string error = string.Join(",", differentEntity.Select(p => p.Key.GoodsCode)); throw new Exception($"{error}商品的单价不一致,请保证相同商品价格一致性"); } //提交事务 currDb.CommitTran(); //返回执行结果 return(mainFlag && detailFlag ? ResponseUtil <bool> .SuccessResult(true) : ResponseUtil <bool> .FailResult(false, "修改数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <bool> .FailResult(false, ex.Message)); } }
/// <summary> /// 新增T_SSM_SalesOrderMain数据 /// </summary> /// <param name="requestObject">Post请求参数</param> /// <param name="currentUser">当前操作用户</param> /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns> public async Task <ResponseObject <TSSMSalesOrderMainQueryModel> > PostAsync(RequestPost <TSSMSalesOrderMainAddModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <TSSMSalesOrderMainQueryModel> .FailResult(null, "PostData不能为null")); } //开启事务 currDb.BeginTran(); //插入主表数据 var mapMainModel = _mapper.Map <TSSMSalesOrderMainDbModel>(requestObject.PostData); mapMainModel.OperatorId = currentUser.UserID; mapMainModel.CompanyId = currentUser.CompanyID; mapMainModel.SalesNum = requestObject.PostData.ChildList.Sum(p => p.SalesNum); mapMainModel.SalesAmount = requestObject.PostData.ChildList.Sum(p => p.SalesAmount); var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); //更新明细表外键ID值 requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId); //插入从表数据 var mapDetailModelList = _mapper.Map <List <TSSMSalesOrderDetailAddModel>, List <TSSMSalesOrderDetailDbModel> >(requestObject.PostData.ChildList); var cache = BasicCacheGet.GetMaterial(currentUser); mapDetailModelList.ForEach(x => { TBMMaterialFileCacheModel tBMMaterialFileCacheModel = GetMaterialFileByPackageColor(cache, currentUser, x.PackageId, x.ColorSolutionId); x.MaterialId = tBMMaterialFileCacheModel.ID; }); var groupEntity = from p in mapDetailModelList group p by new { p.GoodsCode, p.GoodsName, p.MaterialId } into g select new{ g.Key, MaxPrice = g.Max(p => p.UnitPrice), MinPrice = g.Min(p => p.UnitPrice) }; var differentEntity = groupEntity.Where(p => p.MaxPrice != p.MinPrice).ToList(); if (differentEntity.Count() > 0) { string error = string.Join(",", differentEntity.Select(p => p.Key.GoodsCode)); throw new Exception($"{error}商品的单价不一致,请保证相同商品价格一致性"); } var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0; //提交事务 currDb.CommitTran(); TSSMSalesOrderMainQueryModel returnObject = null; if (result) { returnObject = await GetMainQueryModel(mainId); } //返回执行结果 return(result ? ResponseUtil <TSSMSalesOrderMainQueryModel> .SuccessResult(returnObject) : ResponseUtil <TSSMSalesOrderMainQueryModel> .FailResult(null, "新增数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TSSMSalesOrderMainQueryModel> .FailResult(null, ex.Message)); } }
public async Task <ResponseObject <TWMSalesMainQueryModel> > GetWholeMainData(int iMainId, CurrentUser currentUser) { try { RequestGet requestGet = new RequestGet() { IsPaging = false, QueryConditions = new List <QueryCondition>() { new QueryCondition() { Column = "Id", Condition = ConditionEnum.Equal, Content = iMainId.ToString() } } }; var allMain = await GetMainListAsync(requestGet, currentUser); var mainModel = allMain.Data.FirstOrDefault(); var detailModelsSql = _db.Instance.Queryable <TWMSalesDetailDbModel, TBMMaterialFileDbModel, TBMDictionaryTypeDbModel, TBMDictionaryDbModel, TBMDictionaryDbModel, TBMDictionaryDbModel, TWMSalesMainDbModel, TSSMSalesOrderDetailDbModel , TBMPackageDbModel, TMMColorSolutionMainDbModel>( (t, t0, t1, t2, t3, t4, t5, t6, t7, t8) => new object[] { JoinType.Left, t.MaterialId == t0.ID, JoinType.Left, t0.MaterialTypeId == t1.ID, JoinType.Left, t0.ColorId == t2.ID, JoinType.Left, t0.BaseUnitId == t3.ID, JoinType.Left, t0.WarehouseUnitId == t4.ID, JoinType.Inner, t.MainId == t5.ID, JoinType.Inner, t.SalesOrderDetailId == t6.ID, JoinType.Left, t0.PackageID == t7.ID, JoinType.Left, t6.ColorSolutionId == t8.ID }) .Select((t, t0, t1, t2, t3, t4, t5, t6, t7, t8) => new TWMSalesDetailQueryModel { ID = t.ID, MainId = t.MainId, MaterialId = t.MaterialId, MaterialName = t0.MaterialName, MaterialCode = t0.MaterialCode, WarehouseId = t.WarehouseId, ActualNum = t.ActualNum, SalesOrderActualNum = t.SalesOrderActualNum, SalesOrderDetailId = t.SalesOrderDetailId, UnitPrice = t.UnitPrice, Amount = t.Amount, MaterialTypeId = t0.MaterialTypeId, MaterialTypeName = t1.TypeName, ColorId = t0.ColorId, ColorName = t2.DicValue, BaseUnitId = t0.BaseUnitId, BaseUnitName = t3.DicValue, WarehouseUnitId = t0.WarehouseUnitId, WarehouseUnitName = SqlFunc.IsNullOrEmpty(t4.ID) ? t3.DicValue : t4.DicValue, SalesUnitId = t0.SalesUnitId, SalesRate = t0.SalesRate, WarehouseRate = t0.WarehouseRate, Spec = t0.Spec, Remark = t.Remark, SalesNum = t6.SalesNum, ShouldSaleNum = t6.TransferNum, PackageCode = t7.DicCode, PackageName = t7.DicValue, ColorSolutionName = t8.SolutionCode }) .Where(t => t.MainId == iMainId).OrderBy(t => t.ID); var detailModels = await detailModelsSql.ToListAsync(); //物料 List <TBMMaterialFileCacheModel> mList = BasicCacheGet.GetMaterial(currentUser); detailModels.ForEach(p => { TBMMaterialFileCacheModel me = mList.Where(x => x.ID == p.MaterialId).FirstOrDefault(); if (me == null) { throw new Exception($"物料{p.MaterialId},不存在"); } TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.MaterialId = p.MaterialId; tWMStaQuery.WarehouseId = p.WarehouseId; if (mainModel.AuditStatus != 2) { //p.WaitNum = p.WaitNum - p.ActualNum; tWMStaQuery.EditID = mainModel.ID; tWMStaQuery.OperateType = OperateEnum.Sale; // p.ShouldNum = p.SalesOrderActualNum + p.ActualNum; p.ShouldSaleNum = p.ShouldSaleNum + p.SalesOrderActualNum; } p.SalesNumOnInventory = GetInveroryFromSaleNum(me, p.SalesNum); p.AvailableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; }); mainModel.ChildList = detailModels; return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(mainModel)); } catch (Exception ex) { return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null)); } }