///// <summary>
        ///// 增加工序材料需求
        ///// </summary>
        ///// <param name="inputDtos"></param>
        ///// <returns></returns>
        //public OperationResult Add(params PlanMaterialRequirementInfoInputDto[] inputDtos)
        //{

        //    inputDtos.CheckNotNull("inputDtos");
        //    OperationResult result = PlanMaterialRequirementInfoRepository.Insert(inputDtos,
        //        dto =>
        //        {
        //            if (dto.RequireQuantity == null)
        //            {
        //                throw new Exception("存在工序材料需求数量为空的数据,数据不合法,无法保存!");
        //            }
        //        },
        //        (dto, entity) =>
        //        {
        //            if (dto.ProductionProcessRequirement_Id != null)
        //            {
        //                PlanProductionProcessRequirementInfo productionProcessRequirementInfo = PlanProductionProcessRequirementInfoRepository.GetByKey(dto.ProductionProcessRequirement_Id);
        //                if (productionProcessRequirementInfo == null)
        //                {
        //                    throw new Exception("要增加材料需求对应的的工序需求不存在。");
        //                }
        //                entity.ProductionProcessRequirement = productionProcessRequirementInfo;
        //            }
        //            else
        //            {
        //                entity.ProductionProcessRequirement = null;
        //            }
        //            if (dto.ProductionProcess_Id != null)
        //            {
        //                ProductionProcessInfo processInfo = ProductionProcessInfoRepository.GetByKey(dto.ProductionProcess_Id);
        //                if (processInfo == null)
        //                {
        //                    throw new Exception("要增加的材料需求对应的工序不存在。");
        //                }
        //                entity.ProductionProcess = processInfo;
        //            }
        //            else
        //            {
        //                entity.ProductionProcess = null;
        //            }
        //            if (dto.ProductionRule_Id != null)
        //            {
        //                ProductionRuleInfo productionRuleInfo = ProductionRuleInfoRepository.GetByKey(dto.ProductionRule_Id);
        //                if (productionRuleInfo == null)
        //                {
        //                    throw new Exception("要增加的材料需求对应的配方不存在。");
        //                }
        //                entity.ProductionRule = productionRuleInfo;
        //            }
        //            else
        //            {
        //                entity.ProductionRule = null;
        //            }
        //            return entity;
        //        });
        //    return result;
        //}
        /// <summary>
        /// 增加工序物料需求
        /// </summary>
        /// <param name="inputDtos"></param>
        /// <returns></returns>
        public async Task <OperationResult> Add(params PlanMaterialRequirementInfoInputDto[] inputDtos)
        {
            inputDtos.CheckNotNull("inputDtos");
            foreach (var dtoData in inputDtos)
            {
                dtoData.ProductionProcessRequirement = PlanProductionProcessRequirementInfoRepository.TrackEntities.Where(m => m.Id == dtoData.ProductionProcessRequirement_Id).FirstOrDefault();
                if (Equals(dtoData.ProductionProcessRequirement, null))
                {
                    return(new OperationResult(OperationResultType.Error, "对应的工序请求不存在,无法保存!"));
                }
                dtoData.Material = MaterialInfoRepository.TrackEntities.Where(m => m.Id == dtoData.Material_Id).FirstOrDefault();
                if (Equals(dtoData.Material, null))
                {
                    return(new OperationResult(OperationResultType.Error, "对应的物料不存在,无法保存!"));
                }
            }
            PlanMaterialRequirementInfoRepository.UnitOfWork.BeginTransaction();
            var result = await PlanMaterialRequirementInfoRepository.InsertAsync(inputDtos);

            PlanMaterialRequirementInfoRepository.UnitOfWork.Commit();
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// 增加工单
        /// </summary>
        /// <param name="inputDtos"></param>
        /// <returns></returns>
        public async Task <OperationResult> AddWorkList(params PlanProductionScheduleInfoInputDto[] inputDtos)
        {
            inputDtos.CheckNotNull("inputDtos");
            var result1 = new OperationResult();
            var result2 = new OperationResult();
            var result3 = new OperationResult();

            PlanProductionScheduleInfoRepository.UnitOfWork.BeginTransaction();
            foreach (var dtoData in inputDtos)
            {
                dtoData.OrderItem = PlanOrderItemInfoRepository.TrackEntities.Where(m => m.Id == dtoData.OrderItem_Id).FirstOrDefault();
                if (Equals(dtoData.OrderItem, null))
                {
                    return(new OperationResult(OperationResultType.Error, "对应的订单明细不存在,不能生成工单。"));
                }
                dtoData.ProductionRule = ProductionRuleInfoRepository.TrackEntities.Where(m => m.Id == dtoData.ProductionRule_Id).FirstOrDefault();
                if (Equals(dtoData.ProductionRule, null))
                {
                    return(new OperationResult(OperationResultType.Error, "对应的配方不存在,不能生成工单。"));
                }
                if (dtoData.ScheduleStatus != 1)
                {
                    return(new OperationResult(OperationResultType.Error, "只有生产计划状态为未开始的才能生成工单。"));
                }
                int count1 = ProductionRuleItemInfoRepository.Entities.Where(m => m.ProductionRule.Id == dtoData.ProductionRule.Id).Count();
                if (count1 > 0)
                {
                    var ruleitemlist = ProductionRuleItemInfoRepository.TrackEntities.Where(m => m.ProductionRule.Id == dtoData.ProductionRule.Id).OrderBy(m => m.ProductionProcessOrder).ToList();
                    PlanProductionProcessRequirementInfoInputDto[] processRequires = new PlanProductionProcessRequirementInfoInputDto[count1];
                    for (int i = 0; i < count1; i++)
                    {
                        PlanProductionProcessRequirementInfoInputDto info = new PlanProductionProcessRequirementInfoInputDto();
                        info.Id = CombHelper.NewComb();
                        info.ProductionProcess_Id   = ruleitemlist[i].ProductionProcess.Id;
                        info.ProductionSchedule_Id  = dtoData.Id;
                        info.ProductionProcess      = ruleitemlist[i].ProductionProcess;
                        info.ProductionProcessOrder = ruleitemlist[i].ProductionProcessOrder;
                        if (i == 0)
                        {
                            info.StartTime = dtoData.StartTime;
                        }
                        else
                        {
                            info.StartTime = processRequires[i - 1].EndTime.AddSeconds(10);
                        }
                        info.EndTime            = info.StartTime.AddSeconds(double.Parse(ruleitemlist[i].Duration.ToString()));
                        info.ProductionSchedule = PlanProductionScheduleInfoRepository.TrackEntities.Where(m => m.Id == dtoData.Id).FirstOrDefault();
                        info.Duration           = ruleitemlist[i].Duration;
                        info.DurationUnit       = ruleitemlist[i].DurationUnit;
                        info.Remark             = ruleitemlist[i].Remark;
                        info.CreatedTime        = dtoData.CreatedTime;
                        info.CreatorUserId      = dtoData.CreatorUserId;
                        info.LastUpdatedTime    = dtoData.LastUpdatedTime;
                        info.LastUpdatorUserId  = dtoData.LastUpdatorUserId;
                        processRequires[i]      = info;
                    }
                    // PlanProductionProcessRequirementInfoRepository.UnitOfWork.BeginTransaction();
                    result1 = await PlanProductionProcessRequirementInfoRepository.InsertAsync(processRequires);

                    //  PlanProductionProcessRequirementInfoRepository.UnitOfWork.Commit();
                }
                int count2 = ProManufacturingBOMBillItemInfoRepository.Entities.Where(m => m.ProManufacturingBill.ProductionRule.Id == dtoData.ProductionRule.Id).Count();
                if (count2 > 0)
                {
                    PlanMaterialRequirementInfoInputDto[] materialRequires = new PlanMaterialRequirementInfoInputDto[count2];
                    var bomlist = ProManufacturingBOMBillItemInfoRepository.TrackEntities.Where(m => m.ProManufacturingBill.ProductionRule.Id == dtoData.ProductionRule.Id).ToList();
                    ProManufacturingBOMBillItemInfoInputDto[] bomRequires = new ProManufacturingBOMBillItemInfoInputDto[count2];
                    for (int i1 = 0; i1 < count2; i1++)
                    {
                        PlanMaterialRequirementInfoInputDto info1 = new PlanMaterialRequirementInfoInputDto();
                        info1.Id       = CombHelper.NewComb();
                        info1.Material = bomlist[i1].Material;
                        var id = bomlist[i1].ProductionProcess.Id;
                        info1.ProductionProcessRequirement = PlanProductionProcessRequirementInfoRepository.TrackEntities.Where(m => m.ProductionProcess.Id == id && m.ProductionSchedule.Id == dtoData.Id).FirstOrDefault();
                        info1.RequireQuantity   = bomlist[i1].Quantity * dtoData.Quantity;
                        info1.Remark            = bomlist[i1].Remark;
                        info1.CreatedTime       = dtoData.CreatedTime;
                        info1.CreatorUserId     = dtoData.CreatorUserId;
                        info1.LastUpdatedTime   = dtoData.LastUpdatedTime;
                        info1.LastUpdatorUserId = dtoData.LastUpdatorUserId;
                        materialRequires[i1]    = info1;
                    }
                    // PlanMaterialRequirementInfoRepository.UnitOfWork.BeginTransaction();
                    result2 = await PlanMaterialRequirementInfoRepository.InsertAsync(materialRequires);

                    // PlanMaterialRequirementInfoRepository.UnitOfWork.Commit();
                }
                int count3 = ProManufacturingBORBillItemInfoRepository.Entities.Where(m => m.ProManufacturingBill.ProductionRule.Id == dtoData.ProductionRule.Id).Count();
                if (count3 > 0)
                {
                    PlanEquipmentRequirementInfoInputDto[] equipmentRequires = new PlanEquipmentRequirementInfoInputDto[count3];
                    var borlist = ProManufacturingBORBillItemInfoRepository.TrackEntities.Where(m => m.ProManufacturingBill.ProductionRule.Id == dtoData.ProductionRule.Id).ToList();
                    ProManufacturingBORBillItemInfoInputDto[] borRequires = new ProManufacturingBORBillItemInfoInputDto[count3];
                    for (int i2 = 0; i2 < count3; i2++)
                    {
                        PlanEquipmentRequirementInfoInputDto info2 = new PlanEquipmentRequirementInfoInputDto();
                        info2.Id        = CombHelper.NewComb();
                        info2.Equipment = borlist[i2].Equipment;
                        var id = borlist[i2].ProductionProcess.Id;
                        info2.ProductionProcessRequirement = PlanProductionProcessRequirementInfoRepository.TrackEntities.Where(m => m.ProductionProcess.Id == id && m.ProductionSchedule.Id == dtoData.Id).FirstOrDefault();
                        info2.RequireQuantity   = borlist[i2].Quantity;
                        info2.Remark            = borlist[i2].Remark;
                        info2.CreatedTime       = dtoData.CreatedTime;
                        info2.CreatorUserId     = dtoData.CreatorUserId;
                        info2.LastUpdatedTime   = dtoData.LastUpdatedTime;
                        info2.LastUpdatorUserId = dtoData.LastUpdatorUserId;
                        equipmentRequires[i2]   = info2;
                    }
                    // PlanEquipmentRequirementInfoRepository.UnitOfWork.BeginTransaction();
                    result3 = await PlanEquipmentRequirementInfoRepository.InsertAsync(equipmentRequires);

                    // PlanEquipmentRequirementInfoRepository.UnitOfWork.Commit();
                }
                if (result1.Successed && result2.Successed && result1.Successed)
                {
                    dtoData.ScheduleStatus = 2;
                }
            }
            // PlanProductionScheduleInfoRepository.UnitOfWork.BeginTransaction();
            var result = await PlanProductionScheduleInfoRepository.UpdateAsync(inputDtos);

            PlanProductionScheduleInfoRepository.UnitOfWork.Commit();
            return(result);
        }