营养、原料、菜品、菜谱相关优化

This commit is contained in:
jjLv 2025-05-14 13:23:20 +08:00
parent 3350f26b4d
commit 41e65e2a01
18 changed files with 296 additions and 149 deletions

View File

@ -97,4 +97,10 @@ public interface MenuDishesMapper extends BaseMapper<MenuDishes> {
List<MapBean> getDishesType(MapBean mapBean);
List<MapBean> getDishesTypeByList(@Param("key")String key,@Param("keyList")List<String> keyList);
List<Long> getDishesIds(@Param("ids") Long[] ids);
List<Long> getDetailsIds(@Param("dishesIds") List<Long> dishesIds);
int checkIsExistRelation(@Param("ids") List<Long> detailsIds,@Param("type") int i,@Param("nowDate") String nowDate);
}

View File

@ -27,4 +27,6 @@ public interface MenuDishesTypeMapper extends BaseMapper<MenuDishesType> {
int updateMenuDishesType(MenuDishesTypeEditDTO content);
int delMenuDishesType(MenuDishesTypeEditDTO content);
int checkIsExistRelation(Long typeId);
}

View File

@ -74,4 +74,6 @@ public interface MenuMaterialCategoryMapper extends BaseMapper<MenuMaterialCateg
String getCategoryChildMaxNum(@Param("parentId") Long parentId, @Param("categoryType") Integer categoryType, @Param("delFlag") Integer delFlag);
MenuMaterialCategory getOne(MenuMaterialCategory menuMaterialCategory);
int checkIsExistRelation(String id);
}

View File

@ -66,4 +66,7 @@ public interface MenuMaterialMapper {
MenuMaterial getOne(MenuMaterial menuMaterial);
List<Long> selectMaterialIds(Integer[] ids);
int checkIsExistRelation(Long id);
}

View File

@ -71,4 +71,6 @@ public interface MenuNutritionMapper {
MenuNutrition getOneByCode(MenuNutrition menuNutrition);
MenuNutrition getOneByName(MenuNutrition menuNutrition);
int checkIsExistRelation(String id);
}

View File

@ -70,4 +70,5 @@ public interface MenuNutritionTypeMapper {
MenuNutritionType getParentOne(MenuNutritionType menuNutritionType);
int checkIsExistRelation(Integer id);
}

View File

