233 lines
11 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stdiet.custom.mapper.SysRecipesMapper">
<resultMap type="SysRecipesDaily" id="SysRecipesResult">
<result property="id" column="id"/>
<result property="numDay" column="num_day"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="reviewStatus" column="review_status"/>
<association property="dishes" column="id" select="selectDishesByMenuId"/>
</resultMap>
<resultMap id="SysDishesResult" type="SysRecipesDailyDishes">
<result property="dishesId" column="dishes_id"/>
<result property="menuId" column="menu_id"/>
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="methods" column="methods"/>
<result property="remark" column="remark"/>
<result property="isMain" column="is_main"/>
<result property="detail" column="detail" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"
javaType="com.stdiet.custom.domain.SysDishesIngredient"/>
<association property="igdList" column="dishes_id" select="selectIngredientsByDishesId"/>
</resultMap>
<resultMap id="SysIgdsResult" type="SysDishesIngredient">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="proteinRatio" column="protein_ratio"/>
<result property="fatRatio" column="fat_ratio"/>
<result property="carbonRatio" column="carbon_ratio"/>
<result property="area" column="area"/>
<result property="rec" column="rec"/>
<result property="notRec" column="not_rec"/>
<result property="cusWeight" column="cus_weight"/>
<result property="cusUnit" column="cus_unit"/>
<result property="weight" column="weight"/>
</resultMap>
<select id="selectSysRecipesByRecipesId" parameterType="Long" resultMap="SysRecipesResult">
SELECT id, num_day, create_by, create_time, update_by, update_time, review_status FROM sys_customer_daily_menu WHERE recipes_id = #{id}
</select>
<select id="selectDishesByMenuId" parameterType="Long" resultMap="SysDishesResult">
SELECT * FROM (SELECT * FROM sys_customer_menu_dishes WHERE menu_id = #{id}) AS menu
LEFT JOIN sys_dishes ON menu.dishes_id = sys_dishes.id
</select>
<select id="selectIngredientsByDishesId" parameterType="Long" resultMap="SysIgdsResult">
SELECT * FROM(
SELECT ingredient_id AS id, ingredient_weight AS weight, cus_weight, cus_unit, remark
FROM sys_dishes_ingredient
WHERE dishes_id = #{id}
) dishes
LEFT JOIN (
SELECT id, name, type, protein_ratio, fat_ratio, carbon_ratio, area, not_rec, rec
FROM sys_ingredient igd
LEFT JOIN (
SELECT ingredient_id as id, GROUP_CONCAT(name SEPARATOR ',') not_rec FROM(
SELECT physical_signs_id as id, ingredient_id
FROM sys_ingredient_not_rec
) notRec JOIN sys_physical_signs phy USING(id)
GROUP BY id
) notRecT USING(id)
LEFT JOIN (
SELECT ingredient_id as id, GROUP_CONCAT(name SEPARATOR ',') rec FROM(
SELECT physical_signs_id as id, ingredient_id
FROM sys_ingredient_rec
) rec JOIN sys_physical_signs phy USING(id)
GROUP BY id
) recT USING(id)
) ing USING(id)
</select>
<!-- 更新菜品-->
<update id="updateDishesDetail" parameterType="SysRecipesDailyDishes">
update sys_customer_menu_dishes
<trim prefix="SET" suffixOverrides=",">
<if test="menuId != null">menu_id = #{menuId},</if>
<if test="dishesId != null">dishes_id = #{dishesId},</if>
<if test="type != null">type = #{type},</if>
<if test="detail != null">detail =
#{detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler},
</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<!-- 插入菜品-->
<insert id="addDishes" parameterType="SysRecipesDailyDishes" useGeneratedKeys="true" keyProperty="id">
insert into sys_customer_menu_dishes
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="menuId != null">menu_id,</if>
<if test="dishesId != null">dishes_id,</if>
<if test="type != null">type,</if>
<if test="detail != null">detail,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="menuId != null">#{menuId},</if>
<if test="dishesId != null">#{dishesId},</if>
<if test="type != null">#{type},</if>
<if test="detail != null">
#{detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler},
</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
<!-- 删除菜品-->
<delete id="deleteDishes" parameterType="Long">
delete from sys_customer_menu_dishes where id = #{id}
</delete>
<!-- 删除整天食谱 -->
<delete id="deleteMenu" parameterType="Long">
delete from sys_customer_menu_dishes where menu_id = #{id}
</delete>
<!-- 查询已有食谱天数-->
<select id="getNumDayByCusId" parameterType="Long" resultType="Integer">
select count(*) from sys_customer_daily_menu where cus_id = #{id}
</select>
<!-- 新增食谱 -->
<insert id="addRecipes" parameterType="SysRecipes" useGeneratedKeys="true" keyProperty="id">
insert into sys_customer_menu
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="cusId != null">cus_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="cusId != null">#{cusId},</if>
</trim>
</insert>
<!-- 新增每菜单 -->
<insert id="bashAddMenus">
insert into sys_customer_daily_menu (id, num_day, recipes_id, cus_id) values
<foreach collection="list" separator="," item="item" index="index">
(#{item.id}, #{item.numDay}, #{item.recipesId}, #{item.cusId})
</foreach>
</insert>
<!-- 新增菜单对应菜品-->
<insert id="bashAddDishes" useGeneratedKeys="true" keyProperty="id">
insert into sys_customer_menu_dishes (menu_id, type, dishes_id, remark, detail) values
<foreach collection="list" separator="," item="item" index="index">
(#{item.menuId}, #{item.type}, #{item.dishesId}, #{item.remark},
#{item.detail, jdbcType=OTHER, typeHandler=com.stdiet.custom.typehandler.ArrayJsonHandler})
</foreach>
</insert>
<!-- 展示用食谱查找精简 -->
<resultMap type="SysRecipesDaily" id="SysRecipesResultShow">
<result property="id" column="id"/>
<result property="numDay" column="num_day"/>
<result property="reviewStatus" column="review_status"/>
<association property="dishes" column="id" select="selectDishesByMenuIdShow"/>
</resultMap>
<resultMap type="SysRecipesDailyDishes" id="SysDishesResultShow">
<result property="dishesId" column="dishes_id"/>
<result property="menuId" column="menu_id"/>
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="methods" column="methods"/>
<result property="remark" column="remark"/>
<result property="isMain" column="is_main"/>
<result property="detail" column="detail" typeHandler="com.stdiet.custom.typehandler.ArrayJsonHandler"
javaType="com.stdiet.custom.domain.SysDishesIngredient"/>
<association property="igdList" column="dishes_id" select="selectIngredientsByDishesIdShow"/>
</resultMap>
<resultMap type="SysDishesIngredient" id="SysIgdsResultShow">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="proteinRatio" column="protein_ratio"/>
<result property="fatRatio" column="fat_ratio"/>
<result property="carbonRatio" column="carbon_ratio"/>
<result property="area" column="area"/>
<result property="cusWeight" column="cus_weight"/>
<result property="cusUnit" column="cus_unit"/>
<result property="weight" column="weight"/>
</resultMap>
<select id="selectSysRecipesByRecipesIdShow" parameterType="Long" resultMap="SysRecipesResultShow">
SELECT id, num_day, review_status FROM sys_customer_daily_menu WHERE recipes_id = #{id}
</select>
<select id="selectDishesByMenuIdShow" parameterType="Long" resultMap="SysDishesResultShow">
SELECT
menu.id, menu.menu_id, menu.dishes_id, menu.type, menu.detail, menu.remark, sd.is_main,sd.name,sd.methods
FROM (SELECT id, menu_id, dishes_id, type, detail, remark FROM sys_customer_menu_dishes WHERE menu_id = #{id}) AS menu
LEFT JOIN sys_dishes as sd ON menu.dishes_id = sd.id
</select>
<select id="selectIngredientsByDishesIdShow" parameterType="Long" resultMap="SysIgdsResultShow">
SELECT
ing.id, ing.name, ing.type, ing.protein_ratio, ing.fat_ratio, ing.carbon_ratio, ing.area, dishes.cus_weight, dishes.cus_unit, dishes.weight
FROM(
SELECT ingredient_id AS id, ingredient_weight AS weight, cus_weight, cus_unit, remark
FROM sys_dishes_ingredient
WHERE dishes_id = #{id}
) dishes
LEFT JOIN (
SELECT id, name, type, protein_ratio, fat_ratio, carbon_ratio, area
FROM sys_ingredient igd
) ing USING(id)
</select>
<!-- 根据 recipesId查询食谱具体每天详情 -->
<select id="getRecipesListByRecipesId" parameterType="Long" resultType="SysRecipesDaily">
SELECT id, num_day as numDay FROM sys_customer_daily_menu WHERE recipes_id = #{recipesId} order by num_day asc
</select>
<update id="updateRecipesById" parameterType="SysRecipesDaily">
update sys_customer_daily_menu
<trim prefix="SET" suffixOverrides=",">
<if test="numDay != null">num_day = #{numDay},</if>
</trim>
where id = #{id}
</update>
</mapper>