wangxinhui
2025-07-25 bc759f50f0b169b93766465e640373067ecfc9b2
删除垃圾文件
已修改36个文件
已删除205个文件
已添加3个文件
20138 ■■■■■ 文件已修改
项目代码/WMS/WMSServices/WIDESEA_ApprovalService/ApprovalTaskService.cs 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicRepository/BasicRepository.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicRepository/CustomerInfoRepository.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicRepository/SupplierInfoRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicRepository/UserInfoRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/BasicService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/CustomerInfoService.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/MaterielCodeInfoService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/UserInfoService.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_CheckRepository/CheckOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_CheckRepository/CheckOrderResultRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_CheckService/CheckOrderResultService.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_CheckService/CheckOrderService.cs 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/AGV/AgvResponseContent.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IApprovalService/IApprovalTaskService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicRepository/IBasicRepository.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicRepository/ICustomerInfoRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicRepository/ISupplierInfoRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicRepository/IUserInfoRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicService/IBasicService.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicService/ICustomerInfoService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicService/ISupplierInfoService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IBasicService/IUserInfoService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ICheckRepository/ICheckOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ICheckRepository/ICheckOrderResultRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ICheckService/ICheckOrderResultService.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ICheckService/ICheckOrderService.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IErpProInOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderDetail_HtyRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrder_HtyRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundRepository.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IMesProInOrderDetailRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IMesProInOrderRepository.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IProInStatisticsRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IPurchaseOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IPurchaseOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReceiveOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReceiveOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/ITakeStockOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundRepository/ITakeStockOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IErpProInOrderService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderDetailService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderService.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrder_HtyService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IInboundService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IMesProInOrderDetailService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IMesProInOrderService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IProInStatisticsService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseOrderDetailService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseOrderService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReceiveOrderDetailService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReceiveOrderService.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReturnOrderDetailService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/IReturnOrderService.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IInboundService/ITakeStockOrderService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IErpProTransferOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IMesOutboundOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IMesRworkOutboundOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutStockLockInfoRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderDetailRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderDetail_HtyRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrder_HtyRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IProOutOrderDetailRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IProOutOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IErpProTransferOrderService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IMesOutboundOrderService.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutProStockInfoService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutStockLockInfoService.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderService.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IProOutOrderDetailService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IProOutOrderService.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockRepository/IProStockInfoRepository.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IProStockInfoService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IProStockViewService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IStockInfoService.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ErpProInOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderDetailRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderDetail_HtyRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderRepository.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrder_HtyRepository.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/InboundRepository.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/MesProInOrderDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/MesProInOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ProInStatisticsRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/PurchaseOrderDetailRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/PurchaseOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReceiveOrderDetailRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReceiveOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/ReturnOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/TakeStockOrderDetailRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundRepository/TakeStockOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ErpProInOrderService.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundOrderDetailService.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs 1851 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundOrder_HtyService.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/InboundService.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/MesProInOrderDetailService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/MesProInOrderService.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ProInStatisticsService.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/PurchaseOrderDetailService.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/PurchaseOrderService.cs 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ReceiveOrderDetailService.cs 408 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ReceiveOrderService.cs 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ReturnOrderDetailService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ReturnOrderService.cs 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/TakeStockOrderDetailService.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/TakeStockOrderService.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ErpProInOrder.cs 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MesProInOrder.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MesProInOrderDetail.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ProInStatistics.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrder.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ErpProTransferOrder.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutProPKStockInfo.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ProOutOrder.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCacheDetail.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/WIDESEA_Model.csproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/ErpProTransferOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/MesOutboundOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/MesRworkOutboundOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutStockLockInfoRepository.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderDetailRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderDetail_HtyRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrder_HtyRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundRepository.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/ProOutOrderDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/ProOutOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/ErpProTransferOrderService.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/MesOutboundOrderService.cs 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutProStockInfoService.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderDetailService.cs 522 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderService.cs 743 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderService2.cs 399 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrder_HtyService.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutboundService.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/ProOutOrderDetailService.cs 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/ProOutOrderService.cs 1146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockRepository/ProStockInfoRepository.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/MaterielnfoStatisticsService.cs 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/ProStockViewService.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_SystemService/Sys_DictionaryService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesProductService.cs 544 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs 623 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs 1039 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/Task_HtyService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Approval/ApprovalTaskController.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/CustomerInfoController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/SupplierInfoController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/UserInfoController.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ErpProInOrderController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderController.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderDetailController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ProInStatisticsController.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderDetailController.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/LargeScreen/LargeController.cs 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/MesOutboundOrderController.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/MesRworkOutboundOrderController.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutProStockInfoController.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderDetailController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/PDAController.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/ProStockViewController.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/接驳台与AGV 交互.xls 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ApprovalService/ApprovalTaskService.cs
@@ -13,7 +13,6 @@
using WIDESEA_Core.Helper;
using WIDESEA_IApprovalRepository;
using WIDESEA_IApprovalService;
using WIDESEA_ICheckRepository;
using WIDESEA_ISystemRepository;
using WIDESEA_Model.Models;
@@ -24,199 +23,19 @@
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IApprovalFlowRepository _approvalFlowRepository;
        private readonly IApprovalNodeRepository _approvalNodeRepository;
        private readonly ICheckOrderRepository _checkOrderRepository;
        private readonly WebSocketServer _webSocketServer;
        private readonly ISys_UserRepository _userRepository;
        public IApprovalTaskRepository Repository => BaseDal;
        public ApprovalTaskService(IApprovalTaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository, ICheckOrderRepository checkOrderRepository, WebSocketServer webSocketServer, ISys_UserRepository userRepository) : base(BaseDal)
        public ApprovalTaskService(IApprovalTaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IApprovalFlowRepository approvalFlowRepository, IApprovalNodeRepository approvalNodeRepository,  WebSocketServer webSocketServer, ISys_UserRepository userRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _approvalFlowRepository = approvalFlowRepository;
            _approvalNodeRepository = approvalNodeRepository;
            _checkOrderRepository = checkOrderRepository;
            _webSocketServer = webSocketServer;
            _userRepository = userRepository;
        }
        /// <summary>
        /// å®¡æ‰¹åŒæ„
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        public WebResponseContent AuditAgree(int sourceKey)
        {
            try
            {
                Dt_ApprovalFlow approvalFlow = _approvalFlowRepository.QueryFirst(x => x.FlowCode == "IQC");
                if (approvalFlow == null)
                {
                    return WebResponseContent.Instance.Error($"未定义该审批流");
                }
                List<Dt_ApprovalNode> approvalNodes = _approvalNodeRepository.QueryData(x => x.FlowId == approvalFlow.Id);
                if (approvalNodes == null || approvalNodes.Count <= 0)
                {
                    return WebResponseContent.Instance.Error($"未定义该审批流程节点");
                }
                Dt_ApprovalNode? currentNode = approvalNodes.FirstOrDefault(x => x.ApproverRole == App.User.RoleId);
                if (currentNode == null)
                {
                    return WebResponseContent.Instance.OK($"未找到当前角色审批节点");
                }
                Dt_ApprovalTask approvalTask = BaseDal.QueryFirst(x => x.SourceKey == sourceKey && x.NodeId == currentNode.Id);
                if (approvalTask == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该审批数据");
                }
                if (approvalTask.Status != AuditStatusEnum.Auditing.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该审批已完成");
                }
                Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == sourceKey);
                if (checkOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到来源数据(质检单)");
                }
                Dt_ApprovalNode? nextNode = approvalNodes.Where(x => x.NodeSequence > currentNode.NodeSequence).OrderBy(x => x.NodeSequence).FirstOrDefault();
                if (nextNode == null)//审批流程结束
                {
                    approvalTask.Status = AuditStatusEnum.Agree.ObjToInt();
                    checkOrder.AuditStatus = AuditStatusEnum.Agree.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    _checkOrderRepository.UpdateData(checkOrder);
                    BaseDal.UpdateData(approvalTask);
                    //BaseDal.DeleteAndMoveIntoHty(approvalTask, WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
                    WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(approvalTask.ApplicantUserName));
                    if (webSocketSession != null)
                    {
                        _webSocketServer.SendClientPayload(webSocketSession, "同意");
                    }
                    _unitOfWorkManage.CommitTran();
                }
                else//进入下一级审批节点
                {
                    object obj = new
                    {
                        title = "IQC质检结果审批",
                        formData = checkOrder,
                        tableData = checkOrder.Details,
                        message = "推送测试信息体",
                        date = DateTime.Now.ToString(),
                    };
                    List<Dt_ApprovalTask> approvalTasks = new List<Dt_ApprovalTask>();
                    List<string> userNames = new List<string>();
                    List<Sys_User> users = _userRepository.QueryData(x => x.RoleId == nextNode.ApproverRole);
                    foreach (Sys_User user in users)
                    {
                        Dt_ApprovalTask newApprovalTask = new Dt_ApprovalTask()
                        {
                            FlowId = approvalFlow.Id,
                            NodeId = nextNode.Id,
                            ApplicantUserId = App.User.UserId,
                            ApplicantUserName = user.UserName,
                            Status = AuditStatusEnum.Auditing.ObjToInt(),
                            AuditUser = user.UserName,
                            SourceKey = approvalTask.SourceKey
                        };
                        approvalTasks.Add(newApprovalTask);
                        userNames.Add(user.UserName);
                    }
                    approvalTask.Status = AuditStatusEnum.Agree.ObjToInt();
                    BaseDal.UpdateData(approvalTask);
                    BaseDal.AddData(approvalTasks);
                    foreach (string userName in userNames)
                    {
                        WebSocketSession? socketSessions = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(userName));
                        if (socketSessions != null)
                        {
                            _webSocketServer.SendClientPayload(socketSessions, obj.Serialize());
                        }
                    }
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å®¡æ‰¹é©³å›ž
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        public WebResponseContent AuditReject(int sourceKey)
        {
            try
            {
                Dt_ApprovalFlow approvalFlow = _approvalFlowRepository.QueryFirst(x => x.FlowCode == "IQC");
                if (approvalFlow == null)
                {
                    return WebResponseContent.Instance.Error($"未定义该审批流");
                }
                List<Dt_ApprovalNode> approvalNodes = _approvalNodeRepository.QueryData(x => x.FlowId == approvalFlow.Id);
                if (approvalNodes == null || approvalNodes.Count <= 0)
                {
                    return WebResponseContent.Instance.Error($"未定义该审批流程节点");
                }
                Dt_ApprovalNode? currentNode = approvalNodes.FirstOrDefault(x => x.ApproverRole == App.User.RoleId);
                if (currentNode == null)
                {
                    return WebResponseContent.Instance.OK($"未找到当前角色审批节点");
                }
                Dt_ApprovalTask approvalTask = BaseDal.QueryFirst(x => x.SourceKey == sourceKey);
                if (approvalTask == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该审批数据");
                }
                if (approvalTask.Status != AuditStatusEnum.Auditing.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该审批已完成");
                }
                Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == sourceKey);
                if (checkOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到来源数据(质检单)");
                }
                approvalTask.Status = AuditStatusEnum.Reject.ObjToInt();
                checkOrder.AuditStatus = AuditStatusEnum.Reject.ObjToInt();
                _unitOfWorkManage.BeginTran();
                _checkOrderRepository.UpdateData(checkOrder);
                BaseDal.UpdateData(approvalTask);
                //BaseDal.DeleteAndMoveIntoHty(approvalTask, WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
                WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(approvalTask.ApplicantUserName));
                if (webSocketSession != null)
                {
                    _webSocketServer.SendClientPayload(webSocketSession, "驳回");
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicRepository/BasicRepository.cs
@@ -26,15 +26,13 @@
        public IWarehouseRepository WarehouseRepository { get; }
        public IPalletTypeInfoRepository PalletTypeInfoRepository { get; }
        public ICustomerInfoRepository CustomerInfoRepository { get; }
        public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository, IPalletTypeInfoRepository palletTypeInfoRepository, ICustomerInfoRepository customerInfoRepository)
        public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository, IPalletTypeInfoRepository palletTypeInfoRepository)
        {
            LocationInfoRepository = locationInfoRepository;
            MaterielInfoRepository = materielInfoRepository;
            WarehouseRepository = warehouseRepository;
            PalletTypeInfoRepository = palletTypeInfoRepository;
            CustomerInfoRepository = customerInfoRepository;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicRepository/CustomerInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicRepository/SupplierInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicRepository/UserInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/BasicService.cs
@@ -14,13 +14,7 @@
{
    public class BasicService : IBasicService
    {
        public ICustomerInfoService CustomerInfoService { get; }
        public IPalletCodeInfoService PalletCodeInfoService { get; }
        public ISupplierInfoService SupplierInfoService { get; }
        public IUserInfoService UserInfoService { get; }
        public ILocationInfoService LocationInfoService { get; }
@@ -30,15 +24,12 @@
        public IMaterielCodeInfoService MaterielCodeInfoService { get; }
        public BasicService(ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, ISupplierInfoService supplierInfoService,ICustomerInfoService customerInfoService,IPalletCodeInfoService palletCodeInfoService, IUserInfoService userInfoService, IMaterielCodeInfoService materielCodeInfoService)
        public BasicService(ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService,IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService)
        {
            LocationInfoService = locationInfoService;
            MaterielInfoService = materielInfoService;
            WarehouseService = warehouseService;
            SupplierInfoService = supplierInfoService;
            CustomerInfoService = customerInfoService;
            PalletCodeInfoService = palletCodeInfoService;
            UserInfoService = userInfoService;
            MaterielCodeInfoService = materielCodeInfoService;
        }
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/CustomerInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/MaterielCodeInfoService.cs
@@ -21,23 +21,5 @@
        {
            _basicRepository = basicRepository;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            string? MaterialCode = saveModel.MainData["materielCode"].ToString();
            Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== MaterialCode);
            if (materielInfo == null)
            {
                return WebResponseContent.Instance.Error($"{MaterialCode}物料不存在");
            }
            saveModel.MainData.Add(nameof(Dt_MaterielCodeInfo.MaterielName).FirstLetterToLower(), materielInfo.MaterielName);
            string? PurchaseOrderNo = saveModel.MainData["purchaseOrderNo"].ToString();
            Dt_PurchaseOrder purchaseOrder = BaseDal.Db.Queryable<Dt_PurchaseOrder>().Where(x=>x.PurchaseOrderNo== PurchaseOrderNo).First();
            if (purchaseOrder == null)
            {
                return WebResponseContent.Instance.Error($"{PurchaseOrderNo}采购单不存在");
            }
            saveModel.MainData.Add(nameof(Dt_MaterielCodeInfo.SupplierCode).FirstLetterToLower(), purchaseOrder.SupplierCode);
            return base.AddData(saveModel);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/SupplierInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/UserInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_CheckRepository/CheckOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_CheckRepository/CheckOrderResultRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_CheckService/CheckOrderResultService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_CheckService/CheckOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/AGV/AgvResponseContent.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IApprovalService/IApprovalTaskService.cs
@@ -13,19 +13,5 @@
    public interface IApprovalTaskService : IService<Dt_ApprovalTask>
    {
        IApprovalTaskRepository Repository { get; }
        /// <summary>
        /// å®¡æ‰¹åŒæ„
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        WebResponseContent AuditAgree(int sourceKey);
        /// <summary>
        /// å®¡æ‰¹é©³å›ž
        /// </summary>
        /// <param name="sourceKey">源主键</param>
        /// <returns></returns>
        WebResponseContent AuditReject(int sourceKey);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicRepository/IBasicRepository.cs
@@ -17,7 +17,6 @@
        IWarehouseRepository WarehouseRepository { get; }
        IPalletTypeInfoRepository PalletTypeInfoRepository { get; }
        ICustomerInfoRepository CustomerInfoRepository { get; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicRepository/ICustomerInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicRepository/ISupplierInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicRepository/IUserInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicService/IBasicService.cs
@@ -24,16 +24,7 @@
        /// </summary>
        IWarehouseService WarehouseService { get; }
        /// <summary>
        /// ä¾›åº”商业务层
        /// </summary>
        ISupplierInfoService SupplierInfoService { get; }
        IUserInfoService UserInfoService { get; }
        IPalletCodeInfoService PalletCodeInfoService { get; }
        ICustomerInfoService CustomerInfoService { get; }
        IMaterielCodeInfoService MaterielCodeInfoService { get; }
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicService/ICustomerInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicService/ISupplierInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IBasicService/IUserInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ICheckRepository/ICheckOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ICheckRepository/ICheckOrderResultRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ICheckService/ICheckOrderResultService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ICheckService/ICheckOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IErpProInOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderDetail_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundOrder_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IInboundRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IMesProInOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IMesProInOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IProInStatisticsRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IPurchaseOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IPurchaseOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IReceiveOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IReceiveOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/IReturnOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/ITakeStockOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundRepository/ITakeStockOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IErpProInOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderDetail_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IInboundOrder_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IInboundService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IMesProInOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IMesProInOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IProInStatisticsService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IPurchaseOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IReceiveOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IReceiveOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IReturnOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/IReturnOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IInboundService/ITakeStockOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IErpProTransferOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IMesOutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IMesRworkOutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutStockLockInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderDetail_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundOrder_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutboundRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IProOutOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IProOutOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IErpProTransferOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IMesOutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutProStockInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutStockLockInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderDetail_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundOrder_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutboundService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IProOutOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IProOutOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockRepository/IProStockInfoRepository.cs
@@ -10,13 +10,5 @@
{
    public interface IProStockInfoRepository : IRepository<Dt_ProStockInfo>
    {
        /// <summary>
        /// æŸ¥æ‰¾å¯ç”¨åº“å­˜
        /// </summary>
        List<Dt_ProStockInfo> GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List<string> locationInfos);
        /// <summary>
        /// èŽ·å–æˆå“åº“å­˜
        /// </summary>
        List<Dt_ProStockInfo> GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<string> locationInfos);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IProStockInfoService.cs
@@ -19,23 +19,5 @@
        /// <param name="proStockInfoDetails"></param>
        /// <returns></returns>
        WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails);
        /// <summary>
        /// æŸ¥æ‰¾å¯ç”¨åº“å­˜
        /// </summary>
        List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ProOutOrderDetail proOutOrderDetail);
        /// <summary>
        /// èŽ·å–å‡ºåº“åº“å­˜
        /// </summary>
        List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity);
        /// <summary>
        /// MES提库可用库存
        /// </summary>
        /// <returns></returns>
        public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder);
        /// <summary>
        /// èŽ·å–MES提库库存
        /// </summary>
        List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IProStockViewService.cs
@@ -13,7 +13,5 @@
        PageGridData<ProStockViewDTO> GetPageData(PageDataOptions options);
        object GetDetailPage(PageDataOptions pageData);
        WebResponseContent Export(PageDataOptions options);
        List<ProStockViewDTO> GetProPKSelectStocks(int orderId);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IStockInfoService.cs
@@ -14,17 +14,6 @@
    public interface IStockInfoService : IService<Dt_StockInfo>
    {
        IStockInfoRepository Repository { get; }
        List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode);
        List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode);
        List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, float needQuantity, out float residueQuantity);
        List<Dt_StockInfo> GetUseableStocks(string materielCode, string batchNo, int warehoseId);
        //List<Dt_StockInfo> GetUseableStocks(string materielCode, string batchNo,,string , int warehoseId);
        List<Dt_StockInfo> GetUseableStocks(string materielCode, string batchNo, string palletcode, int warehoseId);
        WebResponseContent StockQueryData(SaveModel saveModel);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -58,14 +58,6 @@
        WebResponseContent PushTasksToWCSSingle(int taskNum, string agvDescription = "");
        /// <summary>
        /// ç”³è¯·å…¥åº“任务(PDA使用,仅托盘绑定入库站台,不分配货位)
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="stationCode">站台号</param>
        /// <returns></returns>
        //WebResponseContent RequestInboundTask(string palletCode, string stationCode);
        WebResponseContent RequestInboundTask(SaveModel saveModel);
        /// <summary>
        /// ç©ºç®±å…¥åº“
        /// </summary>
        /// <param name="barcode"></param>
