From 0ff90611b7a99716d4f3b0550eb1c6c825481bd6 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Thu, 15 May 2025 15:12:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9F=E5=A0=82=E8=BF=9B=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CanteenSpuController.java | 23 ++++++ .../canteen/service/CanteenSpuService.java | 10 +++ .../service/impl/CanteenSpuServiceImpl.java | 70 ++++++++++++++++++ .../2025-03/debug.2025-03-11.0.log.gz | Bin 0 -> 9209 bytes 4 files changed, 103 insertions(+) create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2025-03/debug.2025-03-11.0.log.gz diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java index 739137df3..1c079198c 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java @@ -11,6 +11,7 @@ import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO; import com.bsd.pjcloud.canteen.entity.CanteenErpMaterialEntity; import com.bsd.pjcloud.canteen.entity.CanteenOnlineSpuEntity; import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuSimpleVO; +import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuStockVO; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; @@ -60,6 +61,14 @@ public class CanteenSpuController { } + @Operation(summary = "erp分页查询", description = "erp分页查询") + @GetMapping("/erp/page") + @PreAuthorize("@pms.hasPermission('canteen_canteenSpu_view')") + public R> getCanteenSpuErpPage(@ParameterObject Page page, @ParameterObject CanteenSpuEntity canteenSpu) { + return R.ok(canteenSpuService.erpPageScope(page, canteenSpu)); + } + + /** * 选择菜品分页查询 * 1.生产加工模版选择菜品 @@ -130,6 +139,20 @@ public class CanteenSpuController { return R.ok(canteenSpuService.updateById(canteenSpu)); } + /** + * 修改菜品spu + * + * @param canteenSpu 菜品spu + * @return R + */ +// @Operation(summary = "修改erp菜品库存", description = "修改erp菜品库存") +// @SysLog("修改erp菜品库存") +// @PutMapping("/editor") +// @PreAuthorize("@pms.hasPermission('canteen_canteenSpu_edit')") +// public R updateById(@RequestBody CanteenSpuEntity canteenSpu) { +// return R.ok(canteenSpuService.updateById(canteenSpu)); +// } + /** * 通过id删除菜品spu * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenSpuService.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenSpuService.java index 76f07d374..5302e2561 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenSpuService.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenSpuService.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.canteen.dto.CanteenDailySpuDTO; import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuSimpleVO; +import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuStockVO; import com.bsd.pjcloud.common.core.util.R; public interface CanteenSpuService extends IService { @@ -54,4 +55,13 @@ public interface CanteenSpuService extends IService { Object pageDailyScope(Page page, CanteenDailySpuDTO canteenDailySpuDTO); Page getCanteenSpuSimplePageScope(Page page, CanteenSpuEntity canteenSpu); + + + /** + * erp分页查询 + * @param page + * @param canteenSpu 查询参数 + * @return 分页菜品库存VO + */ + Page erpPageScope(Page page, CanteenSpuEntity canteenSpu); } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java index fb6cd69a3..72ecfb178 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java @@ -11,13 +11,17 @@ import com.bsd.pjcloud.canteen.entity.CanteenCategoryEntity; import com.bsd.pjcloud.canteen.entity.CanteenDailyMenuEntity; import com.bsd.pjcloud.canteen.entity.CanteenOnlineSpuEntity; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; +import com.bsd.pjcloud.canteen.entity.CanteenStockEntity; import com.bsd.pjcloud.canteen.mapper.CanteenCategoryMapper; import com.bsd.pjcloud.canteen.mapper.CanteenDailyMenuMapper; import com.bsd.pjcloud.canteen.mapper.CanteenSpuMapper; +import com.bsd.pjcloud.canteen.mapper.CanteenStockMapper; import com.bsd.pjcloud.canteen.service.CanteenDailyMenuService; import com.bsd.pjcloud.canteen.service.CanteenSpuService; +import com.bsd.pjcloud.canteen.service.CanteenStockService; import com.bsd.pjcloud.canteen.vo.ADCanteenSpuListVO; import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuSimpleVO; +import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuStockVO; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -27,6 +31,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -45,6 +50,7 @@ public class CanteenSpuServiceImpl extends ServiceImpl wrapper) { return baseMapper.selectListByScope(wrapper, DataScope.of()); @@ -149,5 +155,69 @@ public class CanteenSpuServiceImpl extends ServiceImpl erpPageScope(Page page, CanteenSpuEntity canteenSpu) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(StrUtil.isNotBlank(canteenSpu.getName()), CanteenSpuEntity::getName, canteenSpu.getName()); + wrapper.eq(Objects.nonNull(canteenSpu.getCategoryId()), CanteenSpuEntity::getCategoryId, canteenSpu.getCategoryId()); + wrapper.orderByAsc(CanteenSpuEntity::getSort).orderByDesc(CanteenSpuEntity::getId); + + // 查询SPU分页数据 + Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); + List records = pageData.getRecords(); + + // 构建返回的VO列表 + List resultList = new ArrayList<>(); + + if (!CollectionUtils.isEmpty(records)) { + // 获取所有SPU ID + List spuIds = records.stream() + .map(CanteenSpuEntity::getId) + .collect(Collectors.toList()); + + // 查询对应的库存信息 + LambdaQueryWrapper stockWrapper = Wrappers.lambdaQuery(); + stockWrapper.in(CanteenStockEntity::getItemId, spuIds); + stockWrapper.eq(CanteenStockEntity::getItemType, "2"); // 假设"成品"表示菜品的类型 + List stockList = canteenStockMapper.selectList(stockWrapper); + + // 将库存信息映射到SPU ID + Map stockMap = stockList.stream() + .collect(Collectors.toMap(CanteenStockEntity::getItemId, stock -> stock, (v1, v2) -> v1)); + + // 构建返回结果 + for (CanteenSpuEntity spu : records) { + CanteenSpuStockVO vo = new CanteenSpuStockVO(); +// vo.setId(spu.getId()); + vo.setName(spu.getName()); + vo.setPicUrl(spu.getPicUrl()); + + // 设置库存信息 + CanteenStockEntity stock = stockMap.get(spu.getId()); + if (stock != null) { + vo.setId(stock.getId()); + vo.setBaseStock(stock.getBaseStock()); + vo.setCurrentStock(stock.getCurrentStock()); + } else { + // 如果没有对应的库存记录,则设置默认值 + vo.setBaseStock(0.0); + vo.setCurrentStock(0.0); + } + + resultList.add(vo); + } + } + + // 构建分页返回对象 + Page resultPage = new Page<>(); + resultPage.setRecords(resultList); + resultPage.setTotal(pageData.getTotal()); + resultPage.setSize(pageData.getSize()); + resultPage.setCurrent(pageData.getCurrent()); + resultPage.setPages(pageData.getPages()); + + return resultPage; + } + } \ No newline at end of file diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2025-03/debug.2025-03-11.0.log.gz b/pjcloud-thirdparty/pjcloud-thirdparty-biz/logs/pjcloud-thirdparty-biz/2025-03/debug.2025-03-11.0.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..e9edc4390f7b1123656340b73e956fdfd49985b0 GIT binary patch literal 9209 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