Пример #1
0
        /// <summary>
        /// 设置出库任务的空托盘库位
        /// </summary>
        /// <param name="id">入库任务编号</param>
        /// <param name="roleIds">库位编号集合</param>
        /// <returns>业务操作结果</returns>
        public async Task <OperationResult> SetPalletOutStorageWareHouseLocation(Guid MaterialOutStorageId, MaterialOutStorageInfoInputDto MaterialOutStorageDtos, Guid[] WareHouseLocationIds)
        {
            int count = 0;

            //////////////库位表
            foreach (Guid WareHouseLocationId in WareHouseLocationIds)
            {
                MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                //
                matwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == WareHouseLocationId).FirstOrDefault();
                //
                matwarehouselocationInfo.PalletID = null;
                //
                count += await MatWareHouseLocationInfoRepository.UpdateAsync(matwarehouselocationInfo);
            }
            //
            //出库单
            MaterialOutStorageDtos.OutStorageTime = DateTime.Now;
            MaterialOutStorageDtos.FinishTime     = DateTime.Now;
            //已完成
            MaterialOutStorageDtos.OutStorageStatus = (int)OutStorageStatusEnumModel.OutStorageStatus.OutStorageFinishStatus;
            //
            MaterialOutStorageInfo materialoutstorageInfo = new MaterialOutStorageInfo();

            materialoutstorageInfo = MaterialOutStorageDtos.MapTo(materialoutstorageInfo);
            //
            count += await MaterialOutStorageRepository.UpdateAsync(materialoutstorageInfo);

            //
            return(count > 0
                ? new OperationResult(OperationResultType.Success, "空托盘出库任务“{0}”指派库位操作成功".FormatWith("Test"))
                : OperationResult.Success);
        }
Пример #2
0
        /// <summary>
        /// 设置入库任务的空托盘库位
        /// </summary>
        /// <param name="id">入库任务编号</param>
        /// <param name="roleIds">库位编号集合</param>
        /// <returns>业务操作结果</returns>
        public async Task <OperationResult> SetPalletInStorageWareHouseLocation(Guid MaterialInStorageId, MaterialInStorageInfoInputDto MaterialInStorageDtos, Guid[] WareHouseLocationIds)
        {
            Guid[] existIds  = MaterialBatchInfoRepository.Entities.Where(m => m.MaterialInStorage.Id == MaterialInStorageId).Select(m => m.Id).ToArray();
            Guid[] addIds    = WareHouseLocationIds.Except(existIds).ToArray();
            Guid[] removeIds = existIds.Except(WareHouseLocationIds).ToArray();
            //
            //MaterialBatchInfoRepository.UnitOfWork.BeginTransaction();
            ////
            int count = 0;

            //foreach (Guid addId in addIds)
            //{
            //    //Role role = await RoleRepository.GetByKeyAsync(addId);
            //    //if (role == null)
            //    //{
            //    //    return new OperationResult(OperationResultType.QueryNull, "指定编号的角色信息不存在");
            //    //}

            //    MaterialBatchInfo map = new MaterialBatchInfo() { Id = addId, BatchCode = "2018/07/27" };
            //    //
            //    count += await MaterialBatchInfoRepository.InsertAsync(map);
            //}
            //count += await MaterialBatchInfoRepository.DeleteAsync(m => m.MaterialInStorage.Id == id);
            //MaterialBatchInfoRepository.UnitOfWork.Commit();
            //
            //////////////
            //MatWareHouseTypeInfo matwarehousetypeInfo = new MatWareHouseTypeInfo();
            //matwarehousetypeInfo.WareHouseTypeCode = "0001";
            //matwarehousetypeInfo.WareHouseTypeName = "库位1";
            //await MatWareHouseTypeInfoRepository.InsertAsync(matwarehousetypeInfo);

            //MaterialOutStorageInfo materialoutstorageInfo = new MaterialOutStorageInfo();
            //materialoutstorageInfo.Remark = "0001";
            ////
            //Guid Material_Id = Guid.Parse("3C973F9E-1F8B-E811-895C-005056C00008");
            //materialoutstorageInfo.Material = MaterialInfoRepository.TrackEntities.Where(m => m.Id == Material_Id).FirstOrDefault();
            //if (Equals(materialoutstorageInfo.Material, null))
            //{
            //    return new OperationResult(OperationResultType.Error, $"对应的物料信息不存在,该组数据不被存储。");
            //}
            ////materialoutstorageInfo.WareHouseTypeName = "库位1";
            //count += await MaterialOutStorageInfoRepository.InsertAsync(materialoutstorageInfo);

            //////////////库位表
            foreach (Guid WareHouseLocationId in WareHouseLocationIds)
            {
                MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                //
                matwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == WareHouseLocationId).FirstOrDefault();
                //
                matwarehouselocationInfo.PalletID = MaterialInStorageDtos.PalletID;
                //
                count += await MatWareHouseLocationInfoRepository.UpdateAsync(matwarehouselocationInfo);
            }
            //////////////
            return(count > 0
            ? new OperationResult(OperationResultType.Success, "空托盘入库任务“{0}”指派库位操作成功".FormatWith("Test"))
            : OperationResult.NoChanged);
        }
