/// <summary> /// 新增T_MM_BOMMain数据 /// </summary> /// <param name="requestObject">Post请求参数</param> /// <returns>返回响应结果对象,包括响应代码,新增操作结果</returns> public async Task <ResponseObject <bool> > PostAsync(RequestPost <TMMBOMMainAddModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <bool> .FailResult(false, "PostData不能为null")); } //开启事务 currDb.BeginTran(); //删除以前的数据 int PackageId = requestObject.PostData.PackageId; TMMBOMMainDbModel oldDBMolde = _db.Instance.Queryable <TMMBOMMainDbModel>().Where(p => p.PackageId == PackageId).First(); if (oldDBMolde != null) { _db.Instance.Deleteable <TMMBOMDetailDbModel>().Where(p => p.MainId == PackageId).ExecuteCommand(); _db.Instance.Deleteable <TMMBOMMainDbModel>(oldDBMolde).ExecuteCommand(); } //插入主表数据 var mapMainModel = _mapper.Map <TMMBOMMainDbModel>(requestObject.PostData); var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); var materCache = BasicCacheGet.GetMaterial(currentUser); //更新明细表外键ID值 requestObject.PostData.ChildList.ForEach(p => { if (!materCache.Any(p1 => p1.MaterialName == p.MaterialName)) { throw new Exception($"{p.MaterialName}物料不存在"); } p.MainId = mainId; }); //插入从表数据 var mapDetailModelList = _mapper.Map <List <TMMBOMDetailAddModel>, List <TMMBOMDetailDbModel> >(requestObject.PostData.ChildList); var result = await currDb.Insertable(mapDetailModelList).ExecuteCommandAsync() > 0; //提交事务 currDb.CommitTran(); //返回执行结果 return(result ? ResponseUtil <bool> .SuccessResult(true) : ResponseUtil <bool> .FailResult(false, "新增数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <bool> .FailResult(false, ex.Message)); } }
public async Task <ResponseObject <bool> > PostAsync(RequestPost <TMMBOMMainAddNewModel> requestObject, CurrentUser currentUser) { var currDb = _db.Instance;//事务需要使用同一个 SqlSugarClient对象实例 try { //没有新增数据,返回错误信息 if (requestObject.PostData == null) { return(ResponseUtil <bool> .FailResult(false, "PostData不能为null")); } //开启事务 currDb.BeginTran(); //删除以前的数据 int PackageId = requestObject.PostData.PackageId; TMMBOMMainDbModel oldDBMolde = _db.Instance.Queryable <TMMBOMMainDbModel>().Where(p => p.PackageId == PackageId).First(); if (oldDBMolde != null) { _db.Instance.Deleteable <TMMBOMDetailDbModel>().Where(p => p.MainId == PackageId).ExecuteCommand(); _db.Instance.Deleteable <TMMBOMMainDbModel>(oldDBMolde).ExecuteCommand(); } //插入主表数据 var mapMainModel = _mapper.Map <TMMBOMMainDbModel>(requestObject.PostData); var mainId = await currDb.Insertable(mapMainModel).ExecuteReturnIdentityAsync(); var materCache = BasicCacheGet.GetMaterial(currentUser); #region 处理配色项目 List <string> ItemList = requestObject.PostData.ChildList.Select(p => p.ItemName).Distinct().ToList(); Dictionary <string, int> itemToId = new Dictionary <string, int>(); foreach (string name in ItemList) { var colorItem = _db.Instance.Queryable <TMMPackageColorItemDbModel>().Where(p => p.CompanyId == currentUser.CompanyID && p.ItemName == name && p.PackageId == PackageId).First(); int ItemId = 0; if (colorItem == null) { TMMPackageColorItemDbModel temp = new TMMPackageColorItemDbModel(); temp.CompanyId = currentUser.CompanyID; temp.DeleteFlag = false; temp.PackageId = mapMainModel.PackageId; temp.ItemName = name; ItemId = _db.Instance.Insertable(temp).ExecuteReturnIdentity(); } else { ItemId = colorItem.ID; if (colorItem.DeleteFlag == true) { colorItem.DeleteFlag = false; _db.Instance.Updateable(colorItem).ExecuteCommand(); } } itemToId.Add(name, ItemId); } var itemIDs = _db.Instance.Queryable <TMMPackageColorItemDbModel>().Where(p => p.CompanyId == currentUser.CompanyID && p.PackageId == PackageId && !ItemList.Contains(p.ItemName)).Select(p => p.ID).ToList(); _db.Instance.Updateable <TMMPackageColorItemDbModel>().Where(p => itemIDs.Contains(p.ID)). SetColumns(it => new TMMPackageColorItemDbModel { DeleteFlag = true }).ExecuteCommand(); _db.Instance.Deleteable <TMMColorSolutionDetailDbModel>().Where(p => SqlFunc.Subqueryable <TMMColorSolutionMainDbModel>(). Where(p1 => p1.ID == p.MainId && p1.CompanyId == currentUser.CompanyID && p1.PackageId == PackageId).Any() && itemIDs.Contains(p.ItemId)); #endregion #region 处理部位 List <string> PartList = requestObject.PostData.ChildList.Where(p => !string.IsNullOrWhiteSpace(p.PartName)).Select(p => p.PartName).Distinct().ToList(); Dictionary <string, int> partId = new Dictionary <string, int>(); var dictionaryType = _db.Instance.Queryable <TBMDictionaryTypeDbModel>().Where(p => p.CompanyId == currentUser.CompanyID && p.TypeName == "部位档案").First(); foreach (string name in PartList) { var dicItem = _db.Instance.Queryable <TBMDictionaryDbModel>().Where(p => p.CompanyId == currentUser.CompanyID && p.DicValue == name).First(); int dicID = 0; if (dicItem == null) { TBMDictionaryDbModel temp = new TBMDictionaryDbModel(); temp.CompanyId = currentUser.CompanyID; temp.DeleteFlag = false; temp.TypeId = dictionaryType.ID; temp.DicValue = name; dicID = _db.Instance.Insertable(temp).ExecuteReturnIdentity(); } else { dicID = dicItem.ID; } partId.Add(name, dicID); } #endregion List <TMMBOMDetailDbModel> deatail = new List <TMMBOMDetailDbModel>(); foreach (TMMBOMDetailAddNewModel item in requestObject.PostData.ChildList) { TMMBOMDetailDbModel tMMBOMDetailDbModel = ExpressionGenericMapper <TMMBOMDetailAddNewModel, TMMBOMDetailDbModel> .Trans(item); tMMBOMDetailDbModel.MainId = mainId; tMMBOMDetailDbModel.ItemId = itemToId[item.ItemName]; if (!string.IsNullOrWhiteSpace(item.PartName)) { tMMBOMDetailDbModel.PartId = partId[item.PartName]; } if (!materCache.Any(p1 => p1.MaterialName == item.MaterialName)) { throw new Exception($"{item.MaterialName}物料不存在"); } deatail.Add(tMMBOMDetailDbModel); } //插入从表数据 // var mapDetailModelList = _mapper.Map<List<TMMBOMDetailAddNewModel>, List<TMMBOMDetailDbModel>>(requestObject.PostData.ChildList); var result = await currDb.Insertable(deatail).ExecuteCommandAsync() > 0; //提交事务 currDb.CommitTran(); //返回执行结果 return(result ? ResponseUtil <bool> .SuccessResult(true) : ResponseUtil <bool> .FailResult(false, "新增数据失败!")); } catch (Exception ex) { //回滚事务 currDb.RollbackTran(); //返回异常结果 return(ResponseUtil <bool> .FailResult(false, ex.Message)); } }