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)); } }
/// <summary> /// 导入期初 /// </summary> public async Task <ResponseObject <List <string> > > ImportPrime(RequestPost <ImportPrimeModel> requestObject, CurrentUser currentUser) { try { //没有新增数据,返回错误信息 if (requestObject.PostDataList == null || requestObject.PostDataList.Count() == 0) { return(ResponseUtil <List <string> > .FailResult(null, "PostDataList必须有值")); } //合法性检查 //仓库 var Warehouses = _db.Instance.Queryable <TBMWarehouseFileDbModel>(). Where(p => p.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(p.DeleteFlag, false) == false).ToList(); //单位 var unitList = _db.Instance.Queryable <TBMDictionaryDbModel, TBMDictionaryTypeDbModel>( (t, t0) => new object[] { JoinType.Left, t.TypeId == t0.ID, }).Where((t, t0) => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID && SqlFunc.IsNull(t0.DeleteFlag, false) == false && t0.TypeName == "计量单位" ).ToList(); //物料 var MaterialList = _db.Instance.Queryable <TBMMaterialFileDbModel>().Where(t => SqlFunc.IsNull(t.DeleteFlag, false) == false && t.CompanyId == currentUser.CompanyID).ToList(); List <TWMPrimeCountDbModel> tWMPrimeCountDbModels = new List <TWMPrimeCountDbModel>(); var importPrimeModels = requestObject.PostDataList; int index = 1; List <string> errorList = new List <string>(); List <TWMPrimeCountDbModel> TWMPrimeCountList = new List <TWMPrimeCountDbModel>(); foreach (var item in importPrimeModels) { string msg = string.Empty; TWMPrimeCountDbModel tWMPrimeCountDbModel = new TWMPrimeCountDbModel(); var material = MaterialList.Where(p => p.MaterialCode == item.MaterialCode).FirstOrDefault(); if (material != null) { tWMPrimeCountDbModel.MaterialId = material.ID; int unitId = material.WarehouseUnitId == null ? material.BaseUnitId : material.WarehouseUnitId.Value; TBMDictionaryDbModel unit = unitList.Where(p => p.ID == unitId).FirstOrDefault(); if (unit.DicValue != item.UnitName) { msg += $"库存单位应该为{unit.DicValue}"; } } else { msg += $"物料代码{item.MaterialCode}不存在;"; } var houses = Warehouses.Where(p => p.WarehouseName == item.WarehouseName).FirstOrDefault(); if (houses != null) { tWMPrimeCountDbModel.WarehouseId = houses.ID; } tWMPrimeCountDbModel.PrimeNum = item.Num; tWMPrimeCountDbModel.CompanyId = currentUser.CompanyID; if (msg != string.Empty) { msg = $"第{index}行数据:{msg}"; errorList.Add(msg); } else { TWMPrimeCountList.Add(tWMPrimeCountDbModel); } index++; } if (errorList.Count() > 0) { return(ResponseUtil <List <string> > .FailResult(errorList)); } if (TWMPrimeCountList.Count() > 0) { await _db.Instance.Insertable <TWMPrimeCountDbModel>(TWMPrimeCountList).ExecuteCommandAsync(); } return(ResponseUtil <List <string> > .SuccessResult(null)); } catch (Exception ex) { return(ResponseUtil <List <string> > .FailResult(null, ex.Message)); } }