diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysDishesController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysDishesController.java index 6366a249c..f4254c312 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysDishesController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysDishesController.java @@ -1,35 +1,33 @@ package com.stdiet.web.controller.custom; -import java.util.List; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.stdiet.common.annotation.Log; import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; -import com.stdiet.common.enums.BusinessType; -import com.stdiet.custom.domain.SysDishes; -import com.stdiet.custom.service.ISysDishesService; -import com.stdiet.common.utils.poi.ExcelUtil; import com.stdiet.common.core.page.TableDataInfo; +import com.stdiet.common.enums.BusinessType; +import com.stdiet.common.utils.StringUtils; +import com.stdiet.common.utils.poi.ExcelUtil; +import com.stdiet.custom.domain.SysDishes; +import com.stdiet.custom.domain.SysDishesIngredient; +import com.stdiet.custom.domain.SysIngredient; +import com.stdiet.custom.service.ISysDishesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; /** * 菜品Controller - * + * * @author wonder * @date 2020-12-28 */ @RestController @RequestMapping("/custom/dishes") -public class SysDishesController extends BaseController -{ +public class SysDishesController extends BaseController { @Autowired private ISysDishesService sysDishesService; @@ -38,10 +36,17 @@ public class SysDishesController extends BaseController */ @PreAuthorize("@ss.hasPermi('custom:dishes:list')") @GetMapping("/list") - public TableDataInfo list(SysDishes sysDishes) - { + public TableDataInfo list(SysDishes sysDishes) { startPage(); List<SysDishes> list = sysDishesService.selectSysDishesList(sysDishes); + for (SysDishes dishes : list) { + List<SysDishesIngredient> ingredients = sysDishesService.selectSysIngreditentsById(dishes.getId()); + if (StringUtils.isNull(ingredients)) { + dishes.setIgdList(new ArrayList<>()); + } else { + dishes.setIgdList(ingredients); + } + } return getDataTable(list); } @@ -51,8 +56,7 @@ public class SysDishesController extends BaseController @PreAuthorize("@ss.hasPermi('custom:dishes:export')") @Log(title = "菜品", businessType = BusinessType.EXPORT) @GetMapping("/export") - public AjaxResult export(SysDishes sysDishes) - { + public AjaxResult export(SysDishes sysDishes) { List<SysDishes> list = sysDishesService.selectSysDishesList(sysDishes); ExcelUtil<SysDishes> util = new ExcelUtil<SysDishes>(SysDishes.class); return util.exportExcel(list, "dishes"); @@ -63,8 +67,7 @@ public class SysDishesController extends BaseController */ @PreAuthorize("@ss.hasPermi('custom:dishes:query')") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return AjaxResult.success(sysDishesService.selectSysDishesById(id)); } @@ -74,8 +77,7 @@ public class SysDishesController extends BaseController @PreAuthorize("@ss.hasPermi('custom:dishes:add')") @Log(title = "菜品", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody SysDishes sysDishes) - { + public AjaxResult add(@RequestBody SysDishes sysDishes) { return toAjax(sysDishesService.insertSysDishes(sysDishes)); } @@ -85,8 +87,7 @@ public class SysDishesController extends BaseController @PreAuthorize("@ss.hasPermi('custom:dishes:edit')") @Log(title = "菜品", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody SysDishes sysDishes) - { + public AjaxResult edit(@RequestBody SysDishes sysDishes) { return toAjax(sysDishesService.updateSysDishes(sysDishes)); } @@ -95,9 +96,8 @@ public class SysDishesController extends BaseController */ @PreAuthorize("@ss.hasPermi('custom:dishes:remove')") @Log(title = "菜品", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(sysDishesService.deleteSysDishesByIds(ids)); } } \ No newline at end of file diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysIngredientController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysIngredientController.java index a4ec6ab63..f8100f17f 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysIngredientController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysIngredientController.java @@ -45,6 +45,14 @@ public class SysIngredientController extends BaseController return getDataTable(list); } + @PreAuthorize("@ss.hasPermi('custom:ingredient:list')") + @PostMapping("/listAll") + public TableDataInfo listAll(@RequestBody SysIngredient sysIngredient) + { + List<SysIngredient> list = sysIngredientService.selectSysIngredientList(sysIngredient); + return getDataTable(list); + } + /** * 导出食材列表 */ diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java index cd23e764a..f4b9f2b81 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishes.java @@ -5,6 +5,8 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.stdiet.common.annotation.Excel; import com.stdiet.common.core.domain.BaseEntity; +import java.util.List; + /** * 菜品对象 sys_dishes * @@ -30,6 +32,8 @@ public class SysDishes extends BaseEntity @Excel(name = "做法") private String methods; + private List<SysDishesIngredient> igdList; + public void setId(Long id) { this.id = id; @@ -67,6 +71,14 @@ public class SysDishes extends BaseEntity return methods; } + public void setIgdList(List<SysDishesIngredient> ingredientList) { + this.igdList = ingredientList; + } + + public List<SysDishesIngredient> getIgdList() { + return igdList; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishesIngredient.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishesIngredient.java new file mode 100644 index 000000000..fec0ce9db --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysDishesIngredient.java @@ -0,0 +1,76 @@ +package com.stdiet.custom.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; + +/** + * 菜品对象 sys_dishes + * + * @author wonder + * @date 2020-12-28 + */ +public class SysDishesIngredient extends SysIngredient { + + private Long ingredientId; + + private Long dishesId; + + private Long cusUnit; + + private BigDecimal cusWeight; + + private BigDecimal weight; + + public Long getIngredientId() { + return ingredientId; + } + + public void setIngredientId(Long ingredientId) { + this.ingredientId = ingredientId; + } + + public Long getDishesId() { + return dishesId; + } + + public void setDishesId(Long dishesId) { + this.dishesId = dishesId; + } + + public BigDecimal getWeight() { + return weight; + } + + public void setWeight(BigDecimal weight) { + this.weight = weight; + } + + public BigDecimal getCusWeight() { + return cusWeight; + } + + public void setCusWeight(BigDecimal cusWeight) { + this.cusWeight = cusWeight; + } + + public Long getCusUnit() { + return cusUnit; + } + + public void setCusUnit(Long cusUnit) { + this.cusUnit = cusUnit; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("ingredientId", getIngredientId()) + .append("dishesId", getDishesId()) + .append("weight", getWeight()) + .append("cusWeight", getCusWeight()) + .append("cusUnit", getCusUnit()) + .toString(); + } +} \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysIngredient.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysIngredient.java index e199f4de1..716a7614f 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysIngredient.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysIngredient.java @@ -33,24 +33,6 @@ public class SysIngredient extends BaseEntity { @Excel(name = "食材类别") private String type; - /** - * 推荐分量估算 - */ - @Excel(name = "推荐分量估算") - private Long recEstimation; - - /** - * 推荐分量估算单位id - */ - @Excel(name = "推荐分量估算单位id") - private Long recEstUnit; - - /** - * 推荐分量 - */ - @Excel(name = "推荐分量") - private Long recPortion; - /** * 蛋白质比例 */ @@ -123,30 +105,6 @@ public class SysIngredient extends BaseEntity { this.type = type; } - public Long getRecEstimation() { - return recEstimation; - } - - public void setRecEstimation(Long recEstimation) { - this.recEstimation = recEstimation; - } - - public Long getRecEstUnit() { - return recEstUnit; - } - - public void setRecEstUnit(Long recEstUnit) { - this.recEstUnit = recEstUnit; - } - - public Long getRecPortion() { - return recPortion; - } - - public void setRecPortion(Long recPortion) { - this.recPortion = recPortion; - } - public BigDecimal getProteinRatio() { return proteinRatio; } @@ -201,9 +159,6 @@ public class SysIngredient extends BaseEntity { .append("id", getId()) .append("name", getName()) .append("type", getType()) - .append("recEstimation", getRecEstimation()) - .append("recEstUnit", getRecEstUnit()) - .append("recPortion", getRecPortion()) .append("proteinRatio", getProteinRatio()) .append("fatRatio", getFatRatio()) .append("carbonRatio", getCarbonRatio()) diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysDishesMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysDishesMapper.java index e24d49a5b..262325752 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysDishesMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysDishesMapper.java @@ -1,7 +1,11 @@ package com.stdiet.custom.mapper; +import java.lang.reflect.Array; +import java.util.ArrayList; import java.util.List; import com.stdiet.custom.domain.SysDishes; +import com.stdiet.custom.domain.SysDishesIngredient; +import com.stdiet.custom.domain.SysIngredient; /** * 菜品Mapper接口 @@ -19,6 +23,8 @@ public interface SysDishesMapper */ public SysDishes selectSysDishesById(Long id); + public ArrayList<SysDishesIngredient> selectSysIngreditentsById(Long id); + /** * 查询菜品列表 * @@ -58,4 +64,10 @@ public interface SysDishesMapper * @return 结果 */ public int deleteSysDishesByIds(Long[] ids); + + public int deleteIngredientById(Long id); + + public int deleteIngredientByIds(Long[] ids); + + public int bashInsertDishesIngredent(List<SysDishesIngredient> sysDishesIngredients); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysIngredientMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysIngredientMapper.java index 8c8c527f8..bb6c4aa5b 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysIngredientMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysIngredientMapper.java @@ -68,4 +68,8 @@ public interface SysIngredientMapper public int deleteIngredentRecByIngredientId(Long recId); public int deleteIngredentNotRecByIngredientId(Long notRecId); + + public int deleteIngredentRecByIngredientIds(Long[] id); + + public int deleteIngredentNotRecByIngredientIds(Long[] id); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysDishesService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysDishesService.java index c3def4487..e279b2eac 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysDishesService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysDishesService.java @@ -2,6 +2,8 @@ package com.stdiet.custom.service; import java.util.List; import com.stdiet.custom.domain.SysDishes; +import com.stdiet.custom.domain.SysDishesIngredient; +import com.stdiet.custom.domain.SysIngredient; /** * 菜品Service接口 @@ -19,6 +21,8 @@ public interface ISysDishesService */ public SysDishes selectSysDishesById(Long id); + public List<SysDishesIngredient> selectSysIngreditentsById(Long id); + /** * 查询菜品列表 * diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysDishesServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysDishesServiceImpl.java index bcdcbbd2a..4d6945f3c 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysDishesServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysDishesServiceImpl.java @@ -1,96 +1,127 @@ package com.stdiet.custom.service.impl; -import java.util.List; import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.StringUtils; +import com.stdiet.custom.domain.SysDishes; +import com.stdiet.custom.domain.SysDishesIngredient; +import com.stdiet.custom.mapper.SysDishesMapper; +import com.stdiet.custom.service.ISysDishesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.stdiet.custom.mapper.SysDishesMapper; -import com.stdiet.custom.domain.SysDishes; -import com.stdiet.custom.service.ISysDishesService; + +import java.util.ArrayList; +import java.util.List; /** * 菜品Service业务层处理 - * + * * @author wonder * @date 2020-12-28 */ @Service -public class SysDishesServiceImpl implements ISysDishesService -{ +public class SysDishesServiceImpl implements ISysDishesService { @Autowired private SysDishesMapper sysDishesMapper; /** * 查询菜品 - * + * * @param id 菜品ID * @return 菜品 */ @Override - public SysDishes selectSysDishesById(Long id) - { - return sysDishesMapper.selectSysDishesById(id); + public SysDishes selectSysDishesById(Long id) { + SysDishes dishes = sysDishesMapper.selectSysDishesById(id); + if (StringUtils.isNotNull(dishes)) { + List<SysDishesIngredient> ingredientArray = selectSysIngreditentsById(id); + if (StringUtils.isNull(ingredientArray)) { + dishes.setIgdList(new ArrayList<>()); + } else { + dishes.setIgdList(ingredientArray); + } + + } + return dishes; + } + + @Override + public List<SysDishesIngredient> selectSysIngreditentsById(Long id) { + return sysDishesMapper.selectSysIngreditentsById(id); } /** * 查询菜品列表 - * + * * @param sysDishes 菜品 * @return 菜品 */ @Override - public List<SysDishes> selectSysDishesList(SysDishes sysDishes) - { + public List<SysDishes> selectSysDishesList(SysDishes sysDishes) { return sysDishesMapper.selectSysDishesList(sysDishes); } /** * 新增菜品 - * + * * @param sysDishes 菜品 * @return 结果 */ @Override - public int insertSysDishes(SysDishes sysDishes) - { + public int insertSysDishes(SysDishes sysDishes) { sysDishes.setCreateTime(DateUtils.getNowDate()); - return sysDishesMapper.insertSysDishes(sysDishes); + int rows = sysDishesMapper.insertSysDishes(sysDishes); + // + insertDishesIngredient(sysDishes); + return rows; + } + + public void insertDishesIngredient(SysDishes sysDishes) { + if (StringUtils.isNotNull(sysDishes.getIgdList())) { + List<SysDishesIngredient> list = sysDishes.getIgdList(); + for (SysDishesIngredient dishesIngredient : list) { + dishesIngredient.setDishesId(sysDishes.getId()); + dishesIngredient.setIngredientId(dishesIngredient.getId()); + } + sysDishesMapper.bashInsertDishesIngredent(list); + } } /** * 修改菜品 - * + * * @param sysDishes 菜品 * @return 结果 */ @Override - public int updateSysDishes(SysDishes sysDishes) - { + public int updateSysDishes(SysDishes sysDishes) { sysDishes.setUpdateTime(DateUtils.getNowDate()); + Long dishesId = sysDishes.getId(); + sysDishesMapper.deleteIngredientById(dishesId); + insertDishesIngredient(sysDishes); return sysDishesMapper.updateSysDishes(sysDishes); } /** * 批量删除菜品 - * + * * @param ids 需要删除的菜品ID * @return 结果 */ @Override - public int deleteSysDishesByIds(Long[] ids) - { + public int deleteSysDishesByIds(Long[] ids) { + sysDishesMapper.deleteIngredientByIds(ids); return sysDishesMapper.deleteSysDishesByIds(ids); } /** * 删除菜品信息 - * + * * @param id 菜品ID * @return 结果 */ @Override - public int deleteSysDishesById(Long id) - { + public int deleteSysDishesById(Long id) { + sysDishesMapper.deleteIngredientById(id); return sysDishesMapper.deleteSysDishesById(id); } } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysIngredientServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysIngredientServiceImpl.java index 1838b4128..eff3414a4 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysIngredientServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysIngredientServiceImpl.java @@ -128,6 +128,8 @@ public class SysIngredientServiceImpl implements ISysIngredientService { */ @Override public int deleteSysIngredientByIds(Long[] ids) { + sysIngredientMapper.deleteIngredentRecByIngredientIds(ids); + sysIngredientMapper.deleteIngredentNotRecByIngredientIds(ids); return sysIngredientMapper.deleteSysIngredientByIds(ids); } diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysDishesMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysDishesMapper.xml index 32b0dce05..dc144f090 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysDishesMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysDishesMapper.xml @@ -15,6 +15,21 @@ <result property="updateTime" column="update_time" /> </resultMap> + <resultMap type="SysDishesIngredient" id="SysDishesIngredientResult"> + <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> + <sql id="selectSysDishesVo"> select id, name, type, methods, create_by, create_time, update_by, update_time from sys_dishes </sql> @@ -27,6 +42,38 @@ </where> </select> + <sql id="selectSysIngreditentsByIdVo"> + SELECT * FROM( + SELECT ingredient_id AS id, ingredient_weight AS weight, cus_weight, cus_unit + 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) + </sql> + + <select id="selectSysIngreditentsById" parameterType="Long" resultMap="SysDishesIngredientResult"> + <include refid="selectSysIngreditentsByIdVo" > + <property name="id" value="#{id}"/> + </include> + </select> + <select id="selectSysDishesById" parameterType="Long" resultMap="SysDishesResult"> <include refid="selectSysDishesVo"/> where id = #{id} @@ -79,4 +126,22 @@ </foreach> </delete> + <delete id="deleteIngredientById" parameterType="Long"> + delete from sys_dishes_ingredient where dishes_id = #{id} + </delete> + + <delete id="deleteIngredientByIds" parameterType="String"> + delete from sys_dishes_ingredient where dishes_id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + + <insert id="bashInsertDishesIngredent"> + insert into sys_dishes_ingredient(dishes_id, ingredient_id, ingredient_weight, cus_unit, cus_weight) values + <foreach collection="list" separator="," item="item" index="index"> + (#{item.dishesId}, #{item.ingredientId}, #{item.weight}, #{item.cusUnit}, #{item.cusWeight}) + </foreach> + </insert> + </mapper> \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysIngredientMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysIngredientMapper.xml index cd7292331..51c7517c4 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysIngredientMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysIngredientMapper.xml @@ -159,6 +159,20 @@ delete from sys_ingredient_not_rec where ingredient_id=#{ingredientId} </delete> + <delete id="deleteIngredentRecByIngredientIds" parameterType="Long"> + delete from sys_ingredient_rec where ingredient_id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + + <delete id="deleteIngredentNotRecByIngredientIds" parameterType="String"> + delete from sys_ingredient_not_rec where ingredient_id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + <update id="updateSysIngredient" parameterType="SysIngredient"> update sys_ingredient <trim prefix="SET" suffixOverrides=","> diff --git a/stdiet-ui/src/api/custom/ingredient.js b/stdiet-ui/src/api/custom/ingredient.js index 15c1606bc..6643a081e 100644 --- a/stdiet-ui/src/api/custom/ingredient.js +++ b/stdiet-ui/src/api/custom/ingredient.js @@ -14,6 +14,19 @@ export function listIngredient(query) { }) } +export function listAllIngredient(query) { + const {recIds, notRecIds} = query; + return request({ + url: '/custom/ingredient/listAll', + method: 'post', + data: { + ...query, + recIds: recIds && recIds.length ? recIds : null, + notRecIds: notRecIds && notRecIds.length ? notRecIds : null, + } + }) +} + // 查询食材详细 export function getIngredient(id) { return request({ diff --git a/stdiet-ui/src/views/custom/dishes/index.vue b/stdiet-ui/src/views/custom/dishes/index.vue index 44486ef8a..2fd06a4f0 100644 --- a/stdiet-ui/src/views/custom/dishes/index.vue +++ b/stdiet-ui/src/views/custom/dishes/index.vue @@ -34,7 +34,8 @@ size="mini" @click="handleAdd" v-hasPermi="['custom:dishes:add']" - >新增</el-button> + >新增 + </el-button> </el-col> <el-col :span="1.5"> <el-button @@ -43,17 +44,18 @@ size="mini" @click="handleExport" v-hasPermi="['custom:dishes:export']" - >导出</el-button> + >导出 + </el-button> </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-row> <el-table v-loading="loading" :data="dishesList" @selection-change="handleSelectionChange"> -<!-- <el-table-column type="selection" width="55" align="center" />--> -<!-- <el-table-column label="id" align="center" prop="id" />--> - <el-table-column label="菜品名称" align="center" prop="name" /> - <el-table-column label="菜品类型" align="center" prop="type" :formatter="typeFormat" /> - <el-table-column label="做法" align="center" prop="methods" /> + <!-- <el-table-column type="selection" width="55" align="center" />--> + <!-- <el-table-column label="id" align="center" prop="id" />--> + <el-table-column label="菜品名称" align="center" prop="name"/> + <el-table-column label="菜品类型" align="center" prop="type" :formatter="typeFormat"/> + <el-table-column label="做法" align="center" prop="methods"/> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button @@ -62,14 +64,16 @@ icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['custom:dishes:edit']" - >修改</el-button> + >修改 + </el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['custom:dishes:remove']" - >删除</el-button> + >删除 + </el-button> </template> </el-table-column> </el-table> @@ -86,7 +90,7 @@ <el-dialog :title="title" :visible.sync="open" width="720px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form-item label="菜品名称" prop="name"> - <el-input v-model="form.name" placeholder="请输入菜品名称" /> + <el-input v-model="form.name" placeholder="请输入菜品名称"/> </el-form-item> <el-form-item label="菜品类型" prop="type"> <el-select v-model="form.type" placeholder="请选择菜品类型"> @@ -101,9 +105,9 @@ <el-form-item label="食材" prop="ingIds"> <el-transfer style="text-align: left; display: inline-block" - v-model="form.ingIds" + v-model="selIngIds" + size="mini" filterable - :render-content="renderFunc" :titles="['备选', '已选']" :button-texts="['', '']" :format="{ @@ -111,19 +115,59 @@ hasChecked: '${checked}/${total}', }" @change="handleChange" - :data="data" + :data="ingDataList" > - <el-select class="transfer-footer" slot="left-footer" size="small" - v-model="ingType" - v-for="dict in ingTypeOptions" - :key="dict.dictValue" - :label="dict.dictLabel" - :value="dict.dictValue"/> - <div class="transfer-footer" slot="right-footer" size="small" /> + <el-select + class="transfer-footer" + slot="left-footer" + size="small" + filterable + v-model="ingType" + @change="handleOnTypeChange"> + <el-option + v-for="dict in ingTypeOptions" + :key="dict.dictValue" + :label="dict.dictLabel" + :value="dict.dictValue"/> + </el-select> + <div class="transfer-footer" slot="right-footer" size="small"/> </el-transfer> </el-form-item> + <el-form-item label="分量" prop="weight"> + <el-table + :data="selTableData" + border + show-summary + size="mini" + :summary-method="getSummaries" + style="width: 100%"> + <el-table-column + prop="name" + label="食材"> + </el-table-column> + <el-table-column + prop="weight" + label="重量(g)"> + <template slot-scope="scope"> + <el-input v-model="scope.row.weight" size="mini" @change="handleInputChange" type="number" step="50"/> + </template> + </el-table-column> + <el-table-column + prop="proteinRatio" + label="P/100g"> + </el-table-column> + <el-table-column + prop="fatRatio" + label="F/100g"> + </el-table-column> + <el-table-column + prop="carbonRatio" + label="C/100g"> + </el-table-column> + </el-table> + </el-form-item> <el-form-item label="做法" prop="methods"> - <el-input v-model="form.methods" type="textarea" placeholder="请输入内容" /> + <el-input v-model="form.methods" type="textarea" placeholder="请输入内容"/> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> @@ -135,7 +179,8 @@ </template> <script> - import { listDishes, getDishes, delDishes, addDishes, updateDishes, exportDishes } from "@/api/custom/dishes"; + import {addDishes, delDishes, exportDishes, getDishes, listDishes, updateDishes} from "@/api/custom/dishes"; + import {listAllIngredient} from "@/api/custom/ingredient"; export default { name: "Dishes", @@ -159,9 +204,19 @@ title: "", // 是否显示弹出层 open: false, - ingType: 1, + ingType: '1', // 食材类别字典 ingTypeOptions: [], + // 远程数据缓存,预防新增的食材找不到 + oriDataList: [], + // 备选食材列表 + ingDataList: [], + // 选中的食材列表 + selIngList: [], + // 选中的食材id + selIngIds: [], + // 选中的食材分量列表 + selTableData: [], // 菜品类别字典 typeOptions: [], // 查询参数 @@ -174,8 +229,7 @@ // 表单参数 form: {}, // 表单校验 - rules: { - } + rules: {} }; }, created() { @@ -217,8 +271,13 @@ createTime: null, updateBy: null, updateTime: null, - ingIds: [] + igdList: [] }; + this.selIngIds = []; + this.selIngList = []; + this.selTableData = []; + this.oriDataList = []; + this.ingType = '1'; this.resetForm("form"); }, /** 搜索按钮操作 */ @@ -234,14 +293,21 @@ // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.id) - this.single = selection.length!==1 + this.single = selection.length !== 1 this.multiple = !selection.length }, /** 新增按钮操作 */ handleAdd() { this.reset(); - this.open = true; - this.title = "添加菜品"; + listAllIngredient({type: this.ingType}).then(response => { + this.open = true; + this.title = "添加菜品"; + this.oriDataList = response.rows; + this.ingDataList = this.oriDataList.map(obj => ({ + key: obj.id, + label: obj.name + })) + }) }, /** 修改按钮操作 */ handleUpdate(row) { @@ -249,14 +315,35 @@ const id = row.id || this.ids getDishes(id).then(response => { this.form = response.data; - this.open = true; - this.title = "修改菜品"; + this.form.igdList.forEach(obj => { + this.selIngIds.push(obj.id); + this.selIngList.push({ + key: obj.id, + label: obj.name + }); + this.selTableData.push(obj) + }) + listAllIngredient({type: this.ingType}).then(res => { + this.open = true; + this.title = "修改菜品"; + this.oriDataList = res.rows; + this.ingDataList = this.oriDataList.reduce((arr, cur) => { + if (!arr.some(({key}) => key === cur.id)) { + arr.push({ + key: cur.id, + label: cur.name + }); + } + return arr; + }, this.selIngList.slice()); + }) }); }, /** 提交按钮 */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { + this.form.igdList = this.selTableData; if (this.form.id != null) { updateDishes(this.form).then(response => { if (response.code === 200) { @@ -284,12 +371,13 @@ confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" - }).then(function() { + }).then(function () { return delDishes(ids); }).then(() => { this.getList(); this.msgSuccess("删除成功"); - }).catch(function() {}); + }).catch(function () { + }); }, /** 导出按钮操作 */ handleExport() { @@ -298,20 +386,71 @@ confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" - }).then(function() { + }).then(function () { return exportDishes(queryParams); }).then(response => { this.download(response.msg); - }).catch(function() {}); + }).catch(function () { + }); }, - renderFunc(h, option) { - if (this.form.ingIds.includes(option.key)) { - return <span> - {option.key} - {option.label} - </span> - } - return <span>{option.label}</span>; + handleChange(value, direction, movedKeys) { + // console.log({oriIgdList: this.oriDataList, selIgdList: this.form.igdList}); + const newTableData = []; + this.selIngList = value.map(id => { + // 搜索table中的数据 + let tmpTableObj = this.selTableData.find(obj => obj.id === id); + if (tmpTableObj) { + newTableData.push(tmpTableObj); + } else { + // 搜索请求的缓存数据 + tmpTableObj = this.oriDataList.find(obj => obj.id === id); + if (tmpTableObj) { + newTableData.push({...tmpTableObj, weight: 100, cusWeight: 1, cusUnit: 1}) + } + } + const tarObj = this.ingDataList.find(({key}) => key === id); + return tarObj + }); + this.selTableData = newTableData; }, + handleOnTypeChange(value) { + listAllIngredient({type: value}).then(res => { + this.ingDataList = res.rows.reduce((arr, cur) => { + if (!arr.some(({key}) => key === cur.id)) { + arr.push({ + key: cur.id, + label: cur.name + }); + } + return arr; + }, this.selIngList.slice()); + }) + }, + handleInputChange(val) { + console.log({val, table: this.selTableData}) + }, + getSummaries(param) { + console.log(param) + console.log(arguments); + const {columns, data} = param; + return columns.reduce((arr, cur, idx) => { + if (idx) { + arr[idx] = data.reduce((acc, dAcc) => { + if (idx === 1) { + return acc + dAcc.weight; + } + return acc + dAcc[cur.property] * dAcc.weight / 100; + }, 0); + } + return arr; + }, ['合计']) + } } }; </script> + +<style> + .el-transfer-panel__filter { + margin: 2px; + } +</style>