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));
            }
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
        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);
        }