public override int?Add(MaterialCategoryBO bo) { var count = Repository.Count(x => x.Code.Equals(bo.Code)); if (count > 0) { throw new BusinessException(ResponseCode.CodeAlreadyExists.Format(bo.Code)); } if (bo.Configs != null && bo.Configs.Count > 0) //Key 不能重复校验 { var cnt = bo.Configs.Count; var groupCount = bo.Configs.GroupBy(x => x.ConfigKey.ToLower()).Count(); if (cnt != groupCount) { throw new BusinessException(ResponseCode.DuplicateKeyFoundInConfigs); } var id = base.Add(bo); int sort = 10; foreach (var config in bo.Configs) { config.MaterialCategoryId = id; config.Id = null; config.Sort = sort; sort += 10; //步长设置为10 方便后期在中间插入 } ConfigRepository.BulkInsert(Mapper.Map <List <MaterialCategoryConfig> >(bo.Configs)); return(id); } else { return(base.Add(bo)); } }
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 Update(MaterialCategoryBO vo) { var category = Repository.SingleOrDefault(x => x.Code == vo.Code); if (category != null && category.Id != vo.Id) { throw new BusinessException(ResponseCode.CodeAlreadyExists.Format(vo.Code)); } if (vo.Configs != null && vo.Configs.Count > 0) { var cnt = vo.Configs.Count; var groupCount = vo.Configs.GroupBy(x => x.ConfigKey.ToLower()).Count(); if (cnt != groupCount) { throw new BusinessException(ResponseCode.DuplicateKeyFoundInConfigs); } //判断是否可以修改需要容器 和自定义PN 该类别下已有物料的 不允许修改 var materialCategory = Repository.SingleOrDefault(x => x.Id == vo.Id); if (materialCategory == null) { throw new BusinessException(ResponseCode.MaterialCategoryNotExist.Format(vo.Id)); } if ((materialCategory.RequireContainer != vo.RequireContainer || materialCategory.ManualPartNumber != vo.ManualPartNumber || materialCategory.RequireRack != vo.RequireRack) && MaterialRepository.Count(x => x.CategoryId == vo.Id) > 0) { throw new BusinessException(ResponseCode.CannotModifyRequireContainerOrManualPn); } ConfigRepository.Delete(x => x.MaterialCategoryId == vo.Id); int sort = 10; foreach (var config in vo.Configs) { config.MaterialCategoryId = vo.Id; config.Id = null; config.Sort = sort; sort += 10; //步长设置为10 方便后期在中间插入 } ConfigRepository.BulkInsert(Mapper.Map <List <MaterialCategoryConfig> >(vo.Configs)); } return(base.Update(vo)); }
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); }