Пример #3
0
        /// <summary>
        /// 增加仓库货区信息
        /// </summary>
        /// <param name="inputDtos"></param>
        /// <returns></returns>
        public async Task <OperationResult> Add(params MatWareHouseAreaInfoInputDto[] inputDtos)
        {
            inputDtos.CheckNotNull("inputDtos");
            foreach (var dtoData in inputDtos)
            {
                if (string.IsNullOrEmpty(dtoData.WareHouseAreaCode))
                {
                    return(new OperationResult(OperationResultType.Error, "请正确填写仓库货区编号,该组数据不被存储。"));
                }
                if (string.IsNullOrEmpty(dtoData.WareHouseAreaName))
                {
                    return(new OperationResult(OperationResultType.Error, "请正确填写仓库货区名称,该组数据不被存储。"));
                }

                if (dtoData.IsGenerageLocation != null && dtoData.IsGenerageLocation.Value &&
                    dtoData.WareHouseLocationCodeType == 0)
                {
                    return(new OperationResult(OperationResultType.Error, "请正确选择库位命名方式,该组数据不被存储。"));
                }
                //
                if (MatWareHouseAreaRepository.CheckExists(x => x.WareHouseAreaCode == dtoData.WareHouseAreaCode))
                {
                    return(new OperationResult(OperationResultType.Error, $"仓库货区编号 {dtoData.WareHouseAreaCode} 的数据已存在,该组数据不被存储。"));
                }
                if (MatWareHouseAreaRepository.CheckExists(x => x.WareHouseAreaName == dtoData.WareHouseAreaName))
                {
                    return(new OperationResult(OperationResultType.Error, $"仓库货区名称 {dtoData.WareHouseAreaName} 的数据已存在,该组数据不被存储。"));
                }

                if (dtoData.LayerNumber == 0)
                {
                    return(new OperationResult(OperationResultType.Error, $"货架层数不能为0,该组数据不被存储。"));
                }

                if (dtoData.LayerNumber > 10)
                {
                    return(new OperationResult(OperationResultType.Error, $"货架层数不能大于10,该组数据不被存储。"));
                }

                if (dtoData.ColumnNumber == 0)
                {
                    return(new OperationResult(OperationResultType.Error, $"货架列数不能为0,该组数据不被存储。"));
                }

                if (dtoData.ColumnNumber > 20)
                {
                    return(new OperationResult(OperationResultType.Error, $"货架列数不能大于20,该组数据不被存储。"));
                }

                if (dtoData.LocationLoadBearing > 1000)
                {
                    return(new OperationResult(OperationResultType.Error, $"库位承载不能大于1000,该组数据不被存储。"));
                }

                //
                dtoData.MatWareHouse = MatWareHouseInfoRepository.TrackEntities.Where(m => m.Id == dtoData.MatWareHouse_Id).FirstOrDefault();
                if (Equals(dtoData.MatWareHouse, null))
                {
                    return(new OperationResult(OperationResultType.Error, $"对应的仓库货区类型不存在,该组数据不被存储。"));
                }
            }
            MatWareHouseAreaRepository.UnitOfWork.BeginTransaction();
            var result = await MatWareHouseAreaRepository.InsertAsync(inputDtos);

            //
            foreach (var dtoData2 in inputDtos)
            {
                if (dtoData2.IsGenerageLocation != null && dtoData2.IsGenerageLocation.Value)
                {
                    if (dtoData2.WareHouseLocationCodeType == 1)
                    {
                        for (int i = 1; i <= dtoData2.LayerNumber; i++)
                        {
                            for (int j = 1; j <= dtoData2.ColumnNumber; j++)
                            {
                                MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                                matwarehouselocationInfo.MatWareHouse = MatWareHouseInfoRepository.TrackEntities.Where(m => m.Id == dtoData2.MatWareHouse_Id).FirstOrDefault();
                                //
                                matwarehouselocationInfo.MatWareHouseArea = MatWareHouseAreaRepository.TrackEntities.Where(m => m.WareHouseAreaCode == dtoData2.WareHouseAreaCode).FirstOrDefault();
                                //
                                matwarehouselocationInfo.WareHouseLocationCode = matwarehouselocationInfo.MatWareHouseArea.WareHouseAreaCode + "_" + string.Format($"{j:000}", j) + "_" + string.Format($"{i:00}", i);
                                matwarehouselocationInfo.WareHouseLocationName = matwarehouselocationInfo.MatWareHouseArea.WareHouseAreaName + "_" + string.Format($"{j:000}", j) + "_" + string.Format($"{i:00}", i);
                                //
                                matwarehouselocationInfo.WareHouseLocationType = matwarehouselocationInfo.MatWareHouseArea.WareHouseLocationType;
                                //matwarehouselocationInfo.WareHouseLocationStatus = 4;
                                //
                                matwarehouselocationInfo.CreatorUserId = matwarehouselocationInfo.MatWareHouseArea.CreatorUserId;
                                matwarehouselocationInfo.CreatedTime   = DateTime.Now;
                                //
                                matwarehouselocationInfo.IsUse = true;
                                //
                                matwarehouselocationInfo.Remark = "系统自动添加";
                                var result0 = await MatWareHouseLocationInfoRepository.InsertAsync(matwarehouselocationInfo);
                            }
                        }
                    }
                    else if (dtoData2.WareHouseLocationCodeType == 2)
                    {
                        for (int i = 1; i <= dtoData2.LocationQuantity; i++)
                        {
                            MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                            matwarehouselocationInfo.MatWareHouse = MatWareHouseInfoRepository.TrackEntities.Where(m => m.Id == dtoData2.MatWareHouse_Id).FirstOrDefault();
                            //
                            matwarehouselocationInfo.MatWareHouseArea = MatWareHouseAreaRepository.TrackEntities.Where(m => m.WareHouseAreaCode == dtoData2.WareHouseAreaCode).FirstOrDefault();
                            //
                            matwarehouselocationInfo.WareHouseLocationCode = matwarehouselocationInfo.MatWareHouseArea.WareHouseAreaCode + "_" + string.Format($"{i:000}", i);
                            matwarehouselocationInfo.WareHouseLocationName = matwarehouselocationInfo.MatWareHouseArea.WareHouseAreaName + "_" + string.Format($"{i:000}", i);
                            //
                            matwarehouselocationInfo.WareHouseLocationType = matwarehouselocationInfo.MatWareHouseArea.WareHouseLocationType;
                            //matwarehouselocationInfo.WareHouseLocationStatus = 4;
                            //
                            matwarehouselocationInfo.CreatorUserId = matwarehouselocationInfo.MatWareHouseArea.CreatorUserId;
                            matwarehouselocationInfo.CreatedTime   = DateTime.Now;
                            //
                            matwarehouselocationInfo.IsUse = true;
                            //
                            matwarehouselocationInfo.Remark = "系统自动添加";
                            var result0 = await MatWareHouseLocationInfoRepository.InsertAsync(matwarehouselocationInfo);
                        }
                    }
                }
            }
            //
            MatWareHouseAreaRepository.UnitOfWork.Commit();
            //
            return(result);
        }