@@ -79,16 +71,6 @@
        /// <param name="address">地址</param>
        /// <returns></returns>
        WebResponseContent OutEmpty(int qty, string address, int WarehouseId, string barcode);
        /// <summary>
        /// WCS申请入库
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="roadwayNo"></param>
        /// <param name="palletCode"></param>
        /// <returns></returns>
        WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode,string materielBoxCode = "");
        /// <summary>
        /// ä»…申请任务,让WCS根据路由确定下一地址
        /// </summary>
@@ -96,17 +78,6 @@
        /// <param name="palletCode"></param>
        /// <returns></returns>
        WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode);
        /// <summary>
        ///
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="palletCode"></param>
        /// <param name="roadwayNos"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        WebResponseContent DeviceRequestInboundTaskByRoadways(string stationCode, string palletCode, List<string> roadwayNos, int heightType);
        /// <summary>
        /// å…¥åº“任务申请分配货位
        /// </summary>
@@ -115,7 +86,6 @@
        /// <param name="palletType">托盘类型</param>
        /// <returns></returns>
        WebResponseContent AssignInboundTaskLocation(int taskNum, string roadwayNo);
        /// <summary>
        /// 
        /// </summary>
@@ -133,39 +103,11 @@
        Task<WebResponseContent> TaskCompleted(int taskNum);
        /// <summary>
        ///
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        WebResponseContent InboundTaskCompleted(int taskNum);
        /// <summary>
        /// æµ‹è¯•架出仓
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        MesResponseContent TestToolOut(TestToolOutModel model);
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        WebResponseContent GenerateOutboundTasks(int[] keys);
        /// <summary>
        /// å‡ºåº“任务完成
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        WebResponseContent OutboundTaskCompleted(int taskNum);
        /// <summary>
        /// åˆ¤æ–­æ˜¯å¦éœ€è¦ç§»åº“
@@ -212,25 +154,11 @@
        WebResponseContent UploadMesMaterialLotaAcept(MesMaterialLotaAceptModel model);
        /// <summary>
        /// åŸºæ¿å‡ºåº“
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        MesResponseContent SubstrateOut(SubstrateOutModel model);
        /// <summary>
        /// åŸºæ¿ä½™æ–™é€€åº“
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        MesResponseContent SubstrateBack(SubstrateBackModel model);
        /// <summary>
        /// æˆå“è¿”工提库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        MesResponseContent RworkTask(RworkTaskModel model);
        /// <summary>
        /// 
@@ -240,15 +168,6 @@
        /// <param name="heightType"></param>
        /// <returns></returns>
        WebResponseContent AssignRoadwayByHeight(List<string> roadwayNos, int taskNum, int heightType = 0);
        /// <summary>
        ///
        /// </summary>
        /// <param name="roadwayNos"></param>
        /// <param name="palletCode"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        WebResponseContent AssignRoadwayByHeightAndCode(List<string> roadwayNos, string palletCode, int heightType = 0);
        /// <summary>
        /// åˆ†é…å··é“
@@ -266,13 +185,6 @@
        WebResponseContent SingleAssignRoadway(List<string> roadwayNos);
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        WebResponseContent HandSubstrateOut(int orderId);
        /// <summary>
        /// ä¿®æ”¹ä»»åŠ¡çŠ¶æ€
        /// </summary>
        /// <param name="task"></param>
@@ -285,32 +197,11 @@
        /// <param name="task"></param>
        /// <returns></returns>
        WebResponseContent AGVTasks(SaveModel saveModel);
        WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
        /// <summary>
        /// MES成品内包信息接收
        /// </summary>
        /// <returns></returns>
        MesResponseContent BagInfoSync(MesBagInfoModel bagInfoModel);
        /// <summary>
        /// MES成品外包信息接收
        /// </summary>
        /// <param name="boxInfoModel"></param>
        /// <returns></returns>
        MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel);
        /// <summary>
        /// MES成品出库接口调用
        /// </summary>
        /// <returns></returns>
        WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model);
        /// <summary>
        /// ç”Ÿæˆæˆå“å‡ºåº“任务
        /// </summary>
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        Task<WebResponseContent> OutProductTask(int[] keys, string StationCode, int Grade);
        /// <summary>
        /// æˆå“ä½™æ–™é€€åº“入仓
        /// </summary>
@@ -325,9 +216,5 @@
        /// <param name="startPoint"></param>
        /// <returns></returns>
        WebResponseContent EmptyBackTask(string barCode, string startPoint);
        /// <summary>
        /// äººå·¥é€‰æ‹©åº“å­˜
        /// </summary>
        WebResponseContent OutProductSelect(int orderDetailId, List<ProStockViewDTO> proStockViews);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ErpProInOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderDetail_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/InboundOrder_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/InboundRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/MesProInOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/MesProInOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ProInStatisticsRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/PurchaseOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/PurchaseOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ReceiveOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ReceiveOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/ReturnOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/TakeStockOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundRepository/TakeStockOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ErpProInOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/InboundOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/InboundOrderDetail_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/InboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/InboundOrder_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/InboundService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/MesProInOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/MesProInOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ProInStatisticsService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/PurchaseOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/PurchaseOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ReceiveOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ReceiveOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ReturnOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ReturnOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/TakeStockOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/TakeStockOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_CustomerInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_SupplierInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_UserInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Check/Dt_CheckOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Check/Dt_CheckOrderResult.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ErpProInOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail_Hty.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MesProInOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_MesProInOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ProInStatistics.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ErpProTransferOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_MesOutboundOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutProPKStockInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundLockInfo.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail_Hty.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder_Hty.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ProOutOrder.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“ç åž›å·¥ä½
    /// </summary>
    [SugarTable(nameof(Dt_ProCache), "成品码垛工位主表")]
    public class Dt_ProCache : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ç åž›å·¥ä½å·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "码垛工位号")]
        public string MdNo { get; set; }
        /// <summary>
        /// ç åž›ç‰©æ–™<br/>
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "码垛物料")]
        public string MdMaterial { get; set; }
        /// <summary>
        /// ç åž›ç‰©æ–™ç®±åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "码垛物料箱型")]
        public string MdBoxMaterial { get; set; }
        /// <summary>
        /// å·²ç åž›ç®±æ•°
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "已码垛箱数")]
        public string MdQtys { get; set; }
        /// <summary>
        /// å•号
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "单号")]
        public string ShipmentOrder { get; set; }
        /// <summary>
        /// ç åž›çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "码垛状态")]
        public int MdStatus { get; set; }
        /// <summary>
        /// ç åž›æ˜Žç»†
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(Dt_ProStockInfoDetail.ProStockId), nameof(Id))]
        public List<Dt_ProStockInfoDetail> proStockInfoDetails { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCacheDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“ç åž›å·¥ä½æ˜Žç»†
    /// </summary>
    [SugarTable(nameof(Dt_ProCacheDetail), "成品码垛工位明细")]
    public class Dt_ProCacheDetail : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æˆå“ç åž›å·¥ä½ä¸»é”®
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "成品码垛工位主键")]
        public int ProCacheId { get; set; }
        /// <summary>
        /// ç åž›ç®±å·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "码垛箱号")]
        public string MdBoxCode { get; set; }
        /// <summary>
        /// å•箱数量<br/>
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单箱数量")]
        public int BoxQtys { get; set; }
        /// <summary>
        /// ç‰©æ–™å•位
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "物料单位")]
        public string MaterialUnit { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/WIDESEA_Model.csproj
@@ -16,4 +16,10 @@
        <ProjectReference Include="..\WIDESEA_Core\WIDESEA_Core.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="Models\Check\" />
      <Folder Include="Models\Inbound\" />
      <Folder Include="Models\Outbound\" />
    </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/ErpProTransferOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/MesOutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/MesRworkOutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutStockLockInfoRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderDetail_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundOrder_HtyRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutboundRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/ProOutOrderDetailRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/ProOutOrderRepository.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/ErpProTransferOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/MesOutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutProStockInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService_Pick.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderDetail_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrderService2.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundOrder_HtyService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutboundService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/ProOutOrderDetailService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/ProOutOrderService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockRepository/ProStockInfoRepository.cs
@@ -21,70 +21,5 @@
        {
            _basicRepository = basicRepository;
        }
        //根据明细数据查找可用库存库存
        public List<Dt_ProStockInfo> GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List<string> locationInfos)
        {
            List<Dt_ProStockInfo>? proStockInfos = null;
            bool isCanLot= string.IsNullOrEmpty(proOutOrderDetail.PLot);
            bool isCanDate = string.IsNullOrEmpty(proOutOrderDetail.DateCode);
            bool isCanVer = string.IsNullOrEmpty(proOutOrderDetail.OutSpecifyVer);
            ////判断客户出入规则
            //Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x=>x.Code== proOutOrderDetail.Customer);
            //if (customerInfo==null)
            //{
            //    throw new Exception("未找到客户信息");
            //}
            //if (customerInfo.OutRule==CustomerOutRuleEnum.SaleOrderRule.ObjToInt())
            //{
            //    proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute == ProStockAttributeEnum.成品.ObjToInt())
            //    .Includes(x => x.proStockInfoDetails)
            //    .Where(x => x.proStockInfoDetails
            //    .Any(v =>
            //        v.SaleOrder==proOutOrderDetail.SaleOrder
            //        && v.ProductCode == proOutOrderDetail.PCode
            //        && v.ProductVersion == proOutOrderDetail.PVer
            //        && (isCanLot ? isCanLot : v.BagNo == proOutOrderDetail.PLot)
            //        && (isCanDate ? isCanDate : v.DateCode == proOutOrderDetail.DateCode)
            //    ))
            //    .ToList();
            //}
            //else
            //{
                proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute == ProStockAttributeEnum.成品.ObjToInt())
                .Includes(x => x.proStockInfoDetails)
                .Where(x => x.proStockInfoDetails
                .Any(v =>
                    v.ProductCode == proOutOrderDetail.PCode
                    && v.ProductVersion.StartsWith(proOutOrderDetail.PVer.Substring(0,1))
                    && (isCanLot ? isCanLot : v.BagNo == proOutOrderDetail.PLot)
                    && (isCanDate ? isCanDate : v.DateCode == proOutOrderDetail.DateCode)
                ))
                .ToList();
            //}
            proStockInfos = proStockInfos?.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x=>x.CreateDate).ThenBy(x=>x.proStockInfoDetails.Sum(x=>x.StockPcsQty)).ToList();
            return proStockInfos;
        }
        /// <summary>
        /// èŽ·å–MES提库库存(尾数仓)
        /// </summary>
        /// <param name="mesRworkOutboundOrder"></param>
        /// <param name="locationInfos"></param>
        /// <returns></returns>
        public List<Dt_ProStockInfo> GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<string> locationInfos)
        {
            List<Dt_ProStockInfo>? proStockInfos = null;
            bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode);
            proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute==ProStockAttributeEnum.尾数.ObjToInt())
                .Includes(x => x.proStockInfoDetails)
                .Where(x => x.proStockInfoDetails
                .Any(v => v.SaleOrder == mesRworkOutboundOrder.SaleOrder
                && v.ProductCode == mesRworkOutboundOrder.ProductCode
                && v.ProductVersion == mesRworkOutboundOrder.ProductVersion
                && (isCanDate ? isCanDate : v.DateCode == mesRworkOutboundOrder.DateCode)
                ))
            .ToList();
            proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList();
            return proStockInfos;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/MaterielnfoStatisticsService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs
@@ -96,246 +96,5 @@
            }
            return content;
        }
        //查找可用库存
        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail)
        {
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
            return BaseDal.GetProStocks(proOutOrderDetail,locationCodes);
        }
        /// <summary>
        /// MES提库可用库存
        /// </summary>
        /// <returns></returns>
        public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder)
        {
            //转换成 æˆå“ä»“仓库信息获取尾数属性的货位
            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString());
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId);
            return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes);
        }
        /// <summary>
        /// èŽ·å–å‡ºåº“åº“å­˜
        /// </summary>
        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity)
        {
            List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>();
            float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
            //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
            bool isCanLot = string.IsNullOrEmpty(outOrderDetail.PLot);
            bool isCanDate = string.IsNullOrEmpty(outOrderDetail.DateCode);
            if (stockTotalQuantity >= needQuantity)//库存够
            {
                int index = 0;
                while (needQuantity > 0)
                {
                    Dt_ProStockInfo stockInfo = stockInfos[index];
                    float useableStockQuantity = stockInfo.proStockInfoDetails
                        .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0,1))
                            && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                            && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
                    if (useableStockQuantity < needQuantity)
                    {
                        stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
                            && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                            && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
                        needQuantity -= useableStockQuantity;
                    }
                    else
                    {
                        stockInfo.proStockInfoDetails.ForEach(x =>
                        {
                            //满足条件进行分配
                            if ((x.StockPcsQty > x.OutboundQuantity)
                                && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
                                && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                                && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                            {
                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
                                {
                                    x.OutboundQuantity += needQuantity;
                                    needQuantity = 0;
                                    x.OutDetailSaleNo = outOrderDetail.SaleOrder;
                                    x.OutDetailId = outOrderDetail.Id;
                                }
                                else
                                {
                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
                                    x.OutboundQuantity = x.StockPcsQty;
                                    x.OutDetailSaleNo = outOrderDetail.SaleOrder;
                                    x.OutDetailId = outOrderDetail.Id;
                                }
                            }
                        });
                    }
                    assignOutStocks.Add(stockInfo);
                    index++;
                }
            }
            #region æˆå“å¯ç”¨åº“存不足不进行分配
            //else
            //{
            //    for (int i = 0; i < stockInfos.Count; i++)
            //    {
            //        Dt_ProStockInfo stockInfo = stockInfos[i];
            //        float useableStockQuantity = stockInfo.proStockInfoDetails
            //            .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
            //                && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
            //                && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
            //            .Sum(x => x.StockPcsQty - x.OutboundQuantity);
            //        if (useableStockQuantity < needQuantity)
            //        {
            //            stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
            //            needQuantity -= useableStockQuantity;
            //        }
            //        else
            //        {
            //            stockInfo.proStockInfoDetails.ForEach(x =>
            //            {
            //                if (x.StockPcsQty > x.OutboundQuantity && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
            //                    && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
            //                    && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
            //                {
            //                    if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
            //                    {
            //                        x.OutboundQuantity += needQuantity;
            //                        needQuantity = 0;
            //                    }
            //                    else
            //                    {
            //                        needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
            //                        x.OutboundQuantity = x.StockPcsQty;
            //                    }
            //                }
            //            });
            //        }
            //        stockInfo.proStockInfoDetails.ForEach(x =>
            //        {
            //            x.OutDetailSaleNo = outOrderDetail.SaleOrder;
            //            x.OutDetailId = outOrderDetail.Id;
            //        });
            //        assignOutStocks.Add(stockInfo);
            //    }
            //}
            #endregion
            residueQuantity = needQuantity;
            return assignOutStocks;
        }
        /// <summary>
        /// èŽ·å–MES提库库存
        /// </summary>
        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity)
        {
            List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
            float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
            //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
            bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode);
            if (stockTotalQuantity >= needQuantity)//库存够
            {
                int index = 0;
                while (needQuantity > 0)
                {
                    Dt_ProStockInfo stockInfo = stockInfos[index];
                    float useableStockQuantity = stockInfo.proStockInfoDetails
                        .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
                            && x.ProductCode == mesRworkOutboundOrder.ProductCode
                            && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
                            && (isCanDate? isCanDate: x.DateCode == mesRworkOutboundOrder.DateCode))
                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
                    if (useableStockQuantity < needQuantity)
                    {
                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
                        needQuantity -= useableStockQuantity;
                    }
                    else
                    {
                        stockInfo.proStockInfoDetails.ForEach(x =>
                        {
                            if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == mesRworkOutboundOrder.SaleOrder
                                && x.ProductCode == mesRworkOutboundOrder.ProductCode
                                && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
                                && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
                            {
                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
                                {
                                    x.OutboundQuantity += needQuantity;
                                    needQuantity = 0;
                                }
                                else
                                {
                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
                                    x.OutboundQuantity = x.StockPcsQty;
                                }
                            }
                        });
                    }
                    assignOutStocks.Add(stockInfo);
                    index++;
                }
            }
            else
            {
                for (int i = 0; i < stockInfos.Count; i++)
                {
                    Dt_ProStockInfo stockInfo = stockInfos[i];
                    float useableStockQuantity = stockInfo.proStockInfoDetails
                        .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
                            && x.ProductCode == mesRworkOutboundOrder.ProductCode
                            && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
                            && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
                    if (useableStockQuantity < needQuantity)
                    {
                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
                        needQuantity -= useableStockQuantity;
                    }
                    else
                    {
                        stockInfo.proStockInfoDetails.ForEach(x =>
                        {
                            if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == mesRworkOutboundOrder.SaleOrder
                                && x.ProductCode == mesRworkOutboundOrder.ProductCode
                                && x.ProductVersion == mesRworkOutboundOrder.ProductVersion
                                && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
                            {
                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
                                {
                                    x.OutboundQuantity += needQuantity;
                                    needQuantity = 0;
                                }
                                else
                                {
                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
                                    x.OutboundQuantity = x.StockPcsQty;
                                }
                            }
                        });
                    }
                    assignOutStocks.Add(stockInfo);
                }
            }
            residueQuantity = needQuantity;
            return assignOutStocks;
        }
        ////处理出库库存
        //public (List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) HandleOutProStock(Dt_ProStockInfo proStockInfo)
        //{
        //    List<Dt_ProStockInfoDetail>? deleteStockDetails = null;
        //    List<Dt_ProStockInfoDetail>? updateStockDetails = null;
        //    foreach (var item in proStockInfo.proStockInfoDetails)
        //    {
        //        if (item.StockPcsQty==item.OutboundQuantity)
        //        {
        //            item.ProOutDetailStatus = StockStatusEmun.出库完成.ObjToInt();
        //            deleteStockDetails.Add(item);
        //        }
        //        else if(item.StockPcsQty> item.OutboundQuantity && item.OutboundQuantity>0)
        //        {
        //            item.StockPcsQty-=item.OutboundQuantity;
        //            updateStockDetails.Add(item);
        //        }
        //    }
        //    return (deleteStockDetails, updateStockDetails);
        //}
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/ProStockViewService.cs
@@ -17,7 +17,6 @@
using Magicodes.ExporterAndImporter.Core;
using WIDESEA_Core.HostedService;
using WIDESEA_Core.DB.Models;
using WIDESEA_IOutboundRepository;
using WIDESEA_IStockRepository;
using WIDESEA_Common.StockEnum;
using WIDESEA_IBasicRepository;
@@ -29,15 +28,13 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly SqlSugarClient _dbBase;
        private readonly IOutboundRepository _outboundRepository;
        private readonly IStockRepository  _stockRepository;
        private readonly IBasicRepository _basicRepository;
        public ProStockViewService(IUnitOfWorkManage unitOfWorkManage, IOutboundRepository outboundRepository, IStockRepository stockRepository,IBasicRepository basicRepository)
        public ProStockViewService(IUnitOfWorkManage unitOfWorkManage,IStockRepository stockRepository,IBasicRepository basicRepository)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _dbBase = unitOfWorkManage.GetDbClient();
            _outboundRepository = outboundRepository;
            _stockRepository = stockRepository;
            _basicRepository = basicRepository;
        }
