From 0e9cdb694f7793b95d2633e963820cd42bbce314 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Thu, 24 Apr 2025 18:25:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=93=81=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../canteen/dto/CanteenDailyMenuCVDTO.java | 34 ++++++ .../CanteenDailyMenuController.java | 12 ++ .../service/CanteenDailyMenuService.java | 10 ++ .../impl/CanteenDailyMenuServiceImpl.java | 105 ++++++++---------- 4 files changed, 104 insertions(+), 57 deletions(-) create mode 100644 pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenDailyMenuCVDTO.java diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenDailyMenuCVDTO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenDailyMenuCVDTO.java new file mode 100644 index 000000000..e0972f257 --- /dev/null +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/dto/CanteenDailyMenuCVDTO.java @@ -0,0 +1,34 @@ +package com.bsd.pjcloud.canteen.dto; + + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class CanteenDailyMenuCVDTO { + + /** + * 原商户id + */ + @NotNull + private Long sourceMerchantId; + + + /** + * 目标商户id + */ + @NotNull + private List targetMerchantId; + + + + @Schema(description = "开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull + private LocalDate startTime; +} diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java index fe0e6deaf..65368d40b 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenDailyMenuController.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; @@ -108,6 +109,14 @@ public class CanteenDailyMenuController { return R.ok(canteenDailyMenuService.updateById(canteenDailyMenu)); } + + @Operation(summary = "一键复制", description = "一键复制") + @SysLog("一键复制") + @PostMapping("/cv") + @PreAuthorize("@pms.hasPermission('canteen_canteenDailyMenu_add')") + public R cv(@RequestBody CanteenDailyMenuCVDTO creenDailyMenuCVDTO) { + return canteenDailyMenuService.cv(creenDailyMenuCVDTO); + } /** * 通过id删除每日菜谱 * @@ -214,4 +223,7 @@ public class CanteenDailyMenuController { } return R.ok(canteenDailyMenuService.selectTimeFood(time, merchantId, categoryId)); } + + + } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java index 492f360e3..90b7be021 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/CanteenDailyMenuService.java @@ -2,10 +2,12 @@ package com.bsd.pjcloud.canteen.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenDailyMenuEntity; import com.bsd.pjcloud.canteen.vo.ADCanteenDailyMenuListVO; +import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.security.service.PjcloudUser; import java.util.ArrayList; @@ -50,4 +52,12 @@ public interface CanteenDailyMenuService extends IService getCanteenMenuListScope(String day, Integer hourType, Long categoryId, Long merchantId); Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO); + + + /** + * 一键复制 + * @param creenDailyMenuCVDTO + * @return + */ + R cv(CanteenDailyMenuCVDTO creenDailyMenuCVDTO); } \ No newline at end of file diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java index bc29f15b7..b631fb63a 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenDailyMenuServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.canteen.dto.CanteenDailyMenuCVDTO; import com.bsd.pjcloud.canteen.dto.DailyMenuAll; import com.bsd.pjcloud.canteen.dto.app.DailyMenuDTO; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; @@ -143,67 +144,57 @@ public class CanteenDailyMenuServiceImpl extends ServiceImpl canteenDailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getMerchantId, dailyMenuDTO.getMerchantId()); -// canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime, dailyMenuDTO.getStartTime()); -// canteenDailyMenuEntityLambdaQueryWrapper.eq(dailyMenuDTO.getHourType() != null, -// CanteenDailyMenuEntity::getHourType, dailyMenuDTO.getHourType()); -// -// //查询 -// LambdaQueryWrapper onlineFoodSpuDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// onlineFoodSpuDOLambdaQueryWrapper.eq(null != dailyMenuDTO.getCategoryId(), CanteenSpuEntity::getCategoryId, dailyMenuDTO.getCategoryId()); -// onlineFoodSpuDOLambdaQueryWrapper.eq(CanteenSpuEntity::getIsShow, "1"); -// List spuEntities = canteenSpuService.list(onlineFoodSpuDOLambdaQueryWrapper); -// -// if (CollectionUtils.isNotEmpty(spuEntities)){ -// List spuIds = spuEntities.stream().map(CanteenSpuEntity::getId).collect(Collectors.toList()); -// canteenDailyMenuEntityLambdaQueryWrapper.notIn(CanteenDailyMenuEntity::getSpuId, spuIds); -// } -// -// Page pageData = baseMapper.selectPage(page, canteenDailyMenuEntityLambdaQueryWrapper); -// List canteenDailyMenuEntities = pageData.getRecords(); -// if (CollectionUtils.isNotEmpty(canteenDailyMenuEntities)) { -// List spuIds = canteenDailyMenuEntities.stream().map(CanteenDailyMenuEntity::getSpuId).distinct().collect(Collectors.toList()); -// LambdaQueryWrapper spuDOLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// onlineFoodSpuDOLambdaQueryWrapper.in(CanteenSpuEntity::getId, spuIds); -// List list = canteenSpuService.list(spuDOLambdaQueryWrapper); -// // 按 id 分组成 Map -// Map spuEntityMap = list.stream() -// .collect(Collectors.toMap(CanteenSpuEntity::getId, spu -> spu)); -// // 构造新的 VO 列表 -// List dailyMenuVOList = canteenDailyMenuEntities.stream() -// .map(menu -> { -// DailyMenuAppVO vo = new DailyMenuAppVO(); -// BeanUtils.copyProperties(menu, vo); // 拷贝通用属性 -// CanteenSpuEntity spuEntity = spuEntityMap.get(menu.getSpuId()); -// if (spuEntity != null) { -// vo.setSpuId(spuEntity.getId()); -// vo.setStock(spuEntity.getStock()); -// vo.setPrice(spuEntity.getPrice()); -// vo.setPicUrl(spuEntity.getPicUrl()); -// vo.setName(spuEntity.getName()); -// vo.setSort(spuEntity.getSort()); -// vo.setIsShow(spuEntity.getIsShow()); -// // 其他需要的字段 -// } -// return vo; -// }) -// .collect(Collectors.toList()); -//// dailyMenuVOList.sort(Comparator.comparing(DailyMenuAppVO::getSort)); -// // 修改排序逻辑,处理null值情况 -// dailyMenuVOList.sort(Comparator.comparing( -// DailyMenuAppVO::getSort, -// Comparator.nullsFirst(Comparator.naturalOrder()) -// )); -// pageData.setRecords(dailyMenuVOList); - Page pageData = baseMapper.selectTimeFoodPage(page, dailyMenuDTO); return pageData; -// } - -// return null; } + @Override + @Transactional + public R cv(CanteenDailyMenuCVDTO creenDailyMenuCVDTO) { + LocalDate startTime = creenDailyMenuCVDTO.getStartTime(); + //取出复制源 + Long sourceMerchantId = creenDailyMenuCVDTO.getSourceMerchantId(); + LambdaQueryWrapper canteenDailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + canteenDailyMenuEntityLambdaQueryWrapper + .eq(CanteenDailyMenuEntity::getMerchantId, sourceMerchantId); + canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime, startTime); + List canteenDailyMenuEntities = baseMapper.selectList(canteenDailyMenuEntityLambdaQueryWrapper); + if (CollectionUtils.isEmpty(canteenDailyMenuEntities)) { + return R.failed("复制源数据为空"); + } + // 目标源处理 + List targetMerchantIds = creenDailyMenuCVDTO.getTargetMerchantId(); + for (Long targetMerchantId : targetMerchantIds) { + // 查询目标商户已存在的spuId + Set existKeys = baseMapper.selectList(new LambdaQueryWrapper() + .eq(CanteenDailyMenuEntity::getMerchantId, targetMerchantId) + .eq(CanteenDailyMenuEntity::getStartTime, startTime) + .select(CanteenDailyMenuEntity::getSpuId, CanteenDailyMenuEntity::getHourType)) + .stream() + .map(menu -> menu.getSpuId() + "_" + menu.getHourType()) // 生成唯一组合键 + .collect(Collectors.toSet()); + + + // 过滤需要新增的数据 + // 过滤需要新增的数据(同时校验spuId和hourType) + List newEntities = canteenDailyMenuEntities.stream() + .filter(menu -> !existKeys.contains(menu.getSpuId() + "_" + menu.getHourType())) // 关键修改点 + .map(menu -> { + CanteenDailyMenuEntity entity = new CanteenDailyMenuEntity(); + BeanUtils.copyProperties(menu, entity); + entity.setMerchantId(targetMerchantId); + entity.setId(null); + return entity; + }) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(newEntities)) { + saveBatch(newEntities); // 使用批量插入 + sendMqttMsg(targetMerchantId); + } + } + return R.ok(); + } // 发送mq消息 private void sendMqttMsg(Long mchId) { if (ObjectUtil.isEmpty(mchId)) return;