Пример #4
0
        public async Task <OperationResult> SetMaterialOutStorageMaterialBatch(Guid MaterialOutStorageId, MatStorageMoveInfoInputDto MaterialOutStorageDtos, string UserName)
        {
            int count = 0;
            //
            //空托盘 移库
            //托盘及物料 移库
            //
            //////////////库位表
            MatWareHouseLocationInfo frommatwarehouselocationInfo = new MatWareHouseLocationInfo();

            frommatwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == MaterialOutStorageDtos.FromLocationID).FirstOrDefault();
            if (!Equals(frommatwarehouselocationInfo.PalletID, null))
            {
                Guid PalletID = frommatwarehouselocationInfo.PalletID.Value;
                //
                MatWareHouseLocationInfo tomatwarehouselocationInfo = new MatWareHouseLocationInfo();
                tomatwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == MaterialOutStorageDtos.ToLocationID).FirstOrDefault();
                //
                //if (tomatwarehouselocationInfo.PalletID == null)
                //修改关永强代码  by cxh
                if (Equals(tomatwarehouselocationInfo.PalletID, null) || Equals(tomatwarehouselocationInfo.PalletID, Guid.Empty))
                {
                    //frommatwarehouselocationInfo.PalletID = null;
                    //tomatwarehouselocationInfo.PalletID = PalletID;
                    ////
                    //count += await MatWareHouseLocationInfoRepository.UpdateAsync(frommatwarehouselocationInfo);
                    //count += await MatWareHouseLocationInfoRepository.UpdateAsync(tomatwarehouselocationInfo);
                    //
                    //批次表 修改 by cxh 20181126 增加条件,解决插入库存流水多条数据的问题
                    // List<MaterialBatchInfo> materialbatchInfoList = MaterialBatchInfoRepository.TrackEntities.Where(m => m.MatWareHouseLocation.Id == MaterialOutStorageDtos.FromLocationID).ToList();
                    List <MaterialBatchInfo> materialbatchInfoList = MaterialBatchInfoRepository.TrackEntities.Where(m => m.MatWareHouseLocation.Id == MaterialOutStorageDtos.FromLocationID && m.MatWareHouseLocation.PalletID != null && m.MatWareHouseLocation.PalletID != Guid.Empty && m.Quantity > 0).ToList();
                    foreach (MaterialBatchInfo materialbatchInfo in materialbatchInfoList)
                    {
                        //////////////库位表
                        MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                        matwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == MaterialOutStorageDtos.ToLocationID).FirstOrDefault();
                        //
                        materialbatchInfo.MatWareHouseLocation = matwarehouselocationInfo;
                        //
                        materialbatchInfo.LastUpdatorUserId = UserName;
                        materialbatchInfo.LastUpdatedTime   = DateTime.Now;
                        //
                        count += await MaterialBatchInfoRepository.UpdateAsync(materialbatchInfo);

                        //////////////
                        //////////////流水帐
                        MaterialStorageLogInfo materialstoragelogInfo = new MaterialStorageLogInfo();
                        //
                        Guid MaterialBatch_Id = materialbatchInfo.Id;
                        materialstoragelogInfo.MaterialBatch = MaterialBatchInfoRepository.TrackEntities.Where(m => m.Id == MaterialBatch_Id).FirstOrDefault();
                        //
                        Guid MaterialID = materialstoragelogInfo.MaterialBatch.Material.Id;
                        materialstoragelogInfo.Material = MaterialInfoRepository.TrackEntities.Where(m => m.Id == MaterialID).FirstOrDefault();
                        //
                        materialstoragelogInfo.OriginalAmount = materialbatchInfo.Quantity;
                        //materialstoragelogInfo.ChangedAmount = materialbatchInfo.Quantity;
                        materialstoragelogInfo.ChangedAmount = 0;
                        materialstoragelogInfo.CurrentAmount = materialbatchInfo.Quantity;
                        //
                        //移库
                        materialstoragelogInfo.StorageChangeType = (int)StorageChangeTypeEnumModel.StorageChangeType.MoveStorageChangeType;
                        //
                        materialstoragelogInfo.CreatorUserId     = UserName;
                        materialstoragelogInfo.CreatedTime       = DateTime.Now;
                        materialstoragelogInfo.LastUpdatorUserId = materialstoragelogInfo.CreatorUserId;
                        materialstoragelogInfo.LastUpdatedTime   = materialstoragelogInfo.CreatedTime;
                        //
                        count += await MaterialStorageLogInfoRepository.InsertAsync(materialstoragelogInfo);
                    }
                    frommatwarehouselocationInfo.PalletID = null;
                    tomatwarehouselocationInfo.PalletID   = PalletID;
                    //
                    count += await MatWareHouseLocationInfoRepository.UpdateAsync(frommatwarehouselocationInfo);

                    count += await MatWareHouseLocationInfoRepository.UpdateAsync(tomatwarehouselocationInfo);
                }
                else
                {
                    return(new OperationResult(OperationResultType.Error, "目标库位不为空库位"));
                }
            }
            else
            {
                return(new OperationResult(OperationResultType.Error, "原库位为空库位"));
            }
            //
            return(count > 0
                ? new OperationResult(OperationResultType.Success, "出库任务“{0}”指派库位批次操作成功".FormatWith("Test"))
                : OperationResult.NoChanged);
        }