@ -4,6 +4,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -172,10 +173,12 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
if (menuDishesOne != null && menuDishesOne.getDishesId() != Long.parseLong(menuDishesDTO.getDishesId())) {
throw new ServiceException("菜品已存在");
}
if (!ObjectUtil.isEmpty(menuDishesDTO.getDishesNum())) {
menuDishesOne = menuDishesMapper.getOneByNum(menuDishesDTO);
if (menuDishesOne != null && menuDishesOne.getDishesId() != Long.parseLong(menuDishesDTO.getDishesId())) {
throw new ServiceException("编号已存在");
}
}
menuDishesDTO.setUpdateBy(SecurityUtils.getUsername());
int baseNum = menuDishesMapper.updateMenuDishesBase(menuDishesDTO);
if (menuDishesDTO.getAreaId() == null) {
@ -187,6 +190,34 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
if (menuDishesDTO.getShopstallId() == null) {
menuDishesDTO.setShopstallId(-1L);
}
if (ObjectUtil.isEmpty(menuDishesDTO.getTypeId())) {
menuDishesDTO.setTypeId(-1L);
}
if (menuDishesDTO.getClassifyId() == null) {
menuDishesDTO.setClassifyId(-1);
}
if (menuDishesDTO.getEffectId() == null) {
menuDishesDTO.setEffectId(-1);
}
if (menuDishesDTO.getStyleId() == null) {
menuDishesDTO.setStyleId(-1);
}
if (menuDishesDTO.getCookId() == null) {
menuDishesDTO.setCookId(-1);
}
if (menuDishesDTO.getSeason() == null) {
menuDishesDTO.setSeason(new ArrayList<>());
}
if (menuDishesDTO.getSuitIdList() == null) {
menuDishesDTO.setSuitIdList(new ArrayList<>());
}
if (menuDishesDTO.getTasteIdList() == null) {
menuDishesDTO.setTasteIdList(new ArrayList<>());
}
if (menuDishesDTO.getLabelIdList() == null) {
menuDishesDTO.setLabelIdList(new ArrayList<>());
}
addIds(menuDishesDTO);
int dishesNum = menuDishesMapper.editMenuDishes(menuDishesDTO);
List<MenuDishesAddMaterialDTO> materialList = menuDishesDTO.getMaterialList();
List<NutritionEntity> nutritionEntityList = new ArrayList<>();
@ -211,9 +242,6 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
nutritionEntity = countNum(nutritionEntity, menuDishesDTO.getWeight());
System.err.println("计算后:" + nutritionEntity.getCalcium());
return menuDishesMapper.addFinalNutrition(nutritionEntity, Long.parseLong(menuDishesDTO.getDishesId()));
}else{
resetBeanToZero(nutritionEntity);
menuDishesMapper.addFinalNutrition(nutritionEntity,Long.parseLong(menuDishesDTO.getDishesId()));
}
//添加菜品和材料关系表
@ -265,6 +293,21 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
*/
@Override
public int deleteMenuDishesByIds(Long[] ids) {
//查询dishesId
List<Long> dishesIds = menuDishesMapper.getDishesIds(ids);
//查询detailsId
List<Long> detailsIds = menuDishesMapper.getDetailsIds(dishesIds);
//查询是否存在关联关系
if (detailsIds != null && !detailsIds.isEmpty()){
int code = menuDishesMapper.checkIsExistRelation(detailsIds,1,null);
if (code > 0) {
throw new ServiceException("存在关联关系,无法删除!");
}
code = menuDishesMapper.checkIsExistRelation(detailsIds,2, DateUtils.getDate());
if (code > 0) {
throw new ServiceException("存在关联关系,无法删除!");
}
}
List<Long> baseDishesIds = menuDishesMapper.getBassIdByIds(ids);
if (baseDishesIds != null && baseDishesIds.size() > 0) {
menuDishesMapper.deleteBaseDishesByIds(baseDishesIds.toArray(new Long[baseDishesIds.size()]));
@ -298,10 +341,12 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
if (menuDishesOne != null && menuDishesOne.getDishesId() != Long.parseLong(menuDishesDTO.getDishesId())) {
throw new ServiceException("菜品已存在");
}
if (!ObjectUtil.isEmpty(menuDishesDTO.getDishesNum())) {
menuDishesOne = menuDishesMapper.getOneByNum(menuDishesDTO);
if (menuDishesOne != null && !StringHelper.isNullOrEmptyString(menuDishesDTO.getDishesNum())) {
throw new ServiceException("编号已存在");
}
}
Long dishesId = Id.next();
Long baseDishesId = Id.next();
menuDishesDTO.setCreateBy(SecurityUtils.getUsername());
@ -403,16 +448,15 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
}
//首字母转小写
public static String toLowerCaseFirstOne(String s)
{
public static String toLowerCaseFirstOne(String s) {
if (Character.isLowerCase(s.charAt(0))) {
return s;
} else {
return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
}
}
//首字母转大写
public static String toUpperCaseFirstOne(String s) {
if (Character.isUpperCase(s.charAt(0))) {
@ -711,7 +755,6 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
}
public void importDishesDTO(List<MenuDishesImportDTO> importDishesList, String username) {
DishesImportCheckResult dishesImportCheckResult = new DishesImportCheckResult();
List<MenuDishesImportDTO> successList = new ArrayList<>();
@ -784,7 +827,6 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
}
if (CollUtil.isNotEmpty(dishesAddList)) {
// MenuDishesMapper var10001 = this.menuDishesMapper;
// Objects.requireNonNull(var10001);
@ -919,7 +961,6 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
}
public Map<Long, MenuMaterialNutrition> getMenuMaterialNutrition(List<Long> materialIdList) {
List<MenuMaterialNutrition> menuMaterialNutritions = this.menuMaterialNutritionMapper
.selectList(Wrappers.lambdaQuery(MenuMaterialNutrition.class)
@ -968,13 +1009,11 @@ public class MenuDishesServiceImpl extends ServiceImpl<MenuDishesMapper, MenuDis
}
public MenuMaterial getByMaterialId(Long materialId) {
return this.menuMaterialMapper.selectMenuMaterialMaterialId(materialId);
}
public void setAllocData(MenuDishesImportDTO importDishes, MenuDishes dishesAdd, ImportDishesContext importDishesContext) {
Long stallId = -1L;
Long canteenId = -1L;

View File

@ -59,6 +59,7 @@ public class MenuDishesTypeServiceImpl extends ServiceImpl<MenuDishesTypeMapper
BeanUtil.copyProperties(content, dishesType, new String[0]);
dishesType.setCreateBy(username);
dishesType.setTypeId(Id.next());
dishesType.setDelFlag(0);
return this.baseMapper.insert(dishesType);
}
}
@ -76,7 +77,10 @@ public class MenuDishesTypeServiceImpl extends ServiceImpl<MenuDishesTypeMapper
@Override
public int delMenuDishesType(MenuDishesTypeEditDTO content) {
int code = menuDishesTypeMapper.checkIsExistRelation(content.getTypeId());
if (code > 0){
throw new ServiceException("该菜品类型下有数据,不能删除");
}
return menuDishesTypeMapper.delMenuDishesType(content);
}
}

View File

@ -259,11 +259,19 @@ public class MenuMaterialCategoryServiceImpl extends ServiceImpl<MenuMaterialCat
@Transactional(rollbackFor = Exception.class)
public int deleteMenuMaterialCategoryByIds(String[] ids) {
try{
for (String id : ids){
//判断是否有关联
int code = menuMaterialCategoryMapper.checkIsExistRelation(id);
if(code > 0){
throw new ServiceException("存在关联关系,无法删除!");
}
}
menuMaterialCategoryMapper.deleteMenuMaterialCategoryByIds(ids);
List<String> childCategoryIds = menuMaterialCategoryMapper.getChildCategoryIds(ids);
if(childCategoryIds !=null && childCategoryIds.size() > 0){
String[] idss = childCategoryIds.toArray(new String[childCategoryIds.size()]); // 避免数组扩容
//递归删除
deleteMenuMaterialCategoryByIds(idss);
}
return 1;

View File

@ -3,6 +3,7 @@ package com.bonus.canteen.core.menu.service.impl;
import java.util.List;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bonus.canteen.core.menu.domain.MenuMaterialNutrition;
@ -122,6 +123,9 @@ public class MenuMaterialServiceImpl implements IMenuMaterialService {
// menuMaterialNutrition.setCategoryId(menuMaterial.getCategoryId());
// this.menuMaterialNutritionMapper.update(menuMaterialNutrition,Wrappers.lambdaUpdate(MenuMaterialNutrition.class).eq(MenuMaterialNutrition::getMaterialId,menuMaterial.getMaterialId()).eq(MenuMaterialNutrition::getCategoryId, menuMaterial.getCategoryId()));
// }
if (ObjectUtil.isEmpty(menuMaterial.getNutritionType())){
menuMaterial.setNutritionType("");
}
return menuMaterialMapper.updateMenuMaterial(menuMaterial);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
@ -136,6 +140,16 @@ public class MenuMaterialServiceImpl implements IMenuMaterialService {
*/
@Override
public int deleteMenuMaterialByIds(Integer[] ids) {
//查询materialId
List<Long> materialIdList = menuMaterialMapper.selectMaterialIds(ids);
// 判断是否关联了菜品
for (Long id : materialIdList){
// 判断是否关联了菜品
int count = menuMaterialMapper.checkIsExistRelation(id);
if(count > 0){
throw new ServiceException("存在关联关系,无法删除!");
}
}
return menuMaterialMapper.deleteMenuMaterialByIds(ids);
}

View File

@ -122,6 +122,13 @@ public class MenuNutritionServiceImpl implements IMenuNutritionService {
*/
@Override
public int deleteMenuNutritionByIds(String[] ids) {
for (String id : ids){
// 判断是否关联了菜品
int count = menuNutritionMapper.checkIsExistRelation(id);
if(count > 0){
throw new ServiceException("存在关联关系,无法删除!");
}
}
return menuNutritionMapper.deleteMenuNutritionByIds(ids);
}
@ -133,6 +140,11 @@ public class MenuNutritionServiceImpl implements IMenuNutritionService {
*/
@Override
public int deleteMenuNutritionById(Long id) {
// 判断是否关联了菜品
int count = menuNutritionMapper.checkIsExistRelation(String.valueOf(id));
if(count > 0){
throw new ServiceException("存在关联关系,无法删除!");
}
return menuNutritionMapper.deleteMenuNutritionById(id);
}
}

View File

@ -115,6 +115,14 @@ public class MenuNutritionTypeServiceImpl implements IMenuNutritionTypeService {
if(ids == null || ids.length == 0){
throw new ServiceException("请选择要删除的营养基础类型");
}
for (int i = 0; i < ids.length; i++) {
int code = menuNutritionTypeMapper.checkIsExistRelation(ids[i]);
if(code > 0){
throw new ServiceException("该营养基础类型下有数据,不能删除");
}
}
return menuNutritionTypeMapper.deleteMenuNutritionTypeByIds(ids);
}

View File

@ -99,6 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMenuDishesList" parameterType="com.bonus.canteen.core.menu.domain.MenuDishes" resultMap="MenuDishesResult">
<include refid="selectMenuDishesVo"/>
<where>
b.del_flag = 0
<if test="dishesId != null "> and b.dishes_id = #{dishesId}</if>
<if test="baseDishesId != null "> and b.base_dishes_id = #{baseDishesId}</if>
<if test="canteenId != null "> and b.canteen_id = #{canteenId}</if>
@ -377,7 +378,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<delete id="deleteBaseDishesByIds">
delete from menu_dishes_base where base_dishes_id in
update menu_dishes_base set del_flag = '2'where base_dishes_id in
<foreach collection="baseDishesIds" separator="," open="(" close=")" item="item">
#{item}
</foreach>
@ -581,9 +582,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item}
</foreach>
</select>
<select id="getDishesIds" resultType="java.lang.Long">
select dishes_id from menu_dishes where id in
<foreach collection="ids" separator="," open="(" close=")" item="item">
#{item}
</foreach>
</select>
<select id="getDetailsIds" resultType="java.lang.Long">
select detail_id from menu_recipe_dishes where dishes_id in
<foreach collection="dishesIds" separator="," open="(" close=")" item="item">
#{item}
</foreach>
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
select count(1) from menu_recipe_detail where detail_type = #{type} and detail_id in
<foreach collection="ids" separator="," open="(" close=")" item="item">
#{item}
</foreach>
<if test="nowDate != null">
and apply_date &gt;= #{nowDate}
</if>
</select>
<delete id="deleteMenuByIds" parameterType="long">
delete from menu_dishes where id in
update menu_dishes set del_flag = '2' where id in
<foreach collection="ids" separator="," open="(" close=")" item="item">
#{item}
</foreach>

View File

@ -47,6 +47,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by du.id desc
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
select count(1) from menu_dishes where type_id = #{typeId}
</select>
<update id="updateMenuDishesType">
update menu_dishes_type set type_name = #{typeName} where type_id = #{typeId}

View File

@ -131,6 +131,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getOne" resultMap="MenuMaterialCategoryResult">
select * from menu_material_category where parent_id =#{parentId} and category_name =#{categoryName} and category_type =#{categoryType} and area_id =#{areaId}
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
SELECT count(1) from menu_material where category_id = #{id}
</select>
</mapper>

View File

@ -227,6 +227,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectMenuMaterialVo"/>
where mm.material_id = #{id}
</select>
<select id="selectMaterialIds" resultType="java.lang.Long">
select material_id from menu_material
where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
select count(1) from menu_material_dishes where material_id = #{materialId}
</select>
</mapper>

View File

@ -491,5 +491,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
limit 1
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
select count(1)
from menu_material
where nutrition_type = #{id}
</select>
</mapper>

View File

@ -106,6 +106,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getParentOne" resultMap="MenuNutritionTypeResult" parameterType="com.bonus.canteen.core.menu.domain.MenuNutritionType">
select * from menu_nutrition_type where id = #{parentId} and del_flag = 2 limit 1
</select>
<select id="checkIsExistRelation" resultType="java.lang.Integer">
select count(1) from menu_nutrition where category_id = #{id}
</select>
</mapper>