@@ -362,83 +359,6 @@
            catch (Exception ex)
            {
                throw new Exception($"无权限,{ex.Message}");
            }
        }
        public List<ProStockViewDTO> GetProPKSelectStocks(int orderId)
        {
            try
            {
                Dt_ProOutOrderDetail outOrderDetail = _outboundRepository.ProOutOrderDetailRepository.QueryFirst(x => x.Id == orderId);
                if (outOrderDetail == null)
                {
                    throw new Exception($"未找到出库单明细");
                }
                List<ProStockViewDTO> stockViewDTOs = new List<ProStockViewDTO>();
                ISugarQueryable<Dt_ProStockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_ProStockInfo>().Includes(x => x.proStockInfoDetails);
                var pklist = sugarQueryable1.Where(b => b.LocationCode == "成品待发货区" && b.StockStatus==StockStatusEmun.平库入库完成.ObjToInt() && (b.ShipmentOrder==null|| b.ShipmentOrder =="")).Where(x=>x.proStockInfoDetails.Any(v=>v.ProductCode== outOrderDetail.PCode)).Select(b => new ProStockViewDTO
                {
                    ProStockAttribute = b.ProStockAttribute,
                    LocationCode = b.LocationCode,
                    WarehouseId = b.WarehouseId,
                    CreateDate = b.CreateDate,
                    Creater = b.Creater,
                    LocationName = b.LocationCode,
                    Modifier = b.Modifier,
                    ModifyDate = b.ModifyDate,
                    PalletCode = b.PalletCode,
                    StockRemark = b.Remark,
                    ProStockId = b.Id,
                    StockStatus = b.StockStatus,
                    Details = b.proStockInfoDetails,
                });
                stockViewDTOs.AddRange(pklist.ToList());
                stockViewDTOs.ForEach(x =>
                    {
                        x.ProductCode = string.Join(",", x.Details.Select(x => x.ProductCode).Distinct());
                        x.ProductVersion = string.Join(",", x.Details.Select(x => x.ProductVersion).Distinct());
                        x.SpecifyVer = string.Join(",", x.Details.Select(x => x.SpecifyVer).Distinct());
                        x.DateCode = x.Details.FirstOrDefault()?.DateCode ?? "";
                        x.LotNumber = x.Details.FirstOrDefault()?.LotNumber ?? "";
                        x.ERPOrder = x.Details.FirstOrDefault()?.ERPOrder ?? "";
                        x.SaleOrder = x.Details.FirstOrDefault()?.SaleOrder ?? "";
                        x.MoNumber = x.Details.FirstOrDefault()?.MoNumber ?? "";
                        x.SumStocks = x.Details.Sum(x => x.StockPcsQty);
                    }
                );
                return stockViewDTOs.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList();
                //return _stockRepository.ProStockInfoRepository.QueryTabs<Dt_ProStockInfo, Dt_ProStockInfoDetail, ProStockViewDTO>((a, b) => a.Id == b.ProStockId, (a, b) => new ProStockViewDTO
                //{
                //    LocationCode = a.LocationCode,
                //    ProductCode = b.ProductCode,
                //    ProStockAttribute = a.ProStockAttribute,
                //    ProductVersion=b.ProductVersion,
                //    DateCode=b.DateCode,
                //    ProStockId=a.Id,
                //    SumStocks=b.StockPcsQty,
                //    SaleOrder=b.SaleOrder,
                //    PalletCode = a.PalletCode,
                //    CreateDate=a.CreateDate,
                //    ERPOrder=b.ERPOrder,
                //    MoNumber=b.MoNumber
                //}, a => a.LocationCode == "成品待发货区", b => b.ProductCode == outOrderDetail.PCode, x => true).GroupBy(x => x.PalletCode).Select(x => new ProStockViewDTO
                //{
                //    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
                //    ProductCode = x.FirstOrDefault()?.ProductCode ?? "",
                //    ProductVersion = x.FirstOrDefault()?.ProductVersion ?? "",
                //    DateCode = x.FirstOrDefault()?.DateCode ?? "",
                //    ProStockId = x.FirstOrDefault().ProStockId,
                //    SumStocks=x.FirstOrDefault().SumStocks,
                //    SaleOrder = x.FirstOrDefault()?.SaleOrder ?? "",
                //    ProStockAttribute=x.FirstOrDefault()?.ProStockAttribute ?? 0,
                //    PalletCode = x.Key,
                //    ERPOrder=x.FirstOrDefault()?.ERPOrder ?? "",
                //    MoNumber=x.FirstOrDefault()?.MoNumber ?? "",
                //    CreateDate=x.FirstOrDefault()?.CreateDate ?? new DateTime()
                //}).ToList();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs
@@ -14,7 +14,6 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Stock;
using WIDESEA_IBasicRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
@@ -28,93 +27,15 @@
    {
        private readonly IMapper _mapper;
        private readonly IBasicRepository _basicRepository;
        private readonly IOutboundRepository _outboundRepository;
        public IStockInfoRepository Repository => BaseDal;
        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IBasicRepository basicRepository, IOutboundRepository outboundRepository) : base(BaseDal)
        public StockInfoService(IStockInfoRepository BaseDal, IMapper mapper, IBasicRepository basicRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _basicRepository = basicRepository;
            _outboundRepository = outboundRepository;
        }
        /// <summary>
        /// æŸ¥è¯¢è®¢å•立库库存视图
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
        {
            try
            {
                Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == orderId);
                if (outboundOrder == null)
                {
                    throw new Exception($"未找到出库单信息");
                }
                List<string> locationCodes = _basicRepository.LocationInfoRepository.PPGetCanOutLocationCodes(outboundOrder.WarehouseId);
                return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
                {
                    LocationCode = a.LocationCode,
                    MaterielCode = b.MaterielCode,
                    MaterielName = b.MaterielName,
                    PalletCode = a.PalletCode,
                    UseableQuantity = b.StockQuantity - b.OutboundQuantity
                }, a => locationCodes.Contains(a.LocationCode), b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
                {
                    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
                    MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
                    MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
                    PalletCode = x.Key,
                    UseableQuantity = x.Sum(x => x.UseableQuantity)
                }).ToList();
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        /// <summary>
        /// æŸ¥è¯¢è®¢å•平库库存视图
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        public List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode)
        {
            try
            {
                Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == orderId);
                if (outboundOrder == null)
                {
                    throw new Exception($"未找到出库单信息");
                }
                return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId && a.WarehouseId == outboundOrder.WarehouseId, (a, b) => new StockSelectViewDTO
                {
                    LocationCode = a.LocationCode,
                    MaterielCode = b.MaterielCode,
                    MaterielName = b.MaterielName,
                    PalletCode = a.PalletCode,
                    UseableQuantity = b.StockQuantity - b.OutboundQuantity
                }, a => a.LocationCode == "平库位", b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
                {
                    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
                    MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
                    MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
                    PalletCode = x.Key,
                    UseableQuantity = x.Sum(x => x.UseableQuantity)
                }).ToList();
            }
            catch (Exception ex)
            {
                return null;
            }
        }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -35,16 +35,14 @@
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ICacheService _cacheService;
        private readonly IBasicRepository _basicRepository;
        private readonly ISupplierInfoRepository _supplierInfoRepository;
        private readonly ISys_RoleDataPermissionRepository _roleDataPermissionRepository;
        public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, IBasicRepository basicRepository, ISys_RoleDataPermissionRepository roleDataPermissionRepository, ISupplierInfoRepository supplierInfoRepository) : base(BaseDal)
        public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, IBasicRepository basicRepository, ISys_RoleDataPermissionRepository roleDataPermissionRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _cacheService = cacheService;
            _basicRepository = basicRepository;
            _roleDataPermissionRepository = roleDataPermissionRepository;
            _supplierInfoRepository = supplierInfoRepository;
        }
        public ISys_DictionaryRepository Repository => BaseDal;
@@ -187,23 +185,6 @@
                                foreach (var item in warehouses)
                                {
                                    data.Add(new { key = item.WarehouseId, value = item.WarehouseName });
                                    index++;
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "suppliers":
                        {
                            List<object> data = new List<object>();
                            {
                                List<Dt_SupplierInfo> supplierInfos = _supplierInfoRepository.QueryData();
                                int index = 0;
                                foreach (var item in supplierInfos)
                                {
                                    data.Add(new { key = item.SupplierCode, value = item.SupplierCode });
                                    index++;
                                }
                            }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs
@@ -70,122 +70,6 @@
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="roadwayNos"></param>
        /// <param name="palletCode"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        public WebResponseContent AssignRoadwayByHeightAndCode(List<string> roadwayNos, string palletCode, int heightType = 0)
        {
            try
            {
                if (heightType == 0 || heightType > 3)
                {
                    return WebResponseContent.Instance.Error($"高度错误");
                }
                if (roadwayNos == null || roadwayNos.Count == 0)
                {
                    return WebResponseContent.Instance.Error($"巷道不能为空");
                }
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.RoadwayNo == roadwayNos[0]);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到巷道对应货位");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"未找到巷道对应仓库信息");
                }
                int palletType = _inboundOrderService.GetPalletType(warehouse, palletCode);
                if (palletType == -1)
                {
                    return WebResponseContent.Instance.Error($"托盘号解析托盘类型错误");
                }
                string roadwayNo = "";
                if (heightType == 1)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                else if (heightType == 2)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                else if (heightType == 3)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                return !string.IsNullOrEmpty(roadwayNo) ? WebResponseContent.Instance.OK(data: roadwayNo) : WebResponseContent.Instance.Error("未找到可分配巷道");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public string AssignRoadwayNo(List<string> roadwayNos, string palletCode, int heightType = 0)
        {
            try
            {
                if (heightType == 0 || heightType > 3)
                {
                    throw new Exception($"高度错误");
                }
                if (roadwayNos == null || roadwayNos.Count == 0)
                {
                    throw new Exception($"巷道不能为空");
                }
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.RoadwayNo == roadwayNos[0]);
                if (locationInfo == null)
                {
                    throw new Exception($"未找到巷道对应货位");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId);
                if (warehouse == null)
                {
                    throw new Exception($"未找到巷道对应仓库信息");
                }
                int palletType = _inboundOrderService.GetPalletType(warehouse, palletCode);
                if (palletType == -1)
                {
                    throw new Exception($"托盘号解析托盘类型错误");
                }
                string roadwayNo = "";
                if (heightType == 1)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer <= 3).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                else if (heightType == 2)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 4).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                else if (heightType == 3)
                {
                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => (x.LocationType == palletType || x.LocationType == LocationTypeEnum.Undefined.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && roadwayNos.Contains(x.RoadwayNo) && x.Layer == 5).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                    roadwayNo = locationCounts.OrderBy(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                }
                return !string.IsNullOrEmpty(roadwayNo) ? ( roadwayNo) : throw new Exception("未找到可分配巷道");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// å…¥åº“任务申请分配货位
@@ -260,94 +144,6 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent HandSubstrateOut(int orderId)
        {
            try
            {
                Dt_MesOutboundOrder mesOutboundOrder = _outboundService.MesOutboundOrderService.Repository.QueryFirst(x => x.Id == orderId);
                if (mesOutboundOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该订单");
                }
                if (mesOutboundOrder.OrderStatus != OutOrderStatusEnum.未开始.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该订单不可再出库");
                }
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_StockInfo>? stockInfos = null;
                List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                List<Dt_LocationInfo>? locationInfos = null;
                {
                    (List<Dt_StockInfo>, Dt_MesOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
                    if (result.Item1 != null && result.Item1.Count > 0)
                    {
                        tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                        result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                        result.Item3.ForEach(x =>
                        {
                            x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                        });
                        stockInfos = result.Item1;
                        mesOutboundOrder = result.Item2;
                        outStockLockInfos = result.Item3;
                        locationInfos = result.Item4;
                    }
                    else
                    {
                        throw new Exception("无库存");
                    }
                }
                tasks.ForEach(x =>
                {
                    if (mesOutboundOrder.OrderType == MesOutboundOrderTypeEnum.HandSubstrateOut.ObjToInt())
                    {
                        x.TaskType = TaskTypeEnum.MesHandOutbound.ObjToInt();
                    }
                    else if (mesOutboundOrder.OrderType == MesOutboundOrderTypeEnum.HandSubstrateOutPick.ObjToInt())
                    {
                        x.TaskType = TaskTypeEnum.MesHandPickOutbound.ObjToInt();
                    }
                });
                mesOutboundOrder.OrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                _unitOfWorkManage.BeginTran();
                int id = BaseDal.AddData(tasks);
                outStockLockInfos.ForEach(x =>
                {
                    x.OrderNo = mesOutboundOrder.TaskNo;
                    x.OrderDetailId = id;
                });
                _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrder);
                if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return WebResponseContent.Instance.Error(content.Message);
                    }
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
    public class LocationCount
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesProductService.cs
@@ -27,423 +27,6 @@
    public partial class TaskService
    {
        /// <summary>
        /// MES成品入库单接收
        /// </summary>
        /// <returns></returns>
        public MesResponseContent BagInfoSync(MesBagInfoModel bagInfoModel)
        {
            MesResponseContent content = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == bagInfoModel.WarehouseCode);
                if (warehouse == null)
                {
                    return content.Error("未找到仓库信息");
                }
                ////限制任务
                //Dt_Task task = BaseDal.QueryFirst(x => x.SourceAddress == bagInfoModel.WorkCenter && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Execute.ObjToInt() || x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt()));
                //if (task!=null)
                //{
                //    return content.Error($"线体存在任务或执行中,胶框号{task.PalletCode}");
                //}
                Dt_Warehouse warehouseLocation = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseLocation.WarehouseId);
                if (locationInfo == null)
                {
                    return content.Error($"未找到{warehouse.WarehouseCode}货位信息");
                }
                Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x=>x.PalletCode==bagInfoModel.BatchNo);
                if (proStockInfoOld != null)
                {
                    return content.Error($"胶框{bagInfoModel.BatchNo}库存信息已存在");
                }
                //判断该胶框号的内包信息是否存在
                Dt_MesProInOrder mesProInOrderOld = BaseDal.Db.Queryable<Dt_MesProInOrder>().Where(x => x.BatchNo == bagInfoModel.BatchNo && x.MesProStatus == InOrderStatusEnum.入库中.ObjToInt()).Includes(x => x.Details).First();
                if (mesProInOrderOld!=null)
                {
                    return content.Error($"胶框{bagInfoModel.BatchNo}内包信息未完成");
                }
                List<string> proDetailsExists = _stockRepository.ProStockInfoDetailRepository.QueryData().Select(x=>x.BagNo).ToList();
                //内包信息组盘
                List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>();
                string palletCode = @"^C\d{5}$";  // æ­£åˆ™è¡¨è¾¾å¼
                bool isValid = Regex.IsMatch(bagInfoModel.BatchNo, palletCode);
                if (!isValid && bagInfoModel.BatchNo.Substring(0,3).ToUpper()!= "CPK")
                {
                    return content.Error($"框码格式错误{bagInfoModel.BatchNo}");
                }
                if (bagInfoModel.BatchNo.Substring(0, 3).ToUpper() == "CPK")
                {
                    WebResponseContent inProRespone = InPKProStock(bagInfoModel, proDetailsExists, warehouse);
                    if (!inProRespone.Status)
                    {
                        return content.Error(inProRespone.Message);
                    }
                    _proInStatisticsService.SaveStatic(bagInfoModel);
                    return content.OK(inProRespone.Message);
                }
                foreach (var item in bagInfoModel.BagDetails)
                {
                    if (proDetailsExists.Contains(item.BagNo))
                    {
                        return content.Error($"内包{item.BagNo}已存在");
                    }
                    foreach (var child in item.BagItems)
                    {
                        Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail()
                        {
                            BagNo = item.BagNo,
                            ProductCode = item.ProductCode,
                            ProductVersion = item.ProductVersion,
                            SETQty = child.SETQty,
                            OKPCSQTY = child.OKPCSQTY,
                            DateCode = item.DateCode,
                            XQty = child.XQty,
                            XSite = child.XSite,
                            Weight = item.Weight,
                            PackingDate = item.PackingDate,
                            LotNumber = child.LotNumber,
                            ERPOrder = child.ERPOrder,
                            SaleOrder = child.SaleOrder,
                            MoNumber = child.MoNumber,
                        };
                        mesProInOrderDetails.Add(mesProInOrderDetail);
                    }
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
                foreach (var item in mesProInOrderDetails)
                {
                    proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item));
                }
                Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder()
                {
                    WarehouseId = warehouse.WarehouseId,
                    ProInOrderNo = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProInCodeRule)),
                    BatchNo = bagInfoModel.BatchNo,
                    WorkCenter = bagInfoModel.WorkCenter,
                    MesProStatus = InOrderStatusEnum.入库中.ObjToInt(),
                    UnPackStock = bagInfoModel.UnPackStock,
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    Details = mesProInOrderDetails
                };
                ProStockAttributeEnum attributeEnum = new ProStockAttributeEnum();
                switch (warehouse.WarehouseCode)
                {
                    case "HA71":
                        attributeEnum = ProStockAttributeEnum.成品;
                        break;
                    case "HA72":
                        attributeEnum = ProStockAttributeEnum.尾数;
                        break;
                    case "HA73":
                        attributeEnum = ProStockAttributeEnum.研发;
                        break;
                    default:
                        throw new Exception("未找到该库存属性");
                }
                Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
                {
                    PalletCode = bagInfoModel.BatchNo,
                    PalletType = 1,
                    ProStockAttribute= attributeEnum.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    StockStatus = StockStatusEmun.入库确认.ObjToInt(),
                    proStockInfoDetails = proStockInfoDetails
                };
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = bagInfoModel.WorkCenter,
                    Grade = 0,
                    NextAddress = "",
                    PalletCode = proStockInfo.PalletCode,
                    Roadway = locationInfo.RoadwayNo,
                    SourceAddress = bagInfoModel.WorkCenter,
                    TargetAddress = "",
                    TaskType = TaskTypeEnum.InProduct.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    PalletType = proStockInfo.PalletType,
                    MaterielCode = proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).FirstOrDefault()?.ProductCode,
                    Quantity = (float)proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).Sum(x => x.StockPcsQty)
                };
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
                //上传ERP
                WebResponseContent responseContent = _inboundOrderService.FeedbackProIn(mesProInOrder);
                _proInStatisticsService.SaveStatic(bagInfoModel);
                if (!responseContent.Status)
                {
                    mesProInOrder.UpErpStatus = WhetherEnum.False.ObjToInt();
                    mesProInOrder.Remark = responseContent.Message;
                }
                else
                {
                    mesProInOrder.UpErpStatus = WhetherEnum.True.ObjToInt();
                }
                Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand();
                _unitOfWorkManage.CommitTran();
                //推送任务
                PushTasksToWCS(new List<Dt_Task> { newTask });
                content.OK("接收成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent InPKProStock(MesBagInfoModel bagInfoModel, List<string> proDetailsExists,Dt_Warehouse wareSource)
        {
            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA101.ToString());
            if (warehouse==null)
            {
                return WebResponseContent.Instance.Error("未找到平库仓库信息");
            }
            //内包信息组盘
            List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>();
            foreach (var item in bagInfoModel.BagDetails)
            {
                if (proDetailsExists.Contains(item.BagNo))
                {
                    return WebResponseContent.Instance.Error($"内包{item.BagNo}已存在");
                }
                foreach (var child in item.BagItems)
                {
                    Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail()
                    {
                        BagNo = item.BagNo,
                        ProductCode = item.ProductCode,
                        ProductVersion = item.ProductVersion,
                        SETQty = child.SETQty,
                        OKPCSQTY = child.OKPCSQTY,
                        DateCode = item.DateCode,
                        XQty = child.XQty,
                        XSite = child.XSite,
                        Weight = item.Weight,
                        PackingDate = item.PackingDate,
                        LotNumber = child.LotNumber,
                        ERPOrder = child.ERPOrder,
                        SaleOrder = child.SaleOrder,
                        MoNumber = child.MoNumber,
                        OverInQuantity= child.OKPCSQTY
                    };
                    mesProInOrderDetails.Add(mesProInOrderDetail);
                }
            }
            List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
            foreach (var item in mesProInOrderDetails)
            {
                proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item));
            }
            Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder()
            {
                WarehouseId = warehouse.WarehouseId,
                ProInOrderNo = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProInCodeRule)),
                BatchNo = bagInfoModel.BatchNo,
                WorkCenter = bagInfoModel.WorkCenter,
                MesProStatus = InOrderStatusEnum.入库完成.ObjToInt(),
                UnPackStock = bagInfoModel.UnPackStock,
                CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                Details = mesProInOrderDetails
            };
            ProStockAttributeEnum attributeEnum = new ProStockAttributeEnum();
            switch (wareSource.WarehouseCode)
            {
                case "HA71":
                    attributeEnum = ProStockAttributeEnum.成品;
                    break;
                case "HA72":
                    attributeEnum = ProStockAttributeEnum.尾数;
                    break;
                case "HA73":
                    attributeEnum = ProStockAttributeEnum.研发;
                    break;
                default:
                    throw new Exception("未找到该库存属性");
            }
            proStockInfoDetails.ForEach(x =>
            {
                x.ProOutDetailStatus = StockStatusEmun.平库入库完成.ObjToInt();
            });
            Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
            {
                PalletCode = bagInfoModel.BatchNo,
                PalletType = 1,
                LocationCode= "成品待发货区",
                ProStockAttribute = attributeEnum.ObjToInt(),
                WarehouseId = warehouse.WarehouseId,
                StockStatus = StockStatusEmun.平库入库完成.ObjToInt(),
                proStockInfoDetails = proStockInfoDetails
            };
            _unitOfWorkManage.BeginTran();
            Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
            //上传ERP
            WebResponseContent responseContent = _inboundOrderService.FeedbackProIn(mesProInOrder);
            if (!responseContent.Status)
            {
                mesProInOrder.UpErpStatus = WhetherEnum.False.ObjToInt();
                mesProInOrder.Remark = responseContent.Message;
            }
            else
            {
                mesProInOrder.UpErpStatus = WhetherEnum.True.ObjToInt();
            }
            Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand();
            _unitOfWorkManage.CommitTran();
            return WebResponseContent.Instance.OK("接收成功");
        }
        /// <summary>
        /// å¤–包信息接收
        /// </summary>
        public MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel)
        {
            MesResponseContent content = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
                //截取出库单号
                string shipmentOrder = boxInfoModel.ShipmentOrder.Substring(0, boxInfoModel.ShipmentOrder.IndexOf("-"));
                //判断MES传入的出库单号是否存在
                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == shipmentOrder).Includes(x => x.Details).First();
                if (proOutOrder == null)
                {
                    return content.Error($"单号{shipmentOrder}不存在");
                }
                //判断外箱号是否已存在
                Dt_ProStockInfo ProStockOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == boxInfoModel.BoxNo);
                if (ProStockOld!=null)
                {
                    return content.Error($"外箱号{ProStockOld.PalletCode}存库信息已存在");
                }
                //获取所有成品出库内包信息
                List<Dt_ProStockInfoDetail> dt_ProStockInfos = _stockRepository.ProStockInfoDetailRepository.QueryData(x => x.ProOutDetailStatus == StockStatusEmun.出库完成.ObjToInt());
                //获取MES内包信息
                List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>();
                foreach (var item in boxInfoModel.Bags)
                {
                    foreach (var child in item.BagItems)
                    {
                        Dt_ProStockInfoDetail? proStockInfoDetail = dt_ProStockInfos.Where(x => x.BagNo == item.BagNo)?.FirstOrDefault();
                        if (proStockInfoDetail == null)
                        {
                            return content.Error($"内包{item.BagNo}货物状态异常");
                        }
                        if (proStockInfoDetail.OutboundQuantity<=0)
                        {
                            return content.Error($"内包{item.BagNo}出库数量未分配");
                        }
                        Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail()
                        {
                            BagNo = item.BagNo,
                            ProductCode = item.ProductCode,
                            ProductVersion = item.ProductVersion,
                            SETQty = child.SETQty,
                            OKPCSQTY = child.OKPCSQTY,
                            DateCode = item.DateCode,
                            XQty = child.XQty,
                            XSite = child.XSite,
                            Weight = item.Weight,
                            PackingDate = item.PackingDate,
                            LotNumber = child.LotNumber,
                            ERPOrder = child.ERPOrder,
                            SaleOrder = child.SaleOrder,
                            MoNumber = child.MoNumber,
                        };
                        mesProInOrderDetails.Add(mesProInOrderDetail);
                    }
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
                foreach (var item in mesProInOrderDetails)
                {
                    proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item));
                }
                proStockInfoDetails.ForEach(x =>
                {
                    x.ProOutDetailStatus = StockStatusEmun.平库入库完成.ObjToInt();
                });
                _unitOfWorkManage.BeginTran();
                WebResponseContent UnBindContent = _stockService.ProStockInfoService.UnBindStock(proStockInfoDetails);
                if (!UnBindContent.Status)
                {
                    throw new Exception(UnBindContent.Message);
                }
                if (UnBindContent.Data!=null)
                {
                    Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo()
                    {
                        PalletCode = boxInfoModel.BoxNo,
                        PalletType = 0,
                        LocationCode = "成品待发货区",
                        WarehouseId = warehouse.WarehouseId,
                        ShipmentOrder = shipmentOrder,
                        StockStatus = StockStatusEmun.平库入库完成.ObjToInt(),
                        proStockInfoDetails = UnBindContent.Data as List<Dt_ProStockInfoDetail>,
                        ProStockAttribute = ProStockAttributeEnum.成品.ObjToInt()
                    };
                    //根据外包信息解绑内包与胶框库存关系
                    Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
                }
                _unitOfWorkManage.CommitTran();
                return content.OK("外包接收成功");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// MES成品出库单同步数据处理
        /// </summary>
        public MesShipmentOrderSync MesOutSync(Dt_OutProStockInfo outProStockInfo, Dt_ProOutOrderDetail proOutOrderDetail,List<Dt_ProStockInfoDetail> proStockInfoDetails)
        {
            List<MesShipOrderDetail> mesShipOrderDetails = new List<MesShipOrderDetail>();
            //获取出库单
            Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.QueryFirst(x => x.Id == proOutOrderDetail.ProOrderId);
            //获取客户
            Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x => x.Code == proOutOrderDetail.EndCustomer);
            List<string> outBags = proStockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(x => x.BagNo).ToList();
            outBags.ForEach(x =>
            {
                x = string.Format($"{0},{1},{2},0,{3}",x,outProStockInfo.PCode,outProStockInfo.DateCode,outProStockInfo.AssignQuantity.ObjToInt());
            });
            MesShipOrderDetail orderDetail = new MesShipOrderDetail()
            {
                ProductCode = proOutOrderDetail.PCode,
                ProductVersion = proOutOrderDetail.PVer,
                Qty = outProStockInfo.AssignQuantity,
                DateCode = outProStockInfo.DateCode,
                SaleOrder = proOutOrderDetail.SaleOrder,
                Sequence = outProStockInfo.Id,
                WorkCenter = "SPCK_OUTER-001",
                PlasticBox = new List<PlasticBox> { new PlasticBox()
                    {
                        PlasticBoxNumber= outProStockInfo.PalletCode,
                        Insourcings = outBags
                    }
                }
            };
            mesShipOrderDetails.Add(orderDetail);
            MesShipmentOrderSync shipmentOrderSync = new MesShipmentOrderSync()
            {
                ShipmentOrder = proOutOrder.ProOutOrderNo+"-"+ outProStockInfo.TaskNum,
                PlantShipDate = proOutOrder.PlantShipDate.ToString("yyyy-MM-dd HH:mm:ss"),
                Customer = proOutOrderDetail.EndCustomer,
                FactoryCode = proOutOrderDetail.FactoryCode,
                ShipName = customerInfo.Name,
                ShippingAddress = customerInfo.NickName,
                OrderDetails = mesShipOrderDetails
            };
            return shipmentOrderSync;
        }
        /// <summary>
        /// WMS同步成品出库至MES
        /// </summary>
        public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model)
