/// <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); }
/// <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); }
/// <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); }
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); }
/// <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, "成品自动回库任务操作失败!")); }
/// <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, "原料自动出库任务操作成功"); }
/// <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); }