Пример #5
0
        /// <summary>
        /// 成品自动入库任务
        /// </summary>
        /// <param name="inputDtos"></param>
        /// <returns></returns>
        public async Task <OperationResult> ProductInStorageShowTask(params MaterialInStorageInfoInputDto[] inputDtos)
        {
            inputDtos.CheckNotNull("inputDtos");
            OperationResult result1 = new OperationResult();
            OperationResult result2 = new OperationResult();
            int             count0  = inputDtos.Count();

            DisTaskDispatchInfoInputDto[]    dispatchInfos = new DisTaskDispatchInfoInputDto[count0];
            MaterialStorageLogInfoInputDto[] logInfos      = new MaterialStorageLogInfoInputDto[count0];
            MaterialStorageLogRepository.UnitOfWork.BeginTransaction();
            int count1 = 0;

            for (int i = 0; i < inputDtos.Count(); i++)
            {
                int count = inputDtos[i].MatWareHouseLocations.Count();
                if (count == 1)
                {   //成品自动入库,若需要校验RFID扫描的托盘编号和初始值是否一致,后期可以放开这个条件。目前测试不需要这个条件
                    //Guid? pid = inputDtos[i].PalletID;
                    //string palletcode = MatPalletInfoRepository.TrackEntities.Where(m => m.Id == pid).FirstOrDefault().PalletCode;
                    //if (palletcode == inputDtos[i].PalletCode)
                    //{
                    DisTaskDispatchInfoInputDto dispatchInfo = new DisTaskDispatchInfoInputDto();
                    dispatchInfo.DisStepAction     = DisStepActionInfoRepository.TrackEntities.Where(m => m.StepActionCode == "StepAction_ProductInStorage").FirstOrDefault();
                    dispatchInfo.TaskCode          = "Task_ProductInStorageShow" + DateTime.Now.ToString("yyyyMMddhhmmss");
                    dispatchInfo.CreatedTime       = inputDtos[i].CreatedTime;
                    dispatchInfo.TaskResult        = "成功";
                    dispatchInfo.FinishTime        = DateTime.Now;
                    dispatchInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    dispatchInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    dispatchInfo.CreatorUserId     = inputDtos[i].CreatorUserId;
                    dispatchInfo.Description       = "成品自动回库演示";
                    dispatchInfo.InStorage_Id      = inputDtos[i].Id;
                    dispatchInfos[i] = dispatchInfo;
                    //更新库位表
                    MatWareHouseLocationInfo locationInfo = new MatWareHouseLocationInfo();
                    Guid locationid = inputDtos[i].MatWareHouseLocations[0].Id;
                    locationInfo          = MatWareHouseLocationInfoRepository.TrackEntities.Where(x => x.Id == locationid).FirstOrDefault();
                    locationInfo.PalletID = inputDtos[i].PalletID;
                    count1 += await MatWareHouseLocationInfoRepository.UpdateAsync(locationInfo);

                    //插入出库单
                    MaterialInStorageInfo instorageInfo = new MaterialInStorageInfo();
                    instorageInfo.MaterialID        = MaterialInfoRepository.TrackEntities.Where(x => x.MaterialType == 3).FirstOrDefault().Id;
                    instorageInfo.InStorageBillCode = "InStorage" + DateTime.Now.ToString("yyyyMMddhhmmss");
                    instorageInfo.Quantity          = inputDtos[i].Quantity;
                    instorageInfo.PalletID          = inputDtos[i].PalletID;
                    instorageInfo.InStorageStatus   = 2;
                    instorageInfo.AuditStatus       = 3;
                    instorageInfo.InStorageTime     = inputDtos[i].CreatedTime;
                    instorageInfo.AuditPerson       = inputDtos[i].CreatorUserId;
                    instorageInfo.FinishTime        = DateTime.Now;
                    instorageInfo.InStorageType     = 3;
                    instorageInfo.PalletQuantity    = 1;
                    instorageInfo.CreatedTime       = inputDtos[i].CreatedTime;
                    instorageInfo.CreatorUserId     = inputDtos[i].CreatorUserId;
                    instorageInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    instorageInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    count1 += await MaterialInStorageRepository.InsertAsync(instorageInfo);

                    //插入批次表
                    MaterialBatchInfo batchInfo = new MaterialBatchInfo();
                    batchInfo.BatchCode            = "Batch" + DateTime.Now.ToString("yyyyMMddhhmmss");
                    batchInfo.Material             = MaterialInfoRepository.TrackEntities.Where(x => x.MaterialType == 3).FirstOrDefault();
                    batchInfo.MatWareHouseLocation = MatWareHouseLocationInfoRepository.TrackEntities.Where(x => x.Id == locationid).FirstOrDefault();
                    batchInfo.MaterialInStorage    = instorageInfo;
                    batchInfo.Quantity             = inputDtos[i].Quantity;
                    batchInfo.CreatorUserId        = inputDtos[i].CreatorUserId;
                    batchInfo.LastUpdatedTime      = inputDtos[i].LastUpdatedTime;
                    batchInfo.LastUpdatorUserId    = inputDtos[i].LastUpdatorUserId;
                    count1 += await MaterialBatchRepository.InsertAsync(batchInfo);

                    //插入库存日志表
                    MaterialStorageLogInfoInputDto logInfo = new MaterialStorageLogInfoInputDto();
                    logInfo.MaterialBatch = batchInfo;
                    var mid = inputDtos[i].MaterialID;
                    logInfo.Material          = MaterialInfoRepository.TrackEntities.Where(x => x.MaterialType == 3).FirstOrDefault();
                    logInfo.StorageChangeType = 1;
                    logInfo.OriginalAmount    = 0;
                    logInfo.ChangedAmount     = inputDtos[i].Quantity;
                    logInfo.CurrentAmount     = inputDtos[i].Quantity;
                    logInfo.InStorageID       = instorageInfo.Id;
                    logInfo.CreatorUserId     = inputDtos[i].CreatorUserId;
                    logInfo.CreatedTime       = inputDtos[i].CreatedTime;
                    logInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    logInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    logInfos[i] = logInfo;
                    //}
                    //else
                    //{
                    //    return new OperationResult(OperationResultType.Error, "托盘编号与初始值不一致!" + inputDtos[i].PalletCode + ";原PalletCode:" + palletcode);
                    //}
                }
                else
                {
                    return(new OperationResult(OperationResultType.Error, "选择库位数据异常,该组数据不被存储。"));
                }
            }
            result1 = await DisTaskDispatchInfoRepository.InsertAsync(dispatchInfos);

            result2 = await MaterialStorageLogRepository.InsertAsync(logInfos);

            MaterialStorageLogRepository.UnitOfWork.Commit();
            return(count1 >= 3
               ? new OperationResult(OperationResultType.Success, "成品自动回库任务操作成功!")
               : new OperationResult(OperationResultType.Error, "成品自动回库任务操作失败!"));
        }
