From 0cefb29322f30469285485d2a476610f2549f9e1 Mon Sep 17 00:00:00 2001 From: jjLv <1981429112@qq.com> Date: Mon, 14 Apr 2025 18:01:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E8=B0=B1=E5=88=97=E8=A1=A8-=E6=96=B0?= =?UTF-8?q?=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/menu/domain/MenuAppRecipe.java | 35 +- .../canteen/core/menu/domain/MenuRecipe.java | 111 ++-- .../core/menu/domain/MenuRecipeDetail.java | 82 +-- .../core/menu/domain/MenuRecipeDishes.java | 130 ++-- .../canteen/core/menu/dto/GetRecipeDTO.java | 56 ++ .../canteen/core/menu/dto/MenuSendByDTO.java | 52 ++ .../core/menu/dto/RecipeProcessResult.java | 19 + .../core/menu/enums/MenuBindTypeEnum.java | 62 ++ .../core/menu/enums/MenuRecipeSortEnum.java | 62 ++ .../core/menu/mapper/MenuRecipeMapper.java | 71 +- .../core/menu/service/IMenuRecipeService.java | 4 +- .../impl/MenuRecipeDetailServiceImpl.java | 6 +- .../impl/MenuRecipeDishesServiceImpl.java | 5 +- .../service/impl/MenuRecipeServiceImpl.java | 607 +++++++++++++++++- .../mapper/menu/MenuRecipeMapper.xml | 375 ++++++++++- 15 files changed, 1435 insertions(+), 242 deletions(-) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/GetRecipeDTO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/MenuSendByDTO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/RecipeProcessResult.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuBindTypeEnum.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuRecipeSortEnum.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuAppRecipe.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuAppRecipe.java index 228c5b6..8da8e7d 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuAppRecipe.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuAppRecipe.java @@ -1,6 +1,10 @@ package com.bonus.canteen.core.menu.domain; +import java.time.LocalDateTime; import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; import com.fasterxml.jackson.annotation.JsonFormat; import com.bonus.common.core.annotation.Excel; import io.swagger.annotations.ApiModelProperty; @@ -18,32 +22,13 @@ import com.bonus.common.core.web.domain.BaseEntity; @Data @ToString -public class MenuAppRecipe extends BaseEntity { +@TableName("menu_app_recipe") +public class MenuAppRecipe extends Model { private static final long serialVersionUID = 1L; - - /** 自增id */ - private Long id; - - /** 菜谱id */ - @Excel(name = "菜谱id") - @ApiModelProperty(value = "菜谱id") private Long recipeId; - - /** 绑定类型(1-当餐点餐,2-预订餐,3-一周菜谱,4-扫码点餐) */ - @Excel(name = "绑定类型(1-当餐点餐,2-预订餐,3-一周菜谱,4-扫码点餐)") - @ApiModelProperty(value = "绑定类型(1-当餐点餐,2-预订餐,3-一周菜谱,4-扫码点餐)") - private Long bindType; - - /** 绑定时间 */ - @ApiModelProperty(value = "绑定时间") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "绑定时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date bindTime; - - /** 餐线id */ - @Excel(name = "餐线id") - @ApiModelProperty(value = "餐线id") + private Integer bindType; private Long mealLineId; - - + private LocalDateTime bindTime; + private Date createTime; + private Date updateTime; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipe.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipe.java index 9921efd..8119df2 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipe.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipe.java @@ -1,85 +1,54 @@ package com.bonus.canteen.core.menu.domain; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.bonus.common.core.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.ToString; -import com.bonus.common.core.web.domain.BaseEntity; - -/** - * 菜品计划信息对象 menu_recipe - * - * @author xsheng - * @date 2025-04-03 - */ - +import java.time.LocalDateTime; @Data -@ToString -public class MenuRecipe extends BaseEntity { - private static final long serialVersionUID = 1L; - - /** 主键id */ +@TableName("menu_recipe") +@ApiModel("菜品计划信息") +public class MenuRecipe { + @TableId + @ApiModelProperty("主键id") private Long id; - - /** 菜谱id */ - @Excel(name = "菜谱id") - @ApiModelProperty(value = "菜谱id") + @ApiModelProperty("菜谱id") private Long recipeId; - - /** 菜品计划id(数据同步) */ - @Excel(name = "菜品计划id(数据同步)") - @ApiModelProperty(value = "菜品计划id(数据同步)") + @ApiModelProperty("菜谱类型 1 默认 3按周") + private Integer recipeType; + @ApiModelProperty("菜品计划id(数据同步)") private String planId; - - /** 菜谱名称 */ - @Excel(name = "菜谱名称") - @ApiModelProperty(value = "菜谱名称") + @ApiModelProperty("菜谱名称") private String recipeName; - - /** 是否为默认(1否, 2是) */ - @Excel(name = "是否为默认(1否, 2是)") - @ApiModelProperty(value = "是否为默认(1否, 2是)") - private Long isDefault; - - /** 菜谱类型(1默认,2按天,3按周,4按月) */ - @Excel(name = "菜谱类型(1默认,2按天,3按周,4按月)") - @ApiModelProperty(value = "菜谱类型(1默认,2按天,3按周,4按月)") - private Long recipeType; - - /** 生效时间 */ - @ApiModelProperty(value = "生效时间") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "生效时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date effectDate; - - /** 到期时间 */ - @ApiModelProperty(value = "到期时间") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "到期时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date expireDate; - - /** 食堂id */ - @Excel(name = "食堂id") - @ApiModelProperty(value = "食堂id") + @ApiModelProperty("食堂id") private Long canteenId; - - /** 档口id */ - @Excel(name = "档口id") - @ApiModelProperty(value = "档口id") + @ApiModelProperty("档口id") private Long stallId; - - /** 启用状态(1-启用, 2-禁用) */ - @Excel(name = "启用状态(1-启用, 2-禁用)") - @ApiModelProperty(value = "启用状态(1-启用, 2-禁用)") - private Long enableFlag; - - /** 乐观锁 */ - @Excel(name = "乐观锁") - @ApiModelProperty(value = "乐观锁") - private Long revision; - + @ApiModelProperty("适用人员范围") + private Long effId; + @ApiModelProperty("删除标识") + private Integer delFlag; + @ApiModelProperty("乐观锁") + private Integer revision; + @ApiModelProperty("创建人") + private String createBy; + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + @ApiModelProperty("更新人") + private String updateBy; + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + @ApiModelProperty("isDefault") + private Integer isDefault; + @ApiModelProperty("effectDate") + private Integer effectDate; + @ApiModelProperty("expireDate") + private Integer expireDate; + @ApiModelProperty("enableFlag") + private Integer enableFlag; + @ApiModelProperty("remark") + private Integer remark; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDetail.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDetail.java index ad75384..b540fc7 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDetail.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDetail.java @@ -1,6 +1,13 @@ package com.bonus.canteen.core.menu.domain; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.Date; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.extension.activerecord.Model; import com.fasterxml.jackson.annotation.JsonFormat; import com.bonus.common.core.annotation.Excel; import io.swagger.annotations.ApiModelProperty; @@ -18,57 +25,38 @@ import com.bonus.common.core.web.domain.BaseEntity; @Data @ToString -public class MenuRecipeDetail extends BaseEntity { +public class MenuRecipeDetail{ private static final long serialVersionUID = 1L; - - /** 主键id */ + @TableId + @ApiModelProperty("主键id") private Long id; - - /** 菜谱详情id */ - @Excel(name = "菜谱详情id") - @ApiModelProperty(value = "菜谱详情id") + @ApiModelProperty("菜谱详情id") private Long detailId; - - /** 菜品计划销售类别id(数据同步) */ - @Excel(name = "菜品计划销售类别id(数据同步)") - @ApiModelProperty(value = "菜品计划销售类别id(数据同步)") - private String saleTypeId; - - /** 菜谱id */ - @Excel(name = "菜谱id") - @ApiModelProperty(value = "菜谱id") + @ApiModelProperty("菜品计划销售类别id(数据同步)") + private Long saleTypeId; + @ApiModelProperty("菜谱id") private Long recipeId; - - /** 启用时间(天) */ - @ApiModelProperty(value = "启用时间(天)") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "启用时间(天)", width = 30, dateFormat = "yyyy-MM-dd") - private Date applyDate; - - /** 启用时间(周) */ - @Excel(name = "启用时间(周)") - @ApiModelProperty(value = "启用时间(周)") - private Long applyWeek; - - /** 启用时间(月) */ - @Excel(name = "启用时间(月)") - @ApiModelProperty(value = "启用时间(月)") - private Long applyMonth; - - /** 餐次类型 */ - @Excel(name = "餐次类型") - @ApiModelProperty(value = "餐次类型") - private Long mealtimeType; - - /** 详情类型(1-模板,2-详情) */ - @Excel(name = "详情类型(1-模板,2-详情)") - @ApiModelProperty(value = "详情类型(1-模板,2-详情)") - private Long detailType; - - /** 乐观锁 */ - @Excel(name = "乐观锁") - @ApiModelProperty(value = "乐观锁") - private Long revision; + @ApiModelProperty("启用时间(天)") + private LocalDate applyDate; + @ApiModelProperty("启用时间(天)") + private LocalDate endDate; + @ApiModelProperty("餐次类型") + private Integer mealtimeType; + @ApiModelProperty("详情类型(1-模板,2-详情)") + private Integer detailType; + @ApiModelProperty("启用时间(周)") + private Integer applyWeek; + @ApiModelProperty("乐观锁") + private Integer revision; + @ApiModelProperty("创建人") + private String createBy; + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + @ApiModelProperty("更新人") + private String updateBy; + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; } + diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDishes.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDishes.java index fb263e3..d7ac652 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDishes.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/domain/MenuRecipeDishes.java @@ -1,8 +1,16 @@ package com.bonus.canteen.core.menu.domain; +import java.time.LocalDateTime; import java.util.Date; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; import com.fasterxml.jackson.annotation.JsonFormat; import com.bonus.common.core.annotation.Excel; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; @@ -18,88 +26,54 @@ import com.bonus.common.core.web.domain.BaseEntity; @Data @ToString -public class MenuRecipeDishes extends BaseEntity { - private static final long serialVersionUID = 1L; - - /** 主键id */ +@TableName("menu_recipe_dishes") +@ApiModel("菜品计划菜品关联") +public class MenuRecipeDishes extends Model { + @ApiModelProperty("主键id") private Long id; - - /** 菜谱详情id */ - @Excel(name = "菜谱详情id") - @ApiModelProperty(value = "菜谱详情id") + @ApiModelProperty("菜谱详情id") private Long detailId; - - /** 菜品id */ - @Excel(name = "菜品id") - @ApiModelProperty(value = "菜品id") + @ApiModelProperty("菜品id") private Long dishesId; - - /** 菜品单价 */ - @Excel(name = "菜品单价") - @ApiModelProperty(value = "菜品单价") - private Long price; - - /** 规格类型(1-标准,2-大份,3-小份,4-50g,5-100g) */ - @Excel(name = "规格类型(1-标准,2-大份,3-小份,4-50g,5-100g)") - @ApiModelProperty(value = "规格类型(1-标准,2-大份,3-小份,4-50g,5-100g)") + @ApiModelProperty("菜品单价") + private Integer price; + @ApiModelProperty("规格类型(1-标准,2-大份,3-小份,4-50g,5-100g)") private Long sizeType; - - /** 供应数量 */ - @Excel(name = "供应数量") - @ApiModelProperty(value = "供应数量") - private Long supplyNum; - - /** 销售数量 */ - @Excel(name = "销售数量") - @ApiModelProperty(value = "销售数量") - private Long saleNum; - - /** 剩余数量 */ - @Excel(name = "剩余数量") - @ApiModelProperty(value = "剩余数量") + @ApiModelProperty("供应数量") + private Integer supplyNum; + @ApiModelProperty("销售数量") + private Integer saleNum; + @ApiModelProperty("剩余数量") private Integer surplusNum; - - /** 个人限购数量 */ - @Excel(name = "个人限购数量") - @ApiModelProperty(value = "个人限购数量") - private Long restrictNum; - - /** 菜品价格(优惠价) */ - @Excel(name = "菜品价格(优惠价)") - @ApiModelProperty(value = "菜品价格(优惠价)") - private Long salePrice; - - /** 优惠开始时间 */ - @ApiModelProperty(value = "优惠开始时间") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "优惠开始时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date saleStart; - - /** 优惠结束时间 */ - @ApiModelProperty(value = "优惠结束时间") - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "优惠结束时间", width = 30, dateFormat = "yyyy-MM-dd") - private Date saleEnd; - - /** 厨师id */ - @Excel(name = "厨师id") - @ApiModelProperty(value = "厨师id") - private Long chefId; - - /** 是否推荐(1-推荐,2-非推荐) */ - @Excel(name = "是否推荐(1-推荐,2-非推荐)") - @ApiModelProperty(value = "是否推荐(1-推荐,2-非推荐)") - private Long recommendFlag; - - /** 排序号 */ - @Excel(name = "排序号") - @ApiModelProperty(value = "排序号") - private Long sortNum; - - /** 乐观锁 */ - @Excel(name = "乐观锁") - @ApiModelProperty(value = "乐观锁") - private Long revision; - + @ApiModelProperty("个人限购数量") + private Integer restrictNum; + @ApiModelProperty("菜品价格(优惠价)") + private Integer salePrice; + @ApiModelProperty("是否推荐") + private Integer recommendFlag; + @ApiModelProperty("排序号") + private Integer sortNum; + @ApiModelProperty("乐观锁") + private Integer revision; + @TableField( + fill = FieldFill.INSERT + ) + @ApiModelProperty("创建人") + private String createBy; + @TableField( + fill = FieldFill.INSERT + ) + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + @TableField( + fill = FieldFill.INSERT_UPDATE + ) + @ApiModelProperty("更新人") + private String updateBy; + @TableField( + fill = FieldFill.INSERT_UPDATE + ) + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/GetRecipeDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/GetRecipeDTO.java new file mode 100644 index 0000000..ea942b7 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/GetRecipeDTO.java @@ -0,0 +1,56 @@ +package com.bonus.canteen.core.menu.dto; + +import java.util.List; + +public class GetRecipeDTO { + private Long recipeId; + private Integer recipeType; + private List weeks; + private Boolean isComplete; + private MenuRecipeAddDTO menuRecipeV2Add; + + public Long getRecipeId() { + return this.recipeId; + } + + public Integer getRecipeType() { + return this.recipeType; + } + + public List getWeeks() { + return this.weeks; + } + + public Boolean getIsComplete() { + return this.isComplete; + } + + public MenuRecipeAddDTO getMenuRecipeV2Add() { + return this.menuRecipeV2Add; + } + + public GetRecipeDTO setRecipeId(final Long recipeId) { + this.recipeId = recipeId; + return this; + } + + public GetRecipeDTO setRecipeType(final Integer recipeType) { + this.recipeType = recipeType; + return this; + } + + public GetRecipeDTO setWeeks(final List weeks) { + this.weeks = weeks; + return this; + } + + public GetRecipeDTO setIsComplete(final Boolean isComplete) { + this.isComplete = isComplete; + return this; + } + + public GetRecipeDTO setMenuRecipeV2Add(final MenuRecipeAddDTO menuRecipeV2Add) { + this.menuRecipeV2Add = menuRecipeV2Add; + return this; + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/MenuSendByDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/MenuSendByDTO.java new file mode 100644 index 0000000..462bb3d --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/MenuSendByDTO.java @@ -0,0 +1,52 @@ +package com.bonus.canteen.core.menu.dto; + +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +public class MenuSendByDTO { + @ApiModelProperty("食堂id") + Long canteenId; + @ApiModelProperty("档口id") + Long stallId; + @ApiModelProperty("餐线id") + Long mealLineId; + @ApiModelProperty("设备类型") + List deviceTypeList; + + public Long getCanteenId() { + return this.canteenId; + } + + public Long getStallId() { + return this.stallId; + } + + public Long getMealLineId() { + return this.mealLineId; + } + + public List getDeviceTypeList() { + return this.deviceTypeList; + } + + public MenuSendByDTO setCanteenId(final Long canteenId) { + this.canteenId = canteenId; + return this; + } + + public MenuSendByDTO setStallId(final Long stallId) { + this.stallId = stallId; + return this; + } + + public MenuSendByDTO setMealLineId(final Long mealLineId) { + this.mealLineId = mealLineId; + return this; + } + + public MenuSendByDTO setDeviceTypeList(final List deviceTypeList) { + this.deviceTypeList = deviceTypeList; + return this; + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/RecipeProcessResult.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/RecipeProcessResult.java new file mode 100644 index 0000000..d7a94da --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/dto/RecipeProcessResult.java @@ -0,0 +1,19 @@ +package com.bonus.canteen.core.menu.dto; + + +import com.bonus.canteen.core.menu.domain.MenuRecipe; +import com.bonus.canteen.core.menu.domain.MenuRecipeDetail; +import com.bonus.canteen.core.menu.domain.MenuRecipeDishes; +import lombok.Data; + +import java.util.List; +@Data +public class RecipeProcessResult { + private List templateDetailIds; + private List haveDetailIds; + private List recipeDetails; + private List recipeDishes; + private Long recipeId; + private Boolean add; + private MenuRecipe menuRecipe; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuBindTypeEnum.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuBindTypeEnum.java new file mode 100644 index 0000000..b30252e --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuBindTypeEnum.java @@ -0,0 +1,62 @@ +package com.bonus.canteen.core.menu.enums; + +public enum MenuBindTypeEnum { + CURRENT(1, "当餐点餐"), + RESERVE(2, "预订餐"), + WEEK(3, "一周菜谱"), + QR_CODE(4, "扫码点餐"), + SELF_MACHINE(5, "自助终端"), + MEAL_LINE(6, "自助餐线/小碗菜餐线"), + TABLE(7, "智慧餐台/消费机"), + PAD(8, "点餐机/手持机/平板"), + SCREEN(9, "信息发布屏"), + DISHES_IDENTIFY(10, "菜品识别"), + NUTRITIONAL_PRICE_TAG(11, "营养价签"); + + private final Integer key; + private final String value; + + private MenuBindTypeEnum(Integer key, String value) { + this.key = key; + this.value = value; + } + + public static Integer getKey(String value) { + MenuBindTypeEnum[] enums = values(); + MenuBindTypeEnum[] var2 = enums; + int var3 = enums.length; + + for(int var4 = 0; var4 < var3; ++var4) { + MenuBindTypeEnum temp = var2[var4]; + if (temp.value().equals(value)) { + return temp.key(); + } + } + + return null; + } + + public static String getValue(Integer key) { + MenuBindTypeEnum[] enums = values(); + MenuBindTypeEnum[] var2 = enums; + int var3 = enums.length; + + for(int var4 = 0; var4 < var3; ++var4) { + MenuBindTypeEnum temp = var2[var4]; + if (temp.key().equals(key)) { + return temp.value(); + } + } + + return null; + } + + public Integer key() { + return this.key; + } + + public String value() { + return this.value; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuRecipeSortEnum.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuRecipeSortEnum.java new file mode 100644 index 0000000..ac951b9 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/enums/MenuRecipeSortEnum.java @@ -0,0 +1,62 @@ +package com.bonus.canteen.core.menu.enums; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +public enum MenuRecipeSortEnum { + MEALLINE(1, "自助餐线/小碗菜餐线", MenuBindTypeEnum.MEAL_LINE.key(), Arrays.asList(35, 32, 44, 30, 55, 58)), + TABLE(2, "智慧餐台/消费机", MenuBindTypeEnum.TABLE.key(), Arrays.asList(20, 23, 41, 47, 21, 34)), + BUFFET(3, "点餐机/手持机/平板", MenuBindTypeEnum.PAD.key(), Arrays.asList(41, 22, 36, 46, 63)), + ISSUE(4, "信息发布屏", MenuBindTypeEnum.SCREEN.key(), Arrays.asList(40, 45)), + ANDROID_SELF_RECHARGE(5, "自助终端菜谱公示", MenuBindTypeEnum.SELF_MACHINE.key(), Collections.singletonList(25)), + MOBILE_CURRENT(6, "移动端当餐点餐", MenuBindTypeEnum.CURRENT.key(), new ArrayList()), + MOBILE_RESERVE(7, "移动端预订餐", MenuBindTypeEnum.RESERVE.key(), new ArrayList()), + MOBILE_WEEK(8, "移动端一周菜谱", MenuBindTypeEnum.WEEK.key(), new ArrayList()), + DISHES_IDENTIFY(9, "菜品识别", MenuBindTypeEnum.DISHES_IDENTIFY.key(), Arrays.asList(50, 51)), + NUTRITIONAL_PRICE_TAG(10, "营养价签", MenuBindTypeEnum.NUTRITIONAL_PRICE_TAG.key(), Collections.singletonList(57)); + + private final Integer key; + private final String name; + private final Integer bindType; + private final List deviceType; + + private MenuRecipeSortEnum(Integer key, String name, Integer bindType, List deviceType) { + this.key = key; + this.name = name; + this.bindType = bindType; + this.deviceType = deviceType; + } + + public static Map getKeyMap() { + return Arrays.stream(values()).collect(Collectors.toMap(MenuRecipeSortEnum::getKey, Function.identity())); + } + + public static Map getBindTypeMap() { + return Arrays.stream(values()).collect(Collectors.toMap(MenuRecipeSortEnum::getBindType, Function.identity())); + } + + public static MenuRecipeSortEnum getByKey(Integer key) { + return (MenuRecipeSortEnum)getKeyMap().get(key); + } + + public Integer getKey() { + return this.key; + } + + public String getName() { + return this.name; + } + + public Integer getBindType() { + return this.bindType; + } + + public List getDeviceType() { + return this.deviceType; + } + + public static List getDeviceBindTypes() { + return Arrays.asList(MEALLINE.getBindType(), TABLE.getBindType(), BUFFET.getBindType(), ISSUE.getBindType(), ANDROID_SELF_RECHARGE.getBindType(), NUTRITIONAL_PRICE_TAG.getBindType()); + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/mapper/MenuRecipeMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/mapper/MenuRecipeMapper.java index 0b39c7b..2832e56 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/mapper/MenuRecipeMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/mapper/MenuRecipeMapper.java @@ -1,18 +1,18 @@ package com.bonus.canteen.core.menu.mapper; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bonus.canteen.core.menu.domain.MenuAppRecipe; import com.bonus.canteen.core.menu.domain.MenuRecipe; -import com.bonus.canteen.core.menu.dto.MenuRecipeParamDTO; -import com.bonus.canteen.core.menu.dto.RecipeDishesCountDTO; +import com.bonus.canteen.core.menu.domain.MenuRecipeDetail; +import com.bonus.canteen.core.menu.domain.MenuRecipeDishes; +import com.bonus.canteen.core.menu.dto.*; import com.bonus.canteen.core.menu.model.MenuBaseModel; import com.bonus.canteen.core.menu.vo.MenuRecipeDataVO; import com.bonus.canteen.core.menu.vo.MenuRecipeV2VO; -import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param; /** @@ -21,10 +21,10 @@ import org.apache.ibatis.annotations.Param; * @author xsheng * @date 2025-04-03 */ -public interface MenuRecipeMapper { +public interface MenuRecipeMapper extends BaseMapper { /** * 查询菜品计划信息 - * + * * @param id 菜品计划信息主键 * @return 菜品计划信息 */ @@ -32,7 +32,7 @@ public interface MenuRecipeMapper { /** * 查询菜品计划信息列表 - * + * * @param menuRecipe 菜品计划信息 * @return 菜品计划信息集合 */ @@ -40,7 +40,7 @@ public interface MenuRecipeMapper { /** * 新增菜品计划信息 - * + * * @param menuRecipe 菜品计划信息 * @return 结果 */ @@ -48,7 +48,7 @@ public interface MenuRecipeMapper { /** * 修改菜品计划信息 - * + * * @param menuRecipe 菜品计划信息 * @return 结果 */ @@ -56,7 +56,7 @@ public interface MenuRecipeMapper { /** * 删除菜品计划信息 - * + * * @param id 菜品计划信息主键 * @return 结果 */ @@ -64,7 +64,7 @@ public interface MenuRecipeMapper { /** * 批量删除菜品计划信息 - * + * * @param ids 需要删除的数据主键集合 * @return 结果 */ @@ -72,18 +72,23 @@ public interface MenuRecipeMapper { /** * 获取菜品列表 + * * @param dto * @return */ List getDishesList(MenuRecipeParamDTO dto); + /** * 根据recipeIds获取菜品数量 + * * @param recipeIds * @return */ List getDishesCountByRecipeIds(@Param("recipeIds") List recipeIds); + /** * 根据recipeIds获取日期 + * * @param recipeIds * @return */ @@ -91,8 +96,48 @@ public interface MenuRecipeMapper { /** * 查询基础 + * * @param baseDishesIdList * @return */ List selectBaseSizeDishesId(@Param("baseDishesIdList") List baseDishesIdList); + + Long selectCount(MenuRecipeAddDTO dto); + + void insertData(MenuRecipe recipe); + + MenuRecipe getOneById(Long recipeId); + + List selectDetailIds(@Param("dto") GetRecipeDTO dto, @Param("mealType") Integer mealType); + + List selectDetailsList( + @Param("dto") GetRecipeDTO dto, + @Param("currentDate") LocalDate currentDate, + @Param("mealType") Integer mealType + ); + + List getMenuRecipeDishesList(@Param("haveDetailIds") List haveDetailIds); + + List selectMenuRecipeDetail(@Param("bean") MenuRecipeDetail menuRecipeDetailBean,@Param("weeks") List weeks); + + List selectDetailIdListByWrapper( + @Param("recipeId") Long recipeId, + @Param("applyDateList") List applyDateList, + @Param("isComplete") Boolean isComplete, + @Param("recipeDateList") List recipeDateList + ); + + List selectBatchIds(@Param("ids") List ids); + + void deleteMenuRecipeDetailByIds(@Param("list") List detailIds); + + void deleteMenuRecipeDishesByIds(@Param("list") List detailIds); + + void insertMenuDetails(@Param("menuDetails") List recipeDetailV2List); + + void insertMenuDishes(@Param("menuDishes") List recipeDishesV2List); + + List selectAppRecipeList(Long recipeId); + + void updateMenuRecipeDetail(@Param("recipeId") Long recipeId,@Param("time") LocalDateTime now); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuRecipeService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuRecipeService.java index 181c1e4..1793eff 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuRecipeService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/IMenuRecipeService.java @@ -1,6 +1,8 @@ package com.bonus.canteen.core.menu.service; import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; import com.bonus.canteen.core.menu.domain.MenuRecipe; import com.bonus.canteen.core.menu.dto.MenuRecipeAddDTO; import com.bonus.canteen.core.menu.dto.MenuRecipeParamDTO; @@ -14,7 +16,7 @@ import javax.validation.Valid; * @author xsheng * @date 2025-04-03 */ -public interface IMenuRecipeService { +public interface IMenuRecipeService extends IService { /** * 菜谱列表-获取菜品列表 * @param dto diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDetailServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDetailServiceImpl.java index a1829b5..13006c8 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDetailServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDetailServiceImpl.java @@ -1,5 +1,7 @@ package com.bonus.canteen.core.menu.service.impl; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; @@ -50,7 +52,7 @@ public class MenuRecipeDetailServiceImpl implements IMenuRecipeDetailService { */ @Override public int insertMenuRecipeDetail(MenuRecipeDetail menuRecipeDetail) { - menuRecipeDetail.setCreateTime(DateUtils.getNowDate()); + menuRecipeDetail.setCreateTime(LocalDateTime.now()); try { return menuRecipeDetailMapper.insertMenuRecipeDetail(menuRecipeDetail); } catch (Exception e) { @@ -66,7 +68,7 @@ public class MenuRecipeDetailServiceImpl implements IMenuRecipeDetailService { */ @Override public int updateMenuRecipeDetail(MenuRecipeDetail menuRecipeDetail) { - menuRecipeDetail.setUpdateTime(DateUtils.getNowDate()); + menuRecipeDetail.setUpdateTime(LocalDateTime.now()); try { return menuRecipeDetailMapper.updateMenuRecipeDetail(menuRecipeDetail); } catch (Exception e) { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDishesServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDishesServiceImpl.java index 3ed3b94..9b61232 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDishesServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeDishesServiceImpl.java @@ -1,5 +1,6 @@ package com.bonus.canteen.core.menu.service.impl; +import java.time.LocalDateTime; import java.util.List; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; @@ -50,7 +51,7 @@ public class MenuRecipeDishesServiceImpl implements IMenuRecipeDishesService { */ @Override public int insertMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes) { - menuRecipeDishes.setCreateTime(DateUtils.getNowDate()); + menuRecipeDishes.setCreateTime(LocalDateTime.now()); try { return menuRecipeDishesMapper.insertMenuRecipeDishes(menuRecipeDishes); } catch (Exception e) { @@ -66,7 +67,7 @@ public class MenuRecipeDishesServiceImpl implements IMenuRecipeDishesService { */ @Override public int updateMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes) { - menuRecipeDishes.setUpdateTime(DateUtils.getNowDate()); + menuRecipeDishes.setUpdateTime(LocalDateTime.now()); try { return menuRecipeDishesMapper.updateMenuRecipeDishes(menuRecipeDishes); } catch (Exception e) { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeServiceImpl.java index 11fa522..6322f86 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/menu/service/impl/MenuRecipeServiceImpl.java @@ -2,16 +2,31 @@ package com.bonus.canteen.core.menu.service.impl; import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bonus.canteen.core.common.utils.MqUtil; +import com.bonus.canteen.core.common.utils.RedisUtil; +import com.bonus.canteen.core.common.utils.TenantContextHolder; +import com.bonus.canteen.core.menu.domain.MenuAppRecipe; +import com.bonus.canteen.core.menu.domain.MenuRecipeDetail; +import com.bonus.canteen.core.menu.domain.MenuRecipeDishes; import com.bonus.canteen.core.menu.dto.*; +import com.bonus.canteen.core.menu.enums.MenuRecipeSortEnum; import com.bonus.canteen.core.menu.mapper.MenuRecipeDishesMapper; import com.bonus.canteen.core.menu.model.MenuBaseDishesModel; import com.bonus.canteen.core.menu.model.MenuBaseModel; @@ -21,6 +36,11 @@ import com.bonus.canteen.core.menu.vo.MenuRecipeV2VO; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.houqin.constant.DelFlagEnum; +import com.bonus.common.houqin.i18n.I18n; +import com.bonus.common.houqin.mq.constant.LeMqConstant; +import com.bonus.common.houqin.utils.id.Id; +import com.bonus.common.security.utils.SecurityUtils; import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,7 +55,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2025-04-03 */ @Service -public class MenuRecipeServiceImpl implements IMenuRecipeService { +public class MenuRecipeServiceImpl extends ServiceImpl implements IMenuRecipeService { @Autowired private MenuRecipeMapper menuRecipeMapper; @@ -86,9 +106,200 @@ public class MenuRecipeServiceImpl implements IMenuRecipeService { @Transactional(rollbackFor = {Exception.class}) public Long add(MenuRecipeAddDTO dto) { this.changeBaseDishesIdTo(dto); - return 0L; + Long recipeId = dto.getRecipeId(); + String userName = SecurityUtils.getUsername(); + Integer recipeType = dto.getRecipeType(); + MenuRecipe recipe; + Boolean add; + if (ObjectUtil.isNull(recipeId)) { + Long count = menuRecipeMapper.selectCount(dto); + if (ObjectUtil.isNotNull(count) && count > 0L) { + throw new ServiceException(I18n.getMessage("菜单菜谱名称重复", new Object[0])); + } + recipeId = Id.next(); + recipe = new MenuRecipe(); + recipe.setRecipeId(recipeId); + recipe.setRecipeType(dto.getRecipeType()); + recipe.setRecipeName(dto.getRecipeName()); + recipe.setCanteenId(ObjectUtil.isNull(dto.getCanteenId()) ? -1L : dto.getCanteenId()); + recipe.setStallId(ObjectUtil.isNull(dto.getStallId()) ? -1L : dto.getStallId()); + recipe.setCreateBy(userName); + menuRecipeMapper.insertData(recipe); + add = true; + } else { + recipe = menuRecipeMapper.getOneById(recipeId); + recipe.setRecipeName(dto.getRecipeName()); + recipeType = Math.toIntExact(recipe.getRecipeType()); + add = false; + } + + if (ObjectUtil.isEmpty(dto.getRecipeDateList())) { + return recipeId; + } else { + RecipeProcessResult result; + if (ObjectUtil.equal(recipeType, 3)) { + result = this.processWeek(dto, recipeId); + } else if (ObjectUtil.equal(recipeType, 2)) { + result = this.processDay(dto, recipeId); + } else { + result = this.processDefault(dto, recipeId); + } + + result.setRecipeId(recipeId); + result.setMenuRecipe(recipe); + result.setAdd(add); + this.processResult(result); + return recipeId; + } } + public void processResult(RecipeProcessResult result) { + List detailIds = result.getTemplateDetailIds(); + MenuRecipe menuRecipe = result.getMenuRecipe(); + if (ObjectUtil.isNotEmpty(detailIds)) { + menuRecipeMapper.deleteMenuRecipeDetailByIds(detailIds); + menuRecipeMapper.deleteMenuRecipeDishesByIds(detailIds); + } + + List haveDetailIds = result.getHaveDetailIds(); + if (ObjectUtil.isNotEmpty(haveDetailIds)) { + menuRecipeMapper.deleteMenuRecipeDishesByIds(haveDetailIds); + } + + List recipeDetailV2List = result.getRecipeDetails(); + if (ObjectUtil.isNotEmpty(recipeDetailV2List)) { + menuRecipeMapper.insertMenuDetails(recipeDetailV2List); + } + + List recipeDishesV2List = result.getRecipeDishes(); + if (ObjectUtil.isNotEmpty(recipeDishesV2List)) { + recipeDishesV2List.forEach((r) -> { + r.setId((Long)null); + Integer surplusNum = r.getSurplusNum(); + if (ObjectUtil.isNull(surplusNum) || surplusNum <= 0) { + r.setSurplusNum(0); + } + + }); + menuRecipeMapper.insertMenuDishes(recipeDishesV2List); + } + + LeMqConstant.DataChangeType type; + String redisKey; + if (result.getAdd()) { + type = LeMqConstant.DataChangeType.ADD; + } else { + type = LeMqConstant.DataChangeType.UPDATE; + redisKey = Optional.ofNullable(menuRecipe).map(MenuRecipe::getRecipeName).orElse(null); + this.update(Wrappers.lambdaUpdate(MenuRecipe.class).eq(MenuRecipe::getRecipeId, result.getRecipeId()) + .set(ObjectUtil.isNotEmpty(redisKey), MenuRecipe::getRecipeName, redisKey) + .set(MenuRecipe::getUpdateTime, LocalDateTime.now())); + this.menuRecipeMapper.updateMenuRecipeDetail(result.getRecipeId(),LocalDateTime.now()); + List menuAppRecipes = this.menuRecipeMapper.selectAppRecipeList(result.getRecipeId()); + if (ObjectUtil.isNotEmpty(menuAppRecipes)) { + Map bindTypeMap = MenuRecipeSortEnum.getBindTypeMap(); + List deviceBindTypes = MenuRecipeSortEnum.getDeviceBindTypes(); + List menuSendByDTOS = menuAppRecipes.stream() + .filter((x) -> deviceBindTypes.contains(x.getBindType())).map((item) -> { + MenuSendByDTO menuSendByDTO = new MenuSendByDTO(); + menuSendByDTO.setStallId(menuRecipe.getStallId()); + menuSendByDTO.setCanteenId(menuRecipe.getCanteenId()); + menuSendByDTO.setMealLineId(item.getMealLineId()); + menuSendByDTO.setDeviceTypeList((bindTypeMap.get(item.getBindType())).getDeviceType()); + return menuSendByDTO; + }).collect(Collectors.toList()); + //TODO 发送mq +// this.deviceApi.sendMenuByCanteen(result.getRecipeId(), menuSendByDTOS); + } + } + + MqUtil.sendDataChange(menuRecipe, type, LeMqConstant.Topic.DATA_CHANGE_RECIPE); + redisKey = String.format("yst:%s:recipe:%s:detail:%s", TenantContextHolder.getTenantId(), result.getRecipeId(), "*"); + RedisUtil.deleteByPattern(redisKey); + } + public RecipeProcessResult processDefault(MenuRecipeAddDTO content, Long recipeId) { + return this.processDefault(content, recipeId, true); + } + public RecipeProcessResult processDefault(MenuRecipeAddDTO content, Long recipeId, Boolean isComplete) { + RecipeProcessResult result = new RecipeProcessResult(); + String username = SecurityUtils.getUsername(); + List recipeDateList = content.getRecipeDateList(); + List recipeDetailV2List = Lists.newArrayList(); + List recipeDishesV2List = Lists.newArrayList(); + List ids = recipeDateList.stream() + .filter((x) -> ObjectUtil.isNotNull(x.getDetailList())) + .flatMap((x) -> x.getDetailList().stream()) + .filter((x) -> ObjectUtil.isNotNull(x.getDishesList())) + .flatMap((x) -> x.getDishesList().stream()) + .map(MenuRecipeDishesAddDTO::getId) + .filter(ObjectUtil::isNotNull).collect(Collectors.toList()); + Map idAndSalesMap = new HashMap<>(); + if (ObjectUtil.isNotEmpty(ids)) { + List menuRecipeDishes = this.menuRecipeMapper.selectBatchIds(ids); + idAndSalesMap = menuRecipeDishes.stream().collect(Collectors.groupingBy(MenuRecipeDishes::getId, + Collectors.collectingAndThen(Collectors.toList(), (x) -> (x.get(0)).getSaleNum()))); + } + + Map finalIdAndSalesMap = idAndSalesMap; + Iterator var12 = recipeDateList.iterator(); + + List detailIdList; + while(var12.hasNext()) { + MenuRecipeDateAddDTO rd = var12.next(); + detailIdList = rd.getDetailList(); + detailIdList = detailIdList.stream().filter((d) -> { + return ObjectUtil.isNotEmpty(d.getDishesList()); + }).collect(Collectors.toList()); + if (!ObjectUtil.isEmpty(detailIdList)) { + detailIdList.forEach((in) -> { + List dishesList = in.getDishesList(); + if (ObjectUtil.isNotEmpty(dishesList)) { + this.checkDishesList(dishesList); + } + + }); + detailIdList.forEach((in) -> { + List dishesList = in.getDishesList(); + MenuRecipeDetail detailItem = new MenuRecipeDetail(); + Long detailId = Id.next(); + detailItem.setDetailId(detailId); + detailItem.setRecipeId(recipeId); + detailItem.setApplyDate(rd.getApplyDate()); + detailItem.setMealtimeType(in.getMealtimeType()); + detailItem.setCreateBy(username); + recipeDetailV2List.add(detailItem); + dishesList.forEach((di) -> { + MenuRecipeDishes dishesItem = new MenuRecipeDishes(); + Integer salesSum = Optional.ofNullable(finalIdAndSalesMap.get(di.getId())).orElse(0); + dishesItem.setDetailId(detailId); + dishesItem.setDishesId(di.getDishesId()); + dishesItem.setPrice(di.getPrice()); + dishesItem.setSizeType(di.getSizeType()); + dishesItem.setSaleNum(salesSum); + dishesItem.setSupplyNum(di.getSupplyNum()); + int surplusNum = di.getSupplyNum() - salesSum; + if (surplusNum <= 0) { + surplusNum = 0; + } + + dishesItem.setSurplusNum(surplusNum); + dishesItem.setRestrictNum(di.getRestrictNum()); + dishesItem.setSalePrice(Optional.ofNullable(di.getSalePrice()).orElse(di.getPrice())); + dishesItem.setRecommendFlag(di.getRecommendFlag()); + dishesItem.setSortNum(di.getSortNum()); + recipeDishesV2List.add(dishesItem); + }); + }); + } + } + + List applyDateList = recipeDateList.stream().map(MenuRecipeDateAddDTO::getApplyDate).collect(Collectors.toList()); + List detailIdLists = this.menuRecipeMapper.selectDetailIdListByWrapper(recipeId,applyDateList,isComplete,recipeDateList); + result.setTemplateDetailIds(detailIdLists); + result.setRecipeDetails(recipeDetailV2List); + result.setRecipeDishes(recipeDishesV2List); + return result; + } public List getLastWeekDate() { List objects = new ArrayList<>(); LocalDate sunday = LocalDate.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); @@ -153,5 +364,397 @@ public class MenuRecipeServiceImpl implements IMenuRecipeService { }); } } + public RecipeProcessResult processDay(MenuRecipeAddDTO content, Long recipeId) { + return this.processDay(content, recipeId, true); + } + + public RecipeProcessResult processDay(MenuRecipeAddDTO content, Long recipeId, Boolean isComplete) { + RecipeProcessResult result = new RecipeProcessResult(); + List recipeDateList = content.getRecipeDateList(); + GetRecipeDTO getRecipeDto = new GetRecipeDTO(); + getRecipeDto.setRecipeId(recipeId).setRecipeType(2).setIsComplete(isComplete).setMenuRecipeV2Add(content); + List detailIds = this.getTemplateDetailIds(getRecipeDto); + MenuRecipeDateAddDTO menuRecipeDateV2AddDTO = recipeDateList.get(0); + List detailList = menuRecipeDateV2AddDTO.getDetailList(); + List recipeDetailV2List = Lists.newArrayList(); + List recipeDishesV2List = Lists.newArrayList(); + if (ObjectUtil.isNotEmpty(detailList)) { + String username = SecurityUtils.getUsername(); + + for (MenuRecipeDetailAddDTO menuRecipeDetailV2AddDTO : detailList) { + Integer mealtimeType = menuRecipeDetailV2AddDTO.getMealtimeType(); + MenuRecipeDetail detailItem = new MenuRecipeDetail(); + Long detailId = Id.next(); + detailItem.setDetailId(detailId); + detailItem.setRecipeId(recipeId); + detailItem.setMealtimeType(mealtimeType); + detailItem.setCreateBy(username); + detailItem.setDetailType(1); + recipeDetailV2List.add(detailItem); + List dishesList = menuRecipeDetailV2AddDTO.getDishesList(); + if (ObjectUtil.isNotEmpty(dishesList)) { + this.checkDishesList(dishesList); + this.addMenuDishesToList(recipeDishesV2List, detailId, dishesList); + } + } + } + + List menuRecipeDetails = this.getGeNowMenuRecipeDetail(getRecipeDto); + List haveDetailIds = menuRecipeDetails.stream().map(MenuRecipeDetail::getDetailId) + .collect(Collectors.toList()); + this.getDayActiveMenuRecipeDetailDishes(menuRecipeDetails, detailList, recipeDishesV2List, haveDetailIds); + this.creatLastWeekRecipe(menuRecipeDateV2AddDTO, recipeDishesV2List, recipeDetailV2List, recipeId); + result.setTemplateDetailIds(detailIds); + result.setHaveDetailIds(haveDetailIds); + result.setRecipeDetails(recipeDetailV2List); + result.setRecipeDishes(recipeDishesV2List); + return result; + } + + public RecipeProcessResult processWeek(MenuRecipeAddDTO content, Long recipeId) { + return this.processWeek(content, recipeId, true); + } + + public RecipeProcessResult processWeek(MenuRecipeAddDTO content, Long recipeId, Boolean isComplete) { + RecipeProcessResult result = new RecipeProcessResult(); + List recipeDateList = content.getRecipeDateList(); + List recipeDetailV2List = Lists.newArrayList(); + List recipeDishesV2List = Lists.newArrayList(); + String username = SecurityUtils.getUsername(); + List weeks = recipeDateList.stream().map(MenuRecipeDateAddDTO::getApplyWeek).collect(Collectors.toList()); + GetRecipeDTO getRecipeDto = new GetRecipeDTO(); + getRecipeDto.setRecipeId(recipeId).setRecipeType(3).setMenuRecipeV2Add(content).setWeeks(weeks).setIsComplete(isComplete); + List detailIds = this.getTemplateDetailIds(getRecipeDto); + Iterator var12 = recipeDateList.iterator(); + + while(true) { + Integer applyWeek; + List detailList; + do { + if (!var12.hasNext()) { + List menuRecipeDetails = this.getGeNowMenuRecipeDetail(getRecipeDto); + List haveDetailIds = menuRecipeDetails.stream().map(MenuRecipeDetail::getDetailId).collect(Collectors.toList()); + this.getActiveMenuRecipeDetailDisnes(menuRecipeDetails, recipeDateList, recipeDishesV2List, haveDetailIds); + this.creatLastWeekRecipe(recipeDateList, recipeDishesV2List, recipeDetailV2List, recipeId, weeks); + result.setTemplateDetailIds(detailIds); + result.setHaveDetailIds(haveDetailIds); + result.setRecipeDetails(recipeDetailV2List); + result.setRecipeDishes(recipeDishesV2List); + return result; + } + + MenuRecipeDateAddDTO menuRecipeDateV2AddDTO = (MenuRecipeDateAddDTO)var12.next(); + applyWeek = menuRecipeDateV2AddDTO.getApplyWeek(); + detailList = menuRecipeDateV2AddDTO.getDetailList(); + } while(ObjectUtil.isEmpty(detailList)); + + Iterator var16 = detailList.iterator(); + + while(var16.hasNext()) { + MenuRecipeDetailAddDTO menuRecipeDetailV2AddDTO = (MenuRecipeDetailAddDTO)var16.next(); + Integer mealtimeType = menuRecipeDetailV2AddDTO.getMealtimeType(); + MenuRecipeDetail detailItem = new MenuRecipeDetail(); + Long detailId = Id.next(); + detailItem.setDetailId(detailId); + detailItem.setRecipeId(recipeId); + detailItem.setApplyWeek(applyWeek); + detailItem.setMealtimeType(mealtimeType); + detailItem.setCreateBy(username); + detailItem.setDetailType(1); + recipeDetailV2List.add(detailItem); + List dishesList = menuRecipeDetailV2AddDTO.getDishesList(); + if (ObjectUtil.isNotEmpty(dishesList)) { + this.checkDishesList(dishesList); + this.addMenuDishesToList(recipeDishesV2List, detailId, dishesList); + } + } + } + } + + public List getTemplateDetailIds(GetRecipeDTO getRecipeDto) { + // 计算mealType参数 + Integer mealType = null; + if (!getRecipeDto.getIsComplete() && getRecipeDto.getRecipeType() != 3) { + mealType = Optional.ofNullable(getRecipeDto) + .map(GetRecipeDTO::getMenuRecipeV2Add) + .map(MenuRecipeAddDTO::getRecipeDateList) + .map(list -> list.get(0)) + .map(MenuRecipeDateAddDTO::getDetailList) + .map(list -> list.get(0)) + .map(MenuRecipeDetailAddDTO::getMealtimeType) + .orElseThrow(() -> new ServiceException(I18n.getMessage("menu_interval_id_null"))); + } + return menuRecipeMapper.selectDetailIds(getRecipeDto, mealType); + } + + public List getGeNowMenuRecipeDetail(GetRecipeDTO getRecipeDto) { + // 计算mealType参数 + Integer mealType = null; + if (!getRecipeDto.getIsComplete() && getRecipeDto.getRecipeType() != 3) { + mealType = Optional.ofNullable(getRecipeDto) + .map(GetRecipeDTO::getMenuRecipeV2Add) + .map(MenuRecipeAddDTO::getRecipeDateList) + .map(list -> list.get(0)) + .map(MenuRecipeDateAddDTO::getDetailList) + .map(list -> list.get(0)) + .map(MenuRecipeDetailAddDTO::getMealtimeType) + .orElseThrow(() -> new ServiceException(I18n.getMessage("menu_interval_id_null"))); + } + return this.menuRecipeMapper.selectDetailsList(getRecipeDto,LocalDate.now(),mealType); + } + + public void getActiveMenuRecipeDetailDisnes(List menuRecipeDetails, List recipeDateList, List recipeDishesV2List, List haveDetailIds) { + if (!ObjectUtil.isEmpty(menuRecipeDetails)) { + List menuRecipeDishes = this.menuRecipeMapper.getMenuRecipeDishesList(haveDetailIds); + menuRecipeDishes.forEach((dishes) -> { + dishes.setSizeType(Optional.ofNullable(dishes.getSizeType()).orElse(1L)); + }); + Map> dishesMap = menuRecipeDishes.stream() + .collect(Collectors.groupingBy(MenuRecipeDishes::getDetailId, + Collectors.toMap(this.getDishesUniKeyFunction(), Function.identity()))); + Map>> weekAndMealTimeMap = menuRecipeDetails.stream() + .collect(Collectors.groupingBy(MenuRecipeDetail::getApplyWeek, Collectors.groupingBy(MenuRecipeDetail::getMealtimeType, Collectors.toMap(MenuRecipeDetail::getDetailId, Function.identity())))); + + for (MenuRecipeDateAddDTO menuRecipeDateV2AddDTO : recipeDateList) { + Integer applyWeek = menuRecipeDateV2AddDTO.getApplyWeek(); + List detailList = menuRecipeDateV2AddDTO.getDetailList(); + Map> byApplyWeekMap = Optional.ofNullable(weekAndMealTimeMap.get(applyWeek)).orElse(new HashMap()); + + for (MenuRecipeDetailAddDTO detailV2AddDTO : detailList) { + Integer mealtimeType = detailV2AddDTO.getMealtimeType(); + List dishesList = detailV2AddDTO.getDishesList(); + Map editDishesMap = dishesList.stream().collect(Collectors.toMap(this.getUniKeyFunction(), Function.identity())); + Map detailMap = Optional.ofNullable(byApplyWeekMap.get(mealtimeType)).orElse(new HashMap()); + + for (Long detailId : detailMap.keySet()) { + Map haveDishesMap = Optional.ofNullable(dishesMap.get(detailId)).orElse(new HashMap()); + for (String dishesFlag : editDishesMap.keySet()) { + MenuRecipeDishesAddDTO addDishes = editDishesMap.get(dishesFlag); + MenuRecipeDishes haveDishes = haveDishesMap.get(dishesFlag); + MenuRecipeDishes dishesItem = this.getEditMenuDishes(dishesFlag, addDishes, haveDishes, detailId); + recipeDishesV2List.add(dishesItem); + } + } + } + } + } + } + + public Function getDishesUniKeyFunction() { + return (item) -> { + Long var10000 = item.getDishesId(); + return "" + var10000 + "_" + item.getSizeType(); + }; + } + + public Function getUniKeyFunction() { + return (item) -> { + Long var10000 = item.getDishesId(); + return "" + var10000 + "_" + item.getSizeType(); + }; + } + public MenuRecipeDishes getEditMenuDishes(String dishesFlag, MenuRecipeDishesAddDTO addDishes, MenuRecipeDishes haveDishes, Long detailId) { + Integer salesSum = Math.toIntExact(Optional.ofNullable(haveDishes).map(MenuRecipeDishes::getSaleNum).orElse(0)); + MenuRecipeDishes dishesItem = new MenuRecipeDishes(); + dishesItem.setDetailId(detailId); + dishesItem.setDishesId(Long.parseLong(CharSequenceUtil.subBefore(dishesFlag, "_", true))); + dishesItem.setPrice(addDishes.getPrice()); + dishesItem.setSaleNum(salesSum); + dishesItem.setSupplyNum(addDishes.getSupplyNum()); + dishesItem.setSurplusNum(addDishes.getSupplyNum() - salesSum); + dishesItem.setRestrictNum(addDishes.getRestrictNum()); + dishesItem.setSalePrice(Optional.ofNullable(addDishes.getSalePrice()).orElse(addDishes.getPrice())); + dishesItem.setRecommendFlag(addDishes.getRecommendFlag()); + dishesItem.setSizeType(addDishes.getSizeType()); + dishesItem.setSortNum(addDishes.getSortNum()); + return dishesItem; + } + + public void creatLastWeekRecipe(MenuRecipeDateAddDTO recipeDate, List recipeDishesV2List, List recipeDetailV2List, Long recipeId) { + if (!ObjectUtil.isEmpty(recipeDate)) { + String username = SecurityUtils.getUsername(); + LocalDate now = LocalDate.now(); + List dates = this.getLastWeek(); + MenuRecipeDetail menuRecipeDetailBean = new MenuRecipeDetail(); + menuRecipeDetailBean.setRecipeId(recipeId); + menuRecipeDetailBean.setApplyDate(now); + menuRecipeDetailBean.setEndDate(now.plusDays(6L)); + menuRecipeDetailBean.setDetailType(2); + List menuRecipeDetails = menuRecipeMapper.selectMenuRecipeDetail(menuRecipeDetailBean,null); + Map> haveDetail = menuRecipeDetails.stream() + .collect(Collectors.groupingBy(MenuRecipeDetail::getApplyDate, Collectors.toMap(MenuRecipeDetail::getMealtimeType, Function.identity()))); + Iterator var10 = dates.iterator(); + + label35: + while(var10.hasNext()) { + LocalDate date = var10.next(); + Map haveDayDetail = Optional.ofNullable(haveDetail.get(date)).orElse(new HashMap()); + List detailList = recipeDate.getDetailList(); + Iterator var14 = detailList.iterator(); + + while(true) { + MenuRecipeDetailAddDTO addDetail; + Integer mealtimeType; + MenuRecipeDetail menuRecipeDetail; + do { + if (!var14.hasNext()) { + continue label35; + } + addDetail = var14.next(); + mealtimeType = addDetail.getMealtimeType(); + menuRecipeDetail = haveDayDetail.get(mealtimeType); + } while(!ObjectUtil.isEmpty(menuRecipeDetail)); + + MenuRecipeDetail detailItem = new MenuRecipeDetail(); + Long detailId = Id.next(); + detailItem.setDetailId(detailId); + detailItem.setRecipeId(recipeId); + detailItem.setApplyDate(date); + detailItem.setMealtimeType(mealtimeType); + detailItem.setCreateBy(username); + recipeDetailV2List.add(detailItem); + List dishesList = addDetail.getDishesList(); + + for (MenuRecipeDishesAddDTO menuRecipeDishesAddDTO : dishesList) { + MenuRecipeDishes dishesItem = BeanUtil.copyProperties(menuRecipeDishesAddDTO, MenuRecipeDishes.class, new String[0]); + dishesItem.setDetailId(detailId); + dishesItem.setSaleNum(0); + dishesItem.setSurplusNum(menuRecipeDishesAddDTO.getSupplyNum()); + dishesItem.setSalePrice(Optional.ofNullable(menuRecipeDishesAddDTO.getSalePrice()).orElse(menuRecipeDishesAddDTO.getPrice())); + recipeDishesV2List.add(dishesItem); + } + } + } + + } + } + + public void creatLastWeekRecipe(List recipeDateList, List recipeDishesV2List, List recipeDetailV2List, Long recipeId, List weeks) { + if (!ObjectUtil.isEmpty(recipeDateList)) { + String username = SecurityUtils.getUsername(); + LocalDate now = LocalDate.now(); + HashMap dateHashMap = new HashMap<>(); + + for(int i = 0; i < 7; ++i) { + LocalDate applyWeek = now.plusDays((long)i); + dateHashMap.put(applyWeek.getDayOfWeek().getValue(), applyWeek); + } + MenuRecipeDetail menuRecipeDetailBean = new MenuRecipeDetail(); + menuRecipeDetailBean.setRecipeId(recipeId); + menuRecipeDetailBean.setApplyDate(now); + menuRecipeDetailBean.setEndDate(now.plusDays(6L)); + menuRecipeDetailBean.setDetailType(2); + List menuRecipeDetails = menuRecipeMapper.selectMenuRecipeDetail(menuRecipeDetailBean,weeks); + Map> haveDetail = menuRecipeDetails.stream() + .collect(Collectors.groupingBy(MenuRecipeDetail::getApplyWeek, + Collectors.toMap(MenuRecipeDetail::getMealtimeType, Function.identity()))); + Iterator var11 = recipeDateList.iterator(); + + label38: + while(var11.hasNext()) { + MenuRecipeDateAddDTO menuRecipeDateV2AddDTO = var11.next(); + Integer applyWeek = menuRecipeDateV2AddDTO.getApplyWeek(); + Map haveWeekDetail = Optional.ofNullable(haveDetail.get(applyWeek)).orElse(new HashMap()); + List detailList = menuRecipeDateV2AddDTO.getDetailList(); + Iterator var16 = detailList.iterator(); + while(true) { + MenuRecipeDetailAddDTO addDetail; + Integer mealtimeType; + MenuRecipeDetail menuRecipeDetail; + do { + if (!var16.hasNext()) { + continue label38; + } + addDetail = var16.next(); + mealtimeType = addDetail.getMealtimeType(); + menuRecipeDetail = haveWeekDetail.get(mealtimeType); + } while(!ObjectUtil.isEmpty(menuRecipeDetail)); + + MenuRecipeDetail detailItem = new MenuRecipeDetail(); + Long detailId = Id.next(); + detailItem.setDetailId(detailId); + detailItem.setRecipeId(recipeId); + detailItem.setApplyWeek(applyWeek); + detailItem.setApplyDate(dateHashMap.get(applyWeek)); + detailItem.setMealtimeType(mealtimeType); + detailItem.setCreateBy(username); + recipeDetailV2List.add(detailItem); + List dishesList = addDetail.getDishesList(); + + for (MenuRecipeDishesAddDTO menuRecipeDishesV2AddDTO : dishesList) { + MenuRecipeDishes dishesItem = BeanUtil.copyProperties(menuRecipeDishesV2AddDTO, MenuRecipeDishes.class, new String[0]); + dishesItem.setDetailId(detailId); + dishesItem.setSaleNum(0); + dishesItem.setSurplusNum(menuRecipeDishesV2AddDTO.getSupplyNum()); + dishesItem.setSalePrice(Optional.ofNullable(menuRecipeDishesV2AddDTO.getSalePrice()).orElse(menuRecipeDishesV2AddDTO.getPrice())); + recipeDishesV2List.add(dishesItem); + } + } + } + } + } + public void checkDishesList(List dishesList) { + long count = dishesList.stream().filter((x) -> { + return x.getSizeType() != 3L; + }).count(); + if (count > 99L) { + throw new ServiceException(I18n.getMessage("menu_issue_dishes_max", new Object[0])); + } else { + dishesList.stream().filter((x) -> { + return x.getSizeType() == 3L; + }).forEach((dishes) -> { + dishes.setRecommendFlag(2); + }); + long dishesCount = dishesList.stream().filter((d) -> { + return Integer.valueOf(1).equals(d.getRecommendFlag()); + }).count(); + if (dishesCount > 3L) { + throw new ServiceException(I18n.getMessage("menu_recommend_dishes_over_three", new Object[0])); + } + } + } + public void addMenuDishesToList(List recipeDishesV2List, Long detailId, List dishesList) { + for (MenuRecipeDishesAddDTO dishesV2AddDTO : dishesList) { + MenuRecipeDishes dishesItem = BeanUtil.copyProperties(dishesV2AddDTO, MenuRecipeDishes.class, new String[0]); + dishesItem.setSalePrice(Optional.ofNullable(dishesItem.getSalePrice()).orElse(dishesItem.getPrice())); + dishesItem.setDetailId(detailId); + dishesItem.setSurplusNum(dishesV2AddDTO.getSupplyNum()); + recipeDishesV2List.add(dishesItem); + } + } + + public void getDayActiveMenuRecipeDetailDishes(List menuRecipeDetails, List recipeDetailV2AddDTOS, List recipeDishesV2List, List haveDetailIds) { + if (!ObjectUtil.isEmpty(menuRecipeDetails)) { + List menuRecipeDishes = menuRecipeMapper.getMenuRecipeDishesList(haveDetailIds); + menuRecipeDishes.forEach((dishes) -> { + dishes.setSizeType(Optional.ofNullable(dishes.getSizeType()).orElse(1L)); + }); + Map> dishesMap = + menuRecipeDishes.stream().collect(Collectors.groupingBy(MenuRecipeDishes::getDetailId, + Collectors.toMap(this.getDishesUniKeyFunction(), Function.identity()))); + Map> dayAndMealTimeMap = menuRecipeDetails.stream() + .collect(Collectors.groupingBy(MenuRecipeDetail::getMealtimeType, + Collectors.toMap(MenuRecipeDetail::getDetailId, Function.identity()))); + + for (MenuRecipeDetailAddDTO detailV2AddDTO : recipeDetailV2AddDTOS) { + Integer mealtimeType = detailV2AddDTO.getMealtimeType(); + List dishesList = detailV2AddDTO.getDishesList(); + Map editDishesMap = dishesList.stream().collect(Collectors.toMap(this.getUniKeyFunction(), Function.identity())); + Map detailMap = Optional.ofNullable(dayAndMealTimeMap.get(mealtimeType)).orElse(new HashMap()); + + for (Long detailId : detailMap.keySet()) { + Map haveDishesMap = Optional.ofNullable(dishesMap.get(detailId)).orElse(new HashMap()); + + for (String dishesFlag : editDishesMap.keySet()) { + MenuRecipeDishesAddDTO addDishes = editDishesMap.get(dishesFlag); + MenuRecipeDishes haveDishes = haveDishesMap.get(dishesFlag); + MenuRecipeDishes dishesItem = this.getEditMenuDishes(dishesFlag, addDishes, haveDishes, detailId); + recipeDishesV2List.add(dishesItem); + } + } + } + + } + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/menu/MenuRecipeMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/menu/MenuRecipeMapper.xml index ea09b8f..09c8b87 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/menu/MenuRecipeMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/menu/MenuRecipeMapper.xml @@ -139,7 +139,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select base_dishes_id, dishes_id, @@ -152,7 +159,243 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{baseDishesId} + + + + + + + + + + insert into menu_recipe @@ -192,6 +435,121 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{remark}, + + insert into menu_recipe + + recipe_id, + plan_id, + recipe_name, + is_default, + recipe_type, + effect_date, + expire_date, + canteen_id, + stall_id, + enable_flag, + revision, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{recipeId}, + #{planId}, + #{recipeName}, + #{isDefault}, + #{recipeType}, + #{effectDate}, + #{expireDate}, + #{canteenId}, + #{stallId}, + #{enableFlag}, + #{revision}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + insert into menu_recipe_detail + + detail_id, + sale_type_id, + recipe_id, + apply_date, + apply_week, + mealtime_type, + detail_type, + revision, + create_by, + create_time, + update_by, + update_time, + + values + + + #{menuDetail.detailId}, + #{menuDetail.saleTypeId}, + #{menuDetail.recipeId}, + #{menuDetail.applyDate}, + #{menuDetail.applyWeek}, + #{menuDetail.mealtimeType}, + #{menuDetail.detailType}, + #{menuDetail.revision}, + #{menuDetail.createBy}, + #{menuDetail.createTime}, + #{menuDetail.updateBy}, + #{menuDetail.updateTime}, + + + + + insert into menu_recipe_dishes + + detail_id, + dishes_id, + price, + size_type, + supply_num, + sale_num, + surplus_num, + restrict_num, + sale_price, + recommend_flag, + sort_num, + revision, + create_by, + create_time, + update_by, + update_time, + + values + + + #{menuDish.detailId}, + #{menuDish.dishesId}, + #{menuDish.price}, + #{menuDish.sizeType}, + #{menuDish.supplyNum}, + #{menuDish.saleNum}, + #{menuDish.surplusNum}, + #{menuDish.restrictNum}, + #{menuDish.salePrice}, + #{menuDish.recommendFlag}, + #{menuDish.sortNum}, + #{menuDish.revision}, + #{menuDish.createBy}, + #{menuDish.createTime}, + #{menuDish.updateBy}, + #{menuDish.updateTime}, + + + update menu_recipe @@ -215,6 +573,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update menu_recipe_detail set update_time = #{time} where recipe_id = #{recipeId} + delete from menu_recipe where id = #{id} @@ -226,4 +587,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + delete from menu_recipe_detail where id in + + #{id} + + + + delete from menu_recipe_dishes where id in + + #{id} + + \ No newline at end of file