@@ -481,132 +64,5 @@
            }
            return content;
        }
        /// <summary>
        /// MES成品返工提库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public MesResponseContent RworkTask(RworkTaskModel model)
        {
            MesResponseContent content = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString());
                if (warehouse == null)
                {
                    return content.Error($"尾数仓信息未配置");
                }
                Dt_MesRworkOutboundOrder rworkOutboundOrderOld = _outboundRepository.RworkOutboundOrderRepository.QueryFirst(x => x.TaskNo == model.TaskNo);
                if (rworkOutboundOrderOld != null)
                {
                    return content.Error($"提库任务单{model.TaskNo}已存在");
                }
                Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder()
                {
                    WarehouseId = warehouse.WarehouseId,
                    TaskNo = model.TaskNo,
                    OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    ProductCode = model.ProductCode,
                    ProductName = model.ProductName,
                    ProductVersion = model.ProductVersion,
                    DateCode = model.DateCode,
                    RequiredQuantity = model.RequiredQuantity,
                    FactoryCode = model.FactoryCode,
                    SaleOrder = model.SaleOrder,
                    OrderType = model.InventoryType
                };
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_ProStockInfo>? proStockInfos = null;
                List<Dt_OutProStockInfo>? outProStockInfos = null;
                List<Dt_LocationInfo>? locationInfos = null;
                //分配库存生成提库任务
                (List<Dt_ProStockInfo>?, Dt_MesRworkOutboundOrder?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>) result = _outboundService.RworkOutboundOrderService.AssignMesStocks(mesRworkOutboundOrder);
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    tasks = GetTasks(result.Item1, TaskTypeEnum.OutMesRworkProduct);
                    result.Item2.OrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                    result.Item3.ForEach(x =>
                    {
                        x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    });
                    proStockInfos = result.Item1;
                    mesRworkOutboundOrder = result.Item2;
                    outProStockInfos = result.Item3;
                    locationInfos = result.Item4;
                }
                else
                {
                    throw new Exception("无库存分配");
                }
                tasks.ForEach(x =>
                {
                    x.TargetAddress = "5236";
                    x.OrderNo = mesRworkOutboundOrder.TaskNo;
                });
                _unitOfWorkManage.BeginTran();
                int id = BaseDal.AddData(tasks);
                outProStockInfos.ForEach(x =>
                {
                    x.OrderNo = mesRworkOutboundOrder.TaskNo;
                    x.OrderDetailId = id;
                });
                if (proStockInfos != null && proStockInfos.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    WebResponseContent updateContent = _outboundService.RworkOutboundOrderService.LockOutboundStockDataUpdate(proStockInfos, outProStockInfos, locationInfos, tasks: tasks);
                    if (!updateContent.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content.Error(updateContent.Message);
                    }
                }
                _outboundService.RworkOutboundOrderService.Repository.AddData(mesRworkOutboundOrder);
                _unitOfWorkManage.CommitTran();
                return content.OK("提供返库单接收成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        #region å¼ƒç”¨
        /// <summary>
        /// åº“存板数据转换
        /// </summary>
        /// <returns></returns>
        //public MesProductOutBound MesProOutBound(Dt_MesRworkOutboundOrder mesRworkOutboundOrder,List<Dt_ProStockInfoDetail> proStockInfoDetails)
        //{
        //    //获取仓库信息
        //    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == mesRworkOutboundOrder.WarehouseId);
        //    List<MesInventoryInfo> inventoryInfos = new List<MesInventoryInfo>();
        //    foreach (var item in proStockInfoDetails)
        //    {
        //        MesInventoryInfo mesInventoryInfo = new MesInventoryInfo()
        //        {
        //            Warhouseno = warehouse.WarehouseCode,
        //            InternalPackageNumber = item.BagNo,
        //            SetCount = (int)item.SETQty,
        //            EligiblePcsCount = (int)item.StockPcsQty
        //        };
        //        inventoryInfos.Add(mesInventoryInfo);
        //    }
        //    MesProductOutBound mesProductOutBound = new MesProductOutBound()
        //    {
        //        TaskNo = mesRworkOutboundOrder.TaskNo,
        //        ProductCode = mesRworkOutboundOrder.ProductCode,
        //        ProductVersion = mesRworkOutboundOrder.ProductVersion,
        //        DateCode = mesRworkOutboundOrder.DateCode,
        //        SaleOrder = mesRworkOutboundOrder.SaleOrder,
        //        InventoryInfo = inventoryInfos
        //    };
        //    return mesProductOutBound;
        //}
        #endregion
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -330,112 +330,6 @@
        }
        /// <summary>
        /// åŸºæ¿å‡ºåº“
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public MesResponseContent SubstrateOut(SubstrateOutModel model)
        {
            try
            {
                string line = string.Empty;
                if (!model.Line.Contains("SCUTL"))
                {
                    line = WarehouseEnum.HA58.ToString();
                }
                else
                {
                    line = WarehouseEnum.HA57.ToString();
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == line);
                if (warehouse == null)
                {
                    return MesResponseContent.Instance.Error($"仓库基础信息未配置");
                }
                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterialCode);
                if (materielInfo == null)
                {
                    return MesResponseContent.Instance.Error($"未找到该物料信息");
                }
                Dt_MesOutboundOrder mesOutboundOrder = new Dt_MesOutboundOrder()
                {
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    Line = model.Line,
                    MaterialCode = model.MaterialCode,
                    MaterialName = model.MaterialName,
                    OrderQuantity = model.RequiredQuantity,
                    TaskNo = model.TaskNo,
                    Unit = model.Unit,
                    OrderType = MesOutboundOrderTypeEnum.SubstrateOut.ObjToInt(),
                    OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId
                };
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_StockInfo>? stockInfos = null;
                List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                List<Dt_LocationInfo>? locationInfos = null;
                {
                    (List<Dt_StockInfo>, Dt_MesOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
                    if (result.Item1 != null && result.Item1.Count > 0)
                    {
                        tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                        result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                        result.Item3.ForEach(x =>
                        {
                            x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                        });
                        stockInfos = result.Item1;
                        mesOutboundOrder = result.Item2;
                        outStockLockInfos = result.Item3;
                        locationInfos = result.Item4;
                    }
                    else
                    {
                        throw new Exception("无库存");
                    }
                }
                tasks.ForEach(x =>
                {
                    x.TargetAddress = model.Line;
                    x.OrderNo = mesOutboundOrder.TaskNo;
                });
                _unitOfWorkManage.BeginTran();
                int id = BaseDal.AddData(tasks);
                outStockLockInfos.ForEach(x =>
                {
                    x.OrderNo = mesOutboundOrder.TaskNo;
                    x.OrderDetailId = id;
                });
                _outboundService.MesOutboundOrderService.Repository.AddData(mesOutboundOrder);
                if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return MesResponseContent.Instance.Error(content.Message);
                    }
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return MesResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return MesResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// åŸºæ¿ä½™æ–™é€€åº“
        /// </summary>
        /// <param name="model"></param>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs
@@ -41,17 +41,12 @@
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
using WIDESEA_ITaskInfoRepository;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using WIDESEA_OutboundRepository;
using WIDESEA_TaskInfoRepository;
namespace WIDESEA_TaskInfoService
@@ -63,18 +58,11 @@
        private readonly IStockRepository _stockRepository;
        private readonly IBasicService _basicService;
        private readonly IRecordService _recordService;
        private readonly IOutboundService _outboundService;
        private readonly IStockService _stockService;
        private readonly IBasicRepository _basicRepository;
        private readonly IApiInfoRepository _apiInfoRepository;
        private readonly IInvokeERPService _invokeERPService;
        private readonly IInboundRepository _inboundRepository;
        private readonly IInboundOrderService _inboundOrderService;
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutProStockInfoRepository _outProStockInfoRepository;
        private readonly IOutboundRepository _outboundRepository;
        private readonly IProInStatisticsRepository _proInStatisticsRepository;
        private readonly IProInStatisticsService _proInStatisticsService;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -87,25 +75,18 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
            _stockRepository = stockRepository;
            _basicService = basicService;
            _recordService = recordService;
            _outboundService = outboundService;
            _stockService = stockService;
            _basicRepository = basicRepository;
            _apiInfoRepository = apiInfoRepository;
            _invokeERPService = invokeERPService;
            _inboundRepository = inboundRepository;
            _inboundOrderService = inboundOrderService;
            _palletTypeInfoRepository = palletTypeInfoRepository;
            _outProStockInfoRepository = outProStockInfoRepository;
            _outboundRepository = outboundRepository;
            _proInStatisticsRepository = proInStatisticsRepository;
            _proInStatisticsService = proInStatisticsService;
        }
        /// <summary>
@@ -224,198 +205,6 @@
        }
        /// <summary>
        /// å…¥åº“任务完成
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        public WebResponseContent InboundTaskCompleted(int taskNum)
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该任务信息");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                if (warehouse.WarehouseType==WarehouseTypEnum.成品.ToString())
                {
                    return InProductCompleted(task);
                }
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到托盘对应的组盘信息");
                }
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"未找到该托盘库存明细信息");
                }
                #region ç©ºæ‰˜é€€åº“
                if (task.TaskType == TaskTypeEnum.MesPalletLargeReturn.ObjToInt() || task.TaskType == TaskTypeEnum.MesPalletSmallReturn.ObjToInt())
                {
                    task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _unitOfWorkManage.CommitTran();
                    return WebResponseContent.Instance.OK();
                }
                #endregion
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到目标货位信息");
                }
                if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"货位状态不正确");
                }
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                stockInfo.LocationCode = locationInfo.LocationCode;
                #region ç©ºç®±å…¥åº“/拣选回库/生产退料
                if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || (task.TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()))
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                    task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                    stockInfo.Details.ForEach(x =>
                    {
                        x.Status = StockStatusEmun.入库完成.ObjToInt();
                    });
                    _unitOfWorkManage.BeginTran();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                    _unitOfWorkManage.CommitTran();
                    return WebResponseContent.Instance.OK();
                }
                #endregion
                Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
                Dt_InboundOrderDetail? inboundOrderDetail = null;
                Dt_ReturnOrder? returnOrder = null;
                //标准入库流程查找入库单据
                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
                {
                    //查询原完成的入库明细数量
                    int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                    inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo);
                    foreach (var item in stockInfo.Details)
                    {
                        if (inboundOrderDetail == null)
                        {
                            continue;
                        }
                        inboundOrderDetail.OverInQuantity += item.StockQuantity;
                        if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
                        {
                            inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                            overCount += 1;
                        }
                        else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                        {
                            inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt();
                        }
                    }
                    if (inboundOrder.Details.Count == overCount)
                    {
                        inboundOrder.OrderStatus = InOrderStatusEnum.入库完成.ObjToInt();
                        //判断是否为退料入库单
                        if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
                        {
                            returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
                            returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
                            foreach (var item in inboundOrder.Details)
                            {
                                Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode);
                                if (returnOrderDetail != null)
                                {
                                    returnOrderDetail.OverReturnQty = item.OverInQuantity;
                                    returnOrderDetail.OrderDetailStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
                                }
                            }
                        }
                    }
                    else if (inboundOrder.OrderStatus == InOrderStatusEnum.未开始.ObjToInt())
                    {
                        inboundOrder.OrderStatus = InOrderStatusEnum.入库中.ObjToInt();
                    }
                }
                if ((stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt() || stockInfo.StockStatus == StockStatusEmun.手动组盘入库确认.ObjToInt()) && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                {
                    foreach (var model in stockInfo.Details)
                    {
                        TestSynStock(new TestToolSynInfo() { ToolCode = model.BatchNo, MaterialName = model.MaterielName, Life = int.TryParse(model.Remark, out int val) ? val : 1000 });
                    }
                }
                //测试架入库库存状态
                if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString() && stockInfo.StockStatus != StockStatusEmun.手动组盘入库确认.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成未建出库单.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                }
                stockInfo.Details.ForEach(x =>
                {
                    x.Status = StockStatusEmun.入库完成.ObjToInt();
                });
                //更新任务状态
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, stockInfo.Details.Sum(x => x.StockQuantity), stockInfo.Details.Sum(x => x.StockQuantity), StockChangeTypeEnum.Inbound, taskNum);
                if (inboundOrder != null && inboundOrderDetail != null)
                {
                    _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
                    _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail);
                }
                if (returnOrder != null)
                {
                    _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder);
                    _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details);
                }
                _unitOfWorkManage.CommitTran();
                //存在入库单并状态为完成状态推送至ERP
                if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt())
                {
                    if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt() && returnOrder!=null)
                    {
                        _inboundOrderService.FeedbackReturnOrder(inboundOrder, returnOrder);
                    }
                    else if(inboundOrderDetail != null)
                    {
                        _inboundOrderService.FeedbackInboundOrder(inboundOrder.Id);
                    }
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æˆå“ä»“入库任务完成
        /// </summary>
        public WebResponseContent InProductCompleted(Dt_Task task)