Пример #6
0
        /// <summary>
        /// 分步教学-原料自动出库演示操作
        /// </summary>
        /// <param name="inputDtos"></param>
        /// <returns></returns>
        public async Task <OperationResult> MaterialOutStorageShowTask(params MaterialOutStorageInfoInputDto[] inputDtos)
        {
            inputDtos.CheckNotNull("inputDtos");
            OperationResult result1 = new OperationResult();
            OperationResult result2 = new OperationResult();
            int             count0  = inputDtos.Count();

            DisTaskDispatchInfoInputDto[]    dispatchInfos = new DisTaskDispatchInfoInputDto[count0];
            MaterialStorageLogInfoInputDto[] logInfos      = new MaterialStorageLogInfoInputDto[count0];
            MaterialStorageLogRepository.UnitOfWork.BeginTransaction();
            int count1 = 0;

            for (int i = 0; i < inputDtos.Count(); i++)
            {
                int count = inputDtos[i].MaterialBatchs.Count();
                if (count == 1)
                {
                    DisTaskDispatchInfoInputDto dispatchInfo = new DisTaskDispatchInfoInputDto();
                    dispatchInfo.DisStepAction     = DisStepActionInfoRepository.TrackEntities.Where(m => m.StepActionCode == "StepAction_MaterialOutStorageShow").FirstOrDefault();
                    dispatchInfo.TaskCode          = "Task_MaterialOutStorageShow" + DateTime.Now.ToString("yyyyMMddhhmmss");
                    dispatchInfo.CreatedTime       = inputDtos[i].CreatedTime;
                    dispatchInfo.TaskResult        = "成功";
                    dispatchInfo.FinishTime        = DateTime.Now;
                    dispatchInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    dispatchInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    dispatchInfo.CreatorUserId     = inputDtos[i].CreatorUserId;
                    dispatchInfo.Description       = "原料自动出库演示";
                    dispatchInfo.OutStorage_Id     = inputDtos[i].Id;
                    dispatchInfos[i] = dispatchInfo;
                    //更新库位表
                    MatWareHouseLocationInfo locationInfo = new MatWareHouseLocationInfo();
                    var  bid        = inputDtos[i].MaterialBatchs[0].Id;
                    Guid locationid = MaterialBatchRepository.TrackEntities.Where(x => x.Id == bid).FirstOrDefault().MatWareHouseLocation.Id;
                    locationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(x => x.Id == locationid).FirstOrDefault();
                    Guid?palletid = locationInfo.PalletID;
                    locationInfo.PalletID = null;
                    count1 += await MatWareHouseLocationInfoRepository.UpdateAsync(locationInfo);

                    //更新出库单
                    MaterialOutStorageInfo outstorageInfo = new MaterialOutStorageInfo();
                    var oid = inputDtos[i].Id;
                    outstorageInfo                   = MaterialOutStorageRepository.TrackEntities.Where(x => x.Id == oid).FirstOrDefault();
                    outstorageInfo.PalletID          = palletid;
                    outstorageInfo.FinishTime        = DateTime.Now;
                    outstorageInfo.OutStorageStatus  = 2;
                    outstorageInfo.PalletQuantity    = 1;
                    outstorageInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    outstorageInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    count1 += await MaterialOutStorageRepository.UpdateAsync(outstorageInfo);

                    //更新批次表
                    MaterialBatchInfo batchInfo = new MaterialBatchInfo();
                    batchInfo = MaterialBatchRepository.TrackEntities.Where(x => x.Id == bid).FirstOrDefault();
                    if (batchInfo.Quantity != outstorageInfo.Quantity)
                    {
                        return(new OperationResult(OperationResultType.Error, "Service:选择库位库存与出库单数量不一致!"));
                    }
                    batchInfo.Quantity          = 0;
                    batchInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    batchInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    count1 += await MaterialBatchRepository.UpdateAsync(batchInfo);

                    //插入库存日志表
                    MaterialStorageLogInfoInputDto logInfo = new MaterialStorageLogInfoInputDto();
                    logInfo.MaterialBatch = MaterialBatchRepository.TrackEntities.Where(x => x.Id == bid).FirstOrDefault();
                    var mid = outstorageInfo.MaterialID;
                    logInfo.Material          = MaterialInfoRepository.TrackEntities.Where(x => x.Id == mid).FirstOrDefault();
                    logInfo.StorageChangeType = 2;
                    logInfo.OriginalAmount    = outstorageInfo.Quantity;
                    logInfo.ChangedAmount     = -outstorageInfo.Quantity;
                    logInfo.CurrentAmount     = 0;
                    logInfo.OutStorageID      = oid;
                    logInfo.CreatorUserId     = inputDtos[i].CreatorUserId;
                    logInfo.CreatedTime       = inputDtos[i].CreatedTime;
                    logInfo.LastUpdatedTime   = inputDtos[i].LastUpdatedTime;
                    logInfo.LastUpdatorUserId = inputDtos[i].LastUpdatorUserId;
                    logInfos[i] = logInfo;
                }
                else
                {
                    return(new OperationResult(OperationResultType.Error, "选择库位数据异常,该组数据不被存储。"));
                }
            }
            result1 = await DisTaskDispatchInfoRepository.InsertAsync(dispatchInfos);

            result2 = await MaterialStorageLogRepository.InsertAsync(logInfos);

            MaterialStorageLogRepository.UnitOfWork.Commit();
            return(count1 >= 3
               ? new OperationResult(OperationResultType.Success, "原料自动出库任务操作成功!")
               : new OperationResult(OperationResultType.Error, "原料自动出库任务操作失败!"));
            // return new OperationResult(OperationResultType.Success, "原料自动出库任务操作成功");
        }
