|
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockRespVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockRespVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockSaveReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockSaveReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.iotsapstock.vo.IotSapStockSummaryRespVO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotsapstock.IotSapStockDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotsapstock.IotSapStockDO;
|
|
|
import cn.iocoder.yudao.module.pms.service.iotsapstock.IotSapStockService;
|
|
import cn.iocoder.yudao.module.pms.service.iotsapstock.IotSapStockService;
|
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
@@ -29,6 +30,7 @@ import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
@@ -120,6 +122,48 @@ public class IotSapStockController {
|
|
|
return success(respPage);
|
|
return success(respPage);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @GetMapping("/sapStockSummary")
|
|
|
|
|
+ @Operation(summary = "获得PMS SAP 库存汇总数据 区分币种的总数量 总金额")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('pms:iot-sap-stock:query')")
|
|
|
|
|
+ public CommonResult<List<IotSapStockSummaryRespVO>> sapStockSummary(@Valid IotSapStockPageReqVO pageReqVO) {
|
|
|
|
|
+ // 查询符合条件的库存数量列表
|
|
|
|
|
+ List<IotSapStockDO> sapStockList = iotSapStockService.getIotSapStockList(pageReqVO);
|
|
|
|
|
+ List<IotSapStockSummaryRespVO> summaryList = sapStockList.stream()
|
|
|
|
|
+ // 过滤:币种为空的数据直接丢弃,无统计意义
|
|
|
|
|
+ .filter(stock -> Objects.nonNull(stock.getCurrency()))
|
|
|
|
|
+ // 按币种分组 Map<币种, 同币种库存集合>
|
|
|
|
|
+ .collect(Collectors.groupingBy(IotSapStockDO::getCurrency))
|
|
|
|
|
+ // 遍历分组map,转换为VO列表
|
|
|
|
|
+ .entrySet().stream()
|
|
|
|
|
+ .map(entry -> {
|
|
|
|
|
+ String currency = entry.getKey();
|
|
|
|
|
+ List<IotSapStockDO> groupStocks = entry.getValue();
|
|
|
|
|
+
|
|
|
|
|
+ // 分组内累加总数量(过滤null数量)
|
|
|
|
|
+ BigDecimal groupTotalQty = groupStocks.stream()
|
|
|
|
|
+ .map(IotSapStockDO::getQuantity)
|
|
|
|
|
+ .filter(Objects::nonNull)
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+
|
|
|
|
|
+ // 分组内累加总金额:数量、单价都不为空才计算金额
|
|
|
|
|
+ BigDecimal groupTotalAmt = groupStocks.stream()
|
|
|
|
|
+ .filter(stock -> Objects.nonNull(stock.getQuantity())
|
|
|
|
|
+ && Objects.nonNull(stock.getUnitPrice()))
|
|
|
|
|
+ .map(stock -> stock.getQuantity().multiply(stock.getUnitPrice()))
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+
|
|
|
|
|
+ // 组装VO
|
|
|
|
|
+ IotSapStockSummaryRespVO vo = new IotSapStockSummaryRespVO();
|
|
|
|
|
+ vo.setCurrency(currency);
|
|
|
|
|
+ vo.setTotalQuantity(groupTotalQty);
|
|
|
|
|
+ vo.setTotalAmount(groupTotalAmt);
|
|
|
|
|
+ return vo;
|
|
|
|
|
+ })
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ return success(summaryList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@GetMapping("/export-excel")
|
|
@GetMapping("/export-excel")
|
|
|
@Operation(summary = "导出PMS SAP 库存(通用库存/项目部库存) Excel")
|
|
@Operation(summary = "导出PMS SAP 库存(通用库存/项目部库存) Excel")
|
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-sap-stock:export')")
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-sap-stock:export')")
|