This commit is contained in:
dzc committed 2025-04-24 22:12:36 +08:00
commit 46701dfdc6
4 files changed
+104 -57

No files matched your search

@@ -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<Long> targetMerchantId;
@Schema(description = "开始时间")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@NotNull
private LocalDate startTime;
}
@@ -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));
}
}
@@ -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<CanteenDailyMenuEntity
List<ADCanteenDailyMenuListVO> getCanteenMenuListScope(String day, Integer hourType, Long categoryId, Long merchantId);
Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO);
/**
* 一键复制
* @param creenDailyMenuCVDTO
* @return
*/
R cv(CanteenDailyMenuCVDTO creenDailyMenuCVDTO);
}
@@ -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<CanteenDailyMenuMap
@Override
public Page selectTimeFoodPage(Page page, DailyMenuDTO dailyMenuDTO) {
// LambdaQueryWrapper<CanteenDailyMenuEntity> 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<CanteenSpuEntity> onlineFoodSpuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
// onlineFoodSpuDOLambdaQueryWrapper.eq(null != dailyMenuDTO.getCategoryId(), CanteenSpuEntity::getCategoryId, dailyMenuDTO.getCategoryId());
// onlineFoodSpuDOLambdaQueryWrapper.eq(CanteenSpuEntity::getIsShow, "1");
// List<CanteenSpuEntity> spuEntities = canteenSpuService.list(onlineFoodSpuDOLambdaQueryWrapper);
//
// if (CollectionUtils.isNotEmpty(spuEntities)){
// List<Long> spuIds = spuEntities.stream().map(CanteenSpuEntity::getId).collect(Collectors.toList());
// canteenDailyMenuEntityLambdaQueryWrapper.notIn(CanteenDailyMenuEntity::getSpuId, spuIds);
// }
//
// Page pageData = baseMapper.selectPage(page, canteenDailyMenuEntityLambdaQueryWrapper);
// List<CanteenDailyMenuEntity> canteenDailyMenuEntities = pageData.getRecords();
// if (CollectionUtils.isNotEmpty(canteenDailyMenuEntities)) {
// List<Long> spuIds = canteenDailyMenuEntities.stream().map(CanteenDailyMenuEntity::getSpuId).distinct().collect(Collectors.toList());
// LambdaQueryWrapper<CanteenSpuEntity> spuDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
// onlineFoodSpuDOLambdaQueryWrapper.in(CanteenSpuEntity::getId, spuIds);
// List<CanteenSpuEntity> list = canteenSpuService.list(spuDOLambdaQueryWrapper);
// // 按 id 分组成 Map
// Map<Long, CanteenSpuEntity> spuEntityMap = list.stream()
// .collect(Collectors.toMap(CanteenSpuEntity::getId, spu -> spu));
// // 构造新的 VO 列表
// List<DailyMenuAppVO> 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<DailyMenuAppVO> 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<CanteenDailyMenuEntity> canteenDailyMenuEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
canteenDailyMenuEntityLambdaQueryWrapper
.eq(CanteenDailyMenuEntity::getMerchantId, sourceMerchantId);
canteenDailyMenuEntityLambdaQueryWrapper.eq(CanteenDailyMenuEntity::getStartTime, startTime);
List<CanteenDailyMenuEntity> canteenDailyMenuEntities = baseMapper.selectList(canteenDailyMenuEntityLambdaQueryWrapper);
if (CollectionUtils.isEmpty(canteenDailyMenuEntities)) {
return R.failed("复制源数据为空");
}
// 目标源处理
List<Long> targetMerchantIds = creenDailyMenuCVDTO.getTargetMerchantId();
for (Long targetMerchantId : targetMerchantIds) {
// 查询目标商户已存在的spuId
Set<String> existKeys = baseMapper.selectList(new LambdaQueryWrapper<CanteenDailyMenuEntity>()
.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<CanteenDailyMenuEntity> 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;