| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockAdjustReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockFreezeReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockMoveReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockFreezeReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockListReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockBagPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmMaterialStockBagRespVO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.materialstockbag.MesWmMaterialStockBagMapper; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.materialstock.vo.MesWmStockSummaryRespVO; |
| | | import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi; |
| | | import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstockbag.MesWmMaterialStockBagDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; |
| | |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | private MesMdVendorService vendorService; |
| | | private SrmSupplierApi srmSupplierApi; |
| | | @Resource |
| | | private MesWmMaterialStockBagMapper materialStockBagMapper; |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "获得库存记录") |
| | |
| | | return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/bag-details") |
| | | @Operation(summary = "查询库存袋码明细") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:query')") |
| | | public CommonResult<PageResult<MesWmMaterialStockBagRespVO>> getMaterialStockBagDetails( |
| | | @Valid MesWmMaterialStockBagPageReqVO pageReqVO) { |
| | | PageResult<MesWmMaterialStockBagRespVO> result = new PageResult<>(); |
| | | PageResult<cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstockbag.MesWmMaterialStockBagDO> page = |
| | | materialStockBagMapper.selectPage(pageReqVO); |
| | | return success(new PageResult<>(BeanUtils.toBean(page.getList(), MesWmMaterialStockBagRespVO.class), page.getTotal())); |
| | | } |
| | | |
| | | @PutMapping("/update-frozen") |
| | | @Operation(summary = "更新库存冻结状态") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:update')") |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PostMapping("/adjust") |
| | | @Operation(summary = "库存调整(自定义出入库)") |
| | | @PostMapping("/adjust-in") |
| | | @Operation(summary = "自定义入库") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:adjust')") |
| | | public CommonResult<Long> adjustMaterialStock(@Valid @RequestBody MesWmMaterialStockAdjustReqVO reqVO) { |
| | | return success(materialStockService.adjustMaterialStock(reqVO)); |
| | | public CommonResult<Long> adjustMaterialStockIn(@Valid @RequestBody MesWmMaterialStockAdjustReqVO reqVO) { |
| | | return success(materialStockService.adjustMaterialStockIn(reqVO)); |
| | | } |
| | | |
| | | @PostMapping("/adjust-out") |
| | | @Operation(summary = "自定义出库") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:adjust')") |
| | | public CommonResult<Long> adjustMaterialStockOut(@Valid @RequestBody MesWmMaterialStockAdjustReqVO reqVO) { |
| | | return success(materialStockService.adjustMaterialStockOut(reqVO)); |
| | | } |
| | | |
| | | @PostMapping("/move") |
| | | @Operation(summary = "库存移库") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:update')") |
| | | public CommonResult<Boolean> moveMaterialStock(@Valid @RequestBody MesWmMaterialStockMoveReqVO reqVO) { |
| | | materialStockService.moveMaterialStock(reqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/summary-by-item") |
| | | @Operation(summary = "按品种汇总库存数量") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:query')") |
| | | public CommonResult<List<MesWmStockSummaryRespVO>> getStockSummaryByItem( |
| | | MesWmMaterialStockListReqVO reqVO) { |
| | | return success(materialStockService.getStockSummaryByItem(reqVO)); |
| | | } |
| | | |
| | | @GetMapping("/summary-by-batch") |
| | | @Operation(summary = "按批次汇总库存数量") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:query')") |
| | | public CommonResult<List<MesWmStockSummaryRespVO>> getStockSummaryByBatch( |
| | | MesWmMaterialStockListReqVO reqVO) { |
| | | return success(materialStockService.getStockSummaryByBatch(reqVO)); |
| | | } |
| | | |
| | | @GetMapping("/summary-by-warehouse") |
| | | @Operation(summary = "按仓库汇总库存数量") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-material-stock:query')") |
| | | public CommonResult<List<MesWmStockSummaryRespVO>> getStockSummaryByWarehouse( |
| | | MesWmMaterialStockListReqVO reqVO) { |
| | | return success(materialStockService.getStockSummaryByWarehouse(reqVO)); |
| | | } |
| | | |
| | | @GetMapping("/export-excel") |
| | |
| | | convertSet(list, MesWmMaterialStockDO::getLocationId)); |
| | | Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap( |
| | | convertSet(list, MesWmMaterialStockDO::getAreaId)); |
| | | Map<Long, MesMdVendorDO> vendorMap = vendorService.getVendorMap( |
| | | convertSet(list, MesWmMaterialStockDO::getVendorId)); |
| | | Map<Long, Long> bagCountMap = materialStockBagMapper.selectListByMaterialStockIds( |
| | | convertSet(list, MesWmMaterialStockDO::getId)).stream() |
| | | .collect(Collectors.groupingBy(MesWmMaterialStockBagDO::getMaterialStockId, Collectors.counting())); |
| | | Map<Long, SrmSupplierRespDTO> vendorMap = srmSupplierApi.getSupplierList( |
| | | convertSet(list, MesWmMaterialStockDO::getVendorId)).getCheckedData().stream() |
| | | .collect(Collectors.toMap(SrmSupplierRespDTO::getId, s -> s)); |
| | | // 2. 构建结果 |
| | | return BeanUtils.toBean(list, MesWmMaterialStockRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | |
| | | area -> vo.setAreaName(area.getName())); |
| | | MapUtils.findAndThen(vendorMap, vo.getVendorId(), |
| | | vendor -> vo.setVendorName(vendor.getName())); |
| | | vo.setBagCount(bagCountMap.getOrDefault(vo.getId(), 0L)); |
| | | vo.setBagDetailSupported(bagCountMap.containsKey(vo.getId())); |
| | | // 计算可用量 = 在库数量 - 冻结数量 - 占用量 |
| | | BigDecimal quantity = vo.getQuantity() != null ? vo.getQuantity() : BigDecimal.ZERO; |
| | | BigDecimal frozenQty = vo.getFrozenQuantity() != null ? vo.getFrozenQuantity() : BigDecimal.ZERO; |