@@ -427,9 +216,6 @@
                {
                    case (int)TaskTypeEnum.EmptyProductBack:
                        content = EmptyProBackCompleted(task);
                        break;
                    case (int)TaskTypeEnum.InProduct:
                        content = InProCompleted(task);
                        break;
                    case (int)TaskTypeEnum.InProductBack:
                        content = InProBackCompleted(task);
@@ -456,73 +242,6 @@
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// MES内包入库任务完成
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public WebResponseContent InProCompleted(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取组盘信息
                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
                if (proStockInfo == null)
                {
                    return content.Error($"未找到胶框为{task.PalletCode}组盘信息");
                }
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到目标货位信息");
                }
                if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"货位状态不正确");
                }
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                proStockInfo.LocationCode = locationInfo.LocationCode;
                //获取MES入库单据
                Dt_MesProInOrder mesProInOrder = _inboundRepository.MesProInOrderRepository.Db.Queryable<Dt_MesProInOrder>().Where(x => x.BatchNo == task.PalletCode && x.MesProStatus == InOrderStatusEnum.入库中.ObjToInt()).Includes(x => x.Details).OrderByDescending(x => x.Id).First();
                if (mesProInOrder == null || mesProInOrder.Details == null || mesProInOrder.Details.Count <= 0)
                {
                    return content.Error("未找到MES内包单据信息");
                }
                //进行单据处理
                mesProInOrder.MesProStatus = InOrderStatusEnum.入库完成.ObjToInt();
                mesProInOrder.Details.ForEach(x =>
                {
                    x.OverInQuantity = x.OKPCSQTY;
                });
                proStockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                proStockInfo.proStockInfoDetails.ForEach(x =>
                {
                    x.ProOutDetailStatus = StockStatusEmun.入库完成.ObjToInt();
                });
                //更新入库状态
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, locationInfo.WarehouseId);
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
                _inboundRepository.MesProInOrderRepository.UpdateData(mesProInOrder);
                _inboundRepository.MesProInOrderDetailRepository.UpdateData(mesProInOrder.Details);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                _unitOfWorkManage.CommitTran();
                ////上传ERP
                //_inboundOrderService.FeedbackProIn(mesProInOrder);
                content.OK();
            }
            catch (Exception ex)
@@ -577,346 +296,6 @@
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å‡ºåº“任务完成
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        public WebResponseContent OutboundTaskCompleted(int taskNum)
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error($"未找到任务信息");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                //成品出库任务完成
                if (warehouse.WarehouseType==WarehouseTypEnum.成品.ToString())
                {
                    return OutProCompleted(task);
                }
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到库存信息");
                }
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到货位信息");
                }
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>();
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                {
                    return WebResponseContent.Instance.Error($"未找到出库详情信息");
                }
                else
                {
                    foreach (var item in outStockLockInfos)
                    {
                        if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())
                        {
                            Dt_MesOutboundOrder mesOutboundOrder = _outboundService.MesOutboundOrderService.Repository.QueryFirst(x => x.TaskNo == item.OrderNo);
                            if (mesOutboundOrder != null)
                            {
                                mesOutboundOrder.OverOutQuantity = item.AssignQuantity;
                                if (mesOutboundOrder.OverOutQuantity == mesOutboundOrder.OrderQuantity)
                                {
                                    mesOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                mesOutboundOrders.Add(mesOutboundOrder);
                            }
                        }
                        else
                        {
                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId);
                            if (outboundOrderDetail != null)
                            {
                                outboundOrderDetail.OverOutQuantity += item.AssignQuantity;
                                if (outboundOrderDetail.OverOutQuantity == outboundOrderDetail.OrderQuantity)
                                {
                                    outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                outboundOrderDetails.Add(outboundOrderDetail);
                            }
                        }
                        item.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                    }
                }
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                {
                    //处理出库详情
                    if (outboundOrderDetails.Count > 0)
                    {
                        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                    }
                    stockInfo.LocationCode = "";
                    stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                    stockInfo.Details.ForEach(x =>
                    {
                        x.Status = StockStatusEmun.出库完成.ObjToInt();
                    });
                    if (stockInfo.StockLength>0)
                    {
                        stockInfo.StockLength = 0;
                    }
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                }
                else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())
                {
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())
                {
                    _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrders);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                _outboundService.OutboundStockLockInfoService.Repository.UpdateData(outStockLockInfos);
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                _unitOfWorkManage.CommitTran();
                if (warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                {
                    _outboundService.OutboundOrderService.TestOutUpload(outboundOrderDetails.FirstOrDefault().OrderId, outStockLockInfos);
                }
                if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())
                {
                    MesMaterialLotaAceptModel model = GetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesOutboundOrders.FirstOrDefault().TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesOutboundOrders.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity));
                    UploadMesMaterialLotaAcept(model);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        //成品出库任务完成
        public WebResponseContent OutProCompleted(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                switch (task.TaskType)
                {
                    case (int)TaskTypeEnum.OutProduct:
                        content = OutProductCompleted(task);
                        break;
                    case (int)TaskTypeEnum.OutMesRworkProduct:
                        content = OutMesRworkCompleted(task);
                        break;
                    default:
                        content.Error("未知任务类型");
                        break;
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        //成品订单出库任务完成
        public WebResponseContent OutProductCompleted(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取货位
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (locationInfo == null)
                {
                    return content.Error("未找到货位信息");
                }
                //根据任务获取成品出库详情任务及物料信息
                Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x => x.TaskNum == task.TaskNum);
                if (outProStockInfo == null)
                {
                    return content.Error("未找到成品出库详情");
                }
                //获取成品出库订单
                Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outProStockInfo.OrderNo).Includes(x => x.Details).First();
                if (proOutOrder == null)
                {
                    return content.Error("未找到成品出库订单");
                }
                //获取成品库存
                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
                if (proStockInfo == null)
                {
                    return content.Error($"未找到{task.PalletCode}成品库存信息");
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails;
                if (proStockInfoDetails.Count <= 0)
                {
                    return content.Error($"{proStockInfo.PalletCode}成品库存明细为空");
                }
                proStockInfoDetails.ForEach(x =>
                {
                    x.ProOutDetailStatus = StockStatusEmun.出库完成.ObjToInt();
                });
                //处理库存数据
                //List<Dt_ProStockInfoDetail>? deleteStockDetails = null;
                //List<Dt_ProStockInfoDetail>? updateStockDetails = null;
                //(List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) result = _stockService.ProStockInfoService.HandleOutProStock(proStockInfo);
                //if (result.Item1!=null && result.Item1.Count>0)
                //{
                //    deleteStockDetails.AddRange(result.Item1);
                //}
                //if (result.Item1 != null && result.Item1.Count > 0)
                //{
                //    updateStockDetails.AddRange(updateStockDetails);
                //}
                //获取成品出库单明细
                Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.Id == outProStockInfo.OrderDetailId);
                if (proOutOrderDetail == null)
                {
                    return content.Error("未找到对应任务成品订单明细");
                }
                //if (deleteStockDetails?.Sum(x=>x.StockPcsQty)== proStockInfo.proStockInfoDetails.Sum(x=>x.StockPcsQty))
                //{
                proStockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                //获取成品平库
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
                proStockInfo.WarehouseId = warehouse.WarehouseId;
                proStockInfo.LocationCode = "成品包装拣货区";
                //}
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                outProStockInfo.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                _unitOfWorkManage.BeginTran();
                //货位变动记录
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, locationInfo.WarehouseId);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, proOutOrder?.ProOutOrderNo ?? "", task.TaskNum);
                //if (deleteStockDetails!=null && deleteStockDetails.Count>0)
                //{
                //    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(deleteStockDetails, OperateTypeEnum.自动完成);
                //}
                //if (updateStockDetails!=null && updateStockDetails.Count>0)
                //{
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
                _outProStockInfoRepository.UpdateData(outProStockInfo);
                //}
                //else
                //{
                //_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.自动完成);
                //}
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _unitOfWorkManage.CommitTran();
                //MES成品出库同步
                ShipmentOrderSync(MesOutSync(outProStockInfo, proOutOrderDetail, proStockInfoDetails));
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æˆå“MES提库任务完成
        /// </summary>
        public WebResponseContent OutMesRworkCompleted(Dt_Task task)
        {
            WebResponseContent content=new WebResponseContent();
            try
            {
                //获取货位
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (locationInfo == null)
                {
                    return content.Error("未找到货位信息");
                }
                //根据任务获取成品出库详情任务及物料信息
                Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x => x.TaskNum == task.TaskNum);
                if (outProStockInfo == null)
                {
                    return content.Error("未找到成品出库详情");
                }
                //获取MES提库单
                Dt_MesRworkOutboundOrder mesRworkOutboundOrder = _outboundRepository.RworkOutboundOrderRepository.QueryFirst(x=>x.TaskNo==task.OrderNo);
                if (mesRworkOutboundOrder==null)
                {
                    return content.Error("未找到MES成品提库单");
                }
                if (mesRworkOutboundOrder.OrderStatus==OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    return content.Error($"MES成品提库单{mesRworkOutboundOrder.TaskNo}已完成");
                }
                //获取当前库存
                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode ==task.PalletCode).Includes(x=>x.proStockInfoDetails).First();
                if (proStockInfo==null)
                {
                    return content.Error($"未找到{task.PalletCode}库存信息");
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails;
                if (proStockInfoDetails.Count <= 0)
                {
                    return content.Error("成品库存明细为空");
                }
                proStockInfoDetails.ForEach(x =>
                {
                    x.OutboundQuantity = 0;
                    x.ProOutDetailStatus = StockStatusEmun.出库完成.ObjToInt();
                });
                proStockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                //获取成品平库
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
                proStockInfo.WarehouseId = warehouse.WarehouseId;
                proStockInfo.LocationCode = "成品包装拣货区";
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                outProStockInfo.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                _unitOfWorkManage.BeginTran();
                //货位变动记录
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, locationInfo.WarehouseId);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, mesRworkOutboundOrder?.TaskNo ?? "", task.TaskNum);
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
                _outProStockInfoRepository.UpdateData(outProStockInfo);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                //MES成品库存板出库同步
                //WebResponseContent responseContent = ProductOutBoundSync(MesProOutBound(mesRworkOutboundOrder, proStockInfoDetails));
                //if (!responseContent.Status)
                //{
                //    throw new Exception("同步MES库存板出库失败,错误:"+ responseContent.Message);
                //}
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs
@@ -28,14 +28,6 @@
                {
                    return await Task.FromResult(WebResponseContent.Instance.Error($"未找到任务信息"));
                }
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    return await Task.FromResult(InboundTaskCompleted(taskNum));
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    return await Task.FromResult(OutboundTaskCompleted(taskNum));
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    return await Task.FromResult(RelocationTaskCompleted(task));
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -23,139 +23,6 @@
    public partial class TaskService
    {
        /// <summary>
        /// ç”³è¯·å…¥åº“任务(PDA使用,仅托盘绑定入库站台,不分配货位)
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent RequestInboundTask(SaveModel saveModel)
        {
            try
            {
                var palletCode = saveModel.MainData["barcode"].ToString();
                var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
                var stationCode = saveModel.MainData["startPoint"].ToString();
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"未找到库区");
                }
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode && x.WarehouseId == warehouseId);
                if (task != null)
                {
                    return WebResponseContent.Instance.Error($"该托盘已生成任务");
                }
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null && warehouse.WarehouseCode != WarehouseEnum.HA60.ToString())
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== palletCode).Includes(x=>x.Details).First();
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                if (warehouseId != stockInfo.WarehouseId)
                {
                    return WebResponseContent.Instance.Error($"仓库不正确");
                }
                if (warehouse.WarehouseCode == WarehouseEnum.HA60.ToString())
                {
                    Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseId);
                    if (locationInfo == null) return WebResponseContent.Instance.Error($"未找到当前库区货位信息");
                    return DeviceRequestInboundTask(stationCode, locationInfo.RoadwayNo, palletCode);
                }
                else
                {
                    Dt_Task newTask = new Dt_Task()
                    {
                        CurrentAddress = stationCode,
                        Grade = 0,
                        NextAddress = "",
                        PalletCode = palletCode,
                        Roadway = "",
                        SourceAddress = stationCode,
                        TargetAddress = "",
                        TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                        TaskStatus = TaskStatusEnum.New.ObjToInt(),
                        WarehouseId = stockInfo.WarehouseId,
                        PalletType = stockInfo.PalletType,
                        MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode,
                        Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.StockQuantity,
                    };
                    //获取是否存在入库单
                    Dt_InboundOrder? inboundOrder =  null;
                    if (stockInfo!=null && stockInfo.Details.Count>0)
                    {
                        string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
                        inboundOrder =_inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt());
                        if (inboundOrder!=null)
                        {
                            newTask.OrderNo = inboundOrder.InboundOrderNo;
                        }
                    }
                    if (inboundOrder != null)
                    {
                        if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
                        {
                            newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
                            newTask.OrderNo = inboundOrder.InboundOrderNo;
                        }
                        else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
                        {
                            newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
                            newTask.OrderNo = inboundOrder.InboundOrderNo;
                        }
                    }
                    if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                    {
                        stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                    }
                    else if (stockInfo.StockStatus == StockStatusEmun.拣选完成.ObjToInt())
                    {
                        stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                        newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
                    }
                    else
                    {
                        stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                    }
                    if (warehouse.WarehouseCode==WarehouseEnum.HA57.ToString())
                    {
                        Dt_Task dt_TaskMesReturn = BaseDal.QueryFirst(x=>x.TaskType==TaskTypeEnum.MesMatReturn.ObjToInt() && x.TaskStatus!=TaskStatusEnum.SC_Executing.ObjToInt());
                        if (dt_TaskMesReturn!=null)
                        {
                            return WebResponseContent.Instance.Error($"退料任务正执行");
                        }
                    }
                    _unitOfWorkManage.BeginTran();
                    int taskId = BaseDal.AddData(newTask);
                    newTask.TaskId = taskId;
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(new List<Dt_Task> { newTask });
                    return WebResponseContent.Instance.OK(data: newTask);
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å…¥ç©ºç®±
        /// </summary>
        /// <param name="barcode"></param>
@@ -272,187 +139,6 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="roadwayNo"></param>
        /// <param name="palletCode"></param>
        /// <returns></returns>
        public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode,string materielBoxCode = "")
        {
            try
            {
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
                if (task != null)
                {
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map<WMSTaskDTO>(task));
                }
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null && stationCode != "8005")//辅料仓不限制入库任务
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
                if (!string.IsNullOrEmpty(materielBoxCode))
                {
                    _unitOfWorkManage.BeginTran();
                    WebResponseContent responseGroup = _inboundOrderService.MaterielPPorGM(materielBoxCode);
                    if (!responseGroup.Status)
                    {
                        return WebResponseContent.Instance.Error($"{responseGroup.Message}");
                    }
                    Dt_StockInfo stockInfoPPorGM = responseGroup.Data as Dt_StockInfo ?? null;
                    if (stockInfoPPorGM==null)
                    {
                        return WebResponseContent.Instance.Error($"组盘数据转换失败");
                    }
                    Dt_LocationInfo? locationInfoPPorGM = _basicService.LocationInfoService.AssignLocation(roadwayNo, stockInfoPPorGM.PalletType, stockInfoPPorGM.WarehouseId);
                    if (locationInfoPPorGM == null)
                    {
                        return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
                    }
                    Dt_Task newTaskPPorGM = new Dt_Task()
                    {
                        CurrentAddress = stationCode,
                        Grade = 0,
                        NextAddress = locationInfoPPorGM.LocationCode,
                        PalletCode = stockInfoPPorGM.PalletCode,
                        Roadway = roadwayNo,
                        SourceAddress = stationCode,
                        TargetAddress = locationInfoPPorGM.LocationCode,
                        TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                        TaskStatus = TaskStatusEnum.New.ObjToInt(),
                        WarehouseId = stockInfoPPorGM.WarehouseId,
                        PalletType = stockInfoPPorGM.PalletType,
                        TaskLength= stockInfoPPorGM.StockLength
                    };
                    //获取是否存在入库单
                    Dt_InboundOrder? inboundOrderPPorGM = null;
                    if (stockInfoPPorGM != null && stockInfoPPorGM.Details.Count > 0)
                    {
                        string? orderNo = stockInfoPPorGM.Details.FirstOrDefault()?.OrderNo ?? "";
                        inboundOrderPPorGM = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt());
                    }
                    if (inboundOrderPPorGM != null)
                    {
                        if (inboundOrderPPorGM.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
                        {
                            newTaskPPorGM.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
                        }
                        else if (inboundOrderPPorGM.OrderType == InOrderTypeEnum.Return.ObjToInt())
                        {
                            newTaskPPorGM.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
                        }
                    }
                    stockInfoPPorGM.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                    LocationStatusEnum lastStatusPPorGM = (LocationStatusEnum)locationInfoPPorGM.LocationStatus;
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfoPPorGM, lastStatusPPorGM, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfoPPorGM, newTaskPPorGM.PalletType, LocationStatusEnum.Lock, newTaskPPorGM.WarehouseId);
                    int taskIdPPorGM = BaseDal.AddData(newTaskPPorGM);
                    newTaskPPorGM.TaskId = taskIdPPorGM;
                    _stockRepository.StockInfoRepository.Db.InsertNav(stockInfoPPorGM).Include(x => x.Details).ExecuteCommand();
                    _unitOfWorkManage.CommitTran();
                    WMSTaskDTO wMSTaskDTOPPorGM = _mapper.Map<WMSTaskDTO>(newTaskPPorGM);
                    PushTasksToWCS(new List<Dt_Task> { newTaskPPorGM });
                    return WebResponseContent.Instance.OK(data: wMSTaskDTOPPorGM);
                }
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, stockInfo.PalletType, stockInfo.WarehouseId);
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
                }
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = stationCode,
                    Grade = 0,
                    NextAddress = locationInfo.LocationCode,
                    PalletCode = palletCode,
                    Roadway = roadwayNo,
                    SourceAddress = stationCode,
                    TargetAddress = locationInfo.LocationCode,
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType,
                };
                //获取是否存在入库单
                Dt_InboundOrder? inboundOrder = null;
                if (stockInfo != null && stockInfo.Details.Count > 0)
                {
                    string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? "";
                    inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt());
                }
                if (inboundOrder != null)
                {
                    if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt())
                    {
                        newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt();
                    }
                    else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
                    {
                        newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt();
                    }
                }
                if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                }
                else if (stockInfo.StockStatus == StockStatusEmun.MES退库.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
                }
                else if (stockInfo.StockStatus == StockStatusEmun.拣选完成.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.InPick.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                }
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                _unitOfWorkManage.BeginTran();
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, newTask.PalletType, LocationStatusEnum.Lock, newTask.WarehouseId);
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                PushTasksToWCS(new List<Dt_Task> { newTask });
                if (newTask.WarehouseId == 5) PutFinish(stationCode.ToString(),newTask.PalletCode, newTask.TaskNum.ToString());
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ä»…申请任务,让WCS根据路由确定下一地址
        /// </summary>