Пример #7
0
        /// <summary>
        /// 设置出库任务的库位
        /// </summary>
        /// <param name="id">入库任务编号</param>
        /// <param name="roleIds">库位编号集合</param>
        /// <returns>业务操作结果</returns>
        public async Task <OperationResult> SetMaterialOutStorageMaterialBatch(Guid MaterialOutStorageId, MaterialOutStorageInfoInputDto MaterialOutStorageDtos, Guid[] MaterialBatchIds, string UserName)
        {
            int count = 0;
            //
            //////////////出库单
            //MaterialOutStorageInfo materialoutstorageInfo = new MaterialOutStorageInfo();
            //materialoutstorageInfo = MaterialOutStorageRepository.TrackEntities.Where(m => m.Id == MaterialOutStorageId).FirstOrDefault();
            //////////////
            decimal dQuantity        = MaterialOutStorageDtos.Quantity.Value;
            decimal dChangedQuantity = 0;
            //
            decimal dPalletQuantity = MaterialOutStorageDtos.PalletQuantity.Value;

            dPalletQuantity = 0;
            //
            decimal dPartQuantity = 0;

            //////////////库位表
            foreach (Guid MaterialBatchId in MaterialBatchIds)
            {
                MaterialBatchInfo materialbatchInfo = new MaterialBatchInfo();
                //
                materialbatchInfo = MaterialBatchRepository.TrackEntities.Where(m => m.Id == MaterialBatchId).FirstOrDefault();
                //
                decimal dMaterialBatchQuantity = materialbatchInfo.Quantity.Value;
                //
                if (dQuantity >= dMaterialBatchQuantity)
                {
                    materialbatchInfo.Quantity = 0;
                    dQuantity        = dQuantity - dMaterialBatchQuantity;
                    dChangedQuantity = dMaterialBatchQuantity;
                    //
                    dPalletQuantity++;
                }
                else if (dQuantity > 0)
                {
                    dPartQuantity = 0;
                    materialbatchInfo.Quantity = dMaterialBatchQuantity - dQuantity;
                    //部分出库 库位清零
                    dPartQuantity = materialbatchInfo.Quantity.Value;
                    materialbatchInfo.Quantity = 0;
                    //
                    dChangedQuantity = dQuantity;
                    dQuantity        = 0;
                    //
                    dPalletQuantity++;
                }
                else
                {
                    break;
                }
                //
                materialbatchInfo.LastUpdatorUserId = UserName;
                materialbatchInfo.LastUpdatedTime   = DateTime.Now;
                //
                count += await MaterialBatchRepository.UpdateAsync(materialbatchInfo);

                //////////////
                //////////////流水帐

                MaterialStorageLogInfo materialstoragelogInfo = new MaterialStorageLogInfo();
                //
                Guid MaterialBatch_Id = materialbatchInfo.Id;
                materialstoragelogInfo.MaterialBatch = MaterialBatchRepository.TrackEntities.Where(m => m.Id == MaterialBatch_Id).FirstOrDefault();
                //
                Guid MaterialID = MaterialOutStorageDtos.MaterialID.Value;
                materialstoragelogInfo.Material = MaterialInfoRepository.TrackEntities.Where(m => m.Id == MaterialID).FirstOrDefault();
                //
                materialstoragelogInfo.OutStorageID = MaterialOutStorageDtos.Id;
                //
                materialstoragelogInfo.OriginalAmount = dMaterialBatchQuantity;
                //materialstoragelogInfo.ChangedAmount = dChangedQuantity;
                //修改 关永强 Bug 成品出库改变数量应为负数
                materialstoragelogInfo.ChangedAmount = -dChangedQuantity;
                materialstoragelogInfo.CurrentAmount = materialbatchInfo.Quantity;
                //
                //出库
                materialstoragelogInfo.StorageChangeType = (int)StorageChangeTypeEnumModel.StorageChangeType.OutStorageChangeType;
                //
                if (dPartQuantity > 0)
                {
                    materialstoragelogInfo.Remark = "部分出库,应进行退库操作!数量为:" + dPartQuantity.ToString();
                }
                //
                materialstoragelogInfo.CreatorUserId     = UserName;
                materialstoragelogInfo.CreatedTime       = DateTime.Now;
                materialstoragelogInfo.LastUpdatorUserId = materialstoragelogInfo.CreatorUserId;
                materialstoragelogInfo.LastUpdatedTime   = materialstoragelogInfo.CreatedTime;
                //
                count += await MaterialStorageLogRepository.InsertAsync(materialstoragelogInfo);

                //////////////库位表
                MatWareHouseLocationInfo matwarehouselocationInfo = new MatWareHouseLocationInfo();
                //
                matwarehouselocationInfo = MatWareHouseLocationInfoRepository.TrackEntities.Where(m => m.Id == materialbatchInfo.MatWareHouseLocation.Id).FirstOrDefault();
                //
                matwarehouselocationInfo.PalletID = null;
                //
                count += await MatWareHouseLocationInfoRepository.UpdateAsync(matwarehouselocationInfo);
            }
            //
            //出库单
            MaterialOutStorageDtos.OutStorageTime = DateTime.Now;
            MaterialOutStorageDtos.FinishTime     = DateTime.Now;
            //已完成
            MaterialOutStorageDtos.OutStorageStatus = (int)OutStorageStatusEnumModel.OutStorageStatus.OutStorageFinishStatus;
            MaterialOutStorageDtos.PalletQuantity   = dPalletQuantity;
            //
            MaterialOutStorageInfo materialoutstorageInfo = new MaterialOutStorageInfo();

            materialoutstorageInfo = MaterialOutStorageDtos.MapTo(materialoutstorageInfo);
            //
            count += await MaterialOutStorageRepository.UpdateAsync(materialoutstorageInfo);

            //
            return(count > 0
                ? new OperationResult(OperationResultType.Success, "出库任务“{0}”指派库位批次操作成功".FormatWith("Test"))
                : OperationResult.Success);
        }