/// <summary> /// 计算待出库 /// </summary> /// <param name="tWMStaQuery"></param> /// <returns></returns> public decimal CalcuToOut(TWMStaQuery tWMStaQuery) { var details = _db.Instance.Queryable <TWMDeficitMainDbModel, TWMDeficitDetailDbModel, TBMMaterialFileDbModel>( (t1, t2, t3) => new object[] { JoinType.Inner, t1.ID == t2.MainId, JoinType.Inner, t2.MaterialId == t3.ID }) .Where((t1, t2, t3) => t1.AuditStatus != 2 && t2.WarehouseId == tWMStaQuery.WarehouseId && t2.MaterialId == tWMStaQuery.MaterialId && t1.DeleteFlag == false); if (tWMStaQuery.EditID != null && tWMStaQuery.OperateType == OperateEnum.Invertory) { details = details.Where((t1, t2, t3) => t1.ID != tWMStaQuery.EditID); } //待出库数量 decimal ToSendNum = details.Sum((t1, t2, t3) => t2.ActualNumber); return(ToSendNum); }
/// <summary> /// 获取出库单所有的信息 /// </summary> /// <param name="iMainId"></param> /// <param name="currentUser"></param> /// <returns></returns> public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > GetWholeMainData(int iMainId, CurrentUser currentUser) { var result = await GetMainData(iMainId); result.IsShowEdit = (result.AuditStatus != 2 && result.OperatorId == currentUser.UserID) ? true : false; for (int i = 0; i < result.ChildList.Count; i++) { var thisEntity = result.ChildList[i]; TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.MaterialId = thisEntity.MaterialId; tWMStaQuery.WarehouseId = thisEntity.WarehouseId; if (result.AuditStatus != 2) { tWMStaQuery.OperateType = OperateEnum.Other; tWMStaQuery.EditID = iMainId; } var tWMCountModel = _staticInventory.GeTWMCountModel(tWMStaQuery); if (result.AuditStatus == 2) { thisEntity.AvailableNum = tWMCountModel.AccountNum; } else { thisEntity.AvailableNum = tWMCountModel.AvaiableNum; } } return(ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(result)); }
/// <summary> /// 出入库数量 /// </summary> /// <param name="tWMStaQuery"></param> /// <returns></returns> public decimal CalcuInAndOut(TWMStaQuery tWMStaQuery) { decimal tradeNum = 0; //入库和出库的差 tradeNum = _db.Instance.Queryable <TWMSalesCountDbModel>().Where(p => p.MaterialId == tWMStaQuery.MaterialId && p.WarehouseId == tWMStaQuery.WarehouseId). Sum(p => SqlFunc.IsNull(p.WhNumber, 0) - SqlFunc.IsNull(p.WhSendNumber, 0)); return(tradeNum); }
/// <summary> /// 审核通过后统计当前出库单信息 /// </summary> /// <param name="iMainId"></param> private void OtherWhCountAsync(int iMainId, CurrentUser currentUser) { var mainEntity = _db.Instance.Queryable <TWMProductionMainDbModel>().Where(p => p.ID == iMainId).First(); //获取出库明细 var details = _db.Instance.Queryable <TWMProductionDetailDbModel>() .Where(p => p.MainId == iMainId) .ToList(); //更新出库数量 var detailList = details.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMProductionCountDbModel { MaterialId = p.Key.MaterialId, WarehouseId = p.Key.WarehouseId, WhSendNumber = p.Sum(p1 => p1.ActualNum) }).ToList(); var mList = BasicCacheGet.GetMaterial(currentUser); foreach (var item in detailList) { TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.EditID = iMainId; tWMStaQuery.MaterialId = item.MaterialId; tWMStaQuery.WarehouseId = item.WarehouseId; tWMStaQuery.OperateType = OperateEnum.Product; decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; if (AvaiableNum <= 0) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量可用量不足"); } if (item.WhSendNumber > AvaiableNum) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}"); } var updateFlag = _db.Instance.Updateable(item) .SetColumns(p => p.WhSendNumber == p.WhSendNumber + item.WhSendNumber) .Where(p => p.MaterialId == item.MaterialId && p.WarehouseId == item.WarehouseId) .ExecuteCommand() > 0; if (!updateFlag) { _db.Instance.Insertable(item).ExecuteCommand(); } } }
//计算期初数量 private decimal GetPrimeNum(TWMStaQuery tWMStaQuery) { decimal primeNum = 0; var TWMPrimeCountDbList = _db.Instance.Queryable <TWMPrimeCountDbModel>().Where(p => p.MaterialId == tWMStaQuery.MaterialId && p.WarehouseId == tWMStaQuery.WarehouseId).ToList(); if (TWMPrimeCountDbList.FirstOrDefault() != null) { return(TWMPrimeCountDbList.FirstOrDefault().PrimeNum); } return(primeNum); }
/// <summary> /// 计算待入库数量 /// </summary> /// <param name="tWMStaQuery"></param> /// <returns></returns> public decimal CalcuToIn(TWMStaQuery tWMStaQuery) { var details = _db.Instance.Queryable <TWMProductionWhMainDbModel, TWMProductionWhDetailDbModel, TBMMaterialFileDbModel>((t1, t2, t3) => new object[] { JoinType.Inner, t1.ID == t2.MainId, JoinType.Inner, t2.MaterialId == t3.ID }).Where((t1, t2, t3) => t1.AuditStatus != 2 && t2.WarehouseId == tWMStaQuery.WarehouseId && t2.MaterialId == tWMStaQuery.MaterialId && t1.DeleteFlag == false ); //待入库数量 decimal ToSendNum = details.Sum((t1, t2, t3) => t2.ActualNum); return(ToSendNum); }
/// <summary> /// 获取统计结果 /// </summary> /// <param name="tWMStaQuery"></param> /// <returns></returns> public TWMCountModel GeTWMCountModel(TWMStaQuery tWMStaQuery) { TWMCountModel tWMCountModel = new TWMCountModel() { WarehouseId = tWMStaQuery.WarehouseId, MaterialId = tWMStaQuery.MaterialId }; tWMCountModel.PrimeNum = GetPrimeNum(tWMStaQuery); //待入库数量 _calcuInventory.ToList().ForEach(x => { tWMCountModel.WaitWarehousingNum += x.CalcuToIn(tWMStaQuery); tWMCountModel.WaitOutWhNum += x.CalcuToOut(tWMStaQuery); tWMCountModel.InAndOut += x.CalcuInAndOut(tWMStaQuery); }); tWMCountModel.AccountNum = tWMCountModel.PrimeNum + tWMCountModel.InAndOut; tWMCountModel.AvaiableNum = tWMCountModel.AccountNum - tWMCountModel.WaitOutWhNum; return(tWMCountModel); }
/// <summary> /// 计算待入库数量 /// </summary> /// <param name="tWMStaQuery"></param> /// <returns></returns> public decimal CalcuToIn(TWMStaQuery tWMStaQuery) { return(0); }
/// <summary> /// 修改T_WM_OtherWhSendMain数据 /// </summary> /// <param name="requestObject">Put请求参数</param> /// <param name="currentUser"></param> /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns> public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > PutAsync(RequestPut <TWMOtherWhSendMainEditModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { if (requestObject.PostData == null) { return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData不能为null")); } if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1) { return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData.ChildList至少包含一条数据")); } //开启事务 currDb.BeginTran(); //修改主表信息 var mainModel = _mapper.Map <TWMOtherWhSendMainDbModel>(requestObject.PostData); mainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNumber); mainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount); await currDb.Updateable(mainModel) .UpdateColumns(p => new { p.WhSendType, p.WhSendDate, p.Number, p.Amount, p.ReceiptId }) .ExecuteCommandAsync(); /* * 修改明细逻辑 * 1.根据主单ID查询现有明细数据 * 2.PostData.ChildList中明细ID <= 0的新增 * 3.PostData.ChildList中明细ID > 0的修改 * 4.删除不在PostData.CihldList中的数据 */ var detailModels = _mapper.Map <List <TWMOtherWhSendDetailEditModel>, List <TWMOtherWhSendDetailDbModel> >(requestObject.PostData.ChildList); foreach (var item in detailModels) { item.MainId = mainModel.ID; if (item.ID <= 0) { await currDb.Insertable(item).ExecuteCommandIdentityIntoEntityAsync(); } else { await currDb.Updateable(item).ExecuteCommandAsync(); } } //删除明细数据 var detailIds = detailModels.Select(p => p.ID).ToList(); currDb.Deleteable <TWMOtherWhSendDetailDbModel>() .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID) .ExecuteCommand(); #region 检查出库是否超过可用量 int?iMainId = mainModel.ID; var mList = BasicCacheGet.GetMaterial(currentUser); var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel { MaterialId = p.Key.MaterialId, WarehouseId = p.Key.WarehouseId, WhSendNumber = p.Sum(p1 => p1.ActualNumber) }).ToList(); foreach (var item in details) { TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.EditID = iMainId; tWMStaQuery.MaterialId = item.MaterialId; tWMStaQuery.WarehouseId = item.WarehouseId; tWMStaQuery.OperateType = OperateEnum.Other; decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; if (AvaiableNum < 0) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足"); } if (item.WhSendNumber > AvaiableNum) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}"); } } #endregion var returnData = await GetMainData(mainModel.ID); //提交事务 currDb.CommitTran(); //返回执行结果 return(ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(returnData)); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 新增T_WM_OtherWhSendMain数据 /// </summary> /// <param name="requestObject">Post请求参数</param> /// <param name="currentUser"></param> /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns> public async Task <ResponseObject <TWMOtherWhSendMainQueryModel> > PostAsync(RequestPost <TWMOtherWhSendMainAddModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "PostData不能为null")); } //开启事务 currDb.BeginTran(); #region 检查出库是否超过可用量 int?iMainId = null; var mList = BasicCacheGet.GetMaterial(currentUser); var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel { MaterialId = p.Key.MaterialId, WarehouseId = p.Key.WarehouseId, WhSendNumber = p.Sum(p1 => p1.ActualNumber) }).ToList(); foreach (var item in details) { TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.EditID = iMainId; tWMStaQuery.MaterialId = item.MaterialId; tWMStaQuery.WarehouseId = item.WarehouseId; decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; if (AvaiableNum < 0) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足"); } if (item.WhSendNumber > AvaiableNum) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}"); } } #endregion //插入主表数据 var mapMainModel = _mapper.Map <TWMOtherWhSendMainDbModel>(requestObject.PostData); mapMainModel.CompanyId = currentUser.CompanyID; mapMainModel.OperatorId = currentUser.UserID; mapMainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNumber); mapMainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount); var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); //更新明细表外键ID值 requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId); //插入从表数据 var mapDetailModelList = _mapper.Map <List <TWMOtherWhSendDetailAddModel>, List <TWMOtherWhSendDetailDbModel> >(requestObject.PostData.ChildList); var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0; var returnData = await GetMainData(mainId); //提交事务 currDb.CommitTran(); //返回执行结果 return(result ? ResponseUtil <TWMOtherWhSendMainQueryModel> .SuccessResult(returnData) : ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, "新增数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TWMOtherWhSendMainQueryModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 修改T_WM_SalesMain数据 /// </summary> /// <param name="requestObject">Put请求参数</param> /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns> public async Task <ResponseObject <TWMSalesMainQueryModel> > PutAsync(RequestPut <TWMSalesMainEditModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //#if DEBUG //#else // return null; //#endif if (requestObject.PostData == null) { return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData不能为null")); } if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1) { return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData.ChildList至少包含一条数据")); } //开启事务 currDb.BeginTran(); //修改主表信息 var mainModel = _mapper.Map <TWMSalesMainDbModel>(requestObject.PostData); mainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNum); mainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount); var mainFlag = await currDb.Updateable(mainModel).UpdateColumns(p => new { p.WhSendDate, p.Number, p.Amount, p.SendId, p.WhAdminId, p.ReceiptAddress }).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 <TWMSalesDetailEditModel>, List <TWMSalesDetailDbModel> >(requestObject.PostData.ChildList); var mainEntity = _db.Instance.Queryable <TWMSalesMainDbModel>().Where(p => p.ID == mainModel.ID).First(); var listItem = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Where(t => t.MainId == mainEntity.SourceId).ToList(); var materList = BasicCacheGet.GetMaterial(currentUser); List <TSSMSalesOrderDetailDbModel> toEdit = new List <TSSMSalesOrderDetailDbModel>(); foreach (var item in detailModels) { if (!detailFlag) { break; } item.MainId = mainModel.ID; var procudeMaterial = listItem.Where(p => p.ID == item.SalesOrderDetailId).FirstOrDefault();//销售合同明细 var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); if (!detailFlag) { break; } item.MainId = mainModel.ID; if (item.ID <= 0) //新增 { decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, procudeMaterial.TransferNum);//可转的数量(仓库单位) if (item.ActualNum > wareTransNum) { throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{wareTransNum }"); } else if (item.ActualNum == wareTransNum) { item.SalesOrderActualNum = procudeMaterial.TransferNum; procudeMaterial.TransferNum = 0; } else { if (proNum > procudeMaterial.TransferNum) { item.SalesOrderActualNum = procudeMaterial.TransferNum; procudeMaterial.TransferNum = 0; } else { item.SalesOrderActualNum = proNum; procudeMaterial.TransferNum = procudeMaterial.TransferNum - proNum; } } toEdit.Add(procudeMaterial); //decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); //if (m != null) //{ // if (m.TransferNum < proNum) // { // throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{proNum }"); // } // m.TransferNum = m.TransferNum - proNum; // toEdit.Add(m); //} } else //修改 { var dModel = _db.Instance.Queryable <TWMSalesDetailDbModel>().Where(p => p.ID == item.ID).First(); if (dModel != null) { if (dModel.ActualNum != item.ActualNum) { #region ////原出库数量(销售单位) //decimal oldActualNumPro = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, dModel.ActualNum); //decimal TransNum = procudeMaterial.TransferNum + item.SalesOrderActualNum; //可转数量(生产单位) ////现出库数量(销售单位) //decimal nowActualNumPro = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); //if (item.ActualNum > nowActualNumPro) //{ // throw new Exception($"物料代码{me.MaterialCode} 入库数量不能大于{nowActualNumPro }"); //} //else if (item.ActualNum == nowActualNumPro) //{ // item.SalesOrderActualNum = TransNum; // procudeMaterial.TransferNum = 0; //} //else //{ // if (oldActualNumPro > TransNum) // { // item.SalesOrderActualNum = TransNum; // procudeMaterial.TransferNum = 0; // } // else // { // item.SalesOrderActualNum = oldActualNumPro; // procudeMaterial.TransferNum = TransNum - oldActualNumPro; // } //} #endregion decimal saleNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); //实际转出数量(销售单位) decimal TransNum = procudeMaterial.TransferNum + dModel.SalesOrderActualNum; //可转数量(生产单位) decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, TransNum); //可转的数量(仓库单位) if (item.ActualNum > wareTransNum) { throw new Exception($"物料代码{me.MaterialCode} 入库数量不能大于{wareTransNum }"); } else if (item.ActualNum == wareTransNum) { item.SalesOrderActualNum = TransNum; procudeMaterial.TransferNum = 0; } else { if (saleNum > TransNum) { item.SalesOrderActualNum = TransNum; procudeMaterial.TransferNum = 0; } else { item.SalesOrderActualNum = saleNum; procudeMaterial.TransferNum = TransNum - saleNum; } } toEdit.Add(procudeMaterial); //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); //if (m != null) //{ // if (m.TransferNum + oldActualNumPro < nowActualNumPro) // { // throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{m.TransferNum + oldActualNumPro }"); // } // m.TransferNum = m.TransferNum + oldActualNumPro - nowActualNumPro; // toEdit.Add(m); //} } else { item.SalesOrderActualNum = dModel.SalesOrderActualNum; } } } //新增或修改明细数据 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(); var whDetailList = currDb.Queryable <TWMSalesDetailDbModel>().Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID).ToList(); foreach (var item in whDetailList) { var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); //decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); if (m != null) { m.TransferNum = m.TransferNum + item.SalesOrderActualNum; toEdit.Add(m); } } detailFlag = currDb.Deleteable <TWMSalesDetailDbModel>() .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID) .ExecuteCommand() >= 0; } #region 检查出库是否超过可用量 int?iMainId = mainModel.ID; var mList = BasicCacheGet.GetMaterial(currentUser); var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel { MaterialId = p.Key.MaterialId, WarehouseId = p.Key.WarehouseId, WhSendNumber = p.Sum(p1 => p1.ActualNum) }).ToList(); foreach (var item in details) { TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.EditID = iMainId; tWMStaQuery.MaterialId = item.MaterialId; tWMStaQuery.WarehouseId = item.WarehouseId; decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; if (AvaiableNum < 0) { var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足"); } if (item.WhSendNumber > AvaiableNum) { var me = mList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}"); } } #endregion if (toEdit.Count() > 0) { _db.Instance.Updateable(toEdit).ExecuteCommand(); } if (!_db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Any(p => p.TransferNum > 0 && p.MainId == mainEntity.SourceId)) { _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mainEntity.SourceId).SetColumns(p => p.TransferStatus == false).ExecuteCommand(); } else { _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mainEntity.SourceId).SetColumns(p => p.TransferStatus == true).ExecuteCommand(); } //提交事务 currDb.CommitTran(); var resultTemp = await GetWholeMainData(requestObject.PostData.ID, currentUser); return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(resultTemp.Data)); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 新增T_WM_SalesMain数据 /// </summary> /// <param name="requestObject">Post请求参数</param> /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns> public async Task <ResponseObject <TWMSalesMainQueryModel> > PostAsync(RequestPost <TWMSalesMainAddModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <TWMSalesMainQueryModel> .FailResult(null, "PostData不能为null")); } //开启事务 currDb.BeginTran(); //插入主表数据 var mapMainModel = _mapper.Map <TWMSalesMainDbModel>(requestObject.PostData); mapMainModel.CompanyId = currentUser.CompanyID; mapMainModel.OperatorId = currentUser.UserID; mapMainModel.Number = requestObject.PostData.ChildList.Sum(p => p.ActualNum); mapMainModel.Amount = requestObject.PostData.ChildList.Sum(p => p.Amount); mapMainModel.AuditStatus = 0; var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); //更新明细表外键ID值 requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId); //插入从表数据 var mapDetailModelList = _mapper.Map <List <TWMSalesDetailAddModel>, List <TWMSalesDetailDbModel> >(requestObject.PostData.ChildList); #region 检查出库是否超过可用量 int?iMainId = mainId; var materList = BasicCacheGet.GetMaterial(currentUser); var details = requestObject.PostData.ChildList.GroupBy(p => new { p.MaterialId, p.WarehouseId }).Select(p => new TWMOtherCountDbModel { MaterialId = p.Key.MaterialId, WarehouseId = p.Key.WarehouseId, WhSendNumber = p.Sum(p1 => p1.ActualNum) }).ToList(); foreach (var item in details) { TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.EditID = iMainId; tWMStaQuery.MaterialId = item.MaterialId; tWMStaQuery.WarehouseId = item.WarehouseId; decimal AvaiableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; if (AvaiableNum < 0) { var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料可用量不足"); } if (item.WhSendNumber > AvaiableNum) { var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); throw new Exception($"物料代码:{me.MaterialCode},物料名称{me.MaterialName}的物料出库数量不能大于{AvaiableNum}"); } } #endregion #region 处理销售单的可转单数量 var listItem = _db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Where(t => t.MainId == mapMainModel.SourceId).ToList();//来源单据 List <TSSMSalesOrderDetailDbModel> toEdit = new List <TSSMSalesOrderDetailDbModel>(); foreach (var item in mapDetailModelList) { var procudeMaterial = listItem.Where(p => p.ID == item.SalesOrderDetailId).FirstOrDefault(); //销售合同明细 var me = materList.Where(p => p.ID == item.MaterialId).FirstOrDefault(); //物料 decimal proNum = UnitChange.TranserUnit(me, UnitType.Warehouse, UnitType.Sales, item.ActualNum); decimal wareTransNum = UnitChange.TranserUnit(me, UnitType.Sales, UnitType.Warehouse, procudeMaterial.TransferNum);//可转的数量(仓库单位) if (item.ActualNum > wareTransNum) { throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{wareTransNum }"); } else if (item.ActualNum == wareTransNum) { item.SalesOrderActualNum = procudeMaterial.TransferNum; procudeMaterial.TransferNum = 0; } else { if (proNum > procudeMaterial.TransferNum) { item.SalesOrderActualNum = procudeMaterial.TransferNum; procudeMaterial.TransferNum = 0; } else { item.SalesOrderActualNum = proNum; procudeMaterial.TransferNum = procudeMaterial.TransferNum - proNum; } } toEdit.Add(procudeMaterial); //var m = listItem.Where(p => p.MaterialId == item.MaterialId).FirstOrDefault(); //if (m != null) //{ // if (m.TransferNum < proNum) // { // throw new Exception($"物料代码{me.MaterialCode} 出库数量不能大于{proNum }"); // } // m.TransferNum = m.TransferNum - proNum; // toEdit.Add(m); //} } if (toEdit.Count() > 0) { _db.Instance.Updateable(toEdit).ExecuteCommand(); } if (!_db.Instance.Queryable <TSSMSalesOrderDetailDbModel>().Any(p => p.TransferNum > 0 && p.MainId == mapMainModel.SourceId)) { _db.Instance.Updateable <TSSMSalesOrderMainDbModel>().Where(p => p.ID == mapMainModel.SourceId).SetColumns(p => p.TransferStatus == false).ExecuteCommand(); } #endregion var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0; //提交事务 currDb.CommitTran(); //返回执行结果 var resultTemp = await GetWholeMainData(mainId, currentUser); return(ResponseUtil <TWMSalesMainQueryModel> .SuccessResult(resultTemp.Data)); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TWMSalesMainQueryModel> .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)); } }
public async Task <ResponseObject <TWMProductionMainQueryModel> > 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 materList = BasicCacheGet.GetMaterial(currentUser); var dicList = BasicCacheGet.GetDic(currentUser); var detailModels = await _db.Instance.Queryable <TWMProductionDetailDbModel, TWMProductionMainDbModel, TBMMaterialFileDbModel, TMMPickApplyMainDbModel, TMMPickApplyDetailDbModel>( (t, t0, t1, t2, t3) => new object[] { JoinType.Inner, t.MainId == t0.ID, JoinType.Inner, t.MaterialId == t1.ID, JoinType.Inner, t0.SourceId == t2.ID, JoinType.Inner, t.PickApplyDetailId == t3.ID } ).Select((t, t0, t1, t2, t3) => new TWMProductionDetailQueryModel { ID = t.ID, MainId = t.MainId, MaterialId = t.MaterialId, MaterialName = t1.MaterialName, MaterialCode = t1.MaterialCode, WarehouseId = t.WarehouseId, ActualNum = t.ActualNum, PickActualNum = t.PickActualNum, PickApplyDetailId = t.PickApplyDetailId, UnitPrice = t.UnitPrice, Amount = t.Amount, MaterialTypeId = t1.MaterialTypeId, //MaterialTypeName = t1.TypeName, ColorId = t1.ColorId, //ColorName = t2.DicValue, BaseUnitId = t1.BaseUnitId, //BaseUnitName = t3.DicValue, WarehouseUnitId = t1.WarehouseUnitId, //WarehouseUnitName = t4.DicValue, WarehouseRate = t1.WarehouseRate, ProduceRate = t1.ProduceRate, ProduceUnitId = t1.ProduceUnitId, //ProduceUnitName = t5.DicValue, Spec = t1.Spec, Remark = t.Remark, TransNum = t3.TransNum, }) .Where(t => t.MainId == iMainId) .ToListAsync(); detailModels.ForEach((x) => { var thisMaterial = materList.Where(p => p.ID == x.MaterialId).FirstOrDefault(); if (mainModel.AuditStatus != 2) { x.TransNum = x.TransNum + x.PickActualNum; } x.MaterialTypeName = thisMaterial.MaterialTypeName; x.ColorName = thisMaterial.ColorName; x.BaseUnitName = thisMaterial.BaseUnitName; x.WarehouseUnitName = thisMaterial.WarehouseUnitName; x.ProduceUnitName = thisMaterial.ProduceUnitName; TWMStaQuery tWMStaQuery = new TWMStaQuery(); tWMStaQuery.MaterialId = x.MaterialId; tWMStaQuery.WarehouseId = x.WarehouseId; if (mainModel.AuditStatus != 2) { tWMStaQuery.EditID = mainModel.ID; tWMStaQuery.OperateType = OperateEnum.Product; } x.AvailableNum = _staticInventory.GeTWMCountModel(tWMStaQuery).AvaiableNum; }); mainModel.ChildList = detailModels; return(ResponseUtil <TWMProductionMainQueryModel> .SuccessResult(mainModel)); } catch (Exception ex) { return(ResponseUtil <TWMProductionMainQueryModel> .FailResult(null)); } }