public async Task <ResponseObject <TPSMPurchaseOrderMainQueryModel> > GetWholeMainData(int requestObject, CurrentUser currentUser) { try { RequestGet requestGet = new RequestGet() { IsPaging = false, QueryConditions = new List <QueryCondition>() { new QueryCondition() { Column = "ID", Condition = ConditionEnum.Equal, Content = requestObject.ToString() } } }; var mainModel = await GetMainListAsync(requestGet, currentUser); TPSMPurchaseOrderMainQueryModel tPSMPurchaseOrderMainQueryModel = mainModel.Data.FirstOrDefault(); var deatailModel = await GetDetialList(requestObject, currentUser); tPSMPurchaseOrderMainQueryModel.ChildList = deatailModel.Data; return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .SuccessResult(tPSMPurchaseOrderMainQueryModel)); } catch (Exception ex) { return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 修改T_PSM_PurchaseOrderMain数据 /// </summary> /// <param name="requestObject">Put请求参数</param> /// <param name="currentUser"></param> /// <returns>返回响应结果对象,包括响应代码,修改操作结果</returns> public async Task <ResponseObject <TPSMPurchaseOrderMainQueryModel> > PutAsync(RequestPut <TPSMPurchaseOrderMainEditModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { if (requestObject.PostData == null) { return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, "PostData不能为null")); } if (requestObject.PostData.ChildList == null || requestObject.PostData.ChildList.Count < 1) { return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, "PostData.ChildList至少包含一条数据")); } //开启事务 currDb.BeginTran(); //修改主表信息 var mainModel = _mapper.Map <TPSMPurchaseOrderMainDbModel>(requestObject.PostData); mainModel.PurchaseNum = requestObject.PostData.ChildList.Sum(p => p.PurchaseNum); mainModel.PurchaseAmount = requestObject.PostData.ChildList.Sum(p => p.PurchaseAmount); var mainFlag = await currDb.Updateable(mainModel) .UpdateColumns(p => new { p.PurchaseNum, p.PurchaseAmount, p.OrderDate, p.OrderTypeId, p.SettlementTypeId, p.ContactName, p.ContactNumber, p.BuyerId, p.Currency }) .Where(p => (SqlFunc.IsNullOrEmpty(p.AuditStatus) || p.AuditStatus != 2) && p.ID == mainModel.ID) .ExecuteCommandAsync() > 0; //查询编辑前明细数据 var beforEditDetailData = await _db.Instance.Queryable <TPSMPurchaseOrderDetailDbModel>() .Where(p => p.MainId == mainModel.ID) .ToListAsync(); /* * 修改明细逻辑 * 1.根据主单ID查询现有明细数据 * 2.PostData.ChildList中明细ID <= 0的新增 * 3.PostData.ChildList中明细ID > 0的修改 * 4.删除不在PostData.CihldList中的数据 */ var detailFlag = true; var detailModels = _mapper.Map <List <TPSMPurchaseOrderDetailEditModel>, List <TPSMPurchaseOrderDetailDbModel> >(requestObject.PostData.ChildList); //未审核可转数据都是0 detailModels.ForEach(p => p.TransferNum = 0); 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 <TPSMPurchaseOrderDetailDbModel>() .Where(p => !detailIds.Contains(p.ID) && p.MainId == mainModel.ID) .ExecuteCommand() >= 0; } //如果有源单号 if (mainModel.SourceId > 0) { var transList = await GetTransDetailsAsync((int)mainModel.SourceId, detailModels, beforEditDetailData, currentUser); foreach (var item in transList) { await _db.Instance.Updateable <TMMPurchaseApplyDetailDbModel>() .SetColumns(p => p.TransNum == p.TransNum - item.TransNum) .Where(p => p.MainId == item.MainId && p.MaterialId == item.MaterialId) .ExecuteCommandAsync(); } FalseTMMPurchaseApplyMain(mainModel.SourceId.Value); } else { var detailModelLists = _db.Instance.Queryable <TPSMPurchaseOrderDetailDbModel>().Where(p => p.MainId == requestObject.PostData.ID).ToList(); var groupEntity = from p in detailModelLists group p by new { 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) { var meList = BasicCacheGet.GetMaterial(currentUser); string error = string.Join(",", differentEntity.Select(p => meList.Where(p1 => p1.ID == p.Key.MaterialId).FirstOrDefault()?.MaterialName)); throw new Exception($"{error}商品的单价不一致,请保证相同商品价格一致性"); } } //提交事务 currDb.CommitTran(); //返回执行结果 TPSMPurchaseOrderMainQueryModel returnObject = null; var tempreturnObject = await GetWholeMainData(mainModel.ID, currentUser); returnObject = tempreturnObject.Data; return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .SuccessResult(returnObject)); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, ex.Message)); } }
/// <summary> /// 新增T_PSM_PurchaseOrderMain数据 /// </summary> /// <param name="requestObject">Post请求参数</param> /// <param name="currentUser"></param> /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns> public async Task <ResponseObject <TPSMPurchaseOrderMainQueryModel> > PostAsync(RequestPost <TPSMPurchaseOrderMainAddModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, "PostData不能为null")); } //开启事务 currDb.BeginTran(); //插入主表数据 var mapMainModel = _mapper.Map <TPSMPurchaseOrderMainDbModel>(requestObject.PostData); mapMainModel.OperatorId = currentUser.UserID; mapMainModel.CompanyId = currentUser.CompanyID; mapMainModel.PurchaseNum = requestObject.PostData.ChildList.Sum(p => p.PurchaseNum); mapMainModel.PurchaseAmount = requestObject.PostData.ChildList.Sum(p => p.PurchaseAmount); var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); //更新明细表外键ID值 requestObject.PostData.ChildList.ForEach(p => p.MainId = mainId); //插入从表数据 var mapDetailModelList = _mapper.Map <List <TPSMPurchaseOrderDetailAddModel>, List <TPSMPurchaseOrderDetailDbModel> >(requestObject.PostData.ChildList); var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0; //如果是生产采购申请单转采购单,需要更新转单及数量信息 if (mapMainModel.SourceId > 0) { var transList = await GetTransDetailsAsync((int)mapMainModel.SourceId, mapDetailModelList, currentUser); foreach (var item in transList) { await _db.Instance.Updateable <TMMPurchaseApplyDetailDbModel>() .SetColumns(p => p.TransNum == p.TransNum - item.TransNum) .Where(p => p.MainId == item.MainId && p.MaterialId == item.MaterialId) .ExecuteCommandAsync(); } FalseTMMPurchaseApplyMain(mapMainModel.SourceId.Value); } else { var detailModelLists = _db.Instance.Queryable <TPSMPurchaseOrderDetailDbModel>().Where(p => p.MainId == requestObject.PostData.ID).ToList(); var groupEntity = from p in detailModelLists group p by new { 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) { var meList = BasicCacheGet.GetMaterial(currentUser); string error = string.Join(",", differentEntity.Select(p => meList.Where(p1 => p1.ID == p.Key.MaterialId).FirstOrDefault()?.MaterialName)); throw new Exception($"{error}商品的单价不一致,请保证相同商品价格一致性"); } } //提交事务 currDb.CommitTran(); TPSMPurchaseOrderMainQueryModel returnObject = null; if (result) { var tempreturnObject = await GetWholeMainData(mainId, currentUser); returnObject = tempreturnObject.Data; } //返回执行结果 return(result ? ResponseUtil <TPSMPurchaseOrderMainQueryModel> .SuccessResult(returnObject) : ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, "新增数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <TPSMPurchaseOrderMainQueryModel> .FailResult(null, ex.Message)); } }