@@ -547,93 +233,6 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="palletCode"></param>
        /// <param name="staions"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        public WebResponseContent DeviceRequestInboundTaskByRoadways(string stationCode, string palletCode, List<string> staions, int heightType)
        {
            try
            {
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
                if (task != null)
                {
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map<WMSTaskDTO>(task));
                }
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
                string roadwayNo = AssignRoadwayNo(staions, palletCode, heightType);
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.拣选完成.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.退库.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.MES退库.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"该托盘状态不正确,不可申请入库");
                }
                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = stationCode,
                    Grade = 0,
                    NextAddress = "",
                    PalletCode = palletCode,
                    Roadway = roadwayNo,
                    SourceAddress = stationCode,
                    TargetAddress = roadwayNo,
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType,
                };
                if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
                }
                else if (stockInfo.StockStatus == StockStatusEmun.MES退库.ObjToInt())
                {
                    newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                }
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                PushTasksToWCS(new List<Dt_Task> { newTask });
                //if (newTask.WarehouseId == 5) PutFinish(stationCode);
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å…¥åº“任务申请分配货位
        /// </summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -78,425 +78,6 @@
            return content;
        }
        /// <summary>
        /// ç”Ÿæˆæˆå“å‡ºåº“任务
        /// </summary>
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        public async Task<WebResponseContent> OutProductTask(int[] keys, string StationCode, int Grade)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (StationCode.IsNullOrEmpty())
                {
                    return await Task.FromResult(content.Error("线体输入错误"));
                }
                //获取成品出库订单
                List<Dt_ProOutOrderDetail> _ProOutOrderDetails = await _outboundRepository.ProOutOrderDetailRepository.QueryDataAsync(x => keys.Contains(x.Id) && x.ProOrderDetailStatus== OrderDetailStatusEnum.New.ObjToInt());
                if (_ProOutOrderDetails.Count<=0)
                {
                    return await Task.FromResult(content.Error("勾选订单明细状态为出库中"));
                }
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
                List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
                List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
                List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) result =
                OutProductTaskDataHandle(_ProOutOrderDetails);
                if (result.Item2 != null && result.Item2.Count > 0)
                {
                    proStockInfos.AddRange(result.Item2);
                }
                if (result.Item3 != null && result.Item3.Count > 0)
                {
                    proOutOrderDetails.AddRange(result.Item3);
                }
                if (result.Item4 != null && result.Item4.Count > 0)
                {
                    outProStockInfos.AddRange(result.Item4);
                }
                if (result.Item5 != null && result.Item5.Count > 0)
                {
                    locationInfos.AddRange(result.Item5);
                }
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    Dt_Task? task = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.OutProduct.ObjToInt()).OrderByDescending(x=>x.Grade).FirstOrDefault();
                    //更新出库目的位置
                    result.Item1.ForEach(x =>
                    {
                        x.TargetAddress = StationCode;
                        if (Grade==1 || task==null)
                        {
                            x.Grade = 127;
                        }
                        else
                        {
                            if (task.Grade==0 || task.Grade==1)
                            {
                                x.Grade = 1;
                            }
                            else
                            {
                                x.Grade = task.Grade - 1;
                            }
                        }
                    });
                    tasks.AddRange(result.Item1);
                }
                //处理出库数据
                return await Task.FromResult(GenerateOutboundTaskDataUpdate(tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos));
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// äººå·¥é€‰å®šåº“存出库
        /// </summary>
        /// <returns></returns>
        public WebResponseContent OutProductSelect(int orderDetailId,List<ProStockViewDTO> proStockViews)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取出库单明细
                Dt_ProOutOrderDetail proOutOrderDetail = _outboundRepository.ProOutOrderDetailRepository.QueryFirst(x=>x.Id==orderDetailId);
                if (proOutOrderDetail == null)
                {
                    return content.Error("订单明细不存在");
                }
                if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
                {
                    return content.Error("当前的明细单已完成");
                }
                //获取出库单据
                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.Id==proOutOrderDetail.ProOrderId).Includes(x => x.Details).First();
                if (proOutOrder==null)
                {
                    return content.Error("出库单据不存在");
                }
                if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    return content.Error($"{proOutOrder.ProOutOrderNo}出库单已完成");
                }
                if ((proOutOrderDetail.QtyPcs-proOutOrderDetail.OverQtyPcs)> proStockViews.Sum(x=>x.SumStocks))
                {
                    return content.Error($"需满足{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}出库量");
                }
                //获取所有库存
                List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(b => b.LocationCode == "成品待发货区" && b.StockStatus == StockStatusEmun.平库入库完成.ObjToInt() && (b.ShipmentOrder == null || b.ShipmentOrder == "")).Includes(x => x.proStockInfoDetails).Where(x => x.proStockInfoDetails.Any(v => v.ProductCode == proOutOrderDetail.PCode)).ToList();
                //获取已完成数量
                int OverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                List<Dt_ProStockInfo> outStockInfos=new List<Dt_ProStockInfo>();
                List<Dt_ProStockInfoDetail> outStockInfoDetails=new List<Dt_ProStockInfoDetail>();
                List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
                foreach (var item in proStockViews.OrderBy(x => x.SumStocks))
                {
                    //获取当前库存
                    Dt_ProStockInfo? proStockInfo = proStockInfos.FirstOrDefault(x => x.Id == item.ProStockId);
                    if (proStockInfo!=null && proStockInfo.proStockInfoDetails.Count>0)
                    {
                        proStockInfo.ShipmentOrder = proOutOrder.ProOutOrderNo;
                        proStockInfo.StockStatus = StockStatusEmun.平库待发货.ObjToInt();
                        //剩余数量
                        float Amount = proOutOrderDetail.QtyPcs - proOutOrderDetail.LockQtyPcs;
                        if (Amount > item.SumStocks)
                        {
                            proOutOrderDetail.LockQtyPcs += item.SumStocks;
                            Dt_ProStockInfoDetail proStockInfoDetail = proStockInfo.proStockInfoDetails.FirstOrDefault();
                            proStockInfoDetail.OutboundQuantity = proStockInfoDetail.StockPcsQty;
                            proStockInfoDetail.OutSETQty = proStockInfoDetail.SETQty;
                            proStockInfoDetail.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
                            outStockInfoDetails.Add(proStockInfoDetail);
                        }
                        else
                        {
                            Dt_ProStockInfoDetail proStockInfoDetail = proStockInfo.proStockInfoDetails.FirstOrDefault();
                            float intervalSet = proStockInfoDetail.StockPcsQty / proStockInfoDetail.SETQty;
                            proStockInfoDetail.OutboundQuantity += Amount;
                            proStockInfoDetail.OutSETQty += (Amount / intervalSet);
                            proOutOrderDetail.LockQtyPcs += Amount;
                            proStockInfoDetail.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
                            outStockInfoDetails.Add(proStockInfoDetail);
                        }
                        if (proOutOrderDetail.QtyPcs==proOutOrderDetail.LockQtyPcs)
                        {
                            proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                        }
                        outStockInfos.Add(proStockInfo);
                    }
                    else
                    {
                        return content.Error("未找到成品库存");
                    }
                }
                List<Dt_ProStockInfo> deleteStocks=new List<Dt_ProStockInfo>();
                List<Dt_ProStockInfoDetail> deleteStockDetails = new List<Dt_ProStockInfoDetail>();
                List<Dt_ProStockInfo> updateStocks = new List<Dt_ProStockInfo>();
                List<Dt_ProStockInfoDetail> updateStockDetails = new List<Dt_ProStockInfoDetail>();
                if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && (OverCount+1)== proOutOrder.Details.Count)
                {
                    proOutOrder.ProOrderStatus=OutOrderStatusEnum.出库完成.ObjToInt();
                    //获取所有已扫码待发货的库存
                    List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
                    .Where(x => x.ShipmentOrder == proOutOrder.ProOutOrderNo && x.StockStatus == StockStatusEmun.平库待发货.ObjToInt())
                    .Includes(x => x.proStockInfoDetails).ToList();
                    AllOutStocks.ForEach(x =>
                    {
                        outStockInfoDetails.AddRange(x.proStockInfoDetails);
                    });
                    outStockInfos.AddRange(AllOutStocks);
                    foreach (var item in outStockInfoDetails)
                    {
                        StockOutItemsItem outItemsItem = new StockOutItemsItem()
                        {
                            PartNum = item.ProductCode,
                            Rev = item.ProductVersion,
                            SoNumber = item.OutDetailSaleNo,
                            BatchNumber = item.BagNo,
                            QtyPcs = item.OutboundQuantity,
                            QtySet = item.OutSETQty
                        };
                        stockOutItems.Add(outItemsItem);
                        if (item.OutboundQuantity == item.StockPcsQty)
                        {
                            Dt_ProStockInfo proStockInfo = outStockInfos.FirstOrDefault(x => x.Id == item.ProStockId);
                            if (proStockInfo != null)
                            {
                                deleteStocks.Add(proStockInfo);
                                deleteStockDetails.Add(item);
                            }
                            else
                            {
                                return content.Error("未找到上报的库存数据");
                            }
                        }
                        if (item.OutboundQuantity < item.StockPcsQty)
                        {
                            Dt_ProStockInfo proStockInfo = outStockInfos.FirstOrDefault(x => x.Id == item.ProStockId);
                            if (proStockInfo != null)
                            {
                                proStockInfo.StockStatus = StockStatusEmun.平库入库完成.ObjToInt();
                                proStockInfo.ShipmentOrder = "";
                                updateStocks.Add(proStockInfo);
                                item.StockPcsQty -= item.OutboundQuantity;
                                item.OutboundQuantity = 0;
                                item.OutSETQty = 0;
                                updateStockDetails.Add(item);
                            }
                            else
                            {
                                return content.Error("未找到上报的库存数据");
                            }
                        }
                    }
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == proOutOrder.WarehouseId);
                _unitOfWorkManage.BeginTran();
                if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.出库完成.ObjToInt())
                {
                    //成品库存记录变动待加入
                    ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
                    {
                        Way = 1,
                        StockOutCode = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
                        ConfirmedUserNo = App.User.UserName,
                        AssignUserNo = App.User.UserName,
                        WarehouseCode = warehouse.WarehouseCode,
                        ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        DeliverplanCode = proOutOrder.ProOutOrderNo,
                        Remark = proOutOrder.Remark,
                        StockOutItems = stockOutItems
                    };
                    _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(deleteStocks, OperateTypeEnum.自动完成);
                    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(deleteStockDetails, OperateTypeEnum.自动完成);
                    if (updateStockDetails.Count>0)
                    {
                        _stockRepository.ProStockInfoRepository.UpdateData(updateStocks);
                        updateStockDetails.ForEach(x =>
                        {
                            x.OutDetailSaleNo = "";
                        });
                        _stockRepository.ProStockInfoDetailRepository.UpdateData(updateStockDetails);
                    }
                    string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
                    ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
                    if (erpRequestContent.res != 1)
                    {
                        throw new Exception("同步ERP失败,错误信息:" + erpRequestContent.Data);
                    }
                }
                else
                {
                    _stockRepository.ProStockInfoRepository.UpdateData(outStockInfos);
                    _stockRepository.ProStockInfoDetailRepository.UpdateData(outStockInfoDetails);
                    _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetail);
                    _outboundRepository.ProOutOrderRepository.UpdateData(proOutOrder);
                }
                _unitOfWorkManage.CommitTran();
                content.OK("成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å¤„理出库数据
        /// </summary>
        public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_ProStockInfo>? proStockInfos = null, List<Dt_ProOutOrderDetail>? proOutOrderDetails = null, List<Dt_OutProStockInfo>? outProStockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                //获取成品出库单主表
                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId);
                if (proOutOrder!=null && proOutOrder.ProOrderStatus == OutOrderStatusEnum.未开始.ObjToInt())
                {
                    proOutOrder.ProOrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                    _outboundRepository.ProOutOrderRepository.UpdateData(proOutOrder);
                }
                BaseDal.AddData(tasks);
                if (proStockInfos != null && proStockInfos.Count > 0 && proOutOrderDetails != null && proOutOrderDetails.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    proStockInfos.ForEach(x =>
                    {
                        x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    });
                    WebResponseContent content = _outboundService.ProOutOrderDetailService.LockOutboundStockDataUpdate(proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content;
                    }
                }
                else if (proOutOrderDetails != null && proOutOrderDetails.Count > 0)
                {
                    proOutOrderDetails.ForEach(x =>
                    {
                        x.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å¤„理成品出库数据
        /// </summary>
        /// <returns></returns>
        public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(List<Dt_ProOutOrderDetail> proOutOrderDetails)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
            List<Dt_ProOutOrderDetail> assignOutOrderDetails = new List<Dt_ProOutOrderDetail>();
            List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>();
            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
            //分配库存
            (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ProOutOrderDetailService.AssignProStockOut(proOutOrderDetails);
            if (result.Item1!=null&&result.Item1.Count>0)
            {
                //获取成品单
                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId);
                if (proOutOrder==null)
                {
                    throw new Exception("未找到成品订单");
                }
                TaskTypeEnum typeEnum = proOutOrder.ProOrderType switch
                {
                    (int)OutProTypeEnum.ProOut => TaskTypeEnum.OutProduct,
                    (int)OutProTypeEnum.SendProOut => TaskTypeEnum.OutSendProduct,
                    _ => new TaskTypeEnum()
                };
                tasks = GetTasks(result.Item1, typeEnum);
                result.Item2.ForEach(x =>
                {
                    x.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                });
                result.Item3.ForEach(x =>
                {
                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                });
                tasks.ForEach(x => x.OrderNo = proOutOrder.ProOutOrderNo);
                proStockInfos = result.Item1;
                proOutOrderDetails = result.Item2;
                outProStockInfos = result.Item3;
                locationInfos = result.Item4;
            }
            else
            {
                throw new Exception("无可分配库存");
            }
            return (tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos);
        }
        /// <summary>
        /// ç”Ÿæˆä»»åŠ¡
        /// </summary>
        /// <param name="stockInfos"></param>
        /// <param name="taskType"></param>
        /// <returns></returns>
        public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            string groupId = DateTime.Now.ToString("yyMMddHHmmss");
            for (int i = 1; i <= stockInfos.Count; i++)
            {
                Dt_ProStockInfo stockInfo = stockInfos[i-1];
                if (i%5==0)
                {
                    groupId= DateTime.Now.AddSeconds(i).ToString("yyMMddHHmmss");
                }
                if (stockInfo != null)
                {
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
                    if (!tasks.Exists(x => x.PalletCode == stockInfo.PalletCode))
                    {
                        Dt_Task task = new()
                        {
                            CurrentAddress = stockInfo.LocationCode,
                            Grade = 0,
                            PalletCode = stockInfo.PalletCode,
                            NextAddress = "",
                            Roadway = locationInfo.RoadwayNo,
                            SourceAddress = stockInfo.LocationCode,
                            TargetAddress = "",
                            TaskStatus = TaskStatusEnum.New.ObjToInt(),
                            TaskType = taskType.ObjToInt(),
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                            PalletType = stockInfo.PalletType,
                            WarehouseId = stockInfo.WarehouseId,
                            GroupId= groupId,
                            MaterielCode = stockInfo.proStockInfoDetails.Where(x => x.ProStockId == stockInfo.Id).FirstOrDefault()?.ProductCode,
                            Quantity = (float)stockInfo.proStockInfoDetails.Where(x => x.ProStockId == stockInfo.Id).Sum(x=> x.StockPcsQty)
                        };
                        tasks.Add(task);
                    }
                }
            }
            return tasks;
        }
        /// <summary>
        /// åº“存数据转出库任务
        /// </summary>
        /// <param name="stockInfos"></param>
@@ -540,626 +121,6 @@
            }
            return tasks;
        }
        /// <summary>
        /// å‡ºåº“任务数据处理
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) OutboundTaskDataHandle(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
            if (outboundOrderDetail == null)
            {
                throw new Exception("未找到出库单明细信息");
            }
            if (stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity)
            {
                throw new Exception("选择数量超出单据数量");
            }
            List<Dt_StockInfo>? stockInfos = null;
            Dt_OutboundOrderDetail? orderDetail = null;
            List<Dt_OutStockLockInfo>? outStockLockInfos = null;
            List<Dt_LocationInfo>? locationInfos = null;
            if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
            {
                (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
                    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
                    {
                        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
                        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
                        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
                        _ => new TaskTypeEnum()
                    };
                    tasks = GetTasks(result.Item1, typeEnum);
                    result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    result.Item3.ForEach(x =>
                    {
                        x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    });
                    stockInfos = result.Item1;
                    orderDetail = result.Item2;
                    outStockLockInfos = result.Item3;
                    locationInfos = result.Item4;
                }
                else
                {
                    throw new Exception("无库存");
                }
            }
            else
            {
                List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.已分配);
                if (stockLockInfos != null && stockLockInfos.Count > 0)
                {
                    List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
                    tasks = GetTasks(stocks, TaskTypeEnum.Outbound);
                }
            }
            return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_OutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
        }
        /// <summary>
        /// å‡ºåº“任务数据处理
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) OutboundTaskDataHandle(int[] keys)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            List<Dt_OutboundOrderDetail> outboundOrderDetails = _outboundService.OutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
            if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
            {
                throw new Exception("未找到出库单明细信息");
            }
            if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
            {
                throw new Exception("所选出库单明细存在出库中或已完成");
            }
            List<Dt_StockInfo>? stockInfos = null;
            List<Dt_OutboundOrderDetail>? orderDetails = null;
            List<Dt_OutStockLockInfo>? outStockLockInfos = null;
            List<Dt_LocationInfo>? locationInfos = null;
            //if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
            {
                (List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    Dt_OutboundOrder outboundOrder =_outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
                    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
                    {
                        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
                        (int)OutOrderTypeEnum.Allocate=> TaskTypeEnum.OutAllocate,
                        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
                        _ =>new TaskTypeEnum()
                    };
                    tasks = GetTasks(result.Item1, typeEnum);
                    tasks.ForEach(x =>
                    {
                        x.OrderNo = outboundOrder.UpperOrderNo;
                    });
                    result.Item2.ForEach(x =>
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    result.Item3.ForEach(x =>
                    {
                        x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    });
                    stockInfos = result.Item1;
                    orderDetails = result.Item2;
                    outStockLockInfos = result.Item3;
                    locationInfos = result.Item4;
                }
                else
                {
                    throw new Exception("无库存");
                }
            }
            //else
            //{
            //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.已分配);
            //    if (stockLockInfos != null && stockLockInfos.Count > 0)
            //    {
            //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
            //        tasks = GetTasks(stocks);
            //    }
            //}
            return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        public WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
        {
            try
            {
                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(orderDetailId, stockSelectViews);
                WebResponseContent content = GenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
                return content;
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å¹³åº“直接出库
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
        {
            try
            {
                #region MyRegion
                Dt_OutboundOrderDetail OrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
                if (OrderDetail == null)
                {
                    throw new Exception("未找到出库单明细信息");
                }
                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
                    throw new Exception("出库单已完成");
                Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == OrderDetail.OrderId).Includes(x => x.Details).First();
                if (outboundOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到出库单信息");
                }
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId);
                List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
                if (outStocks.Count < 1) return WebResponseContent.Instance.Error($"库存不足");
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_StockInfo> upStocks = new List<Dt_StockInfo>();
                List<Dt_StockInfo> deStocks = new List<Dt_StockInfo>();
                List<Dt_StockInfoDetail> upstockDetails = new List<Dt_StockInfoDetail>();
                List<Dt_StockInfoDetail> destockDetails = new List<Dt_StockInfoDetail>();
                outStocks.ForEach(x =>
                {
                    x.Details.Where(x => x.MaterielCode == OrderDetail.MaterielCode).ToList().ForEach(v =>
                    {
                        float OriginalQuantity = v.StockQuantity;
                        float assignQuantity = 0;//分配数量
                        float assignAmount = OrderDetail.OrderQuantity - OrderDetail.OverOutQuantity;//待出数量
                        if (assignAmount > 0)
                        {
                            if (v.StockQuantity >= assignAmount)
                            {
                                assignQuantity = assignAmount;
                                v.StockQuantity -= assignAmount;
                                OrderDetail.OverOutQuantity += assignAmount;
                                OrderDetail.LockQuantity += assignAmount;
                                upstockDetails.Add(v);
                            }
                            else
                            {
                                assignQuantity = v.StockQuantity;
                                OrderDetail.OverOutQuantity += v.StockQuantity;
                                OrderDetail.LockQuantity += v.StockQuantity;
                                v.StockQuantity = 0;
                                destockDetails.Add(v);
                            }
                            Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
                            {
                                PalletCode = x.PalletCode,
                                AssignQuantity = assignQuantity,
                                MaterielCode = OrderDetail.MaterielCode,
                                BatchNo = v.BatchNo,
                                LocationCode = x.LocationCode,
                                MaterielName = v.MaterielName,
                                OrderDetailId = OrderDetail.Id,
                                OrderNo = outboundOrder.OrderNo,
                                OrderType = outboundOrder.OrderType,
                                OriginalQuantity = OriginalQuantity,
                                Status = OutLockStockStatusEnum.出库完成.ObjToInt(),
                                StockId = x.Id,
                                TaskNum = 0,
                                OrderQuantity = OrderDetail.OrderQuantity,
                                Unit = OrderDetail.Unit,
                                ProductionDate = v.ProductionDate,
                                EffectiveDate = v.EffectiveDate
                            };
                            outStockLockInfos.Add(outStockLockInfo);
                        }
                    });
                    int overCount = x.Details.Where(x => x.StockQuantity == 0).Count();
                    if (overCount == x.Details.Count) deStocks.Add(x);
                    else upStocks.Add(x);
                });
                outboundOrder.OrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                OrderDetail.OrderDetailStatus = OrderDetail.OrderQuantity > OrderDetail.OverOutQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.Over.ObjToInt();
                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
                {
                    int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
                    if (outboundOrder.Details.Count - 1 == overCount)
                        outboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                }
                _unitOfWorkManage.BeginTran();
                _outboundService.OutboundStockLockInfoService.AddData(outStockLockInfos);
                _outboundService.OutboundOrderService.UpdateData(outboundOrder);
                _outboundService.OutboundOrderDetailService.UpdateData(OrderDetail);
                _stockRepository.StockInfoRepository.UpdateData(upStocks);
                _stockRepository.StockInfoRepository.DeleteData(deStocks);
                _stockRepository.StockInfoDetailRepository.UpdateData(upstockDetails);
                _stockRepository.StockInfoDetailRepository.DeleteData(destockDetails);
                _unitOfWorkManage.CommitTran();
                #endregion
                #region ä¸ŠæŠ¥ERP
                if (outboundOrder.OrderStatus == OutOrderStatusEnum.出库完成.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt())
                {
                    //List<ERPPickModel> eRPPickModels = new List<ERPPickModel>();
                    //outStockLockInfos.ForEach(x =>
                    //{
                    //    ERPPickItemModel pickItemModel = new ERPPickItemModel()
                    //    {
                    //        Lotno = x.BatchNo,
                    //        Qty = x.AssignQuantity.ToString(),
                    //        Location = warehouse.WarehouseCode
                    //    };
                    //    ERPPickModel pickModel = new ERPPickModel()
                    //    {
                    //        Rowindex = OrderDetail.RowNo,
                    //        Material = OrderDetail.MaterielCode,
                    //        Qty = pickItemModel.Qty,
                    //        Dataitem = new List<ERPPickItemModel> { pickItemModel }
                    //    };
                    //    eRPPickModels.Add(pickModel);
                    //});
                    //ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
                    //{
                    //    Pickcode = outboundOrder.UpperOrderNo,
                    //    PickList = eRPPickModels
                    //};
                    //ERPIssueModel issueModel = new ERPIssueModel()
                    //{
                    //    UniqueTag = outboundOrder.Id.ToString(),
                    //    Code = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)),
                    //    WarehouseCode = warehouse.WarehouseCode,
                    //    Docremark = "",
                    //    Deptno = outboundOrder.DepartmentCode,
                    //    Deptname = outboundOrder.DepartmentName,
                    //    Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    //    Createuser = App.User.UserName,
                    //    Issitem = new List<ERPIssueItemModel>() { issueItemModel }
                    //};
                    _invokeERPService.InvokeOutStandardsApi(_outboundService.OutboundOrderService.GetERPIssueModel(outboundOrder, warehouse.WarehouseCode));
                }
                #endregion
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务后数据更新到数据库
        /// </summary>
        /// <param name="tasks"></param>
        /// <param name="stockInfos"></param>
        /// <param name="outboundOrderDetails"></param>
        /// <param name="outStockLockInfos"></param>
        /// <param name="locationInfos"></param>
        /// <returns></returns>
        public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_OutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(tasks);
                if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    stockInfos.ForEach(x =>
                    {
                        x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    });
                    WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content;
                    }
                }
                else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
                {
                    outboundOrderDetails.ForEach(x =>
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x=>x.Id== outboundOrderDetails.FirstOrDefault().OrderId);
                    if (outboundOrder.OrderStatus!=OutOrderStatusEnum.出库中.ObjToInt())
                    {
                        _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder);
                    }
                    _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="keys">出库单明细主键</param>
        /// <returns></returns>
        public WebResponseContent GenerateOutboundTasks(int[] keys)
        {
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_OutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = OutboundTaskDataHandle(keys);
                if (result.Item2 != null && result.Item2.Count > 0)
                {
                    stockInfos.AddRange(result.Item2);
                }
                if (result.Item3 != null && result.Item3.Count > 0)
                {
                    outboundOrderDetails.AddRange(result.Item3);
                }
                if (result.Item4 != null && result.Item4.Count > 0)
                {
                    outStockLockInfos.AddRange(result.Item4);
                }
                if (result.Item5 != null && result.Item5.Count > 0)
                {
                    locationInfos.AddRange(result.Item5);
                }
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    tasks.AddRange(result.Item1);
                }
                WebResponseContent content = GenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
                return content;
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="outboundId">出库单主键</param>
        /// <returns></returns>
        public WebResponseContent GenerateOutboundTaskByHeadId(int outboundId)
        {
            try
            {
                List<int> keys = _outboundService.OutboundOrderDetailService.Repository.QueryData(x => x.Id, x => x.OrderId == outboundId);
                return GenerateOutboundTasks(keys.ToArray());
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #region
        ///// <summary>
        ///// ç”Ÿæˆå‡ºåº“任务
        ///// </summary>
        ///// <param name="keys">出库单明细主键</param>
        ///// <returns></returns>
        //public WebResponseContent MESPPGenerateOutboundTasks(int[] keys)
        //{
        //    try
        //    {
        //        List<Dt_Task> tasks = new List<Dt_Task>();
        //        List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
        //        List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
        //        List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPOutboundOrderDetail>();
        //        List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
        //        List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
        //        (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = MESPPOutboundTaskDataHandle(keys);
        //        if (result.Item2 != null && result.Item2.Count > 0)
        //        {
        //            stockInfos.AddRange(result.Item2);
        //        }
        //        if (result.Item3 != null && result.Item3.Count > 0)
        //        {
        //            outboundOrderDetails.AddRange(result.Item3);
        //        }
        //        if (result.Item4 != null && result.Item4.Count > 0)
        //        {
        //            outStockLockInfos.AddRange(result.Item4);
        //        }
        //        if (result.Item5 != null && result.Item5.Count > 0)
        //        {
        //            locationInfos.AddRange(result.Item5);
        //        }
        //        if (result.Item1 != null && result.Item1.Count > 0)
        //        {
        //            tasks.AddRange(result.Item1);
        //        }
        //        WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
        //        return content;
        //    }
        //    catch (Exception ex)
        //    {
        //        _unitOfWorkManage.RollbackTran();
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
        ///// <summary>
        ///// å‡ºåº“任务数据处理
        ///// </summary>
        ///// <param name="orderDetailId"></param>
        ///// <param name="stockSelectViews"></param>
        ///// <returns></returns>
        ///// <exception cref="Exception"></exception>
        //public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) MESPPOutboundTaskDataHandle(int[] keys)
        //{
        //    List<Dt_Task> tasks = new List<Dt_Task>();
        //    List<Dt_MesPPOutboundOrderDetail> outboundOrderDetailss = _outboundService.MesPPOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
        //    List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
        //    if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
        //    {
        //        throw new Exception("未找到出库单明细信息");
        //    }
        //    if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
        //    {
        //        throw new Exception("所选出库单明细存在出库中或已完成");
        //    }
        //    List<Dt_StockInfo>? stockInfos = null;
        //    List<Dt_MesPPOutboundOrderDetail>? orderDetails = null;
        //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
        //    List<Dt_LocationInfo>? locationInfos = null;
        //    //if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
        //    {
        //        (List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
        //        if (result.Item1 != null && result.Item1.Count > 0)
        //        {
        //            Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
        //            TaskTypeEnum typeEnum = outboundOrder.OrderType switch
        //            {
        //                (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
        //                (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
        //                (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
        //                _ => new TaskTypeEnum()
        //            };
        //            tasks = GetTasks(result.Item1, typeEnum);
        //            result.Item2.ForEach(x =>
        //            {
        //                x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
        //            });
        //            result.Item3.ForEach(x =>
        //            {
        //                x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
        //            });
        //            stockInfos = result.Item1;
        //            orderDetails = result.Item2;
        //            outStockLockInfos = result.Item3;
        //            locationInfos = result.Item4;
        //        }
        //        else
        //        {
        //            throw new Exception("无库存");
        //        }
        //    }
        //    //else
        //    //{
        //    //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.已分配);
        //    //    if (stockLockInfos != null && stockLockInfos.Count > 0)
        //    //    {
        //    //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
        //    //        tasks = GetTasks(stocks);
        //    //    }
        //    //}
        //    return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
        //}
        ///// <summary>
        ///// ç”Ÿæˆå‡ºåº“任务后数据更新到数据库
        ///// </summary>
        ///// <param name="tasks"></param>
        ///// <param name="stockInfos"></param>
        ///// <param name="outboundOrderDetails"></param>
        ///// <param name="outStockLockInfos"></param>
        ///// <param name="locationInfos"></param>
        ///// <returns></returns>
        //public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
        //{
        //    try
        //    {
        //        _unitOfWorkManage.BeginTran();
        //        BaseDal.AddData(tasks);
        //        if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
        //        {
        //            stockInfos.ForEach(x =>
        //            {
        //                x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
        //            });
        //            WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
        //            if (!content.Status)
        //            {
        //                _unitOfWorkManage.RollbackTran();
        //                return content;
        //            }
        //        }
        //        else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
        //        {
        //            outboundOrderDetails.ForEach(x =>
        //            {
        //                x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
        //            });
        //            _outboundService.MesPPOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
        //        }
        //        _unitOfWorkManage.CommitTran();
        //        PushTasksToWCS(tasks);
        //        return WebResponseContent.Instance.OK();
        //    }
        //    catch (Exception ex)
        //    {
        //        _unitOfWorkManage.RollbackTran();
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
        #endregion
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/Task_HtyService.cs
@@ -20,9 +20,6 @@
using WIDESEA_DTO.Stock;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Approval/ApprovalTaskController.cs
@@ -7,7 +7,6 @@
using WIDESEA_Core.BaseController;
using WIDESEA_Core.Helper;
using WIDESEA_IApprovalService;
using WIDESEA_ICheckRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Approval
@@ -19,70 +18,11 @@
    [ApiController]
    public class ApprovalTaskController : ApiBaseController<IApprovalTaskService, Dt_ApprovalTask>
    {
        private readonly ICheckOrderRepository _checkOrderRepository;
        private readonly WebSocketServer _webSocketServer;
        public ApprovalTaskController(IApprovalTaskService service, ICheckOrderRepository checkOrderRepository, WebSocketServer webSocketServer) : base(service)
        public ApprovalTaskController(IApprovalTaskService service, WebSocketServer webSocketServer) : base(service)
        {
            _checkOrderRepository = checkOrderRepository;
            _webSocketServer = webSocketServer;
        }
        /// <summary>
        /// åŒæ„å®¡æ‰¹
        /// </summary>
        /// <param name="sourceKey"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("AuditAgree")]
        public WebResponseContent AuditAgree(int sourceKey)
        {
            return Service.AuditAgree(sourceKey);
        }
        /// <summary>
        /// é©³å›žå®¡æ‰¹
        /// </summary>
        /// <param name="sourceKey"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("AuditReject")]
        public WebResponseContent AuditReject(int sourceKey)
        {
            return Service.AuditReject(sourceKey);
        }
        /// <summary>
        /// æŽ¨é€æµ‹è¯•
        /// </summary>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("PushTest"), AllowAnonymous]
        public WebResponseContent PushTest()
        {
            try
            {
                List<Dt_CheckOrder> checkOrders = _checkOrderRepository.Db.Queryable<Dt_CheckOrder>().Includes(x => x.Details).ToList();
                foreach (var checkOrder in checkOrders)
                {
                    object obj = new
                    {
                        title = "IQC质检结果审批",
                        formData = checkOrder,
                        tableData = checkOrder.Details,
                        message = "推送测试信息体",
                        date = DateTime.Now.ToString(),
                    };
                    JsonSerializerSettings settings = new JsonSerializerSettings()
                    {
                        ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
                    };
                    _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(obj, settings));
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/CustomerInfoController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/SupplierInfoController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/UserInfoController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -15,10 +15,6 @@
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_InboundService;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
using static WIDESEA_DTO.ErpResponseContent;
@@ -32,58 +28,12 @@
    public class ErpController : ControllerBase
    {
        private readonly IBasicService _basicService;
        private readonly IOutboundService _outboundService;
        private readonly IInboundService _inboundService;
        private readonly IInvokeERPService _invokeERPService;
        private readonly IReturnOrderService _returnOrderService;
        public ErpController(IBasicService basicService, IOutboundService outboundService, IInboundService inboundService,
            IInvokeERPService invokeERPService, IReturnOrderService returnOrderService)
        public ErpController(IBasicService basicService,IInvokeERPService invokeERPService)
        {
            _basicService = basicService;
            _outboundService = outboundService;
            _inboundService = inboundService;
            _invokeERPService = invokeERPService;
            _returnOrderService = returnOrderService;
        }
        /// <summary>
        /// æŽ¥æ”¶ERP采购单信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceivePurchaseOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceivePurchaseOrder([FromBody] Root<PurchaseOrderModel> model)
        {
            WebResponseContent content = _inboundService.PurchaseOrderService.ReceivePurchaseOrder(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP仓库员工和质检员工数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveUser"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceiveUser([FromBody] Root<UserInfoDTO> model)
        {
            WebResponseContent content = _basicService.UserInfoService.ReceiveUser(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP供应商信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveSupplier"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceiveSupplier([FromBody] Root<SupplierDTO> model)
        {
            WebResponseContent content = _basicService.SupplierInfoService.ReceiveSupplier(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
@@ -95,118 +45,6 @@
        public ErpResponseContent ReceiveMaterial([FromBody] Root<MaterielInfoDTO> model)
        {
            WebResponseContent content = _basicService.MaterielInfoService.ReceiveMaterial(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP客户信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveCustomer"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceiveCustomer([FromBody] Root<CustomerInfoDTO> model)
        {
            WebResponseContent content = _basicService.CustomerInfoService.ReceiveCustomer(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP出库单信息
        /// </summary>
        /// <param name="erpOutOrder"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveOutOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceiveOutOrder([FromBody] Root<ErpOutOrderDTO> erpOutOrder)
        {
            WebResponseContent content = _outboundService.OutboundOrderService.ReceiveOutOrder(erpOutOrder.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP成品出库单信息(订单出库/寄售出库)
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("ProductDeliveryOrder"), AllowAnonymous, MethodParamsValidate]
        public async Task<ErpResponseContent> ProductDeliveryOrder([FromBody] Root<ErpProOutOrderDTO> erpProOutOrder)
        {
            var content = await _outboundService.ProOutOrderService.ProductDeliveryOrder(erpProOutOrder.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æˆå“å¯„售转入/调拨入库
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        [HttpPost, Route("ProductWarehousingOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ProductWarehousingOrder([FromBody] Root<ErpProductWarehousingOrderDTO> root)
        {
            WebResponseContent content = _inboundService.ErpProInOrderService.ProductWarehousingOrder(root.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æˆå“è°ƒæ‹¨å‡ºï¼ˆç ”发)
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        [HttpPost, Route("ProductTransferOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ProductTransferOrder([FromBody] Root<ErpProductTransferOrderDTO> root)
        {
            WebResponseContent content = _outboundService.ErpProTransferOrderService.ProductTransferOrder(root.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æˆå“æŠ¥åºŸå‡ºåº“单接收
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        [HttpPost, Route("ProductScrappedOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ProductScrappedOrder([FromBody] Root<ErpProductScrappedOrderDTO> root)
        {
            return Instance.OK();
        }
        /// <summary>
        /// æˆå“é¢†æ–™å‡ºåº“单接收
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        [HttpPost, Route("ProductOutOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ProductOutOrder([FromBody] Root<ErpProOutLingOrder> root)
        {
            return Instance.OK();
        }
        /// <summary>
        /// é”€å”®æŒ‡æ´¾å•接收
        /// </summary>
        [HttpPost, Route("ProductSpecifyVer"), AllowAnonymous, MethodParamsValidate]
        public async Task<ErpResponseContent> ProductSpecifyVerAsync([FromBody] Root<ErpProductSpecifyVerDTO> root)
        {
            var content = await _outboundService.ProOutOrderService.ProductSpecifyVer(root.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// æŽ¥æ”¶ERP退料单信息
        /// </summary>
        [HttpPost, Route("ReturnOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReturnOrder([FromBody] Root<ErpReturnOrderDTO> model)
        {
            WebResponseContent content = _returnOrderService.ReturnOrder(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
        /// <summary>
        /// å…¶ä»–入库单接收(调拔入仓,客供回收,物料销售退货)
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("ReceiveWarehousingOrder"), AllowAnonymous, MethodParamsValidate]
        public ErpResponseContent ReceiveWarehousingOrder([FromBody] Root<ErpInOrderDTO> model)
        {
            WebResponseContent content = _inboundService.InbounOrderService.ReceiveWarehousingOrder(model.Content);
            if (content.Status) return Instance.OK();
            else return Instance.Error(content.Message);
        }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ErpProInOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/MesProInOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ProInStatisticsController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/LargeScreen/LargeController.cs
@@ -4,9 +4,6 @@
using WIDESEA_Core;
using WIDESEA_DTO;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
using WIDESEA_ITaskInfoService;
using WIDESEA_TaskInfoService;
using WIDESEA_DTO.ERP;
@@ -29,24 +26,18 @@
    [ApiController]
    public class LargeController : ControllerBase
    {
        private readonly IOutboundService _outboundService;
        private readonly ITaskService _taskService;
        private readonly ITask_HtyService _task_HtyService;
        private readonly IBasicService _basicService;
        private readonly IMesProInOrderService _mesProInOrderService;
        private readonly IOutProStockInfoService _outProStockInfoService;
        private readonly WebSocketServer _webSocketServer;
        private readonly IProStockInfoDetailService _proStockInfoDetailService;
        private readonly IProStockInfoService _proStockInfoService;
        public LargeController(IOutboundService outboundService, ITaskService taskService, ITask_HtyService task_HtyService, IBasicService basicService, IMesProInOrderService mesProInOrderService, IOutProStockInfoService outProStockInfoService, IProStockInfoDetailService proStockInfoDetailService, IProStockInfoService proStockInfoService, WebSocketServer webSocketServer)
        public LargeController( ITaskService taskService, ITask_HtyService task_HtyService, IBasicService basicService, IProStockInfoDetailService proStockInfoDetailService, IProStockInfoService proStockInfoService, WebSocketServer webSocketServer)
        {
            _outboundService = outboundService;
            _taskService = taskService;
            _task_HtyService = task_HtyService;
            _basicService = basicService;
            _mesProInOrderService = mesProInOrderService;
            _outProStockInfoService = outProStockInfoService;
            _proStockInfoDetailService = proStockInfoDetailService;
            _proStockInfoService = proStockInfoService;
            _webSocketServer = webSocketServer;
@@ -65,176 +56,5 @@
            }
            return WebResponseContent.Instance.OK(_webSocketServer.OnlineSessions.Select(x=>x.Url).Serialize());
        }
        ///// <summary>
        ///// æˆå“å½“月任务统计
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("ProMonthTaskStatistics"), AllowAnonymous]
        //public WebResponseContent ProMonthTaskStatistics()
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        //获取当月成品的任务总量
        //        int inboundCount = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.InProduct.ObjToInt()).Count;
        //        int outboundCount = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.OutProduct.ObjToInt()).Count;
        //        int backboundCount = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.EmptyProductBack.ObjToInt()).Count;
        //        int surplusCount = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.InProductBack.ObjToInt()).Count;
        //        content.OK("成功", new { inboundCount, outboundCount, backboundCount, surplusCount });
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        ///// <summary>
        ///// æˆå“è´§ä½
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("ProLocationStatistics"), AllowAnonymous]
        //public WebResponseContent ProLocationStatistics(int Id)
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        //获取成品的货位
        //        int freeCount = _basicService.LocationInfoService.Repository.QueryData(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.WarehouseId == Id).Count;
        //        int inStockCount = _basicService.LocationInfoService.Repository.QueryData(x => x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && x.WarehouseId == Id).Count;
        //        int lockCount = _basicService.LocationInfoService.Repository.QueryData(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && x.WarehouseId == Id).Count;
        //        content.OK("成功", new { freeCount, inStockCount, lockCount });
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        ///// <summary>
        ///// æˆå“å…¥åº“产量
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("Productions"), AllowAnonymous]
        //public WebResponseContent Productions()
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        List<Object> list = new List<Object>();
        //        DateTime dateTody = DateTime.Today.AddDays(+1);
        //        for (int i = 1; i <= 7; i++)
        //        {
        //            DateTime date = dateTody.AddDays(-1);
        //            List<Dt_MesProInOrder> mesIn = _mesProInOrderService.Repository.Db.Queryable<Dt_MesProInOrder>().Where(x => x.CreateDate < dateTody && x.CreateDate >= date).Includes(x => x.Details).ToList();
        //            int PcsCounts = 0;
        //            foreach (var item in mesIn)
        //            {
        //                PcsCounts+=(int)item.Details.Sum(x=>x.OKPCSQTY);
        //            }
        //            dateTody = date;
        //            list.Add(new { today = date.ToString("MM/dd"), pcsCounts = PcsCounts });
        //        }
        //        content.OK("成功", list);
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        ///// <summary>
        ///// æˆå“å‡ºåº“产量
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("ProductionsOut"), AllowAnonymous]
        //public WebResponseContent ProductionsOut()
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        List<Object> list = new List<Object>();
        //        DateTime dateTody = DateTime.Today.AddDays(+1);
        //        for (int i = 1; i <= 7; i++)
        //        {
        //            DateTime date = dateTody.AddDays(-1);
        //            List<Dt_ProOutOrder> mesIn = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.CreateDate < dateTody && x.CreateDate >= date).Includes(x => x.Details).ToList();
        //            int PcsCounts = 0;
        //            foreach (var item in mesIn)
        //            {
        //                PcsCounts += (int)item.Details.Sum(x => x.QtyPcs);
        //            }
        //            dateTody = date;
        //            list.Add(new { today = date.ToString("MM/dd"), pcsCounts = PcsCounts });
        //        }
        //        content.OK("成功", list);
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        ///// <summary>
        ///// æˆå“å‡ºåº“产量
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("ProductionRanking"), AllowAnonymous]
        //public WebResponseContent ProductionRanking()
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        var list = _proStockInfoDetailService.Repository.QueryData(x => true).GroupBy(x => x.ProductCode).Select(x => new { pCode = x.Key, qtys = x.Sum(x=>x.StockPcsQty) }).OrderByDescending(x=>x.qtys).Take(5);
        //        content.OK("成功", list);
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        ///// <summary>
        ///// æˆå“åº“å­˜
        ///// </summary>
        ///// <param name="model"></param>
        ///// <returns></returns>
        //[HttpPost, Route("ProductionStock"), AllowAnonymous]
        //public WebResponseContent ProductionStock()
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        int cpCount = 0;
        //        int yfCount = 0;
        //        int wsCount = 0;
        //        List<Dt_ProStockInfo> cpproStockInfos = _proStockInfoService.Repository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.ProStockAttribute == ProStockAttributeEnum.成品.ObjToInt()).Includes(x => x.proStockInfoDetails).ToList();
        //        List<Dt_ProStockInfo> yfproStockInfos = _proStockInfoService.Repository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.ProStockAttribute == ProStockAttributeEnum.研发.ObjToInt()).Includes(x => x.proStockInfoDetails).ToList();
        //        List<Dt_ProStockInfo> wsproStockInfos = _proStockInfoService.Repository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.ProStockAttribute == ProStockAttributeEnum.尾数.ObjToInt()).Includes(x => x.proStockInfoDetails).ToList();
        //        foreach (var item in cpproStockInfos)
        //        {
        //            cpCount +=(int) item.proStockInfoDetails.Sum(x => x.StockPcsQty);
        //        }
        //        foreach (var item in yfproStockInfos)
        //        {
        //            yfCount += (int)item.proStockInfoDetails.Sum(x => x.StockPcsQty);
        //        }
        //        foreach (var item in wsproStockInfos)
        //        {
        //            wsCount += (int)item.proStockInfoDetails.Sum(x => x.StockPcsQty);
        //        }
        //        content.OK("成功", new { cpCount, yfCount, wsCount });
        //    }
        //    catch (Exception ex)
        //    {
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -4,9 +4,6 @@
using WIDESEA_Core;
using WIDESEA_DTO;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
using WIDESEA_ITaskInfoService;
using WIDESEA_TaskInfoService;
using WIDESEA_DTO.ERP;
@@ -24,12 +21,10 @@
    [ApiController]
    public class MesController : ControllerBase
    {
        private readonly IOutboundService _outboundService;
        private readonly ITaskService _taskService;
        public MesController(IOutboundService outboundService, ITaskService taskService)
        public MesController(ITaskService taskService)
        {
            _outboundService = outboundService;
            _taskService = taskService;
        }
@@ -78,17 +73,6 @@
        }
        /// <summary>
        /// åŸºæ¿å‡ºåº“
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("SubstrateOut"), AllowAnonymous]
        public MesResponseContent SubstrateOut([FromBody] Root<SubstrateOutModel> model)
        {
            return _taskService.SubstrateOut(model.Content);
        }
        /// <summary>
        /// åŸºæ¿ä½™æ–™é€€åº“
        /// </summary>
        /// <param name="model"></param>
@@ -108,26 +92,7 @@
        {
            return _taskService.UploadMesMaterialLotaAcept(model);
        }
        /// <summary>
        /// MES成品内包信息接收
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("BagInfoSync"), AllowAnonymous]
        public MesResponseContent BagInfoSync([FromBody] Root<MesBagInfoModel> model)
        {
            return _taskService.BagInfoSync(model.Content);
        }
        /// <summary>
        /// MES成品外包信息接收
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("BoxStockin"), AllowAnonymous]
        public MesResponseContent BoxStockin([FromBody] Root<MesBoxInfoModel> model)
        {
            return _taskService.BoxStockin(model.Content);
        }
        /// <summary>
        /// MES成品出库接口调用
        /// </summary>
@@ -136,26 +101,6 @@
        public WebResponseContent ShipmentOrderSync([FromBody] MesShipmentOrderSync model)
        {
            return _taskService.ShipmentOrderSync(model);
        }
        /// <summary>
        /// æˆå“è¿”工提库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost,Route("RworkTask"),AllowAnonymous]
        public MesResponseContent RworkTask([FromBody] Root<RworkTaskModel> model)
        {
            return _taskService.RworkTask(model.Content);
        }
        /// <summary>
        /// åº“存板出库同步接口
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ProductOutBoundSync"), AllowAnonymous]
        public WebResponseContent ProductOutBoundSync([FromBody] MesProductOutBound model)
        {
            return _outboundService.RworkOutboundOrderService.ProductOutBoundSync(model);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/MesOutboundOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/MesRworkOutboundOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutProStockInfoController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderDetailController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/PDAController.cs
@@ -5,8 +5,6 @@
using WIDESEA_Core.BaseController;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
using WIDESEA_ITaskInfoService;
using System.IO;
using WIDESEA_Model.Models;
@@ -21,14 +19,10 @@
    [Authorize, ApiController]
    public class PDAController : Controller
    {
        private readonly IInboundService _inboundService;
        private readonly IOutboundService _outboundService;
        private readonly ITaskService _taskService;
        public PDAController(ITaskService taskService, IInboundService inboundService, IOutboundService outboundService)
        public PDAController(ITaskService taskService)
        {
            _inboundService = inboundService;
            _outboundService = outboundService;
            _taskService = taskService;
        }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/ProStockViewController.cs
@@ -49,14 +49,6 @@
                   );
            return Json(result);
        }
        /// <summary>
        /// èŽ·å–å¹³åº“åº“å­˜
        /// </summary>
        [HttpPost, Route("GetProPKSelectStocks"),AllowAnonymous]
        public List<ProStockViewDTO> GetProPKSelectStocks(int orderId)
        {
            return _stockViewService.GetProPKSelectStocks(orderId);
        }
        private object InvokeService(string methodName, object[] parameters)
        {
            Type t = _stockViewService.GetType();
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
@@ -21,31 +21,6 @@
        public StockInfoController(IStockInfoService service) : base(service)
        {
        }
        /// <summary>
        /// æŸ¥è¯¢è®¢å•立库库存视图
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetStockSelectViews")]
        public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
        {
            return Service.GetStockSelectViews(orderId, materielCode);
        }
        /// <summary>
        /// æŸ¥è¯¢è®¢å•平库库存视图
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetPKStockSelectViews")]
        public List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode)
        {
            return Service.GetPKStockSelectViews(orderId, materielCode);
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å’Œåº“区查询库存信息
        /// </summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -21,28 +21,6 @@
        public TaskController(ITaskService service) : base(service)
        {
        }
        ///// <summary>
        ///// å°†WMS任务推送至WCS
        ///// </summary>
        ///// <returns></returns>
        //[HttpPost, HttpGet, Route("PushTasksToWCS"), AllowAnonymous]
        //public WebResponseContent PushTasksToWCS()
        //{
        //    return Service.PushTasksToWCS();
        //}
        /// <summary>
        /// ç”³è¯·å…¥åº“任务
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("RequestInboundTask"), AllowAnonymous]
        public WebResponseContent RequestInboundTask([FromBody] SaveModel saveModel)
        {
            return Service.RequestInboundTask(saveModel);
        }
        /// <summary>
        /// ç©ºç®±å…¥åº“
        /// </summary>
@@ -68,19 +46,6 @@
        }
        /// <summary>
        /// WCS申请入库任务(分配货位)
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="roadwayNo"></param>
        /// <param name="palletCode"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("DeviceRequestInboundTask"), AllowAnonymous]
        public WebResponseContent DeviceRequestInboundTask(string stationCode, string roadwayNo, string palletCode,string materielBoxCode = "")
        {
            return Service.DeviceRequestInboundTask(stationCode, roadwayNo, palletCode, materielBoxCode);
        }
        /// <summary>
        /// WCS申请入库任务(不分配货位)
        /// </summary>
        /// <param name="stationCode"></param>
@@ -90,20 +55,6 @@
        public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode)
        {
            return Service.DeviceRequestInboundTaskSimple(stationCode, palletCode);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="palletCode"></param>
        /// <param name="roadwayNos"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("DeviceRequestInboundTaskByRoadways"), AllowAnonymous]
        public WebResponseContent DeviceRequestInboundTaskByRoadways(string stationCode, string palletCode, int heightType, [FromBody] List<string> roadwayNos)
        {
            return Service.DeviceRequestInboundTaskByRoadways(stationCode, palletCode, roadwayNos, heightType);
        }
        /// <summary>
@@ -130,63 +81,6 @@
        {
            return Service.AssignInboundTaskLocationByHeight(taskNum, roadwayNo, heightType);
        }
        /// <summary>
        /// å…¥åº“任务完成
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("InboundTaskCompleted"), AllowAnonymous]
        public WebResponseContent InboundTaskCompleted(int taskNum)
        {
            return Service.InboundTaskCompleted(taskNum);
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GenerateOutboundTask"), AllowAnonymous]
        public WebResponseContent GenerateOutboundTask(int orderDetailId, [FromBody] List<StockSelectViewDTO> stockSelectViews)
        {
            return Service.GenerateOutboundTask(orderDetailId, stockSelectViews);
        }
        /// <summary>
        /// å¹³åº“直接出库
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GeneratePKOutboundTask"), AllowAnonymous]
        public WebResponseContent GeneratePKOutboundTask(int orderDetailId, [FromBody] List<StockSelectViewDTO> stockSelectViews)
        {
            return Service.GeneratePKOutboundTask(orderDetailId, stockSelectViews);
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GenerateOutboundTasks"), AllowAnonymous]
        public WebResponseContent GenerateOutboundTasks([FromBody] int[] keys)
        {
            return Service.GenerateOutboundTasks(keys);
        }
        /// <summary>
        /// ç”Ÿæˆæˆå“å‡ºåº“任务
        /// </summary>
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("OutProductTask"), AllowAnonymous]
        public async Task<WebResponseContent> OutProductTask([FromBody] int[] keys, string StationCode, int Grade)
        {
            return await Service.OutProductTask(keys, StationCode, Grade);
        }
        /// <summary>
        /// æˆå“ä½™æ–™é€€åº“入仓
        /// </summary>
@@ -208,34 +102,6 @@
        public WebResponseContent EmptyBackTask(string barCode, string startPoint)
        {
            return Service.EmptyBackTask(barCode, startPoint);
        }
        /// <summary>
        /// ç”Ÿæˆæˆå“æåº“任务
        /// </summary>
        [HttpPost, HttpGet, Route("OutProRworkTask"), AllowAnonymous]
        public async Task<WebResponseContent> OutProRworkTask([FromBody] int[] keys, string StationCode, int Grade)
        {
            return await Service.OutProductTask(keys, StationCode, Grade);
        }
        ///// <summary>
        ///// ç”ŸæˆMESPP仓大卷出库任务
        ///// </summary>
        ///// <param name="keys"></param>
        ///// <returns></returns>
        //[HttpPost, HttpGet, Route("MESPPGenerateOutboundTasks"), AllowAnonymous]
        //public WebResponseContent MESPPGenerateOutboundTasks([FromBody] int[] keys)
        //{
        //    return Service.MESPPGenerateOutboundTasks(keys);
        //}
        /// <summary>
        /// å‡ºåº“任务完成
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("OutboundTaskCompleted"), AllowAnonymous]
        public WebResponseContent OutboundTaskCompleted(int taskNum)
        {
            return Service.OutboundTaskCompleted(taskNum);
        }
        /// <summary>
@@ -297,19 +163,6 @@
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="roadwayNos"></param>
        /// <param name="palletCode"></param>
        /// <param name="heightType"></param>
        /// <returns></returns>
        [HttpPost, Route("AssignRoadwayByHeightAndCode"), AllowAnonymous]
        public WebResponseContent AssignRoadwayByHeightAndCode([FromBody] List<string> roadwayNos, string palletCode, int heightType = 0)
        {
            return Service.AssignRoadwayByHeightAndCode(roadwayNos, palletCode, heightType);
        }
        /// <summary>
        /// åˆ†é…å··é“(带任务号)
        /// </summary>
        /// <param name="taskNum"></param>
@@ -333,17 +186,6 @@
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        [HttpPost, Route("HandSubstrateOut")]
        public WebResponseContent HandSubstrateOut(int orderId)
        {
            return Service.HandSubstrateOut(orderId);
        }
        /// <summary>
        /// ä¿®æ”¹ä»»åŠ¡çŠ¶æ€
        /// </summary>
        /// <param name="task"></param>
@@ -363,16 +205,6 @@
        public WebResponseContent AGVTasks([FromBody] SaveModel saveModel)
        {
            return Service.AGVTasks(saveModel);
        }
        /// <summary>
        /// æˆå“æŒ‡å®šå‡ºåº“
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        [HttpPost, Route("OutProductSelect"), AllowAnonymous]
        public WebResponseContent OutProductSelect(int orderDetailId,[FromBody] List<ProStockViewDTO> proStockViews)
        {
            return Service.OutProductSelect(orderDetailId, proStockViews);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -27,20 +27,9 @@
        public CustomProfile()
        {
            CreateMap<Sys_Menu, MenuDTO>();
            CreateMap<InboundOrderDetailAddDTO, Dt_InboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
            CreateMap<InboundOrderAddDTO, Dt_InboundOrder>();
            CreateMap<Dt_StockInfoDetail, Dt_StockQuantityChangeRecord>().ForMember(x => x.SerilNumber, b => b.MapFrom(b => b.SerialNumber)).ForMember(x => x.StockDetailId, b => b.MapFrom(b => b.Id));
            CreateMap<OutboundOrderDetailAddDTO, Dt_OutboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
            CreateMap<OutboundOrderAddDTO, Dt_OutboundOrder>();
            CreateMap<Dt_ReceiveOrderDetail, Dt_CheckOrder>().ForMember(a => a.ReceivedQuantity, b => b.MapFrom(x => x.ReceivedQuantity)).ForMember(a => a.MaterielCode, b => b.MapFrom(x => x.MaterielCode)).ForMember(a => a.CheckOrderStatus, b => b.MapFrom(x => CheckOrderStatusEnum.NotCheck.ObjToInt()));
            CreateMap<Dt_Task, WMSTaskDTO>();
            CreateMap<MESBagDetail, Dt_MesProInOrderDetail>().ForMember(x => x.OverInQuantity, b => b.MapFrom(b => 0));
            CreateMap<ErpProOutOrderDetailds, Dt_ProOutOrderDetail>().ForMember(x => x.ProOrderDetailStatus, b => b.MapFrom(b => 0)).ForMember(x => x.OverQtyPcs, b => b.MapFrom(b => 0));
            CreateMap<Dt_MesProInOrderDetail, Dt_ProStockInfoDetail>().ForMember(x => x.ProOutDetailStatus, b => b.MapFrom(b => StockStatusEmun.组盘暂存.ObjToInt())).ForMember(x => x.OutboundQuantity, b => b.MapFrom(b => 0)).ForMember(x => x.StockPcsQty, b => b.MapFrom(b => b.OKPCSQTY));
            CreateMap<ErpProductWarehousingOrderDTO, Dt_ErpProInOrder>().ForMember(x => x.ProSaleOrderNo, b => b.MapFrom(b => b.SaleOrder)).ForMember(x => x.Remark, b => b.MapFrom(b => b.Note)).ForMember(x => x.UpperOrderNo, b => b.MapFrom(b => b.TransferNo)).ForMember(x => x.ProStockAttribute, b => b.MapFrom(b => ProStockAttributeEnum.成品.ObjToInt())).ForMember(x => x.ProInStatus, b => b.MapFrom(b => InOrderStatusEnum.未开始.ObjToInt()));
            CreateMap<ErpProductTransferOrderDTO, Dt_ErpProTransferOrder>().ForMember(x => x.ProSaleOrderNo, b => b.MapFrom(b => b.SaleOrder)).ForMember(x => x.Remark, b => b.MapFrom(b => b.Note)).ForMember(x => x.UpperOrderNo, b => b.MapFrom(b => b.TransferNo)).ForMember(x => x.OrderType, b => b.MapFrom(b => ErpProOutTypeEnum.ProOutAllocat.ObjToInt())).ForMember(x => x.ProStockAttribute, b => b.MapFrom(b => ProStockAttributeEnum.研发.ObjToInt()));
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj
@@ -92,6 +92,9 @@
    </ItemGroup>
    
    <ItemGroup>
      <Folder Include="Controllers\Check\" />
      <Folder Include="Controllers\Inbound\" />
      <Folder Include="Controllers\Outbound\" />
      <Folder Include="Log\" />
    </ItemGroup>
</Project>
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/½Ó²µÌ¨ÓëAGV ½»»¥.xls
Binary files differ