iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Admin.NET.Application.xml
@@ -405,43 +405,6 @@ 账面数量 </summary> </member> <member name="T:Admin.NET.Application.ExWarehouseService"> <summary> 出库管理服务 </summary> </member> <member name="M:Admin.NET.Application.ExWarehouseService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsTask,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainerPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterial,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialStock,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialContainer,Furion.DatabaseAccessor.MasterDbContextLocator})"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.ExWarehouseService.Page(Admin.NET.Application.ExWarehouseSearch)"> <summary> 分页查询物料出库管理信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.ExWarehouseService.AutoExWarehouse(System.Collections.Generic.List{Admin.NET.Application.ExWarehouseInput})"> <summary> 自动出库 </summary> <param name="inputs"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.ExWarehouseService.ManualExWarehouse(System.Collections.Generic.List{Admin.NET.Application.ExWarehouseInput})"> <summary> 人工出库 </summary> <param name="inputs"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.ExWarehouseService.CallAirflare(Admin.NET.Application.CallAirflareInput)"> <summary> 呼叫空托 </summary> <returns></returns> </member> <member name="T:Admin.NET.Application.WmsAreaDto"> <summary> 库区信息输出参数 @@ -676,103 +639,6 @@ <summary> 签核状态 </summary> </member> <member name="T:Admin.NET.Application.WmsAreaService"> <summary> 库区信息服务 </summary> </member> <member name="M:Admin.NET.Application.WmsAreaService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.SysDictType,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.SysDictData,Furion.DatabaseAccessor.MasterDbContextLocator},Admin.NET.Application.ISysExcelTemplateService)"> <summary> 构造函数 </summary> <param name="wmsAreaRep"></param> <param name="sysDictTypeRep"></param> <param name="sysDictDataRep"></param> <param name="sysExcelTemplateService"></param> </member> <member name="M:Admin.NET.Application.WmsAreaService.Page(Admin.NET.Application.WmsAreaSearch)"> <summary> 分页查询库区信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.ListNonPageAsync(Admin.NET.Application.WmsAreaSearchNonPage)"> <summary> 不分页查询库区信息列表 </summary> <param name="input">库区信息查询参数</param> <returns>(库区信息)实例列表</returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.Add(Admin.NET.Application.AddWmsAreaInput)"> <summary> 增加库区信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.Delete(Admin.NET.Application.DeleteWmsAreaInput)"> <summary> 删除库区信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.Update(Admin.NET.Application.UpdateWmsAreaInput)"> <summary> 更新库区信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.Get(Admin.NET.Application.QueryeWmsAreaInput)"> <summary> 获取库区信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.List(Admin.NET.Application.WmsAreaInput)"> <summary> 获取库区信息列表 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.TaskWmsArea"> <summary> 组装车间获取库区 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.GetAreaEntranceList"> <summary> 获取仓库下拉框 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.FromExcelAsync(Microsoft.AspNetCore.Http.IFormFile,Admin.NET.Core.ImportExcelType)"> <summary> Excel模板导入库区信息功能 </summary> <param name="file">Excel模板文件</param> <param name="importExcelType">Excel导入方式</param> <returns>导入的记录数</returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.DownloadExcelTemplate(System.String)"> <summary> 根据版本下载库区信息的Excel导入模板 </summary> <param name="version">模板版本</param> <returns>下载的模板文件</returns> </member> <member name="M:Admin.NET.Application.WmsAreaService.ToExcelAsync(Admin.NET.Application.WmsAreaSearchNonPage)"> <summary> 根据库区信息查询参数导出Excel </summary> <param name="input">库区信息查询参数</param> <returns>导出的Excel文件</returns> </member> <member name="T:Admin.NET.Application.WmsContainerDto"> <summary> @@ -3001,84 +2867,6 @@ <summary> 库区信息输出参数 </summary> </member> <member name="T:Admin.NET.Application.WmsPlaceService"> <summary> 库位信息服务 </summary> </member> <member name="M:Admin.NET.Application.WmsPlaceService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator})"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.WmsPlaceService.Page(Admin.NET.Application.WmsPlaceSearch)"> <summary> 分页查询库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.AddNew(Admin.NET.Application.AddWmsPlaceInput)"> <summary> 增加库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.Delete(Admin.NET.Application.DeleteWmsPlaceInput)"> <summary> 删除库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.MoreLock(Admin.NET.Application.MoreLockInput)"> <summary> 批量锁定 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.MoreUnlock(Admin.NET.Application.MoreLockInput)"> <summary> 批量解锁 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.Update(Admin.NET.Application.UpdateWmsPlaceInput)"> <summary> 更新库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.Get(Admin.NET.Application.QueryeWmsPlaceInput)"> <summary> 获取库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.List(Admin.NET.Application.WmsPlaceInput)"> <summary> 获取库位信息列表 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.FkWmsAreaList"> <summary> 获取WmsArea列表 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsPlaceService.GetFAisle"> <summary> 获取熟化库巷道 </summary> <returns></returns> </member> <member name="T:Admin.NET.Application.WmsWarehouseEntranceDto"> <summary> @@ -15288,86 +15076,6 @@ 任务号 </summary> </member> <member name="T:Admin.NET.Application.WareWcsToWmsService"> <summary> WCS调用服务 </summary> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrder,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrderDetails,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsTask,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainerPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialStock,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.LesPackWarehouse,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.LesDeviceWaring,Furion.DatabaseAccessor.MasterDbContextLocator})"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetSendTask"> <summary> 定时查询WCS可以下发的出入库任务(10条) </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.UpdateTask(Admin.NET.Application.UpdateTaskInput)"> <summary> 更新任务信息 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetPlace(Admin.NET.Application.GetPlaceInput)"> <summary> 获取库位信息 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.CreateRelocation(Admin.NET.Application.CreateRelocationInput)"> <summary> 创建移库任务 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.CancelTask(Admin.NET.Application.FinishTaskInput)"> <summary> 取消任务 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.CheckPack"> <summary> wcs读取接口判断物料是否组盘出库 true代表已经组盘出库 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.AddDeviceWaring(Admin.NET.Application.AddDeviceWaringInput)"> <summary> 设备报警信息 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetOneRowByAisle(System.Int32)"> <summary> 根据巷道获取外侧第一排 </summary> <param name="Aisle"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetTwoRowByAisle(System.Int32)"> <summary> 根据巷道获取内侧第二排 </summary> <param name="Aisle"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetThreeRowByAisle(System.Int32)"> <summary> 根据巷道获取外侧第二排 </summary> <param name="Aisle"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WareWcsToWmsService.GetFourRowByAisle(System.Int32)"> <summary> 根据巷道获取外侧第一排 </summary> <param name="Aisle"></param> <returns></returns> </member> <member name="T:Admin.NET.Application.BaseCustomerService"> <summary> 客户档案服务 @@ -17645,64 +17353,6 @@ 层 </summary> </member> <member name="T:Admin.NET.Application.LocationViewService"> <summary> 库位试图服务 </summary> </member> <member name="M:Admin.NET.Application.LocationViewService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialStock,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainerPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialContainer,Furion.DatabaseAccessor.MasterDbContextLocator})"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.LocationViewService.GetArea"> <summary> 获取库区信息 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.GetPalceAisle(Admin.NET.Application.GetPalceAisleInput)"> <summary> 根据库区获取巷道 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.GetPalceRowno(Admin.NET.Application.GetPalceAisleRownoInput)"> <summary> 根据库区和巷道获取排 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.GetPalceList(Admin.NET.Application.GetPalceListInput)"> <summary> 根据库区 排获取库位信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.GetMaterialDetail(Admin.NET.Application.GetMaterialDetailInput)"> <summary> 根据库位获取对应信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.UpdatePalceIslock(Admin.NET.Application.GetMaterialDetailInput)"> <summary> 修改库位锁定信息 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.LocationViewService.UpdatePalceKongXian(Admin.NET.Application.GetMaterialDetailInput)"> <summary> 将库位置为空闲 </summary> <param name="input"></param> <returns></returns> </member> <member name="T:Admin.NET.Application.MaterialStockDto"> <summary> 库存信息(熟化库)输出参数 @@ -18895,133 +18545,6 @@ <summary> 入库来源 </summary> </member> <member name="T:Admin.NET.Application.WmsTaskService"> <summary> 任务管理服务 </summary> </member> <member name="M:Admin.NET.Application.WmsTaskService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.SysDictType,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.SysDictData,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsTask,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsWarehouseEntrance,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrder,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrderDetails,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainerPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialStock,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea,Furion.DatabaseAccessor.MasterDbContextLocator},Admin.NET.Application.ISysExcelTemplateService)"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.WmsTaskService.Page(Admin.NET.Application.WmsTaskSearch)"> <summary> 分页查询出入库任务管理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.ListNonPageAsync(Admin.NET.Application.WmsTaskSearchNonPage)"> <summary> 不分页查询出入库任务管理列表 </summary> <param name="input">出入库任务管理查询参数</param> <returns>(出入库任务管理)实例列表</returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.Add(Admin.NET.Application.AddWmsTaskInput)"> <summary> 增加出入库任务管理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.Delete(Admin.NET.Application.DeleteWmsTaskInput)"> <summary> 删除出入库任务管理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.Update(Admin.NET.Application.UpdateWmsTaskInput)"> <summary> 更新出入库任务管理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.Finish(Admin.NET.Application.WmsTaskFinishInput)"> <summary> 强制完成 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.UpwardTaskLevel(Admin.NET.Application.UpdateTaskLevelInput)"> <summary> 更新优先级(向上) </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.DownTaskLevel(Admin.NET.Application.UpdateTaskLevelInput)"> <summary> 更新优先级(向下) </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.CancelTask(Admin.NET.Application.CancelInput)"> <summary> 取消 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.BatchCancel(Admin.NET.Application.BatchCancelInput)"> <summary> 批量取消 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.BatchBreak(Admin.NET.Application.BatchBreakInput)"> <summary> 批量暂停 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.BatchContinue(Admin.NET.Application.BatchContinueInput)"> <summary> 批量继续 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.Get(Admin.NET.Application.QueryeWmsTaskInput)"> <summary> 获取出入库任务管理 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.List(Admin.NET.Application.TaskInput)"> <summary> 获取出入库任务管理列表 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.FromExcelAsync(Microsoft.AspNetCore.Http.IFormFile,Admin.NET.Core.ImportExcelType)"> <summary> Excel模板导入出入库任务管理功能 </summary> <param name="file">Excel模板文件</param> <param name="importExcelType">Excel导入方式</param> <returns>导入的记录数</returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.DownloadExcelTemplate(System.String)"> <summary> 根据版本下载出入库任务管理的Excel导入模板 </summary> <param name="version">模板版本</param> <returns>下载的模板文件</returns> </member> <member name="M:Admin.NET.Application.WmsTaskService.ToExcelAsync(Admin.NET.Application.WmsTaskSearchNonPage)"> <summary> 根据出入库任务管理查询参数导出Excel </summary> <param name="input">出入库任务管理(熟化库)查询参数</param> <returns>导出的Excel文件</returns> </member> <member name="T:Admin.NET.Application.WmsDumpOrderDto"> <summary> @@ -24174,145 +23697,6 @@ <summary> 请求状态 </summary> </member> <member name="T:Admin.NET.Application.WmsTakeMaterialOrderService"> <summary> 领料单服务 </summary> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.Page(Admin.NET.Application.WmsTakeMaterialOrderSearch)"> <summary> 分页查询领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.ListNonPageAsync(Admin.NET.Application.WmsTakeMaterialOrderSearchNonPage)"> <summary> 不分页查询领料单列表 </summary> <param name="input">领料单查询参数</param> <returns>(领料单)实例列表</returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.PageDetail(Admin.NET.Application.TakePageDetailInput)"> <summary> 获取单据明细 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.StockPage(Admin.NET.Application.TakeMaterialStockSearch)"> <summary> 分页查询物料库存 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.GetMaterialNoList"> <summary> 物料编码下拉框 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.GetProjectCodeList"> <summary> 项目编码下拉框 </summary> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.Add(Admin.NET.Application.AddWmsTakeMaterialOrderInput)"> <summary> 增加领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.TakeOrderAdd"> <summary> 增加领料单(yigo系统获取) </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.ReturnTakeOrder(Admin.NET.Application.ReturnTakeOrderInput)"> <summary> 领料下架接口(yigo系统) </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.DistributeOrder(Admin.NET.Application.DistributeOrderInput)"> <summary> 下发领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.Delete(Admin.NET.Application.DeleteWmsTakeMaterialOrderInput)"> <summary> 删除领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.Update(Admin.NET.Application.UpdateWmsTakeMaterialOrderInput)"> <summary> 更新领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.Get(Admin.NET.Application.QueryeWmsTakeMaterialOrderInput)"> <summary> 获取领料单 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.List(Admin.NET.Application.WmsTakeMaterialOrderInput)"> <summary> 获取领料单列表 </summary> <param name="input"></param> <returns></returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.FromExcelAsync(Microsoft.AspNetCore.Http.IFormFile,Admin.NET.Core.ImportExcelType)"> <summary> Excel模板导入领料单功能 </summary> <param name="file">Excel模板文件</param> <param name="importExcelType">Excel导入方式</param> <returns>导入的记录数</returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.DownloadExcelTemplate(System.String)"> <summary> 根据版本下载领料单的Excel导入模板 </summary> <param name="version">模板版本</param> <returns>下载的模板文件</returns> </member> <member name="M:Admin.NET.Application.WmsTakeMaterialOrderService.ToExcelAsync(Admin.NET.Application.WmsTakeMaterialOrderSearchNonPage)"> <summary> 根据领料单查询参数导出Excel </summary> <param name="input">领料单查询参数</param> <returns>导出的Excel文件</returns> </member> <member name="T:Admin.NET.Application.CallEmptyService"> <summary> Pda空托出库 </summary> </member> <member name="M:Admin.NET.Application.CallEmptyService.#ctor(Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrder,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrderDetails,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsTask,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsArea,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsWarehouseEntrance,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainer,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsContainerPlace,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsMaterialStock,Furion.DatabaseAccessor.MasterDbContextLocator},Furion.DatabaseAccessor.IRepository{Admin.NET.Core.WmsOrderType,Furion.DatabaseAccessor.MasterDbContextLocator})"> <summary> 构造函数 </summary> </member> <member name="M:Admin.NET.Application.CallEmptyService.PdaContainerOut(Admin.NET.Application.PdaContainerOutInput)"> <summary> 提交出库 </summary> <returns></returns> </member> <member name="T:Admin.NET.Application.PdaContainerOutInput"> <summary> iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/ExWarehouse/ExWarehouseService.cs
@@ -1,323 +1,323 @@ using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Yitter.IdGenerator; using Admin.NET.Core; //using Furion.DatabaseAccessor; //using Furion.DependencyInjection; //using Furion.DynamicApiController; //using Furion.FriendlyException; //using Mapster; //using Microsoft.AspNetCore.Mvc; //using Microsoft.EntityFrameworkCore; //using Yitter.IdGenerator; //using Admin.NET.Core; namespace Admin.NET.Application { /// <summary> /// 出库管理服务 /// </summary> [ApiDescriptionSettings("自己的业务", Name = "ExWarehouse", Order = 100)] [Route("api/[Controller]")] public class ExWarehouseService : IDynamicApiController, ITransient { private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep; private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; //namespace Admin.NET.Application //{ // /// <summary> // /// 出库管理服务 // /// </summary> // [ApiDescriptionSettings("自己的业务", Name = "ExWarehouse", Order = 100)] // [Route("api/[Controller]")] // public class ExWarehouseService : IDynamicApiController, ITransient // { // private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; // private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; // private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; // private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; // private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; // private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep; // private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; // private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; /// <summary> /// 构造函数 /// </summary> public ExWarehouseService( IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep, IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep ) { this._wmsAreaRep = wmsAreaRep; this._wmsPlaceRep = wmsPlaceRep; this._wmsTaskRep = wmsTaskRep; this._wmsContainerRep = wmsContainerRep; this._wmsContainerPlaceRep = wmsContainerPlaceRep; this._wmsMaterialRep = wmsMaterialRep; this._wmsMaterialStockRep = wmsMaterialStockRep; this._wmsMaterialContainerRep = wmsMaterialContainerRep; } // /// <summary> // /// 构造函数 // /// </summary> // public ExWarehouseService( // IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, // IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, // IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, // IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, // IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, // IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep, // IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, // IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep // ) // { // this._wmsAreaRep = wmsAreaRep; // this._wmsPlaceRep = wmsPlaceRep; // this._wmsTaskRep = wmsTaskRep; // this._wmsContainerRep = wmsContainerRep; // this._wmsContainerPlaceRep = wmsContainerPlaceRep; // this._wmsMaterialRep = wmsMaterialRep; // this._wmsMaterialStockRep = wmsMaterialStockRep; // this._wmsMaterialContainerRep = wmsMaterialContainerRep; // } /// <summary> /// 分页查询物料出库管理信息 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("page")] public async Task<PageResult<ExWareHouseOutput>> Page([FromQuery] ExWarehouseSearch input) { var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities .Where (!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%")) .ProjectToType<ExWareHouseOutput>() .ToListAsync(); return wmsMaterialStocks.ToADPagedList(input.PageNo, input.PageSize); } // /// <summary> // /// 分页查询物料出库管理信息 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("page")] // public async Task<PageResult<ExWareHouseOutput>> Page([FromQuery] ExWarehouseSearch input) // { // var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities // .Where (!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%")) // .ProjectToType<ExWareHouseOutput>() // .ToListAsync(); // return wmsMaterialStocks.ToADPagedList(input.PageNo, input.PageSize); // } /// <summary> /// 自动出库 /// </summary> /// <param name="inputs"></param> /// <returns></returns> [HttpPost("AutoExWarehouse")] [UnitOfWork] public async Task AutoExWarehouse(List<ExWarehouseInput> inputs) { // 根据托盘号、库位编号去重 var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList(); if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库"); // /// <summary> // /// 自动出库 // /// </summary> // /// <param name="inputs"></param> // /// <returns></returns> // [HttpPost("AutoExWarehouse")] // [UnitOfWork] // public async Task AutoExWarehouse(List<ExWarehouseInput> inputs) // { // // 根据托盘号、库位编号去重 // var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList(); // if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库"); // 查询库区名称 var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); if (wmsArea != null) throw Oops.Oh("库区不存在"); // // 查询库区名称 // var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); // if (wmsArea != null) throw Oops.Oh("库区不存在"); foreach (var item in containerCodeDistinct) { var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // 判断任务 var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); if (wmsTask != null) throw Oops.Oh("周转箱号存在未完成的任务!"); // foreach (var item in containerCodeDistinct) // { // var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // // 判断任务 // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (wmsTask != null) throw Oops.Oh("周转箱号存在未完成的任务!"); // 检查周转箱号信息 var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode); if (wmsContainer == null) throw Oops.Oh("库存中没有该:" + wmsContainer.ContainerCode + "托盘!"); // // 检查周转箱号信息 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode); // if (wmsContainer == null) throw Oops.Oh("库存中没有该:" + wmsContainer.ContainerCode + "托盘!"); // 检查库位信息 var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode); if (wmsPlace == null) throw Oops.Oh("库位不存在!"); if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // // 检查库位信息 // var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode); // if (wmsPlace == null) throw Oops.Oh("库位不存在!"); // if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // 更新状态为“待出” wmsPlace.PlaceStatus = PlaceStatus.DAICHU; await _wmsPlaceRep.UpdateAsync(wmsPlace); // // 更新状态为“待出” // wmsPlace.PlaceStatus = PlaceStatus.DAICHU; // await _wmsPlaceRep.UpdateAsync(wmsPlace); // 检查库存 var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList(); if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!"); // // 检查库存 // var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList(); // if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!"); // 检查库位与周转箱号关系 var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE); if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!"); // // 检查库位与周转箱号关系 // var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id // && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE); // if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!"); // 不是空料箱才会有组盘关系 if (wmsPlace.EmptyContainer == YesOrNot.N) { // 检查物料与周转箱号关系 wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("周转箱号与物料关系不存在!"); } else { // 更新空料箱库存 var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) { wmsMaterialStock.PlaceCode = "N/A"; await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); } } if (wmsTask == null) { string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd"); var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%")); if (wmsTaskModel == null) { taskNo = taskNo + "0001"; } else { //获取流水号最大的数据 var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo); taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1); } // // 不是空料箱才会有组盘关系 // if (wmsPlace.EmptyContainer == YesOrNot.N) // { // // 检查物料与周转箱号关系 // wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("周转箱号与物料关系不存在!"); // } // else // { // // 更新空料箱库存 // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); // if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) // { // wmsMaterialStock.PlaceCode = "N/A"; // await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); // } // } // if (wmsTask == null) // { // string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd"); // var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%")); // if (wmsTaskModel == null) // { // taskNo = taskNo + "0001"; // } // else // { // //获取流水号最大的数据 // var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo); // taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1); // } // 新增任务 var takmodel = new WmsTask() { TaskNo = taskNo,//YitIdHelper.NextId().ToString(), TaskModel = TaskModel.QUANZIDONG, TaskType = TaskType.CHUKU, TaskLevel = 1, TaskStatus = TaskStatusEnum.WEIZHIXING, ContainerCode = wmsContainer.ContainerCode, SourcePlace = wmsPlace.PlaceCode, Aisle = wmsPlace.Aisle, ToPlace = "出库口", AreaName = wmsArea.AreaName, Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料", OrderNo = wmsMaterialContainerList.Count <= 0 ? "N/A" : wmsMaterialContainerList.FirstOrDefault().OrderNo, TaskDodeviceStatus = TaskDodeviceStatusEnum.W, IsRead = true }; await _wmsTaskRep.InsertAsync(takmodel); } } } // // 新增任务 // var takmodel = new WmsTask() // { // TaskNo = taskNo,//YitIdHelper.NextId().ToString(), // TaskModel = TaskModel.QUANZIDONG, // TaskType = TaskType.CHUKU, // TaskLevel = 1, // TaskStatus = TaskStatusEnum.WEIZHIXING, // ContainerCode = wmsContainer.ContainerCode, // SourcePlace = wmsPlace.PlaceCode, // Aisle = wmsPlace.Aisle, // ToPlace = "出库口", // AreaName = wmsArea.AreaName, // Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料", // OrderNo = wmsMaterialContainerList.Count <= 0 ? "N/A" : wmsMaterialContainerList.FirstOrDefault().OrderNo, // TaskDodeviceStatus = TaskDodeviceStatusEnum.W, // IsRead = true // }; // await _wmsTaskRep.InsertAsync(takmodel); // } // } // } /// <summary> /// 人工出库 /// </summary> /// <param name="inputs"></param> /// <returns></returns> [HttpPost("manualExWarehouse")] [UnitOfWork] public async Task ManualExWarehouse(List<ExWarehouseInput> inputs) { // 根据托盘号、库位编号去重 var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList(); if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库"); // /// <summary> // /// 人工出库 // /// </summary> // /// <param name="inputs"></param> // /// <returns></returns> // [HttpPost("manualExWarehouse")] // [UnitOfWork] // public async Task ManualExWarehouse(List<ExWarehouseInput> inputs) // { // // 根据托盘号、库位编号去重 // var containerCodeDistinct = inputs.Select(u => new { u.ContainerCode, u.PlaceCode }).Distinct().ToList(); // if (containerCodeDistinct.Count <= 0) throw Oops.Oh("暂无库存出库"); // 查询库区名称 var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); if (wmsArea != null) throw Oops.Oh("库区不存在"); // // 查询库区名称 // var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); // if (wmsArea != null) throw Oops.Oh("库区不存在"); foreach (var item in containerCodeDistinct) { var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // 判断任务 var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); if (wmsTask != null) throw Oops.Oh("托盘号存在未完成的任务!"); // foreach (var item in containerCodeDistinct) // { // var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // // 判断任务 // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(p => p.ContainerCode == item.ContainerCode && p.TaskStatus != TaskStatusEnum.WANCHENG); // if (wmsTask != null) throw Oops.Oh("托盘号存在未完成的任务!"); // 检查托盘号信息 var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode); if (wmsContainer == null) throw Oops.Oh("周转箱号不存在!"); // // 检查托盘号信息 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(n => n.ContainerCode == item.ContainerCode); // if (wmsContainer == null) throw Oops.Oh("周转箱号不存在!"); // 检查库位信息 var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode); if (wmsPlace == null) throw Oops.Oh("库位不存在!"); if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // // 检查库位信息 // var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(p => p.PlaceCode == item.PlaceCode); // if (wmsPlace == null) throw Oops.Oh("库位不存在!"); // if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // 检查库存 var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList(); if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!"); // // 检查库存 // var wmsMaterialStockList = inputs.Where(u => u.ContainerCode == wmsContainer.ContainerCode && u.PlaceCode == wmsPlace.PlaceCode).ToList(); // if (wmsMaterialStockList.Count <= 0) throw Oops.Oh("库存数据异常!"); // 检查库位与托盘号关系 var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE); if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!"); // // 检查库位与托盘号关系 // var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.ContainerId == wmsContainer.Id // && p.PlaceCode == wmsPlace.PlaceCode && p.PlaceId == wmsPlace.Id && p.ContainerPlaceStatus == CommonStatus.ENABLE); // if (wmsContainerPlace == null) throw Oops.Oh("托盘号与库位关系不存在!"); // 不是空托才会有组盘关系 if (wmsPlace.EmptyContainer == YesOrNot.N) { // 检查物料与空托号关系 wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!"); } else { // 更新空料箱库存 var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) { await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock); } } // // 不是空托才会有组盘关系 // if (wmsPlace.EmptyContainer == YesOrNot.N) // { // // 检查物料与空托号关系 // wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!"); // } // else // { // // 更新空料箱库存 // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); // if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) // { // await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock); // } // } if (wmsTask == null) { //构建出库物料和周转箱号关系 var orderNo = "N/A"; if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString(); // if (wmsTask == null) // { // //构建出库物料和周转箱号关系 // var orderNo = "N/A"; // if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString(); foreach (var wmsMaterialContaine in wmsMaterialContainerList) { //更新状态为”删除“ wmsMaterialContaine.BindStatus = CommonStatus.DELETED; await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine); // foreach (var wmsMaterialContaine in wmsMaterialContainerList) // { // //更新状态为”删除“ // wmsMaterialContaine.BindStatus = CommonStatus.DELETED; // await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine); //新增组盘绑定记录 正常 var addWmsMaterialContainer = wmsMaterialContaine; addWmsMaterialContainer.Id = YitIdHelper.NextId(); addWmsMaterialContainer.OrderNo = orderNo; addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE; await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer); // 这里没有分拣操作直接更新库存信息 var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode); wmsMaterialStock.PlaceCode = "N/A"; wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity; await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); } // //新增组盘绑定记录 正常 // var addWmsMaterialContainer = wmsMaterialContaine; // addWmsMaterialContainer.Id = YitIdHelper.NextId(); // addWmsMaterialContainer.OrderNo = orderNo; // addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE; // await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer); // // 这里没有分拣操作直接更新库存信息 // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode); // wmsMaterialStock.PlaceCode = "N/A"; // wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity; // await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); // } string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd"); var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%")); if (wmsTaskModel == null) { taskNo = taskNo + "0001"; } else { //获取流水号最大的数据 var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo); taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1); } // 新增任务 var addWmsTask = new WmsTask() { TaskNo = taskNo,//YitIdHelper.NextId().ToString(), TaskModel = TaskModel.SHOUDONG, TaskType = TaskType.CHUKU, TaskLevel = 1, TaskStatus = TaskStatusEnum.WANCHENG, ContainerCode = wmsContainer.ContainerCode, SourcePlace = wmsPlace.PlaceCode, Aisle = wmsPlace.Aisle, ToPlace = "出库口", AreaName = wmsArea.AreaName, Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料", OrderNo = orderNo, TaskDodeviceStatus=TaskDodeviceStatusEnum.W, UpdatedTime = DateTime.Now, }; await _wmsTaskRep.InsertAsync(addWmsTask); // string taskNo = "CHUKU" + DateTime.Today.ToString("yyyyMMdd"); // var wmsTaskModel = await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => EF.Functions.Like(u.TaskNo, $"%{taskNo}%")); // if (wmsTaskModel == null) // { // taskNo = taskNo + "0001"; // } // else // { // //获取流水号最大的数据 // var maxSerialNumber = await _wmsTaskRep.MaxAsync(t => t.TaskNo); // taskNo = Comm.GenerateNewInvoiceNumber(maxSerialNumber, 1); // } // // 新增任务 // var addWmsTask = new WmsTask() // { // TaskNo = taskNo,//YitIdHelper.NextId().ToString(), // TaskModel = TaskModel.SHOUDONG, // TaskType = TaskType.CHUKU, // TaskLevel = 1, // TaskStatus = TaskStatusEnum.WANCHENG, // ContainerCode = wmsContainer.ContainerCode, // SourcePlace = wmsPlace.PlaceCode, // Aisle = wmsPlace.Aisle, // ToPlace = "出库口", // AreaName = wmsArea.AreaName, // Description = wmsPlace.EmptyContainer == YesOrNot.Y ? "空托" : "物料", // OrderNo = orderNo, // TaskDodeviceStatus=TaskDodeviceStatusEnum.W, // UpdatedTime = DateTime.Now, // }; // await _wmsTaskRep.InsertAsync(addWmsTask); // 更新库位与周转箱号关系表状态为“删除” wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED; await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace); // // 更新库位与周转箱号关系表状态为“删除” // wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED; // await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace); // 更新库位为“空闲” wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN; wmsPlace.Islock = YesOrNot.N; wmsPlace.EmptyContainer = YesOrNot.N; await _wmsPlaceRep.UpdateAsync(wmsPlace); // // 更新库位为“空闲” // wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN; // wmsPlace.Islock = YesOrNot.N; // wmsPlace.EmptyContainer = YesOrNot.N; // await _wmsPlaceRep.UpdateAsync(wmsPlace); // 更新周转箱号状态为“空闲” wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; await _wmsContainerRep.UpdateAsync(wmsContainer); } } } // // 更新周转箱号状态为“空闲” // wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // } // } /// <summary> /// 呼叫空托 /// </summary> /// <returns></returns> [HttpPost("callairflare")] [UnitOfWork] public async Task CallAirflare(CallAirflareInput input) { //获取库位中存货是空托的库位 var wmsPlace = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.EmptyContainer== YesOrNot.Y).ToListAsync(); if (wmsPlace.Count > 0) { // /// <summary> // /// 呼叫空托 // /// </summary> // /// <returns></returns> // [HttpPost("callairflare")] // [UnitOfWork] // public async Task CallAirflare(CallAirflareInput input) // { // //获取库位中存货是空托的库位 // var wmsPlace = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.EmptyContainer== YesOrNot.Y).ToListAsync(); // if (wmsPlace.Count > 0) // { } } } } // } // } // } //} iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsJob/WmsTask/WmsTaskService.cs
@@ -1,624 +1,624 @@ using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using System.Text; using System.Web; using Admin.NET.Core; using Yitter.IdGenerator; using StackExchange.Redis; //using Furion.DatabaseAccessor; //using Furion.DependencyInjection; //using Furion.DynamicApiController; //using Furion.FriendlyException; //using Mapster; //using Microsoft.AspNetCore.Http; //using Microsoft.AspNetCore.Mvc; //using Microsoft.EntityFrameworkCore; //using System.Linq.Dynamic.Core; //using System.Text; //using System.Web; //using Admin.NET.Core; //using Yitter.IdGenerator; //using StackExchange.Redis; namespace Admin.NET.Application { /// <summary> /// 任务管理服务 /// </summary> [ApiDescriptionSettings("仓库作业", Name = "WmsTask", Order = 102)] [Route("api/[Controller]")] public class WmsTaskService : IDynamicApiController, ITransient { private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep; private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep; private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep; private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; private readonly ISysExcelTemplateService _sysExcelTemplateService; private readonly static object _lock = new(); //namespace Admin.NET.Application //{ // /// <summary> // /// 任务管理服务 // /// </summary> // [ApiDescriptionSettings("仓库作业", Name = "WmsTask", Order = 102)] // [Route("api/[Controller]")] // public class WmsTaskService : IDynamicApiController, ITransient // { // private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; // private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; // private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; // private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep; // private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; // private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep; // private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep; // private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; // private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; // private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; // private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; // private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; // private readonly ISysExcelTemplateService _sysExcelTemplateService; // private readonly static object _lock = new(); /// <summary> /// 构造函数 /// </summary> public WmsTaskService( IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep, IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep, IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep, IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep, IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep, IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep, IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, ISysExcelTemplateService sysExcelTemplateService ) { _sysDictTypeRep = sysDictTypeRep; _sysDictDataRep = sysDictDataRep; _wmsTaskRep = wmsTaskRep; _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep; _wmsOrderRep = wmsOrderRep; _wmsOrderDetailsRep = wmsOrderDetailsRep; _wmsPlaceRep = wmsPlaceRep; _wmsContainerPlaceRep = wmsContainerPlaceRep; _wmsMaterialStockRep = wmsMaterialStockRep; _wmsContainerRep = wmsContainerRep; _wmsMaterialContainerRep = wmsMaterialContainerRep; _wmsAreaRep= wmsAreaRep; _sysExcelTemplateService = sysExcelTemplateService; } // /// <summary> // /// 构造函数 // /// </summary> // public WmsTaskService( // IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep, // IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep, // IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, // IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep, // IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep, // IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep, // IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, // IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, // IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, // IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, // IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep, // IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, // ISysExcelTemplateService sysExcelTemplateService // ) // { // _sysDictTypeRep = sysDictTypeRep; // _sysDictDataRep = sysDictDataRep; // _wmsTaskRep = wmsTaskRep; // _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep; // _wmsOrderRep = wmsOrderRep; // _wmsOrderDetailsRep = wmsOrderDetailsRep; // _wmsPlaceRep = wmsPlaceRep; // _wmsContainerPlaceRep = wmsContainerPlaceRep; // _wmsMaterialStockRep = wmsMaterialStockRep; // _wmsContainerRep = wmsContainerRep; // _wmsMaterialContainerRep = wmsMaterialContainerRep; // _wmsAreaRep= wmsAreaRep; // _sysExcelTemplateService = sysExcelTemplateService; // } /// <summary> /// 分页查询出入库任务管理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("page")] public async Task<PageResult<TaskOutput>> Page([FromQuery] WmsTaskSearch input) { var wmsTasks = await _wmsTaskRep.DetachedEntities .Where(u => u.AreaName.Contains("绝缘立库")) .Where(!string.IsNullOrEmpty(input.TaskNo), u => EF.Functions.Like(u.TaskNo, $"%{input.TaskNo.Trim()}%")) .Where(input.TaskModel != null, u => u.TaskModel == input.TaskModel) .Where(input.TaskType != null, u => u.TaskType == input.TaskType) .Where(input.TaskStatus != null, u => u.TaskStatus == input.TaskStatus) .Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.AreaName), u => u.AreaName == input.AreaName) .Where(!string.IsNullOrEmpty(input.OrderNo), u => EF.Functions.Like(u.OrderNo, $"%{input.OrderNo.Trim()}%")) .Where(!string.IsNullOrEmpty(input.SourcePlace), u => EF.Functions.Like(u.SourcePlace, $"%{input.SourcePlace.Trim()}%")) .Where(!string.IsNullOrEmpty(input.ToPlace), u => EF.Functions.Like(u.ToPlace, $"%{input.ToPlace.Trim()}%")) .Where(input.Aisle != null, u => u.Aisle == input.Aisle) .OrderBy(PageInputOrder.OrderBuilder(input)) .ProjectToType<TaskOutput>() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsTasks; } // /// <summary> // /// 分页查询出入库任务管理 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("page")] // public async Task<PageResult<TaskOutput>> Page([FromQuery] WmsTaskSearch input) // { // var wmsTasks = await _wmsTaskRep.DetachedEntities // .Where(u => u.AreaName.Contains("绝缘立库")) // .Where(!string.IsNullOrEmpty(input.TaskNo), u => EF.Functions.Like(u.TaskNo, $"%{input.TaskNo.Trim()}%")) // .Where(input.TaskModel != null, u => u.TaskModel == input.TaskModel) // .Where(input.TaskType != null, u => u.TaskType == input.TaskType) // .Where(input.TaskStatus != null, u => u.TaskStatus == input.TaskStatus) // .Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.AreaName), u => u.AreaName == input.AreaName) // .Where(!string.IsNullOrEmpty(input.OrderNo), u => EF.Functions.Like(u.OrderNo, $"%{input.OrderNo.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.SourcePlace), u => EF.Functions.Like(u.SourcePlace, $"%{input.SourcePlace.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.ToPlace), u => EF.Functions.Like(u.ToPlace, $"%{input.ToPlace.Trim()}%")) // .Where(input.Aisle != null, u => u.Aisle == input.Aisle) // .OrderBy(PageInputOrder.OrderBuilder(input)) // .ProjectToType<TaskOutput>() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsTasks; // } /// <summary> /// 不分页查询出入库任务管理列表 /// </summary> /// <param name="input">出入库任务管理查询参数</param> /// <returns>(出入库任务管理)实例列表</returns> [HttpGet("listNonPage")] public async Task<List<TaskOutput>> ListNonPageAsync([FromQuery] WmsTaskSearchNonPage input) { var pTaskNo = input.TaskNo?.Trim() ?? ""; var pTaskModel = input.TaskModel; var pTaskType = input.TaskType; var pTaskLevel = input.TaskLevel; var pTaskStatus = input.TaskStatus; var pIsRead = input.IsRead; var pContainerCode = input.ContainerCode?.Trim() ?? ""; var pAreaName = input.AreaName?.Trim() ?? ""; var pOrderNo = input.OrderNo?.Trim() ?? ""; var pTaskDodeviceStatus = input.TaskDodeviceStatus; var wmsTasks = await _wmsTaskRep.DetachedEntities .Where(!string.IsNullOrEmpty(pTaskNo), u => EF.Functions.Like(u.TaskNo, $"%{pTaskNo}%")) .Where(pTaskModel != null, u => u.TaskModel == pTaskModel) .Where(pTaskType != null, u => u.TaskType == pTaskType) .Where(pTaskLevel != null, u => u.TaskLevel == pTaskLevel) .Where(pTaskStatus != null, u => u.TaskStatus == pTaskStatus) .Where(pIsRead != null, u => u.IsRead == pIsRead) .Where(!string.IsNullOrEmpty(pContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{pContainerCode}%")) .Where(!string.IsNullOrEmpty(pAreaName), u => u.AreaName == pAreaName) .Where(!string.IsNullOrEmpty(pOrderNo), u => EF.Functions.Like(u.OrderNo, $"%{pOrderNo}%")) .Where(pTaskDodeviceStatus != null, u => u.TaskDodeviceStatus == pTaskDodeviceStatus) .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) .ProjectToType<TaskOutput>() .ToListAsync(); return wmsTasks; } // /// <summary> // /// 不分页查询出入库任务管理列表 // /// </summary> // /// <param name="input">出入库任务管理查询参数</param> // /// <returns>(出入库任务管理)实例列表</returns> // [HttpGet("listNonPage")] // public async Task<List<TaskOutput>> ListNonPageAsync([FromQuery] WmsTaskSearchNonPage input) // { // var pTaskNo = input.TaskNo?.Trim() ?? ""; // var pTaskModel = input.TaskModel; // var pTaskType = input.TaskType; // var pTaskLevel = input.TaskLevel; // var pTaskStatus = input.TaskStatus; // var pIsRead = input.IsRead; // var pContainerCode = input.ContainerCode?.Trim() ?? ""; // var pAreaName = input.AreaName?.Trim() ?? ""; // var pOrderNo = input.OrderNo?.Trim() ?? ""; // var pTaskDodeviceStatus = input.TaskDodeviceStatus; // var wmsTasks = await _wmsTaskRep.DetachedEntities // .Where(!string.IsNullOrEmpty(pTaskNo), u => EF.Functions.Like(u.TaskNo, $"%{pTaskNo}%")) // .Where(pTaskModel != null, u => u.TaskModel == pTaskModel) // .Where(pTaskType != null, u => u.TaskType == pTaskType) // .Where(pTaskLevel != null, u => u.TaskLevel == pTaskLevel) // .Where(pTaskStatus != null, u => u.TaskStatus == pTaskStatus) // .Where(pIsRead != null, u => u.IsRead == pIsRead) // .Where(!string.IsNullOrEmpty(pContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{pContainerCode}%")) // .Where(!string.IsNullOrEmpty(pAreaName), u => u.AreaName == pAreaName) // .Where(!string.IsNullOrEmpty(pOrderNo), u => EF.Functions.Like(u.OrderNo, $"%{pOrderNo}%")) // .Where(pTaskDodeviceStatus != null, u => u.TaskDodeviceStatus == pTaskDodeviceStatus) // .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) // .ProjectToType<TaskOutput>() // .ToListAsync(); // return wmsTasks; // } /// <summary> /// 增加出入库任务管理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("add")] [NonAction] public async Task Add(AddWmsTaskInput input) { var wmsTask = input.Adapt<WmsTask>(); await _wmsTaskRep.InsertAsync(wmsTask); } // /// <summary> // /// 增加出入库任务管理 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("add")] // [NonAction] // public async Task Add(AddWmsTaskInput input) // { // var wmsTask = input.Adapt<WmsTask>(); // await _wmsTaskRep.InsertAsync(wmsTask); // } /// <summary> /// 删除出入库任务管理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("delete")] public async Task Delete(DeleteWmsTaskInput input) { var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); await _wmsTaskRep.DeleteAsync(wmsTask); } // /// <summary> // /// 删除出入库任务管理 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("delete")] // public async Task Delete(DeleteWmsTaskInput input) // { // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); // await _wmsTaskRep.DeleteAsync(wmsTask); // } /// <summary> /// 更新出入库任务管理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("edit")] public async Task Update(UpdateWmsTaskInput input) { var isExist = await _wmsTaskRep.AnyAsync(u => u.Id == input.Id, false); if (!isExist) throw Oops.Oh(ErrorCode.D3000); // /// <summary> // /// 更新出入库任务管理 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("edit")] // public async Task Update(UpdateWmsTaskInput input) // { // var isExist = await _wmsTaskRep.AnyAsync(u => u.Id == input.Id, false); // if (!isExist) throw Oops.Oh(ErrorCode.D3000); var wmsTask = input.Adapt<WmsTask>(); await _wmsTaskRep.UpdateAsync(wmsTask, ignoreNullValues: true); } // var wmsTask = input.Adapt<WmsTask>(); // await _wmsTaskRep.UpdateAsync(wmsTask, ignoreNullValues: true); // } /// <summary> /// 强制完成 /// </summary> /// <returns></returns> [HttpPost("finish")] [UnitOfWork] public async Task Finish([FromBody] WmsTaskFinishInput input) { //查询任务 var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); // /// <summary> // /// 强制完成 // /// </summary> // /// <returns></returns> // [HttpPost("finish")] // [UnitOfWork] // public async Task Finish([FromBody] WmsTaskFinishInput input) // { // //查询任务 // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); // 查询混合料库区信息 var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); if (wmsArea == null) throw Oops.Oh("库区不存在!"); // // 查询混合料库区信息 // var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.AreaName.Contains("绝缘立库")); // if (wmsArea == null) throw Oops.Oh("库区不存在!"); // 查询托盘信息,呼救AGV时会进行组盘操作 var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == wmsTask.ContainerCode); if (wmsContainer == null) throw Oops.Oh("托盘不存在!"); // // 查询托盘信息,呼救AGV时会进行组盘操作 // var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(z => z.ContainerCode == wmsTask.ContainerCode); // if (wmsContainer == null) throw Oops.Oh("托盘不存在!"); var statusList = new List<TaskStatusEnum> { TaskStatusEnum.WEIZHIXING, TaskStatusEnum.ZHIXINGZHONG , TaskStatusEnum .DAIZHIXING}; if (!statusList.Contains(wmsTask.TaskStatus)) throw Oops.Oh("只有未执行和执行中的任务才能强制完成!"); // var statusList = new List<TaskStatusEnum> { TaskStatusEnum.WEIZHIXING, TaskStatusEnum.ZHIXINGZHONG , TaskStatusEnum .DAIZHIXING}; // if (!statusList.Contains(wmsTask.TaskStatus)) throw Oops.Oh("只有未执行和执行中的任务才能强制完成!"); if (wmsTask.TaskType == TaskType.RUKU) // 入库任务 { // 查询库位信息 随机分配库位 var wmsPlace = new WmsPlace(); if (string.IsNullOrEmpty(wmsTask.ToPlace)) wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.Islock == YesOrNot.N && u.PlaceStatus == PlaceStatus.KONGXIAN); else wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.PlaceCode == wmsTask.ToPlace); if (wmsPlace == null) throw Oops.Oh("库位不存在!"); if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); if (wmsPlace.PlaceStatus != PlaceStatus.KONGXIAN) throw Oops.Oh("库位已存货!"); // 更新库位状态为“存货” wmsPlace.PlaceStatus = PlaceStatus.CUNHUO; if (wmsTask.Description == "空托") wmsPlace.EmptyContainer = YesOrNot.Y; //是否空托 else wmsPlace.EmptyContainer = YesOrNot.N; // if (wmsTask.TaskType == TaskType.RUKU) // 入库任务 // { // // 查询库位信息 随机分配库位 // var wmsPlace = new WmsPlace(); // if (string.IsNullOrEmpty(wmsTask.ToPlace)) // wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.Islock == YesOrNot.N && u.PlaceStatus == PlaceStatus.KONGXIAN); // else // wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.AreaId == wmsArea.Id && u.PlaceCode == wmsTask.ToPlace); // if (wmsPlace == null) throw Oops.Oh("库位不存在!"); // if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // if (wmsPlace.PlaceStatus != PlaceStatus.KONGXIAN) throw Oops.Oh("库位已存货!"); // // 更新库位状态为“存货” // wmsPlace.PlaceStatus = PlaceStatus.CUNHUO; // if (wmsTask.Description == "空托") wmsPlace.EmptyContainer = YesOrNot.Y; //是否空托 // else wmsPlace.EmptyContainer = YesOrNot.N; // 创建托盘号库位关系表 var wmsContainerPlaceModel = new WmsContainerPlace() { PlaceId = wmsPlace.Id, PlaceCode = wmsPlace.PlaceCode, ContainerId = wmsContainer.Id, ContainerCode = wmsContainer.ContainerCode, ContainerPlaceStatus = CommonStatus.ENABLE }; await _wmsContainerPlaceRep.InsertAsync(wmsContainerPlaceModel); // // 创建托盘号库位关系表 // var wmsContainerPlaceModel = new WmsContainerPlace() // { // PlaceId = wmsPlace.Id, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // ContainerPlaceStatus = CommonStatus.ENABLE // }; // await _wmsContainerPlaceRep.InsertAsync(wmsContainerPlaceModel); // 更新库存 var wmsMaterialContainerList = await _wmsMaterialContainerRep.DetachedEntities .Where(p => p.OrderNo ==wmsTask.OrderNo && p.BindStatus == CommonStatus.ENABLE).ProjectToType<WmsMaterialContainer>().ToListAsync(); // // 更新库存 // var wmsMaterialContainerList = await _wmsMaterialContainerRep.DetachedEntities // .Where(p => p.OrderNo ==wmsTask.OrderNo && p.BindStatus == CommonStatus.ENABLE).ProjectToType<WmsMaterialContainer>().ToListAsync(); foreach (var item in wmsMaterialContainerList) { var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode && p.MaterialBatch == item.MaterialBatch); if (wmsMaterialStock != null) { wmsMaterialStock.Source = RuKuSourceEnum.KONGTUO; wmsMaterialStock.AreaId = wmsPlace.AreaId; wmsMaterialStock.PlaceCode = wmsPlace.PlaceCode; wmsMaterialStock.StockNumber += item.BindQuantity; await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); } else { wmsMaterialStock = new WmsMaterialStock() { InspectionMethod = MaterialInspection.MIANJIAN, UnitType = UnitType.ZHONGLIANG, UnitNo = UnitNoType.T, MaterialNo = item.MaterialNo, MaterialType = MaterialType.CHENGPING, MaterialName = item.MaterialName, MaterialSpec = item.MaterialSpec, MaterialBatch = item.MaterialBatch, MaterialDensity = item.MaterialDensity, StockNumber = 1, PlaceCode = wmsPlace.PlaceCode, ContainerId = wmsContainer.Id, ContainerCode = wmsContainer.ContainerCode, AreaId = wmsPlace.AreaId, Source = RuKuSourceEnum.KONGTUO, }; await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); } } // 空料箱入库 if (wmsTask.OrderNo == "N/A") { var wmsMaterialStock = new WmsMaterialStock() { InspectionMethod = MaterialInspection.MIANJIAN, UnitType = UnitType.ZHONGLIANG, UnitNo = UnitNoType.T, MaterialNo = "N/A", MaterialType = MaterialType.KONGTUO, MaterialName = "N/A", MaterialSpec = "N/A", MaterialBatch = "N/A", MaterialDensity = "N/A", StockNumber = 0, PlaceCode = wmsPlace.PlaceCode, ContainerId = wmsContainer.Id, ContainerCode = wmsContainer.ContainerCode, AreaId = wmsPlace.AreaId, Source = RuKuSourceEnum.KONGTUO, }; await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); } // 更新任务状态、设备任务状态、托盘编号、目标位置、库区名称 wmsTask.TaskStatus = TaskStatusEnum.WANCHENG; wmsTask.TaskDodeviceStatus = TaskDodeviceStatusEnum.W; wmsTask.ContainerCode = wmsContainer.ContainerCode; wmsTask.ToPlace = wmsPlace.PlaceCode; wmsTask.AreaName = wmsPlace.WmsArea.AreaName; wmsTask.IsRead = true; // foreach (var item in wmsMaterialContainerList) // { // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(p => p.ContainerCode == wmsContainer.ContainerCode // && p.MaterialBatch == item.MaterialBatch); // if (wmsMaterialStock != null) // { // wmsMaterialStock.Source = RuKuSourceEnum.KONGTUO; // wmsMaterialStock.AreaId = wmsPlace.AreaId; // wmsMaterialStock.PlaceCode = wmsPlace.PlaceCode; // wmsMaterialStock.StockNumber += item.BindQuantity; // await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); // } // else // { // wmsMaterialStock = new WmsMaterialStock() // { // InspectionMethod = MaterialInspection.MIANJIAN, // UnitType = UnitType.ZHONGLIANG, // UnitNo = UnitNoType.T, // MaterialNo = item.MaterialNo, // MaterialType = MaterialType.CHENGPING, // MaterialName = item.MaterialName, // MaterialSpec = item.MaterialSpec, // MaterialBatch = item.MaterialBatch, // MaterialDensity = item.MaterialDensity, // StockNumber = 1, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // AreaId = wmsPlace.AreaId, // Source = RuKuSourceEnum.KONGTUO, // }; // await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); // } // } // // 空料箱入库 // if (wmsTask.OrderNo == "N/A") // { // var wmsMaterialStock = new WmsMaterialStock() // { // InspectionMethod = MaterialInspection.MIANJIAN, // UnitType = UnitType.ZHONGLIANG, // UnitNo = UnitNoType.T, // MaterialNo = "N/A", // MaterialType = MaterialType.KONGTUO, // MaterialName = "N/A", // MaterialSpec = "N/A", // MaterialBatch = "N/A", // MaterialDensity = "N/A", // StockNumber = 0, // PlaceCode = wmsPlace.PlaceCode, // ContainerId = wmsContainer.Id, // ContainerCode = wmsContainer.ContainerCode, // AreaId = wmsPlace.AreaId, // Source = RuKuSourceEnum.KONGTUO, // }; // await _wmsMaterialStockRep.InsertAsync(wmsMaterialStock); // } // // 更新任务状态、设备任务状态、托盘编号、目标位置、库区名称 // wmsTask.TaskStatus = TaskStatusEnum.WANCHENG; // wmsTask.TaskDodeviceStatus = TaskDodeviceStatusEnum.W; // wmsTask.ContainerCode = wmsContainer.ContainerCode; // wmsTask.ToPlace = wmsPlace.PlaceCode; // wmsTask.AreaName = wmsPlace.WmsArea.AreaName; // wmsTask.IsRead = true; // 更新库位状态为存货 wmsPlace.PlaceStatus = PlaceStatus.CUNHUO; await _wmsPlaceRep.UpdateAsync(wmsPlace); // // 更新库位状态为存货 // wmsPlace.PlaceStatus = PlaceStatus.CUNHUO; // await _wmsPlaceRep.UpdateAsync(wmsPlace); // 更新托盘状态为“库位” wmsContainer.ContainerStatus = ContainerStatus.KUWEI; await _wmsContainerRep.UpdateAsync(wmsContainer); } else if (wmsTask.TaskType == TaskType.CHUKU) //出库任务 { var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // 查询库位信息 var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.PlaceCode == wmsTask.SourcePlace); if (wmsPlace == null) throw Oops.Oh("库位信息不存在!"); if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); //if (wmsPlace != null && wmsPlace.PlaceStatus != PlaceStatus.DAICHU) throw Oops.Oh("库位异常货!"); // // 更新托盘状态为“库位” // wmsContainer.ContainerStatus = ContainerStatus.KUWEI; // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // else if (wmsTask.TaskType == TaskType.CHUKU) //出库任务 // { // var wmsMaterialContainerList = new List<WmsMaterialContainer>(); // // 查询库位信息 // var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.PlaceCode == wmsTask.SourcePlace); // if (wmsPlace == null) throw Oops.Oh("库位信息不存在!"); // if (wmsPlace.Islock == YesOrNot.Y) throw Oops.Oh("库位被锁定!"); // //if (wmsPlace != null && wmsPlace.PlaceStatus != PlaceStatus.DAICHU) throw Oops.Oh("库位异常货!"); // 查询是否已存在托盘与库位的关系 var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(z => z.PlaceId == wmsPlace.Id && z.PlaceCode == wmsPlace.PlaceCode && z.ContainerCode == wmsTask.ContainerCode && z.ContainerPlaceStatus == CommonStatus.ENABLE); if (wmsContainerPlace == null) throw Oops.Oh("库位容器关系不存在!"); // // 查询是否已存在托盘与库位的关系 // var wmsContainerPlace = await _wmsContainerPlaceRep.FirstOrDefaultAsync(z => z.PlaceId == wmsPlace.Id && z.PlaceCode == wmsPlace.PlaceCode // && z.ContainerCode == wmsTask.ContainerCode && z.ContainerPlaceStatus == CommonStatus.ENABLE); // if (wmsContainerPlace == null) throw Oops.Oh("库位容器关系不存在!"); // 不是空托才会有组盘关系 if (wmsPlace.EmptyContainer == YesOrNot.N) { // 检查物料与空托号关系 wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!"); // // 不是空托才会有组盘关系 // if (wmsPlace.EmptyContainer == YesOrNot.N) // { // // 检查物料与空托号关系 // wmsMaterialContainerList = await _wmsMaterialContainerRep.Where(p => p.ContainerCode == wmsContainer.ContainerCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync(); // if (wmsMaterialContainerList.Count <= 0) throw Oops.Oh("托盘号与物料关系不存在!"); } else { // 更新空料箱库存 var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) { await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock); } } // } // else // { // // 更新空料箱库存 // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsContainer.ContainerCode); // if (wmsMaterialStock.Source == RuKuSourceEnum.KONGTUO) // { // await _wmsMaterialStockRep.DeleteAsync(wmsMaterialStock); // } // } //构建出库物料和周转箱号关系 var orderNo = "N/A"; if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString(); // //构建出库物料和周转箱号关系 // var orderNo = "N/A"; // if (wmsMaterialContainerList.Count > 0) orderNo = YitIdHelper.NextId().ToString(); foreach (var wmsMaterialContaine in wmsMaterialContainerList) { //更新状态为”删除“ wmsMaterialContaine.BindStatus = CommonStatus.DELETED; await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine); // foreach (var wmsMaterialContaine in wmsMaterialContainerList) // { // //更新状态为”删除“ // wmsMaterialContaine.BindStatus = CommonStatus.DELETED; // await _wmsMaterialContainerRep.UpdateNowAsync(wmsMaterialContaine); //新增组盘绑定记录 正常 var addWmsMaterialContainer = wmsMaterialContaine; addWmsMaterialContainer.Id = YitIdHelper.NextId(); addWmsMaterialContainer.OrderNo = orderNo; addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE; await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer); // 这里没有分拣操作直接更新库存信息 var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode); wmsMaterialStock.PlaceCode = "N/A"; wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity; await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); } // //新增组盘绑定记录 正常 // var addWmsMaterialContainer = wmsMaterialContaine; // addWmsMaterialContainer.Id = YitIdHelper.NextId(); // addWmsMaterialContainer.OrderNo = orderNo; // addWmsMaterialContainer.BindStatus = CommonStatus.ENABLE; // await _wmsMaterialContainerRep.InsertNowAsync(addWmsMaterialContainer); // // 这里没有分拣操作直接更新库存信息 // var wmsMaterialStock = await _wmsMaterialStockRep.FirstOrDefaultAsync(u => u.ContainerCode == wmsMaterialContaine.ContainerCode); // wmsMaterialStock.PlaceCode = "N/A"; // wmsMaterialStock.StockNumber -= wmsMaterialContaine.BindQuantity; // await _wmsMaterialStockRep.UpdateAsync(wmsMaterialStock); // } //更新任务状态 wmsTask.TaskStatus = TaskStatusEnum.WANCHENG; wmsTask.TaskDodeviceStatus = TaskDodeviceStatusEnum.W; wmsTask.IsRead = true; // //更新任务状态 // wmsTask.TaskStatus = TaskStatusEnum.WANCHENG; // wmsTask.TaskDodeviceStatus = TaskDodeviceStatusEnum.W; // wmsTask.IsRead = true; // 禁用托盘库位关系 wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED; await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace); // // 禁用托盘库位关系 // wmsContainerPlace.ContainerPlaceStatus = CommonStatus.DELETED; // await _wmsContainerPlaceRep.UpdateAsync(wmsContainerPlace); // 更新库位状态为“空闲” wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN; await _wmsPlaceRep.UpdateAsync(wmsPlace); // // 更新库位状态为“空闲” // wmsPlace.PlaceStatus = PlaceStatus.KONGXIAN; // await _wmsPlaceRep.UpdateAsync(wmsPlace); // 更新托盘状态为“空闲” wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; await _wmsContainerRep.UpdateAsync(wmsContainer); } else //移库任务 { // // 更新托盘状态为“空闲” // wmsContainer.ContainerStatus = ContainerStatus.KOUXIAN; // await _wmsContainerRep.UpdateAsync(wmsContainer); // } // else //移库任务 // { } await _wmsTaskRep.UpdateAsync(wmsTask); } // } // await _wmsTaskRep.UpdateAsync(wmsTask); // } /// <summary> /// 更新优先级(向上) /// </summary> /// <returns></returns> [HttpPost("upwardTaskLevel")] public async Task UpwardTaskLevel([FromBody] UpdateTaskLevelInput input) { var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能更新任务优先级!"); if(wmsTask.TaskLevel==5) throw Oops.Oh("任务已为最高级别!"); wmsTask.TaskLevel += 1; await _wmsTaskRep.UpdateAsync(wmsTask); } // /// <summary> // /// 更新优先级(向上) // /// </summary> // /// <returns></returns> // [HttpPost("upwardTaskLevel")] // public async Task UpwardTaskLevel([FromBody] UpdateTaskLevelInput input) // { // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); // if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能更新任务优先级!"); // if(wmsTask.TaskLevel==5) throw Oops.Oh("任务已为最高级别!"); // wmsTask.TaskLevel += 1; // await _wmsTaskRep.UpdateAsync(wmsTask); // } /// <summary> /// 更新优先级(向下) /// </summary> /// <returns></returns> [HttpPost("downTaskLevel")] public async Task DownTaskLevel([FromBody] UpdateTaskLevelInput input) { var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能更新任务优先级!"); if (wmsTask.TaskLevel == 1) throw Oops.Oh("任务已为最低级别!"); wmsTask.TaskLevel -= 1; await _wmsTaskRep.UpdateAsync(wmsTask); } // /// <summary> // /// 更新优先级(向下) // /// </summary> // /// <returns></returns> // [HttpPost("downTaskLevel")] // public async Task DownTaskLevel([FromBody] UpdateTaskLevelInput input) // { // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); // if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能更新任务优先级!"); // if (wmsTask.TaskLevel == 1) throw Oops.Oh("任务已为最低级别!"); // wmsTask.TaskLevel -= 1; // await _wmsTaskRep.UpdateAsync(wmsTask); // } /// <summary> /// 取消 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("CancelTask")] public async Task CancelTask([FromBody] CancelInput input) { var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); // /// <summary> // /// 取消 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("CancelTask")] // public async Task CancelTask([FromBody] CancelInput input) // { // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == input.Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能取消任务!"); // if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能取消任务!"); wmsTask.TaskStatus = TaskStatusEnum.QUXIAO; wmsTask.IsRead=true; await _wmsTaskRep.UpdateAsync(wmsTask); } // wmsTask.TaskStatus = TaskStatusEnum.QUXIAO; // wmsTask.IsRead=true; // await _wmsTaskRep.UpdateAsync(wmsTask); // } /// <summary> /// 批量取消 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("batchCancel")] public async Task BatchCancel([FromBody] BatchCancelInput input) { int length = input.Id.Count; for (int i = 0; i < length; i++) { long Id = input.Id[i]; var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); // /// <summary> // /// 批量取消 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("batchCancel")] // public async Task BatchCancel([FromBody] BatchCancelInput input) // { // int length = input.Id.Count; // for (int i = 0; i < length; i++) // { // long Id = input.Id[i]; // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能取消任务!"); // if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能取消任务!"); wmsTask.TaskStatus = TaskStatusEnum.QUXIAO; await _wmsTaskRep.UpdateAsync(wmsTask); } } // wmsTask.TaskStatus = TaskStatusEnum.QUXIAO; // await _wmsTaskRep.UpdateAsync(wmsTask); // } // } /// <summary> /// 批量暂停 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("batchBreak")] public async Task BatchBreak([FromBody] BatchBreakInput input) { int length = input.Id.Count; for (int i = 0; i < length; i++) { long Id = input.Id[i]; var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); // /// <summary> // /// 批量暂停 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("batchBreak")] // public async Task BatchBreak([FromBody] BatchBreakInput input) // { // int length = input.Id.Count; // for (int i = 0; i < length; i++) // { // long Id = input.Id[i]; // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能暂停任务!"); // if (wmsTask.TaskStatus != TaskStatusEnum.WEIZHIXING) throw Oops.Oh("只有未执行的任务才能暂停任务!"); wmsTask.TaskStatus = TaskStatusEnum.ZANTING; await _wmsTaskRep.UpdateAsync(wmsTask); } } // wmsTask.TaskStatus = TaskStatusEnum.ZANTING; // await _wmsTaskRep.UpdateAsync(wmsTask); // } // } /// <summary> /// 批量继续 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("batchContinue")] public async Task BatchContinue([FromBody] BatchContinueInput input) { int length = input.Id.Count; for (int i = 0; i < length; i++) { long Id = input.Id[i]; var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); if (wmsTask == null) throw Oops.Oh("任务不存在!"); // /// <summary> // /// 批量继续 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("batchContinue")] // public async Task BatchContinue([FromBody] BatchContinueInput input) // { // int length = input.Id.Count; // for (int i = 0; i < length; i++) // { // long Id = input.Id[i]; // var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync(u => u.Id == Id); // if (wmsTask == null) throw Oops.Oh("任务不存在!"); if (wmsTask.TaskStatus != TaskStatusEnum.ZANTING) throw Oops.Oh("只有暂停的任务才能继续任务!"); // if (wmsTask.TaskStatus != TaskStatusEnum.ZANTING) throw Oops.Oh("只有暂停的任务才能继续任务!"); wmsTask.TaskStatus = TaskStatusEnum.WEIZHIXING; await _wmsTaskRep.UpdateAsync(wmsTask); } } // wmsTask.TaskStatus = TaskStatusEnum.WEIZHIXING; // await _wmsTaskRep.UpdateAsync(wmsTask); // } // } /// <summary> /// 获取出入库任务管理 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("detail")] public async Task<TaskOutput> Get([FromQuery] QueryeWmsTaskInput input) { return (await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<TaskOutput>(); } // /// <summary> // /// 获取出入库任务管理 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("detail")] // public async Task<TaskOutput> Get([FromQuery] QueryeWmsTaskInput input) // { // return (await _wmsTaskRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<TaskOutput>(); // } /// <summary> /// 获取出入库任务管理列表 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("list")] public async Task<List<TaskOutput>> List([FromQuery] TaskInput input) { return await _wmsTaskRep.DetachedEntities.ProjectToType<TaskOutput>().ToListAsync(); } // /// <summary> // /// 获取出入库任务管理列表 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("list")] // public async Task<List<TaskOutput>> List([FromQuery] TaskInput input) // { // return await _wmsTaskRep.DetachedEntities.ProjectToType<TaskOutput>().ToListAsync(); // } /// <summary> /// Excel模板导入出入库任务管理功能 /// </summary> /// <param name="file">Excel模板文件</param> /// <param name="importExcelType">Excel导入方式</param> /// <returns>导入的记录数</returns> [HttpPost("fromExcel")] public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType) { int size = 200; var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", "v2"); if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>(); for (var i = 0; i < keys.Length; i++) { keys[i] = keys[i]?.Trim() ?? string.Empty; } ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object?>> data, out string sheetName); List<TaskOutput> wmsTaskList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, TaskOutput> dict); List<Dictionary<string, object>> uniqueKeyValueDictList = wmsTaskList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName); var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsTask>(keys.ToList(), uniqueKeyValueDictList, size); var selectKeys = keys.ToList(); if (!selectKeys.Contains("Id")) selectKeys.Add("Id"); var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsTask, TaskOutput>(selectKeys); List<WmsTask> updates = new(); List<WmsTask> adds = new(); // /// <summary> // /// Excel模板导入出入库任务管理功能 // /// </summary> // /// <param name="file">Excel模板文件</param> // /// <param name="importExcelType">Excel导入方式</param> // /// <returns>导入的记录数</returns> // [HttpPost("fromExcel")] // public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType) // { // int size = 200; // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", "v2"); // if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); // var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>(); // for (var i = 0; i < keys.Length; i++) // { // keys[i] = keys[i]?.Trim() ?? string.Empty; // } // ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object?>> data, out string sheetName); // List<TaskOutput> wmsTaskList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, TaskOutput> dict); // List<Dictionary<string, object>> uniqueKeyValueDictList = wmsTaskList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName); // var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsTask>(keys.ToList(), uniqueKeyValueDictList, size); // var selectKeys = keys.ToList(); // if (!selectKeys.Contains("Id")) selectKeys.Add("Id"); // var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsTask, TaskOutput>(selectKeys); // List<WmsTask> updates = new(); // List<WmsTask> adds = new(); lock (_lock) { foreach (var filter in filters) { var wmsTaskExistSubList = _wmsTaskRep.Where(filter).Select(selector).ToList(); wmsTaskExistSubList.ForEach(x => { var k = DataConvertUtil.GetKey(x, keys); if (dict.ContainsKey(k)) dict[k].Id = x.Id; }); } // lock (_lock) // { // foreach (var filter in filters) // { // var wmsTaskExistSubList = _wmsTaskRep.Where(filter).Select(selector).ToList(); // wmsTaskExistSubList.ForEach(x => // { // var k = DataConvertUtil.GetKey(x, keys); // if (dict.ContainsKey(k)) dict[k].Id = x.Id; // }); // } foreach (var wmsTask in wmsTaskList) { if (wmsTask.Id > 0) { if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsTask.Adapt<WmsTask>()); } else { adds.Add(wmsTask.Adapt<WmsTask>()); } } // foreach (var wmsTask in wmsTaskList) // { // if (wmsTask.Id > 0) // { // if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsTask.Adapt<WmsTask>()); // } // else // { // adds.Add(wmsTask.Adapt<WmsTask>()); // } // } if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsTaskRep.Update(x)); // if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsTaskRep.Update(x)); var maxId = _wmsTaskRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault(); adds.ForEach(x => x.Id = ++maxId); Db.GetDbContext().Set<WmsTask>().AddRange(adds); Db.GetDbContext().SaveChanges(); } // var maxId = _wmsTaskRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault(); // adds.ForEach(x => x.Id = ++maxId); // Db.GetDbContext().Set<WmsTask>().AddRange(adds); // Db.GetDbContext().SaveChanges(); // } await Task.CompletedTask; return adds.Count; } // await Task.CompletedTask; // return adds.Count; // } /// <summary> /// 根据版本下载出入库任务管理的Excel导入模板 /// </summary> /// <param name="version">模板版本</param> /// <returns>下载的模板文件</returns> [HttpGet("downloadExcelTemplate")] public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version) { var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", version); if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); var path = Path.Combine(@"\", excelTemplate.TemplateFileName); Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName); var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; } // /// <summary> // /// 根据版本下载出入库任务管理的Excel导入模板 // /// </summary> // /// <param name="version">模板版本</param> // /// <returns>下载的模板文件</returns> // [HttpGet("downloadExcelTemplate")] // public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version) // { // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", version); // if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); // var path = Path.Combine(@"\", excelTemplate.TemplateFileName); // Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName); // var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8")); // return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; // } /// <summary> /// 根据出入库任务管理查询参数导出Excel /// </summary> /// <param name="input">出入库任务管理(熟化库)查询参数</param> /// <returns>导出的Excel文件</returns> [HttpGet("toExcel")] public async Task<IActionResult> ToExcelAsync([FromQuery] WmsTaskSearchNonPage input) { var wmsTaskList = await ListNonPageAsync(input); MemoryStream ms = new(); DataConvertUtil.ToExcelData(wmsTaskList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers, out List<List<object>> data, out string sheetName); var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", "v1"); if (excelTemplate != null) { ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms); } else { ExcelUtil.ToExcel(headers, data, sheetName, ms); } ms.Position = 0; var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; } } } // /// <summary> // /// 根据出入库任务管理查询参数导出Excel // /// </summary> // /// <param name="input">出入库任务管理(熟化库)查询参数</param> // /// <returns>导出的Excel文件</returns> // [HttpGet("toExcel")] // public async Task<IActionResult> ToExcelAsync([FromQuery] WmsTaskSearchNonPage input) // { // var wmsTaskList = await ListNonPageAsync(input); // MemoryStream ms = new(); // DataConvertUtil.ToExcelData(wmsTaskList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers, // out List<List<object>> data, out string sheetName); // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTask", "v1"); // if (excelTemplate != null) // { // ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms); // } // else // { // ExcelUtil.ToExcel(headers, data, sheetName, ms); // } // ms.Position = 0; // var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); // return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; // } // } //} iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsOrder/WmsTakeMaterialOrder/WmsTakeMaterialOrderService.cs
@@ -1,613 +1,613 @@ using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Admin.NET.Core; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using Microsoft.AspNetCore.Http; using System.Text; using System.Web; using SixLabors.ImageSharp; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using Furion; using Serilog; using Furion.RemoteRequest.Extensions; using HttpMethod = System.Net.Http.HttpMethod; //using Furion.DatabaseAccessor; //using Furion.DatabaseAccessor.Extensions; //using Furion.DependencyInjection; //using Furion.DynamicApiController; //using Furion.FriendlyException; //using Admin.NET.Core; //using Mapster; //using Microsoft.AspNetCore.Mvc; //using Microsoft.EntityFrameworkCore; //using System.Linq.Dynamic.Core; //using Microsoft.AspNetCore.Http; //using System.Text; //using System.Web; //using SixLabors.ImageSharp; //using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; //using Furion; //using Serilog; //using Furion.RemoteRequest.Extensions; //using HttpMethod = System.Net.Http.HttpMethod; namespace Admin.NET.Application { /// <summary> /// 领料单服务 /// </summary> [ApiDescriptionSettings("单据管理", Name = "WmsTakeMaterialOrder", Order = 100)] [Route("api/[Controller]")] public class WmsTakeMaterialOrderService : IWmsTakeMaterialOrderService, IDynamicApiController, ITransient { private readonly IRepository<WmsTakeMaterialOrder,MasterDbContextLocator> _wmsTakeMaterialOrderRep; private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; private readonly ISysExcelTemplateService _sysExcelTemplateService; private readonly static object _lock = new(); private readonly IRepository<WmsTakeMaterialOrderDetail, MasterDbContextLocator> _wmsTakeMaterialOrderDetailRep; private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep; private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; private readonly IRepository<WmsSortOrder, MasterDbContextLocator> _wmsSortOrderRep; private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; //namespace Admin.NET.Application //{ // /// <summary> // /// 领料单服务 // /// </summary> // [ApiDescriptionSettings("单据管理", Name = "WmsTakeMaterialOrder", Order = 100)] // [Route("api/[Controller]")] // public class WmsTakeMaterialOrderService : IWmsTakeMaterialOrderService, IDynamicApiController, ITransient // { // private readonly IRepository<WmsTakeMaterialOrder,MasterDbContextLocator> _wmsTakeMaterialOrderRep; // private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; // private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; // private readonly ISysExcelTemplateService _sysExcelTemplateService; // private readonly static object _lock = new(); // private readonly IRepository<WmsTakeMaterialOrderDetail, MasterDbContextLocator> _wmsTakeMaterialOrderDetailRep; // private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep; // private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; // private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; // private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; // private readonly IRepository<WmsSortOrder, MasterDbContextLocator> _wmsSortOrderRep; // private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; public WmsTakeMaterialOrderService( IRepository<WmsTakeMaterialOrder,MasterDbContextLocator> wmsTakeMaterialOrderRep ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep ,ISysExcelTemplateService sysExcelTemplateService ,IRepository<WmsTakeMaterialOrderDetail, MasterDbContextLocator> wmsTakeMaterialOrderDetailRep , IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep , IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep , IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep , IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep , IRepository<WmsSortOrder, MasterDbContextLocator> wmsSortOrderRep , IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep ) { _wmsTakeMaterialOrderRep = wmsTakeMaterialOrderRep; _sysDictTypeRep = sysDictTypeRep; _sysDictDataRep = sysDictDataRep; _sysExcelTemplateService = sysExcelTemplateService; _wmsTakeMaterialOrderDetailRep = wmsTakeMaterialOrderDetailRep; _wmsOrderTypeRep = wmsOrderTypeRep; _wmsPlaceRep = wmsPlaceRep; _wmsMaterialStockRep = wmsMaterialStockRep; _wmsMaterialContainerRep = wmsMaterialContainerRep; _wmsSortOrderRep = wmsSortOrderRep; _wmsTaskRep = wmsTaskRep; } // public WmsTakeMaterialOrderService( // IRepository<WmsTakeMaterialOrder,MasterDbContextLocator> wmsTakeMaterialOrderRep // ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep // ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep // ,ISysExcelTemplateService sysExcelTemplateService // ,IRepository<WmsTakeMaterialOrderDetail, MasterDbContextLocator> wmsTakeMaterialOrderDetailRep // , IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep // , IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep // , IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep // , IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep // , IRepository<WmsSortOrder, MasterDbContextLocator> wmsSortOrderRep // , IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep // ) // { // _wmsTakeMaterialOrderRep = wmsTakeMaterialOrderRep; // _sysDictTypeRep = sysDictTypeRep; // _sysDictDataRep = sysDictDataRep; // _sysExcelTemplateService = sysExcelTemplateService; // _wmsTakeMaterialOrderDetailRep = wmsTakeMaterialOrderDetailRep; // _wmsOrderTypeRep = wmsOrderTypeRep; // _wmsPlaceRep = wmsPlaceRep; // _wmsMaterialStockRep = wmsMaterialStockRep; // _wmsMaterialContainerRep = wmsMaterialContainerRep; // _wmsSortOrderRep = wmsSortOrderRep; // _wmsTaskRep = wmsTaskRep; // } /// <summary> /// 分页查询领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("page")] public async Task<PageResult<WmsTakeMaterialOrderOutput>> Page([FromQuery] WmsTakeMaterialOrderSearch input) { var wmsTakeMaterialOrders = await _wmsTakeMaterialOrderRep.DetachedEntities .Where(!string.IsNullOrEmpty(input.MoveType), u => EF.Functions.Like(u.MoveType, $"%{input.MoveType.Trim()}%")) .Where(!string.IsNullOrEmpty(input.NO), u => EF.Functions.Like(u.NO, $"%{input.NO.Trim()}%")) .Where(!string.IsNullOrEmpty(input.WBSElementcode), u => EF.Functions.Like(u.WBSElementcode, $"%{input.WBSElementcode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.BenefitingDepartcode), u => EF.Functions.Like(u.BenefitingDepartcode, $"%{input.BenefitingDepartcode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.CostCenterID), u => EF.Functions.Like(u.CostCenterID, $"%{input.CostCenterID.Trim()}%")) .Where(!string.IsNullOrEmpty(input.FI_Client_Analysis_H), u => EF.Functions.Like(u.FI_Client_Analysis_H, $"%{input.FI_Client_Analysis_H.Trim()}%")) .Where(input.IsInnerCompany != null, u => u.IsInnerCompany == input.IsInnerCompany) .Where(!string.IsNullOrEmpty(input.PickerID), u => EF.Functions.Like(u.PickerID, $"%{input.PickerID.Trim()}%")) .Where(!string.IsNullOrEmpty(input.WarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{input.WarehouseCentername.Trim()}%")) .Where(!string.IsNullOrEmpty(input.Companyname), u => EF.Functions.Like(u.Companyname, $"%{input.Companyname.Trim()}%")) .Where(input.OrderStatus != null, u => u.OrderStatus == input.OrderStatus) .OrderBy(PageInputOrder.OrderBuilder<WmsTakeMaterialOrderSearch>(input)) .ProjectToType<WmsTakeMaterialOrderOutput>() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsTakeMaterialOrders; } // /// <summary> // /// 分页查询领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("page")] // public async Task<PageResult<WmsTakeMaterialOrderOutput>> Page([FromQuery] WmsTakeMaterialOrderSearch input) // { // var wmsTakeMaterialOrders = await _wmsTakeMaterialOrderRep.DetachedEntities // .Where(!string.IsNullOrEmpty(input.MoveType), u => EF.Functions.Like(u.MoveType, $"%{input.MoveType.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.NO), u => EF.Functions.Like(u.NO, $"%{input.NO.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.WBSElementcode), u => EF.Functions.Like(u.WBSElementcode, $"%{input.WBSElementcode.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.BenefitingDepartcode), u => EF.Functions.Like(u.BenefitingDepartcode, $"%{input.BenefitingDepartcode.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.CostCenterID), u => EF.Functions.Like(u.CostCenterID, $"%{input.CostCenterID.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.FI_Client_Analysis_H), u => EF.Functions.Like(u.FI_Client_Analysis_H, $"%{input.FI_Client_Analysis_H.Trim()}%")) // .Where(input.IsInnerCompany != null, u => u.IsInnerCompany == input.IsInnerCompany) // .Where(!string.IsNullOrEmpty(input.PickerID), u => EF.Functions.Like(u.PickerID, $"%{input.PickerID.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.WarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{input.WarehouseCentername.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.Companyname), u => EF.Functions.Like(u.Companyname, $"%{input.Companyname.Trim()}%")) // .Where(input.OrderStatus != null, u => u.OrderStatus == input.OrderStatus) // .OrderBy(PageInputOrder.OrderBuilder<WmsTakeMaterialOrderSearch>(input)) // .ProjectToType<WmsTakeMaterialOrderOutput>() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsTakeMaterialOrders; // } /// <summary> /// 不分页查询领料单列表 /// </summary> /// <param name="input">领料单查询参数</param> /// <returns>(领料单)实例列表</returns> [HttpGet("listNonPage")] public async Task<List<WmsTakeMaterialOrderOutput>> ListNonPageAsync([FromQuery] WmsTakeMaterialOrderSearchNonPage input) { var pMoveType = input.MoveType?.Trim() ?? ""; var pNO = input.NO?.Trim() ?? ""; var pWBSElementcode = input.WBSElementcode?.Trim() ?? ""; var pBenefitingDepartcode = input.BenefitingDepartcode?.Trim() ?? ""; var pCostCenterID = input.CostCenterID?.Trim() ?? ""; var pFI_Client_Analysis_H = input.FI_Client_Analysis_H?.Trim() ?? ""; var pIsInnerCompany = input.IsInnerCompany; var pPickerID = input.PickerID?.Trim() ?? ""; var pWarehouseCentername = input.WarehouseCentername?.Trim() ?? ""; var pCompanyname = input.Companyname?.Trim() ?? ""; var pOrderStatus = input.OrderStatus; var wmsTakeMaterialOrders = await _wmsTakeMaterialOrderRep.DetachedEntities .Where(!string.IsNullOrEmpty(pMoveType), u => EF.Functions.Like(u.MoveType, $"%{pMoveType}%")) .Where(!string.IsNullOrEmpty(pNO), u => EF.Functions.Like(u.NO, $"%{pNO}%")) .Where(!string.IsNullOrEmpty(pWBSElementcode), u => EF.Functions.Like(u.WBSElementcode, $"%{pWBSElementcode}%")) .Where(!string.IsNullOrEmpty(pBenefitingDepartcode), u => EF.Functions.Like(u.BenefitingDepartcode, $"%{pBenefitingDepartcode}%")) .Where(!string.IsNullOrEmpty(pCostCenterID), u => EF.Functions.Like(u.CostCenterID, $"%{pCostCenterID}%")) .Where(!string.IsNullOrEmpty(pFI_Client_Analysis_H), u => EF.Functions.Like(u.FI_Client_Analysis_H, $"%{pFI_Client_Analysis_H}%")) .Where(pIsInnerCompany != null, u => u.IsInnerCompany == pIsInnerCompany) .Where(!string.IsNullOrEmpty(pPickerID), u => EF.Functions.Like(u.PickerID, $"%{pPickerID}%")) .Where(!string.IsNullOrEmpty(pWarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{pWarehouseCentername}%")) .Where(!string.IsNullOrEmpty(pCompanyname), u => EF.Functions.Like(u.Companyname, $"%{pCompanyname}%")) .Where(pOrderStatus != null, u => u.OrderStatus == pOrderStatus) .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) .ProjectToType<WmsTakeMaterialOrderOutput>() .ToListAsync(); return wmsTakeMaterialOrders; } // /// <summary> // /// 不分页查询领料单列表 // /// </summary> // /// <param name="input">领料单查询参数</param> // /// <returns>(领料单)实例列表</returns> // [HttpGet("listNonPage")] // public async Task<List<WmsTakeMaterialOrderOutput>> ListNonPageAsync([FromQuery] WmsTakeMaterialOrderSearchNonPage input) // { // var pMoveType = input.MoveType?.Trim() ?? ""; // var pNO = input.NO?.Trim() ?? ""; // var pWBSElementcode = input.WBSElementcode?.Trim() ?? ""; // var pBenefitingDepartcode = input.BenefitingDepartcode?.Trim() ?? ""; // var pCostCenterID = input.CostCenterID?.Trim() ?? ""; // var pFI_Client_Analysis_H = input.FI_Client_Analysis_H?.Trim() ?? ""; // var pIsInnerCompany = input.IsInnerCompany; // var pPickerID = input.PickerID?.Trim() ?? ""; // var pWarehouseCentername = input.WarehouseCentername?.Trim() ?? ""; // var pCompanyname = input.Companyname?.Trim() ?? ""; // var pOrderStatus = input.OrderStatus; // var wmsTakeMaterialOrders = await _wmsTakeMaterialOrderRep.DetachedEntities // .Where(!string.IsNullOrEmpty(pMoveType), u => EF.Functions.Like(u.MoveType, $"%{pMoveType}%")) // .Where(!string.IsNullOrEmpty(pNO), u => EF.Functions.Like(u.NO, $"%{pNO}%")) // .Where(!string.IsNullOrEmpty(pWBSElementcode), u => EF.Functions.Like(u.WBSElementcode, $"%{pWBSElementcode}%")) // .Where(!string.IsNullOrEmpty(pBenefitingDepartcode), u => EF.Functions.Like(u.BenefitingDepartcode, $"%{pBenefitingDepartcode}%")) // .Where(!string.IsNullOrEmpty(pCostCenterID), u => EF.Functions.Like(u.CostCenterID, $"%{pCostCenterID}%")) // .Where(!string.IsNullOrEmpty(pFI_Client_Analysis_H), u => EF.Functions.Like(u.FI_Client_Analysis_H, $"%{pFI_Client_Analysis_H}%")) // .Where(pIsInnerCompany != null, u => u.IsInnerCompany == pIsInnerCompany) // .Where(!string.IsNullOrEmpty(pPickerID), u => EF.Functions.Like(u.PickerID, $"%{pPickerID}%")) // .Where(!string.IsNullOrEmpty(pWarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{pWarehouseCentername}%")) // .Where(!string.IsNullOrEmpty(pCompanyname), u => EF.Functions.Like(u.Companyname, $"%{pCompanyname}%")) // .Where(pOrderStatus != null, u => u.OrderStatus == pOrderStatus) // .OrderBy(PageInputOrder.OrderNonPageBuilder(input)) // .ProjectToType<WmsTakeMaterialOrderOutput>() // .ToListAsync(); // return wmsTakeMaterialOrders; // } /// <summary> /// 获取单据明细 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("PageDetail")] public async Task<PageResult<WmsTakeMaterialOrderDetailOutput>> PageDetail([FromQuery] TakePageDetailInput input) { var wmsOrders = await _wmsTakeMaterialOrderDetailRep.DetachedEntities .Where(input.Id != null, u => u.OrderId == input.Id) .ProjectToType<WmsTakeMaterialOrderDetailOutput>() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsOrders; } // /// <summary> // /// 获取单据明细 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("PageDetail")] // public async Task<PageResult<WmsTakeMaterialOrderDetailOutput>> PageDetail([FromQuery] TakePageDetailInput input) // { // var wmsOrders = await _wmsTakeMaterialOrderDetailRep.DetachedEntities // .Where(input.Id != null, u => u.OrderId == input.Id) // .ProjectToType<WmsTakeMaterialOrderDetailOutput>() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsOrders; // } /// <summary> /// 分页查询物料库存 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("stockPage")] public async Task<PageResult<TakeMaterialStockOutput>> StockPage([FromQuery] TakeMaterialStockSearch input) { //从未执行和执行中的任务中获取库位进行筛选(未写) // /// <summary> // /// 分页查询物料库存 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("stockPage")] // public async Task<PageResult<TakeMaterialStockOutput>> StockPage([FromQuery] TakeMaterialStockSearch input) // { // //从未执行和执行中的任务中获取库位进行筛选(未写) //查询所有被锁定库位和待出的库存 var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); // //查询所有被锁定库位和待出的库存 // var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities .Where(u => u.StockNumber != 0) .Where(!string.IsNullOrEmpty(input.MaterialNo), u => EF.Functions.Like(u.MaterialNo, $"%{input.MaterialNo.Trim()}%")) .Where(!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%")) .Where(!string.IsNullOrEmpty(input.ProjectCode), u => EF.Functions.Like(u.ProjectCode, $"%{input.ProjectCode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.ContractCode), u => EF.Functions.Like(u.ContractCode, $"%{input.ContractCode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.TACode), u => EF.Functions.Like(u.TACode, $"%{input.TACode.Trim()}%")) .Where(input.SearchBeginTime != null && input.SearchEndTime != null, u => u.CreatedTime >= DateTime.Parse(input.SearchBeginTime.Trim()) && u.CreatedTime <= DateTime.Parse(input.SearchEndTime.Trim())) .Where(u => u.AreaId == 472817877401669) .Where(u => !lockPlace.Contains(u.PlaceCode)) .ProjectToType<TakeMaterialStockOutput>() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsMaterialStocks; } // var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities // .Where(u => u.StockNumber != 0) // .Where(!string.IsNullOrEmpty(input.MaterialNo), u => EF.Functions.Like(u.MaterialNo, $"%{input.MaterialNo.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.MaterialName), u => EF.Functions.Like(u.MaterialName, $"%{input.MaterialName.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.ProjectCode), u => EF.Functions.Like(u.ProjectCode, $"%{input.ProjectCode.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.ContractCode), u => EF.Functions.Like(u.ContractCode, $"%{input.ContractCode.Trim()}%")) // .Where(!string.IsNullOrEmpty(input.TACode), u => EF.Functions.Like(u.TACode, $"%{input.TACode.Trim()}%")) // .Where(input.SearchBeginTime != null && input.SearchEndTime != null, u => u.CreatedTime >= DateTime.Parse(input.SearchBeginTime.Trim()) && // u.CreatedTime <= DateTime.Parse(input.SearchEndTime.Trim())) // .Where(u => u.AreaId == 472817877401669) // .Where(u => !lockPlace.Contains(u.PlaceCode)) // .ProjectToType<TakeMaterialStockOutput>() // .ToADPagedListAsync(input.PageNo, input.PageSize); // return wmsMaterialStocks; // } /// <summary> /// 物料编码下拉框 /// </summary> /// <returns></returns> [HttpGet("GetMaterialNoList")] public async Task<List<MaterialNoListOutput>> GetMaterialNoList() { // 查询库位表状态为存货的库位作为查询库存的条件 固定库区 List<string> wmsPlaceCodes = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.AreaId == 472817877401669) .Select(t => t.PlaceCode).ToListAsync(); //从未执行和执行中的任务中获取库位进行筛选(未写) //查询所有被锁定库位和待出的库存 var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); //查询库存 var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities .ToListAsync(); //未执行或执行中的明细托盘相关库存不继续显示 wmsMaterialStocks = wmsMaterialStocks .Where(u => !lockPlace.Contains(u.PlaceCode)) .GroupBy(x => x.MaterialNo).Select(x => x.First()).ToList(); List<MaterialNoListOutput> MaterialNoListOutputLists = new List<MaterialNoListOutput>(); foreach (var item in wmsMaterialStocks) { MaterialNoListOutput MaterialNoListOutput = new MaterialNoListOutput(); MaterialNoListOutput.Code = item.MaterialNo; MaterialNoListOutput.MaterialNo = item.MaterialNo; MaterialNoListOutputLists.Add(MaterialNoListOutput); } return MaterialNoListOutputLists; } // /// <summary> // /// 物料编码下拉框 // /// </summary> // /// <returns></returns> // [HttpGet("GetMaterialNoList")] // public async Task<List<MaterialNoListOutput>> GetMaterialNoList() // { // // 查询库位表状态为存货的库位作为查询库存的条件 固定库区 // List<string> wmsPlaceCodes = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.AreaId == 472817877401669) // .Select(t => t.PlaceCode).ToListAsync(); // //从未执行和执行中的任务中获取库位进行筛选(未写) // //查询所有被锁定库位和待出的库存 // var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); // //查询库存 // var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities // .ToListAsync(); // //未执行或执行中的明细托盘相关库存不继续显示 // wmsMaterialStocks = wmsMaterialStocks // .Where(u => !lockPlace.Contains(u.PlaceCode)) // .GroupBy(x => x.MaterialNo).Select(x => x.First()).ToList(); // List<MaterialNoListOutput> MaterialNoListOutputLists = new List<MaterialNoListOutput>(); // foreach (var item in wmsMaterialStocks) // { // MaterialNoListOutput MaterialNoListOutput = new MaterialNoListOutput(); // MaterialNoListOutput.Code = item.MaterialNo; // MaterialNoListOutput.MaterialNo = item.MaterialNo; // MaterialNoListOutputLists.Add(MaterialNoListOutput); // } // return MaterialNoListOutputLists; // } /// <summary> /// 项目编码下拉框 /// </summary> /// <returns></returns> [HttpGet("GetProjectCodeList")] public async Task<List<ProjectCodeListOutput>> GetProjectCodeList() { // 查询库位表状态为存货的库位作为查询库存的条件 固定库区 List<string> wmsPlaceCodes = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.AreaId == 472817877401669) .Select(t => t.PlaceCode).ToListAsync(); //从未执行和执行中的任务中获取库位进行筛选(未写) //查询所有被锁定库位和待出的库存 var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); //查询库存 var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities .ToListAsync(); //未执行或执行中的明细托盘相关库存不继续显示 wmsMaterialStocks = wmsMaterialStocks .Where(u => !lockPlace.Contains(u.PlaceCode)) .GroupBy(x => x.ProjectCode).Select(x => x.First()).ToList(); List<ProjectCodeListOutput> ProjectCodeListOutputLists = new List<ProjectCodeListOutput>(); foreach (var item in wmsMaterialStocks) { ProjectCodeListOutput ProjectCodeListOutput = new ProjectCodeListOutput(); ProjectCodeListOutput.Code = item.ProjectCode; ProjectCodeListOutput.ProjectCode = item.ProjectCode; ProjectCodeListOutputLists.Add(ProjectCodeListOutput); } return ProjectCodeListOutputLists; } // /// <summary> // /// 项目编码下拉框 // /// </summary> // /// <returns></returns> // [HttpGet("GetProjectCodeList")] // public async Task<List<ProjectCodeListOutput>> GetProjectCodeList() // { // // 查询库位表状态为存货的库位作为查询库存的条件 固定库区 // List<string> wmsPlaceCodes = await _wmsPlaceRep.Where(u => u.PlaceStatus == PlaceStatus.CUNHUO && u.AreaId == 472817877401669) // .Select(t => t.PlaceCode).ToListAsync(); // //从未执行和执行中的任务中获取库位进行筛选(未写) // //查询所有被锁定库位和待出的库存 // var lockPlace = await _wmsPlaceRep.DetachedEntities.Where(x => x.Islock == YesOrNot.Y || x.PlaceStatus == PlaceStatus.DAICHU).Select(x => x.PlaceCode).ToListAsync(); // //查询库存 // var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities // .ToListAsync(); // //未执行或执行中的明细托盘相关库存不继续显示 // wmsMaterialStocks = wmsMaterialStocks // .Where(u => !lockPlace.Contains(u.PlaceCode)) // .GroupBy(x => x.ProjectCode).Select(x => x.First()).ToList(); // List<ProjectCodeListOutput> ProjectCodeListOutputLists = new List<ProjectCodeListOutput>(); // foreach (var item in wmsMaterialStocks) // { // ProjectCodeListOutput ProjectCodeListOutput = new ProjectCodeListOutput(); // ProjectCodeListOutput.Code = item.ProjectCode; // ProjectCodeListOutput.ProjectCode = item.ProjectCode; // ProjectCodeListOutputLists.Add(ProjectCodeListOutput); // } // return ProjectCodeListOutputLists; // } /// <summary> /// 增加领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("add")] public async Task Add(AddWmsTakeMaterialOrderInput input) { // 查询单据小类是“生产入库”的Id var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); var wmsTakeMaterialOrder = input.Adapt<WmsTakeMaterialOrder>(); wmsTakeMaterialOrder.SOID = 66666; wmsTakeMaterialOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0; wmsTakeMaterialOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0; wmsTakeMaterialOrder.OrderStatus = OrderStatusEnum.WEIXIAFA; await _wmsTakeMaterialOrderRep.InsertAsync(wmsTakeMaterialOrder); } // /// <summary> // /// 增加领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("add")] // public async Task Add(AddWmsTakeMaterialOrderInput input) // { // // 查询单据小类是“生产入库”的Id // var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); // var wmsTakeMaterialOrder = input.Adapt<WmsTakeMaterialOrder>(); // wmsTakeMaterialOrder.SOID = 66666; // wmsTakeMaterialOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0; // wmsTakeMaterialOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0; // wmsTakeMaterialOrder.OrderStatus = OrderStatusEnum.WEIXIAFA; // await _wmsTakeMaterialOrderRep.InsertAsync(wmsTakeMaterialOrder); // } /// <summary> /// 增加领料单(yigo系统获取) /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("TakeOrderAdd")] [UnitOfWork] public async Task TakeOrderAdd() { //获取领料申请单 string url = App.Configuration["YiGoWebApi:QueryOutBoundNotice"]; var Billdate_S = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd"); var Billdate_E = DateTime.Now.AddDays(15).ToString("yyyy-MM-dd"); //写日志文件 //Log.Error($"[TransferContainerCode][ContainerCode:{input.ContainerCode}][url:{url}]"); var response = await url.SetHttpMethod(System.Net.Http.HttpMethod.Post) .SetBody(new Dictionary<string, object> { { "Billdate_S", Billdate_S }, { "Billdate_E", Billdate_E}, }, "application/json").PostAsStringAsync(); var Data = response.FromJson<WmsTakeMaterialOrderOutputByYiGO>(); var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); foreach (var item in Data.Data) { item.Id = Yitter.IdGenerator.YitIdHelper.NextId(); var wmsTakeMaterialOrder = item.Adapt<WmsTakeMaterialOrder>(); var isExcit = await _wmsTakeMaterialOrderRep.AnyAsync(x => x.NO == item.NO); if (!isExcit) { wmsTakeMaterialOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0; wmsTakeMaterialOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0; await _wmsTakeMaterialOrderRep.InsertNowAsync(wmsTakeMaterialOrder); foreach (var item1 in item.Dtls) { var wmsTakeMaterialDeatail = item1.Adapt<WmsTakeMaterialOrderDetail>(); wmsTakeMaterialDeatail.OrderId = item.Id; await _wmsTakeMaterialOrderDetailRep.InsertNowAsync(wmsTakeMaterialDeatail); } } } } /// <summary> /// 领料下架接口(yigo系统) /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("ReturnTakeOrder")] [UnifyResult(typeof(object))] [UnitOfWork] public async Task<object> ReturnTakeOrder([FromBody] ReturnTakeOrderInput input) { try { //创建指定名称的订单操作 string url = App.Configuration["YiGoWebApi:CreateTX211"]; //获取主单据 var wmsTakeMaterialOrderModal = await _wmsTakeMaterialOrderRep.FirstOrDefaultAsync(x => x.Id == input.Id); if (wmsTakeMaterialOrderModal == null) throw Oops.Oh("单据信息不存在!"); // 写日志文件 Log.Error($"[领料下架][单据号:{wmsTakeMaterialOrderModal.NO}][url:{url}]"); // /// <summary> // /// 增加领料单(yigo系统获取) // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("TakeOrderAdd")] // [UnitOfWork] // public async Task TakeOrderAdd() // { // //获取领料申请单 // string url = App.Configuration["YiGoWebApi:QueryOutBoundNotice"]; // var Billdate_S = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd"); // var Billdate_E = DateTime.Now.AddDays(15).ToString("yyyy-MM-dd"); // //写日志文件 // //Log.Error($"[TransferContainerCode][ContainerCode:{input.ContainerCode}][url:{url}]"); // var response = await url.SetHttpMethod(System.Net.Http.HttpMethod.Post) // .SetBody(new Dictionary<string, object> { // { "Billdate_S", Billdate_S }, // { "Billdate_E", Billdate_E}, // }, "application/json").PostAsStringAsync(); // var Data = response.FromJson<WmsTakeMaterialOrderOutputByYiGO>(); // var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); // foreach (var item in Data.Data) // { // item.Id = Yitter.IdGenerator.YitIdHelper.NextId(); // var wmsTakeMaterialOrder = item.Adapt<WmsTakeMaterialOrder>(); // var isExcit = await _wmsTakeMaterialOrderRep.AnyAsync(x => x.NO == item.NO); // if (!isExcit) // { // wmsTakeMaterialOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0; // wmsTakeMaterialOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0; // await _wmsTakeMaterialOrderRep.InsertNowAsync(wmsTakeMaterialOrder); // foreach (var item1 in item.Dtls) // { // var wmsTakeMaterialDeatail = item1.Adapt<WmsTakeMaterialOrderDetail>(); // wmsTakeMaterialDeatail.OrderId = item.Id; // await _wmsTakeMaterialOrderDetailRep.InsertNowAsync(wmsTakeMaterialDeatail); // } // } // } // } // /// <summary> // /// 领料下架接口(yigo系统) // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("ReturnTakeOrder")] // [UnifyResult(typeof(object))] // [UnitOfWork] // public async Task<object> ReturnTakeOrder([FromBody] ReturnTakeOrderInput input) // { // try // { // //创建指定名称的订单操作 // string url = App.Configuration["YiGoWebApi:CreateTX211"]; // //获取主单据 // var wmsTakeMaterialOrderModal = await _wmsTakeMaterialOrderRep.FirstOrDefaultAsync(x => x.Id == input.Id); // if (wmsTakeMaterialOrderModal == null) throw Oops.Oh("单据信息不存在!"); // // 写日志文件 // Log.Error($"[领料下架][单据号:{wmsTakeMaterialOrderModal.NO}][url:{url}]"); var response = await url.SetHttpMethod(HttpMethod.Post) .SetBody(input, "application/json") .PostAsAsync<ReturnTakeOrderOutput>(); // 写日志文件 Log.Error($"[领料下架][单据号:{wmsTakeMaterialOrderModal.NO}][response:{response.ToJson()}]"); // var response = await url.SetHttpMethod(HttpMethod.Post) // .SetBody(input, "application/json") // .PostAsAsync<ReturnTakeOrderOutput>(); // // 写日志文件 // Log.Error($"[领料下架][单据号:{wmsTakeMaterialOrderModal.NO}][response:{response.ToJson()}]"); return XnRestfulResultProvider.RESTfulResult(response); } catch (Exception ex) { throw Oops.Oh(ex.Message); } } // return XnRestfulResultProvider.RESTfulResult(response); // } // catch (Exception ex) // { // throw Oops.Oh(ex.Message); // } // } /// <summary> /// 下发领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("DistributeOrder")] [UnitOfWork] public async Task DistributeOrder(DistributeOrderInput input) { // 查询单据小类是“生产入库”的Id var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); //获取领料单据 var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep .Where(x=>x.Id == input.Id && x.OrderLargeCategory == wmsOrderType.Pid && x.OrderSubclass == wmsOrderType.Id) .ProjectToType<WmsTakeMaterialOrder>() .FirstOrDefaultAsync(); if (wmsTakeMaterialOrder == null) throw Oops.Oh("单据不存在!"); wmsTakeMaterialOrder.OrderStatus = OrderStatusEnum.YIXIAFA; //更改单据状态为已下发 await _wmsTakeMaterialOrderRep.UpdateAsync(wmsTakeMaterialOrder); //根据领料单明细生成分拣单 foreach (var item in wmsTakeMaterialOrder.WmsTakeMaterialOrderDetail) { //获取所有为该明细物料编码的库存(不为完成状态的出库任务的库位要排除,待开发) var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities.Where(x => x.MaterialNo == item.Materialcode) .OrderBy(n=>n.CreatedTime) .OrderByDescending(n => n.StockNumber) .ToListAsync(); List<FjStock> FjStockList = new List<FjStock>(); //优先从库位为空的库存进行分拣 var fjstockModel = wmsMaterialStocks.Where(p => p.PlaceCode == "N/A").ToList(); if (fjstockModel != null) { foreach (var a in fjstockModel) { var FjStockModal = a.Adapt<FjStock>(); FjStockModal.FjQty = a.StockNumber; if (item.DistributeQty + a.StockNumber > item.Qty) { FjStockModal.FjQty = item.Qty - item.DistributeQty; item.DistributeQty = item.Qty; FjStockList.Add(FjStockModal); break; } else { item.DistributeQty += a.StockNumber; }; FjStockList.Add(FjStockModal); } } if (item.DistributeQty < item.Qty) { foreach (var b in wmsMaterialStocks.Where(x=>x.PlaceCode!="N/A")) { var FjStockModal = b.Adapt<FjStock>(); FjStockModal.FjQty = b.StockNumber; if (item.DistributeQty + b.StockNumber > item.Qty) { FjStockModal.FjQty = item.Qty - item.DistributeQty; item.DistributeQty = item.Qty; FjStockList.Add(FjStockModal); break; } else { item.DistributeQty += b.StockNumber; }; FjStockList.Add(FjStockModal); } } // /// <summary> // /// 下发领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("DistributeOrder")] // [UnitOfWork] // public async Task DistributeOrder(DistributeOrderInput input) // { // // 查询单据小类是“生产入库”的Id // var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("领料出库")); // //获取领料单据 // var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep // .Where(x=>x.Id == input.Id && x.OrderLargeCategory == wmsOrderType.Pid && x.OrderSubclass == wmsOrderType.Id) // .ProjectToType<WmsTakeMaterialOrder>() // .FirstOrDefaultAsync(); // if (wmsTakeMaterialOrder == null) throw Oops.Oh("单据不存在!"); // wmsTakeMaterialOrder.OrderStatus = OrderStatusEnum.YIXIAFA; // //更改单据状态为已下发 // await _wmsTakeMaterialOrderRep.UpdateAsync(wmsTakeMaterialOrder); // //根据领料单明细生成分拣单 // foreach (var item in wmsTakeMaterialOrder.WmsTakeMaterialOrderDetail) // { // //获取所有为该明细物料编码的库存(不为完成状态的出库任务的库位要排除,待开发) // var wmsMaterialStocks = await _wmsMaterialStockRep.DetachedEntities.Where(x => x.MaterialNo == item.Materialcode) // .OrderBy(n=>n.CreatedTime) // .OrderByDescending(n => n.StockNumber) // .ToListAsync(); // List<FjStock> FjStockList = new List<FjStock>(); // //优先从库位为空的库存进行分拣 // var fjstockModel = wmsMaterialStocks.Where(p => p.PlaceCode == "N/A").ToList(); // if (fjstockModel != null) // { // foreach (var a in fjstockModel) // { // var FjStockModal = a.Adapt<FjStock>(); // FjStockModal.FjQty = a.StockNumber; // if (item.DistributeQty + a.StockNumber > item.Qty) // { // FjStockModal.FjQty = item.Qty - item.DistributeQty; // item.DistributeQty = item.Qty; // FjStockList.Add(FjStockModal); // break; // } // else // { // item.DistributeQty += a.StockNumber; // }; // FjStockList.Add(FjStockModal); // } // } // if (item.DistributeQty < item.Qty) // { // foreach (var b in wmsMaterialStocks.Where(x=>x.PlaceCode!="N/A")) // { // var FjStockModal = b.Adapt<FjStock>(); // FjStockModal.FjQty = b.StockNumber; // if (item.DistributeQty + b.StockNumber > item.Qty) // { // FjStockModal.FjQty = item.Qty - item.DistributeQty; // item.DistributeQty = item.Qty; // FjStockList.Add(FjStockModal); // break; // } // else // { // item.DistributeQty += b.StockNumber; // }; // FjStockList.Add(FjStockModal); // } // } if (item.DistributeQty< item.Qty) throw Oops.Oh(item.Materialname+"库存数量不足!"); //循环需要出库的库存生成任务和分拣单 foreach (var stock in FjStockList) { //获取库位信息 var wmsPlacModal = await _wmsPlaceRep.FirstOrDefaultAsync(x => x.PlaceCode == stock.PlaceCode); //物料和容器的关系 var fjcvmModelList = await _wmsMaterialContainerRep.Where(z => z.ContainerCode == stock.ContainerCode && z.BindStatus == CommonStatus.ENABLE).ToListAsync(); if (wmsPlacModal!=null) { //任务 var takmodel = new WmsTask() { TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(), TaskModel = TaskModel.QUANZIDONG, TaskType = TaskType.CHUKU, TaskLevel = 1, TaskStatus = TaskStatusEnum.WEIZHIXING, OrderNo = fjcvmModelList.FirstOrDefault().OrderNo, OrderDetailsId = item.Id, ContainerCode = stock.ContainerCode, SourcePlace = stock.PlaceCode, ToPlace = wmsPlacModal.Aisle.ToString(), //目标位 AreaName = "绝缘立库", IsRead = true, //WCS是否可以读取 SendTimes = 1, //发送次数 Aisle = wmsPlacModal.Aisle, TaskDodeviceStatus = TaskDodeviceStatusEnum.W, Description = "物料" }; await _wmsTaskRep.InsertAsync(takmodel); } // 新增分拣 var wmsSortOrder = new WmsSortOrder() { OrderNo = wmsTakeMaterialOrder.NO, Materialcode = stock.MaterialNo, Materialname = stock.MaterialName, OrderDetailID = item.Id, ContainerOrderNo = fjcvmModelList.FirstOrDefault().OrderNo, ProjectCode = item.ProjectCode, TACode = item.TACode, PartCode = item.PartCode, PlaceCode = item.PlaceCode, ContainerCode = stock.ContainerCode, SortQuantity = stock.FjQty, ActualQuantity = new decimal(0.00), SortStatus = SortStatusEnum.WEIFENJIAN }; await _wmsSortOrderRep.InsertNowAsync(wmsSortOrder); } } // if (item.DistributeQty< item.Qty) throw Oops.Oh(item.Materialname+"库存数量不足!"); // //循环需要出库的库存生成任务和分拣单 // foreach (var stock in FjStockList) // { // //获取库位信息 // var wmsPlacModal = await _wmsPlaceRep.FirstOrDefaultAsync(x => x.PlaceCode == stock.PlaceCode); // //物料和容器的关系 // var fjcvmModelList = await _wmsMaterialContainerRep.Where(z => // z.ContainerCode == stock.ContainerCode && z.BindStatus == CommonStatus.ENABLE).ToListAsync(); // if (wmsPlacModal!=null) // { // //任务 // var takmodel = new WmsTask() // { // TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(), // TaskModel = TaskModel.QUANZIDONG, // TaskType = TaskType.CHUKU, // TaskLevel = 1, // TaskStatus = TaskStatusEnum.WEIZHIXING, // OrderNo = fjcvmModelList.FirstOrDefault().OrderNo, // OrderDetailsId = item.Id, // ContainerCode = stock.ContainerCode, // SourcePlace = stock.PlaceCode, // ToPlace = wmsPlacModal.Aisle.ToString(), //目标位 // AreaName = "绝缘立库", // IsRead = true, //WCS是否可以读取 // SendTimes = 1, //发送次数 // Aisle = wmsPlacModal.Aisle, // TaskDodeviceStatus = TaskDodeviceStatusEnum.W, // Description = "物料" // }; // await _wmsTaskRep.InsertAsync(takmodel); // } // // 新增分拣 // var wmsSortOrder = new WmsSortOrder() // { // OrderNo = wmsTakeMaterialOrder.NO, // Materialcode = stock.MaterialNo, // Materialname = stock.MaterialName, // OrderDetailID = item.Id, // ContainerOrderNo = fjcvmModelList.FirstOrDefault().OrderNo, // ProjectCode = item.ProjectCode, // TACode = item.TACode, // PartCode = item.PartCode, // PlaceCode = item.PlaceCode, // ContainerCode = stock.ContainerCode, // SortQuantity = stock.FjQty, // ActualQuantity = new decimal(0.00), // SortStatus = SortStatusEnum.WEIFENJIAN // }; // await _wmsSortOrderRep.InsertNowAsync(wmsSortOrder); // } // } } // } /// <summary> /// 删除领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("delete")] public async Task Delete(DeleteWmsTakeMaterialOrderInput input) { var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep.FirstOrDefaultAsync(u => u.Id == input.Id); await _wmsTakeMaterialOrderRep.DeleteAsync(wmsTakeMaterialOrder); } // /// <summary> // /// 删除领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("delete")] // public async Task Delete(DeleteWmsTakeMaterialOrderInput input) // { // var wmsTakeMaterialOrder = await _wmsTakeMaterialOrderRep.FirstOrDefaultAsync(u => u.Id == input.Id); // await _wmsTakeMaterialOrderRep.DeleteAsync(wmsTakeMaterialOrder); // } /// <summary> /// 更新领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost("edit")] public async Task Update(UpdateWmsTakeMaterialOrderInput input) { var isExist = await _wmsTakeMaterialOrderRep.AnyAsync(u => u.Id == input.Id, false); if (!isExist) throw Oops.Oh(ErrorCode.D3000); // /// <summary> // /// 更新领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpPost("edit")] // public async Task Update(UpdateWmsTakeMaterialOrderInput input) // { // var isExist = await _wmsTakeMaterialOrderRep.AnyAsync(u => u.Id == input.Id, false); // if (!isExist) throw Oops.Oh(ErrorCode.D3000); var wmsTakeMaterialOrder = input.Adapt<WmsTakeMaterialOrder>(); await _wmsTakeMaterialOrderRep.UpdateAsync(wmsTakeMaterialOrder,ignoreNullValues:true); } // var wmsTakeMaterialOrder = input.Adapt<WmsTakeMaterialOrder>(); // await _wmsTakeMaterialOrderRep.UpdateAsync(wmsTakeMaterialOrder,ignoreNullValues:true); // } /// <summary> /// 获取领料单 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("detail")] public async Task<WmsTakeMaterialOrderOutput> Get([FromQuery] QueryeWmsTakeMaterialOrderInput input) { return (await _wmsTakeMaterialOrderRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsTakeMaterialOrderOutput>(); } // /// <summary> // /// 获取领料单 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("detail")] // public async Task<WmsTakeMaterialOrderOutput> Get([FromQuery] QueryeWmsTakeMaterialOrderInput input) // { // return (await _wmsTakeMaterialOrderRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsTakeMaterialOrderOutput>(); // } /// <summary> /// 获取领料单列表 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet("list")] public async Task<List<WmsTakeMaterialOrderOutput>> List([FromQuery] WmsTakeMaterialOrderInput input) { return await _wmsTakeMaterialOrderRep.DetachedEntities.ProjectToType<WmsTakeMaterialOrderOutput>().ToListAsync(); } /// <summary> /// Excel模板导入领料单功能 /// </summary> /// <param name="file">Excel模板文件</param> /// <param name="importExcelType">Excel导入方式</param> /// <returns>导入的记录数</returns> [HttpPost("fromExcel")] public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType) { int size = 200; var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", "v2"); if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>(); for (var i = 0; i < keys.Length; i++) { keys[i] = keys[i]?.Trim() ?? string.Empty; } ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object?>> data, out string sheetName); List<WmsTakeMaterialOrderOutput> wmsTakeMaterialOrderList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, WmsTakeMaterialOrderOutput> dict); List<Dictionary<string, object>> uniqueKeyValueDictList = wmsTakeMaterialOrderList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName); var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsTakeMaterialOrder>(keys.ToList(), uniqueKeyValueDictList, size); var selectKeys = keys.ToList(); if(!selectKeys.Contains("Id")) selectKeys.Add("Id"); var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsTakeMaterialOrder, WmsTakeMaterialOrderOutput>(selectKeys); List<WmsTakeMaterialOrder> updates = new(); List<WmsTakeMaterialOrder> adds = new(); // /// <summary> // /// 获取领料单列表 // /// </summary> // /// <param name="input"></param> // /// <returns></returns> // [HttpGet("list")] // public async Task<List<WmsTakeMaterialOrderOutput>> List([FromQuery] WmsTakeMaterialOrderInput input) // { // return await _wmsTakeMaterialOrderRep.DetachedEntities.ProjectToType<WmsTakeMaterialOrderOutput>().ToListAsync(); // } // /// <summary> // /// Excel模板导入领料单功能 // /// </summary> // /// <param name="file">Excel模板文件</param> // /// <param name="importExcelType">Excel导入方式</param> // /// <returns>导入的记录数</returns> // [HttpPost("fromExcel")] // public async Task<int> FromExcelAsync(IFormFile file, [FromQuery] ImportExcelType importExcelType) // { // int size = 200; // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", "v2"); // if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); // var keys = excelTemplate.UnionUniqueFields.Split(",") ?? Array.Empty<string>(); // for (var i = 0; i < keys.Length; i++) // { // keys[i] = keys[i]?.Trim() ?? string.Empty; // } // ExcelUtil.FromExcel(file, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, out List<string> headers, out List<List<object?>> data, out string sheetName); // List<WmsTakeMaterialOrderOutput> wmsTakeMaterialOrderList = DataConvertUtil.ToObjectList(headers, data, sheetName, keys, excelTemplate?.DataStartLine ?? 2, out Dictionary<string, WmsTakeMaterialOrderOutput> dict); // List<Dictionary<string, object>> uniqueKeyValueDictList = wmsTakeMaterialOrderList.ParseUniqueKeyValueDictList(keys.ToList(), excelTemplate?.DataStartLine ?? 2, sheetName); // var filters = DataConvertUtil.GetExpressionListByUniqueDict<WmsTakeMaterialOrder>(keys.ToList(), uniqueKeyValueDictList, size); // var selectKeys = keys.ToList(); // if(!selectKeys.Contains("Id")) selectKeys.Add("Id"); // var selector = DataConvertUtil.GetSelectExpressionListByUniqueDict<WmsTakeMaterialOrder, WmsTakeMaterialOrderOutput>(selectKeys); // List<WmsTakeMaterialOrder> updates = new(); // List<WmsTakeMaterialOrder> adds = new(); lock (_lock) { foreach (var filter in filters) { var wmsTakeMaterialOrderExistSubList = _wmsTakeMaterialOrderRep.Where(filter).Select(selector).ToList(); wmsTakeMaterialOrderExistSubList.ForEach(x => { var k = DataConvertUtil.GetKey(x, keys); if (dict.ContainsKey(k)) dict[k].Id = x.Id; }); } foreach (var wmsTakeMaterialOrder in wmsTakeMaterialOrderList) { if (wmsTakeMaterialOrder.Id > 0) { if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsTakeMaterialOrder.Adapt<WmsTakeMaterialOrder>()); } else { adds.Add(wmsTakeMaterialOrder.Adapt<WmsTakeMaterialOrder>()); } } // lock (_lock) // { // foreach (var filter in filters) // { // var wmsTakeMaterialOrderExistSubList = _wmsTakeMaterialOrderRep.Where(filter).Select(selector).ToList(); // wmsTakeMaterialOrderExistSubList.ForEach(x => // { // var k = DataConvertUtil.GetKey(x, keys); // if (dict.ContainsKey(k)) dict[k].Id = x.Id; // }); // } // foreach (var wmsTakeMaterialOrder in wmsTakeMaterialOrderList) // { // if (wmsTakeMaterialOrder.Id > 0) // { // if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.Add(wmsTakeMaterialOrder.Adapt<WmsTakeMaterialOrder>()); // } // else // { // adds.Add(wmsTakeMaterialOrder.Adapt<WmsTakeMaterialOrder>()); // } // } if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsTakeMaterialOrderRep.Update(x)); // if (importExcelType == ImportExcelType.ADD_AND_UPDATE) updates.ForEach(x => _wmsTakeMaterialOrderRep.Update(x)); var maxId = _wmsTakeMaterialOrderRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault(); adds.ForEach(x => x.Id = ++maxId); Db.GetDbContext().Set<WmsTakeMaterialOrder>().AddRange(adds); Db.GetDbContext().SaveChanges(); // var maxId = _wmsTakeMaterialOrderRep.DetachedEntities.OrderByDescending(x => x.Id).Select(x => x.Id).FirstOrDefault(); // adds.ForEach(x => x.Id = ++maxId); // Db.GetDbContext().Set<WmsTakeMaterialOrder>().AddRange(adds); // Db.GetDbContext().SaveChanges(); } await Task.CompletedTask; return adds.Count; } // } // await Task.CompletedTask; // return adds.Count; // } /// <summary> /// 根据版本下载领料单的Excel导入模板 /// </summary> /// <param name="version">模板版本</param> /// <returns>下载的模板文件</returns> [HttpGet("downloadExcelTemplate")] public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version) { var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", version); if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); var path = Path.Combine(@"\", excelTemplate.TemplateFileName); Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName); var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; } /// <summary> /// 根据领料单查询参数导出Excel /// </summary> /// <param name="input">领料单查询参数</param> /// <returns>导出的Excel文件</returns> [HttpGet("toExcel")] public async Task<IActionResult> ToExcelAsync([FromQuery] WmsTakeMaterialOrderSearchNonPage input) { var wmsTakeMaterialOrderList = await ListNonPageAsync(input); MemoryStream ms = new(); DataConvertUtil.ToExcelData(wmsTakeMaterialOrderList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers, out List<List<object>> data, out string sheetName); var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", "v1"); if (excelTemplate != null) { ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms); } else { ExcelUtil.ToExcel(headers, data, sheetName, ms); } ms.Position = 0; var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; } } } // /// <summary> // /// 根据版本下载领料单的Excel导入模板 // /// </summary> // /// <param name="version">模板版本</param> // /// <returns>下载的模板文件</returns> // [HttpGet("downloadExcelTemplate")] // public async Task<IActionResult> DownloadExcelTemplate([FromQuery] string version) // { // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", version); // if (excelTemplate == null) throw Oops.Oh(ErrorCode.Excel002); // var path = Path.Combine(@"\", excelTemplate.TemplateFileName); // Stream ms = FileUtil.Download(path, excelTemplate.TemplateFileName); // var fileName = HttpUtility.UrlEncode($"{excelTemplate.Name}导入模板.xlsx", Encoding.GetEncoding("UTF-8")); // return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; // } // /// <summary> // /// 根据领料单查询参数导出Excel // /// </summary> // /// <param name="input">领料单查询参数</param> // /// <returns>导出的Excel文件</returns> // [HttpGet("toExcel")] // public async Task<IActionResult> ToExcelAsync([FromQuery] WmsTakeMaterialOrderSearchNonPage input) // { // var wmsTakeMaterialOrderList = await ListNonPageAsync(input); // MemoryStream ms = new(); // DataConvertUtil.ToExcelData(wmsTakeMaterialOrderList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers, // out List<List<object>> data, out string sheetName); // var excelTemplate = await _sysExcelTemplateService.GetByAppNameAndClassNameAndVersionAsync("WmsTakeMaterialOrder", "v1"); // if (excelTemplate != null) // { // ExcelUtil.ToExcel(excelTemplate.TemplateFileName, headers, data, sheetName, excelTemplate.HeadStartLine, excelTemplate.DataStartLine, ms); // } // else // { // ExcelUtil.ToExcel(headers, data, sheetName, ms); // } // ms.Position = 0; // var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); // return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; // } // } //} iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/CallEmpty/CallEmptyService.cs
@@ -1,107 +1,107 @@ using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using Admin.NET.Core; using Yitter.IdGenerator; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Mvc.RazorPages; using StackExchange.Redis; //using Furion.DatabaseAccessor; //using Furion.DependencyInjection; //using Furion.DynamicApiController; //using Furion.FriendlyException; //using Mapster; //using Microsoft.AspNetCore.Authorization; //using Microsoft.AspNetCore.Mvc; //using Microsoft.EntityFrameworkCore; //using System.Linq.Dynamic.Core; //using Admin.NET.Core; //using Yitter.IdGenerator; //using Microsoft.Extensions.Logging; //using Microsoft.AspNetCore.Mvc.RazorPages; //using StackExchange.Redis; namespace Admin.NET.Application { /// <summary> /// Pda空托出库 /// </summary> [ApiDescriptionSettings("Pda空托出库", Name = "CallEmpty", Order = 100)] [Route("api/[Controller]")] public class CallEmptyService : IDynamicApiController, ITransient { private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep; private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep; private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep; private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep; //namespace Admin.NET.Application //{ // /// <summary> // /// Pda空托出库 // /// </summary> // [ApiDescriptionSettings("Pda空托出库", Name = "CallEmpty", Order = 100)] // [Route("api/[Controller]")] // public class CallEmptyService : IDynamicApiController, ITransient // { // private readonly IRepository<WmsOrder, MasterDbContextLocator> _wmsOrderRep; // private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep; // private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep; // private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep; // private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep; // private readonly IRepository<WmsWarehouseEntrance, MasterDbContextLocator> _wmsWarehouseEntranceRep; // private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep; // private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep; // private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep; // private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep; // private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep; /// <summary> /// 构造函数 /// </summary> public CallEmptyService( IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep, IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep, IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep, IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep, IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep ) { _wmsOrderRep = wmsOrderRep; _wmsOrderDetailsRep = wmsOrderDetailsRep; _wmsTaskRep = wmsTaskRep; _wmsPlaceRep = wmsPlaceRep; _wmsAreaRep = wmsAreaRep; _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep; _wmsMaterialContainerRep = wmsMaterialContainerRep; _wmsContainerRep = wmsContainerRep; _wmsContainerPlaceRep = wmsContainerPlaceRep; _wmsMaterialStockRep = wmsMaterialStockRep; _wmsOrderTypeRep = wmsOrderTypeRep; } // /// <summary> // /// 构造函数 // /// </summary> // public CallEmptyService( // IRepository<WmsOrder, MasterDbContextLocator> wmsOrderRep, // IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep, // IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep, // IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep, // IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep, // IRepository<WmsWarehouseEntrance, MasterDbContextLocator> wmsWarehouseEntranceRep, // IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep, // IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep, // IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep, // IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep, // IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep // ) // { // _wmsOrderRep = wmsOrderRep; // _wmsOrderDetailsRep = wmsOrderDetailsRep; // _wmsTaskRep = wmsTaskRep; // _wmsPlaceRep = wmsPlaceRep; // _wmsAreaRep = wmsAreaRep; // _wmsWarehouseEntranceRep = wmsWarehouseEntranceRep; // _wmsMaterialContainerRep = wmsMaterialContainerRep; // _wmsContainerRep = wmsContainerRep; // _wmsContainerPlaceRep = wmsContainerPlaceRep; // _wmsMaterialStockRep = wmsMaterialStockRep; // _wmsOrderTypeRep = wmsOrderTypeRep; // } /// <summary> /// 提交出库 /// </summary> /// <returns></returns> [HttpPost("PdaContainerOut")] [UnitOfWork] public async Task PdaContainerOut([FromBody] PdaContainerOutInput input) { //根据输入数量循环出库的托盘数量 for (int i = 1; i < input.Qty+1; i++) { //获取库存中的空托盘 var wmsMaterialStockModal = await _wmsMaterialStockRep.FirstOrDefaultAsync(x => x.Source == RuKuSourceEnum.KONGTUO); //获取库位信息 var wmsPlacModal = await _wmsPlaceRep.FirstOrDefaultAsync(x => x.PlaceCode == wmsMaterialStockModal.PlaceCode); //任务 var takmodel = new WmsTask() { TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(), TaskModel = TaskModel.QUANZIDONG, TaskType = TaskType.CHUKU, TaskLevel = 1, TaskStatus = TaskStatusEnum.WEIZHIXING, OrderNo = "N/A", OrderDetailsId = 0, ContainerCode = wmsMaterialStockModal.ContainerCode, SourcePlace = wmsMaterialStockModal.PlaceCode, ToPlace = wmsPlacModal.Aisle.ToString(), //目标位 AreaName = "绝缘立库", IsRead = true, //WCS是否可以读取 SendTimes = 1, //发送次数 Aisle = wmsPlacModal.Aisle, TaskDodeviceStatus = TaskDodeviceStatusEnum.W, Description = "空托" }; await _wmsTaskRep.InsertAsync(takmodel); } } } } // /// <summary> // /// 提交出库 // /// </summary> // /// <returns></returns> // [HttpPost("PdaContainerOut")] // [UnitOfWork] // public async Task PdaContainerOut([FromBody] PdaContainerOutInput input) // { // //根据输入数量循环出库的托盘数量 // for (int i = 1; i < input.Qty+1; i++) // { // //获取库存中的空托盘 // var wmsMaterialStockModal = await _wmsMaterialStockRep.FirstOrDefaultAsync(x => x.Source == RuKuSourceEnum.KONGTUO); // //获取库位信息 // var wmsPlacModal = await _wmsPlaceRep.FirstOrDefaultAsync(x => x.PlaceCode == wmsMaterialStockModal.PlaceCode); // //任务 // var takmodel = new WmsTask() // { // TaskNo = Yitter.IdGenerator.YitIdHelper.NextId().ToString(), // TaskModel = TaskModel.QUANZIDONG, // TaskType = TaskType.CHUKU, // TaskLevel = 1, // TaskStatus = TaskStatusEnum.WEIZHIXING, // OrderNo = "N/A", // OrderDetailsId = 0, // ContainerCode = wmsMaterialStockModal.ContainerCode, // SourcePlace = wmsMaterialStockModal.PlaceCode, // ToPlace = wmsPlacModal.Aisle.ToString(), //目标位 // AreaName = "绝缘立库", // IsRead = true, //WCS是否可以读取 // SendTimes = 1, //发送次数 // Aisle = wmsPlacModal.Aisle, // TaskDodeviceStatus = TaskDodeviceStatusEnum.W, // Description = "空托" // }; // await _wmsTaskRep.InsertAsync(takmodel); // } // } // } //} iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsArea.cs
@@ -4,7 +4,7 @@ /* * @author : 刘文奇 * @date : 2024/4/23下午5:20:46 * @date : 2024/4/23下午5:33:52 * @desc : 库区表 */ namespace Admin.NET.Core @@ -98,6 +98,15 @@ public bool IsVirtually { get; set; } /// <summary> /// 是否禁用 /// </summary> [Comment("是否禁用")] [Required] public bool IsDisabled { get; set; } iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsPlace.cs
@@ -2,6 +2,11 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; /* * @author : 刘文奇 * @date : 2024/4/23下午5:35:14 * @desc : 库位表 */ namespace Admin.NET.Core { /// <summary> @@ -11,6 +16,8 @@ [Comment("库位表")] public class WmsPlace : DEntityBase { /// <summary> /// 库位编码 /// </summary> @@ -19,88 +26,101 @@ [MaxLength(50)] public string PlaceCode { get; set; } /// <summary> /// 库位对应AGV编码 /// </summary> [Comment("库位对应AGV编码")] [MaxLength(50)] public string AgvCode { get; set; } /// <summary> /// 库位状态;数据字典 /// 库位名称 /// </summary> [Comment("库位名称")] [Required] [MaxLength(255)] public string PlaceName { get; set; } /// <summary> /// 库位别名 /// </summary> [Comment("库位别名")] [MaxLength(255)] public string PlaceNickName { get; set; } /// <summary> /// 库位状态 /// </summary> [Comment("库位状态")] [Required] public PlaceStatus PlaceStatus { get; set; } public int PlaceStatus { get; set; } /// <summary> /// 所在库区 /// </summary> [Comment("所在库区")] [Required] public long AreaId { get; set; } /// <summary> /// 库区名称 /// </summary> [Comment("库区名称")] [MaxLength(255)] public string WarehouseName { get; set; } /// <summary> /// 检验码 /// </summary> [Comment("检验码")] [MaxLength(255)] public string VerificationCode { get; set; } /// <summary> /// 排 /// </summary> [Comment("排")] [Required] public int RowNo { get; set; } /// <summary> /// 列 /// </summary> [Comment("列")] [Required] public int ColumnNo { get; set; } /// <summary> /// 层 /// </summary> [Comment("层")] [Required] public int LayerNo { get; set; } /// <summary> /// 进深号 /// </summary> [Comment("进深号")] [Required] public int DeepcellNo { get; set; } /// <summary> /// 巷道 /// </summary> [Comment("巷道")] [Required] public int Aisle { get; set; } public int LaneNo { get; set; } /// <summary> /// 线号 /// 堆垛机库位号 /// </summary> [Comment("线号")] [Required] public int Line { get; set; } /// <summary> /// 是否锁定;数据字典 /// </summary> [Comment("是否锁定")] [Required] public YesOrNot Islock { get; set; } /// <summary> /// 是否空托;数据字典 /// </summary> [Comment("是否空托")] public YesOrNot EmptyContainer { get; set; } /// <summary> /// 堆垛机内部的位置 /// </summary> [Comment("堆垛机内部的位置")] [Comment("堆垛机库位号")] [MaxLength(50)] public string PositionnoForSrm { get; set; } public string SrmNo { get; set; } /// <summary> /// 库位X坐标 @@ -109,12 +129,14 @@ [MaxLength(50)] public string Xzb { get; set; } /// <summary> /// 库位Y坐标 /// </summary> [Comment("库位Y坐标")] [MaxLength(50)] public string Yzb { get; set; } /// <summary> /// 库位Z坐标 @@ -123,51 +145,76 @@ [MaxLength(50)] public string Zzb { get; set; } /// <summary> /// 库位长度 /// </summary> [Comment("库位长度")] [Required] [Column("Length", TypeName = "decimal(18,2)")] public decimal Length { get; set; } /// <summary> /// 库位宽度 /// </summary> [Comment("库位宽度")] [Required] [Column("Width", TypeName = "decimal(18,2)")] public decimal Width { get; set; } /// <summary> /// 库位高度 /// </summary> [Comment("库位高度")] [Required] [Column("Height", TypeName = "decimal(18,2)")] public decimal Height { get; set; } /// <summary> /// 最大承重 /// </summary> [Comment("最大承重")] [Required] [Column("MaxWeight", TypeName = "decimal(18,2)")] public decimal MaxWeight { get; set; } /// <summary> /// 库位高度属性;数据字典 /// 库位高度属性 /// </summary> [Comment("库位高度属性")] public Heightlevel HeightLevel { get; set; } [Required] public int HeightLevel { get; set; } /// <summary> /// 优先级 /// </summary> [Comment("优先级")] [Required] public int Priority { get; set; } /// <summary> /// 逻辑区域 /// </summary> [Comment("逻辑区域")] [Required] public int LogicalName { get; set; } /// <summary> /// 库区表 /// </summary> public WmsArea WmsArea { get; set; } } } iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsWarehouse.cs
@@ -4,7 +4,7 @@ /* * @author : 刘文奇 * @date : 2024/4/23下午4:40:38 * @date : 2024/4/23下午5:30:19 * @desc : 仓库表 */ namespace Admin.NET.Core @@ -96,6 +96,15 @@ /// <summary> /// 是否禁用 /// </summary> [Comment("是否禁用")] [Required] public bool IsDisabled { get; set; } /// <summary> /// 备注 /// </summary> [Comment("备注")]