public override int Update(MaterialBO bo) { var type = MaterialTypeRepository.FindById(bo.TypeId); var category = MaterialCategoryRepository.FindById(bo.CategoryId); if (category.RequireContainer == true) { var material = Repository.FindById(bo.ContainerMaterialId); if (material == null) { throw new BusinessException(ResponseCode.CannotFindMaterialById.Format(bo.ContainerMaterialId)); } bo.ContainerPartNumber = material.PartNumber; } if (category.RequireRack == true) { var material = Repository.FindById(bo.RackId); if (material == null) { throw new BusinessException(ResponseCode.CannotFindMaterialById.Format(bo.RackId)); } bo.RackPn = material.PartNumber; } bo.CategoryId = type.CategoryId; bo.CategoryCode = category.Code; if (bo.Configs != null && bo.Configs.Count > 0) { bo.Configs.AsParallel().ForAll(x => x.MaterialId = bo.Id); ConfigRepository.Delete(x => x.MaterialId == bo.Id); ConfigRepository.BulkInsert(Mapper.Map <List <MaterialConfig> >(bo.Configs)); } return(base.Update(bo)); }
public override int?Add(MaterialBO bo) { var type = MaterialTypeRepository.FindById(bo.TypeId); var category = MaterialCategoryRepository.FindById(bo.CategoryId); if (category.RequireContainer == true) { var material = Repository.FindById(bo.ContainerMaterialId); if (material == null) { throw new BusinessException(ResponseCode.CannotFindMaterialById.Format(bo.ContainerMaterialId)); } bo.ContainerPartNumber = material.PartNumber; } if (category.RequireRack == true) { var material = Repository.FindById(bo.RackId); if (material == null) { throw new BusinessException(ResponseCode.CannotFindMaterialById.Format(bo.RackId)); } bo.RackPn = material.PartNumber; } if (category.ManualPartNumber == true) //手动输入PN { //判断用户输入的PN是否重复 if (string.IsNullOrWhiteSpace(bo.PartNumber)) { throw new BusinessException(ResponseCode.PartNumberCannotBeNull); } else { if (Repository.Count(x => x.PartNumber == bo.PartNumber) > 0) { throw new BusinessException(ResponseCode.PartNumberAlreadyExists.Format(bo.PartNumber)); } } } else { //自动生成PN var brand = BrandRepository.FindById(bo.BrandId); var serialNo = SerialNoRepository.SingleOrDefault(x => x.BrandCode == brand.Code && x.TypeCode == type.Code); var number = 1; if (serialNo == null) { serialNo = new MaterialSerialNo() { BrandCode = brand.Code, TypeCode = type.Code, SerialNo = number }; serialNo.SerialNo++; SerialNoRepository.Insert(serialNo); } else { if (serialNo.SerialNo >= 99) { throw new BusinessException(ResponseCode.MaterialCountOverLimit); } number = serialNo.SerialNo; serialNo.SerialNo++; SerialNoRepository.Update(serialNo); } var pn = $"{brand.Code}{type.Code}{number.ToString().PadLeft(2, '0')}"; bo.PartNumber = pn; } bo.CategoryId = type.CategoryId; bo.CategoryCode = category.Code; var id = base.Add(bo); if (bo.Configs != null && bo.Configs.Count > 0) { bo.Configs.AsParallel().ForAll(x => x.MaterialId = id); ConfigRepository.BulkInsert(Mapper.Map <List <MaterialConfig> >(bo.Configs)); } return(id); }