菜品与财务分析

This commit is contained in:
qjq
2024-04-02 15:06:27 +08:00
parent 12833c1b9f
commit 5bddb6e9f9
33 changed files with 1758 additions and 6 deletions

View File

@ -176,4 +176,10 @@ public interface ErrorCodeConstants {
ErrorCode DISHES_NOT_EXISTS = new ErrorCode(1_002_030_002, "当前菜品不存在");
// ========== 菜品关联门店 1-002-032-000 ==========
ErrorCode DISHES_TYPE_NOT_EXISTS = new ErrorCode(1_002_032_002, "当前菜品类型不存在");
// ========== 门店 流水 1_002_033_002 ==========
ErrorCode CARTEEN_MONEY_NOT_EXISTS = new ErrorCode(1_002_033_002, "门店流水不存在");
// ========== 门店 流水 1_002_034_002 ==========
ErrorCode DISHES_NUTRITION_NOT_EXISTS = new ErrorCode(1_002_034_002, "菜品营养不存在");
// ========== 门店 流水 1_002_035_002 ==========
ErrorCode DISHES_RAW_NOT_EXISTS = new ErrorCode(1_002_035_002, "菜品原材料不存在");
}

View File

@ -0,0 +1,107 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesnutrition;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition.DishesNutritionDO;
import cn.iocoder.yudao.module.system.service.dishesnutrition.DishesNutritionService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 菜品营养")
@RestController
@RequestMapping("/t/dishes-nutrition")
@Validated
public class DishesNutritionController {
@Resource
private DishesNutritionService dishesNutritionService;
@PostMapping("/create")
@Operation(summary = "创建菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:create')")
public CommonResult<Long> createDishesNutrition(@Valid @RequestBody DishesNutritionSaveReqVO createReqVO) {
return success(dishesNutritionService.createDishesNutrition(createReqVO));
}
@PostMapping("/createbtch")
@Operation(summary = "创建菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:create')")
public CommonResult<Long> createDishesNutrition(@Valid @RequestBody List<DishesNutritionSaveReqVO> createReqVO) {
return success(dishesNutritionService.createDishesNutritionList(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:update')")
public CommonResult<Boolean> updateDishesNutrition(@Valid @RequestBody DishesNutritionSaveReqVO updateReqVO) {
dishesNutritionService.updateDishesNutrition(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品营养")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:delete')")
public CommonResult<Boolean> deleteDishesNutrition(@RequestParam("id") Long id) {
dishesNutritionService.deleteDishesNutrition(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品营养")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<DishesNutritionRespVO> getDishesNutrition(@RequestParam("id") Long id) {
DishesNutritionDO dishesNutrition = dishesNutritionService.getDishesNutrition(id);
return success(BeanUtils.toBean(dishesNutrition, DishesNutritionRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品营养分页")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<PageResult<DishesNutritionRespVO>> getDishesNutritionPage(@Valid DishesNutritionPageReqVO pageReqVO) {
PageResult<DishesNutritionDO> pageResult = dishesNutritionService.getDishesNutritionPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesNutritionRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得菜品营养集合")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<List<DishesNutritionRespVO>> getDishesNutritionList(@Valid DishesNutritionPageReqVO pageReqVO) {
List<DishesNutritionDO> pageResult = dishesNutritionService.getDishesNutritionList(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesNutritionRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品营养 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:export')")
@OperateLog(type = EXPORT)
public void exportDishesNutritionExcel(@Valid DishesNutritionPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesNutritionDO> list = dishesNutritionService.getDishesNutritionPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品营养.xls", "数据", DishesNutritionRespVO.class,
BeanUtils.toBean(list, DishesNutritionRespVO.class));
}
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 菜品营养分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DishesNutritionPageReqVO extends PageParam {
@Schema(description = "营养名称", example = "李四")
private String nutritionName;
@Schema(description = "营养数量")
private String nutritionNumber;
@Schema(description = "菜品重量")
private String dishesNumber;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "菜品编号", example = "5929")
private Long dishesId;
@Schema(description = "营养占比")
private String nutritionPer;
}

View File

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 菜品营养 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DishesNutritionRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "14183")
@ExcelProperty("编号")
private Long id;
@Schema(description = "营养名称", example = "李四")
@ExcelProperty("营养名称")
private String nutritionName;
@Schema(description = "营养数量")
@ExcelProperty("营养数量")
private String nutritionNumber;
@Schema(description = "菜品重量")
@ExcelProperty("菜品重量")
private String dishesNumber;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "菜品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5929")
@ExcelProperty("菜品编号")
private Long dishesId;
@Schema(description = "营养占比")
@ExcelProperty("营养占比")
private String nutritionPer;
}

View File

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 菜品营养新增/修改 Request VO")
@Data
public class DishesNutritionSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "14183")
private Long id;
@Schema(description = "营养名称", example = "李四")
private String nutritionName;
@Schema(description = "营养数量")
private String nutritionNumber;
@Schema(description = "菜品重量")
private String dishesNumber;
@Schema(description = "菜品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5929")
@NotNull(message = "菜品编号不能为空")
private Long dishesId;
@Schema(description = "营养占比")
private String nutritionPer;
}

View File

@ -0,0 +1,96 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesraw;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesraw.DishesRawDO;
import cn.iocoder.yudao.module.system.service.dishesraw.DishesRawService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 菜品原材料")
@RestController
@RequestMapping("/t/dishes-raw")
@Validated
public class DishesRawController {
@Resource
private DishesRawService dishesRawService;
@PostMapping("/create")
@Operation(summary = "创建菜品原材料")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:create')")
public CommonResult<Long> createDishesRaw(@Valid @RequestBody List<DishesRawSaveReqVO> createReqVO) {
return success(dishesRawService.createDishesRawList(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品原材料")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:update')")
public CommonResult<Boolean> updateDishesRaw(@Valid @RequestBody DishesRawSaveReqVO updateReqVO) {
dishesRawService.updateDishesRaw(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品原材料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes-raw:delete')")
public CommonResult<Boolean> deleteDishesRaw(@RequestParam("id") Long id) {
dishesRawService.deleteDishesRaw(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品原材料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:query')")
public CommonResult<DishesRawRespVO> getDishesRaw(@RequestParam("id") Long id) {
DishesRawDO dishesRaw = dishesRawService.getDishesRaw(id);
return success(BeanUtils.toBean(dishesRaw, DishesRawRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品原材料分页")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:query')")
public CommonResult<PageResult<DishesRawRespVO>> getDishesRawPage(@Valid DishesRawPageReqVO pageReqVO) {
PageResult<DishesRawDO> pageResult = dishesRawService.getDishesRawPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesRawRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品原材料 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:export')")
@OperateLog(type = EXPORT)
public void exportDishesRawExcel(@Valid DishesRawPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesRawDO> list = dishesRawService.getDishesRawPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品原材料.xls", "数据", DishesRawRespVO.class,
BeanUtils.toBean(list, DishesRawRespVO.class));
}
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 菜品原材料分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DishesRawPageReqVO extends PageParam {
@Schema(description = "原材料名称", example = "赵六")
private String rawName;
@Schema(description = "原材料图片", example = "https://www.iocoder.cn")
private String rawImgUrl;
@Schema(description = "原材料描述")
private String rawDescribe;
@Schema(description = "菜品编号", example = "23140")
private Long dishesId;
@Schema(description = "原材料产地")
private String rawOrigin;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "原材料价格", example = "32582")
private BigDecimal rawPrice;
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 菜品原材料 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DishesRawRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3137")
@ExcelProperty("编号")
private Long id;
@Schema(description = "原材料名称", example = "赵六")
@ExcelProperty("原材料名称")
private String rawName;
@Schema(description = "原材料图片", example = "https://www.iocoder.cn")
@ExcelProperty("原材料图片")
private String rawImgUrl;
@Schema(description = "原材料描述")
@ExcelProperty("原材料描述")
private String rawDescribe;
@Schema(description = "菜品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23140")
@ExcelProperty("菜品编号")
private Long dishesId;
@Schema(description = "原材料产地")
@ExcelProperty("原材料产地")
private String rawOrigin;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "原材料价格", example = "32582")
@ExcelProperty("原材料价格")
private BigDecimal rawPrice;
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import javax.validation.constraints.*;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 菜品原材料新增/修改 Request VO")
@Data
public class DishesRawSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3137")
private Long id;
@Schema(description = "原材料名称", example = "赵六")
private String rawName;
@Schema(description = "原材料图片", example = "https://www.iocoder.cn")
private MultipartFile rawImgUrl;
@Schema(description = "原材料描述")
private String rawDescribe;
@Schema(description = "菜品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23140")
@NotNull(message = "菜品编号不能为空")
private Long dishesId;
@Schema(description = "原材料产地")
private String rawOrigin;
@Schema(description = "原材料价格", example = "32582")
private BigDecimal rawPrice;
}

View File

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 菜品营养 DO
*
* @author 开发账号
*/
@TableName("t_dishes_nutrition")
@KeySequence("t_dishes_nutrition_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishesNutritionDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 营养名称
*/
private String nutritionName;
/**
* 营养数量
*/
private String nutritionNumber;
/**
* 菜品重量
*/
private String dishesNumber;
/**
* 菜品编号
*/
private Long dishesId;
/**
* 营养占比
*/
private String nutritionPer;
}

View File

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.system.dal.dataobject.dishesraw;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 菜品原材料 DO
*
* @author 开发账号
*/
@TableName("t_dishes_raw")
@KeySequence("t_dishes_raw_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishesRawDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 原材料名称
*/
private String rawName;
/**
* 原材料图片
*/
private String rawImgUrl;
/**
* 原材料描述
*/
private String rawDescribe;
/**
* 菜品编号
*/
private Long dishesId;
/**
* 原材料产地
*/
private String rawOrigin;
/**
* 原材料价格
*/
private BigDecimal rawPrice;
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.system.dal.mysql.dishesnutrition;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition.DishesNutritionDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 菜品营养 Mapper
*
* @author 开发账号
*/
@Mapper
public interface DishesNutritionMapper extends BaseMapperX<DishesNutritionDO> {
default PageResult<DishesNutritionDO> selectPage(DishesNutritionPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DishesNutritionDO>()
.likeIfPresent(DishesNutritionDO::getNutritionName, reqVO.getNutritionName())
.eqIfPresent(DishesNutritionDO::getNutritionNumber, reqVO.getNutritionNumber())
.eqIfPresent(DishesNutritionDO::getDishesNumber, reqVO.getDishesNumber())
.betweenIfPresent(DishesNutritionDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DishesNutritionDO::getDishesId, reqVO.getDishesId())
.eqIfPresent(DishesNutritionDO::getNutritionPer, reqVO.getNutritionPer())
.orderByDesc(DishesNutritionDO::getId));
}
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.system.dal.mysql.dishesraw;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesraw.DishesRawDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 菜品原材料 Mapper
*
* @author 开发账号
*/
@Mapper
public interface DishesRawMapper extends BaseMapperX<DishesRawDO> {
default PageResult<DishesRawDO> selectPage(DishesRawPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DishesRawDO>()
.likeIfPresent(DishesRawDO::getRawName, reqVO.getRawName())
.eqIfPresent(DishesRawDO::getRawImgUrl, reqVO.getRawImgUrl())
.eqIfPresent(DishesRawDO::getRawDescribe, reqVO.getRawDescribe())
.eqIfPresent(DishesRawDO::getDishesId, reqVO.getDishesId())
.eqIfPresent(DishesRawDO::getRawOrigin, reqVO.getRawOrigin())
.betweenIfPresent(DishesRawDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DishesRawDO::getRawPrice, reqVO.getRawPrice())
.orderByDesc(DishesRawDO::getId));
}
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.service.dishes;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.module.system.controller.admin.dishes.vo.DishesPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishes.vo.DishesSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishes.DishesDO;
@ -33,11 +34,13 @@ public class DishesServiceImpl implements DishesService {
@Override
@SneakyThrows
public Long createDishes(DishesSaveReqVO createReqVO) {
//把图片转换为base64
String img = Base64.getEncoder().encodeToString(createReqVO.getFile().getBytes());
// 插入
DishesDO dishes = BeanUtils.toBean(createReqVO, DishesDO.class);
dishes.setDishesImageUrl(img);
if(ObjUtil.isNotEmpty(createReqVO.getFile())){
//把图片转换为base64
String img = Base64.getEncoder().encodeToString(createReqVO.getFile().getBytes());
dishes.setDishesImageUrl(img);
}
dishes.setDeleted(Boolean.FALSE);
dishesMapper.insert(dishes);
// 返回

View File

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.system.service.dishesnutrition;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition.DishesNutritionDO;
import javax.validation.*;
import java.util.List;
/**
* 菜品营养 Service 接口
*
* @author 开发账号
*/
public interface DishesNutritionService {
/**
* 创建菜品营养
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createDishesNutrition(@Valid DishesNutritionSaveReqVO createReqVO);
Long createDishesNutritionList(@Valid List<DishesNutritionSaveReqVO> createReqVO);
/**
* 更新菜品营养
*
* @param updateReqVO 更新信息
*/
void updateDishesNutrition(@Valid DishesNutritionSaveReqVO updateReqVO);
/**
* 删除菜品营养
*
* @param id 编号
*/
void deleteDishesNutrition(Long id);
/**
* 获得菜品营养
*
* @param id 编号
* @return 菜品营养
*/
DishesNutritionDO getDishesNutrition(Long id);
/**
* 获得菜品营养分页
*
* @param pageReqVO 分页查询
* @return 菜品营养分页
*/
PageResult<DishesNutritionDO> getDishesNutritionPage(DishesNutritionPageReqVO pageReqVO);
/**
* @Description: 获得菜品营养集合
* @Author: qjq
* @Date: 2024/4/2 10:28
* @return
*/
List<DishesNutritionDO>getDishesNutritionList(DishesNutritionPageReqVO pageReqV);
}

View File

@ -0,0 +1,125 @@
package cn.iocoder.yudao.module.system.service.dishesnutrition;
import cn.hutool.core.util.NumberUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition.DishesNutritionDO;
import cn.iocoder.yudao.module.system.dal.mysql.dishesnutrition.DishesNutritionMapper;
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 菜品营养 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class DishesNutritionServiceImpl implements DishesNutritionService {
@Resource
private DishesNutritionMapper dishesNutritionMapper;
@Override
public Long createDishesNutrition(DishesNutritionSaveReqVO createReqVO) {
// 插入
DishesNutritionDO dishesNutrition = BeanUtils.toBean(createReqVO, DishesNutritionDO.class);
dishesNutritionMapper.insert(dishesNutrition);
// 返回
return dishesNutrition.getId();
}
@Override
public void updateDishesNutrition(DishesNutritionSaveReqVO updateReqVO) {
// 校验存在
validateDishesNutritionExists(updateReqVO.getId());
// 更新
DishesNutritionDO updateObj = BeanUtils.toBean(updateReqVO, DishesNutritionDO.class);
dishesNutritionMapper.updateById(updateObj);
}
@Override
public void deleteDishesNutrition(Long id) {
// 校验存在
validateDishesNutritionExists(id);
// 删除
dishesNutritionMapper.deleteById(id);
}
private void validateDishesNutritionExists(Long id) {
if (dishesNutritionMapper.selectById(id) == null) {
throw exception(ErrorCodeConstants.DISHES_NUTRITION_NOT_EXISTS);
}
}
@Override
public DishesNutritionDO getDishesNutrition(Long id) {
return dishesNutritionMapper.selectById(id);
}
@Override
public PageResult<DishesNutritionDO> getDishesNutritionPage(DishesNutritionPageReqVO pageReqVO) {
return dishesNutritionMapper.selectPage(pageReqVO);
}
/**
* @param pageReqV
* @return
* @Description: 获得菜品营养集合
* @Author: qjq
* @Date: 2024/4/2 10:28
*/
@Override
public List<DishesNutritionDO> getDishesNutritionList(DishesNutritionPageReqVO pageReqV) {
return dishesNutritionMapper.selectList(new LambdaQueryWrapperX<DishesNutritionDO>()
.eqIfPresent(DishesNutritionDO::getDishesId,pageReqV.getDishesId()));
}
@Override
public Long createDishesNutritionList(List<DishesNutritionSaveReqVO> createReqVO) {
this.percentage(createReqVO);
Long dishesNutrition=0L;
for (DishesNutritionSaveReqVO reqVO : createReqVO) {
dishesNutrition+= this.createDishesNutrition(reqVO);
}
return dishesNutrition;
}
/**
* @Description: 计算营养百分比
* 计算100克的占比
* @Author: qjq
* @Date: 2024/4/2 10:35
* @return
*/
public void percentage(List<DishesNutritionSaveReqVO> createReqVO){
BigDecimal leftover=new BigDecimal(0);
BigDecimal sum = new BigDecimal(100);
for (int i = 0; i < createReqVO.size(); i++) {
if(i < (createReqVO.size()-1)){
DishesNutritionSaveReqVO reqVO = createReqVO.get(i);
BigDecimal bigDecimal = new BigDecimal(reqVO.getNutritionNumber());
BigDecimal div = NumberUtil.div(bigDecimal, sum, 4);
BigDecimal mul = NumberUtil.mul(div, 100);
leftover=leftover.add(mul);
reqVO.setNutritionPer(mul+"%");
}else{
BigDecimal sub = NumberUtil.sub(sum, leftover);
createReqVO.get(i).setNutritionPer(sub+"%");
}
}
}
}

View File

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.system.service.dishesraw;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesraw.DishesRawDO;
import javax.validation.*;
import java.util.List;
/**
* 菜品原材料 Service 接口
*
* @author 开发账号
*/
public interface DishesRawService {
/**
* 创建菜品原材料
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createDishesRaw(@Valid DishesRawSaveReqVO createReqVO);
Long createDishesRawList(@Valid List<DishesRawSaveReqVO> createReqVO);
/**
* 更新菜品原材料
*
* @param updateReqVO 更新信息
*/
void updateDishesRaw(@Valid DishesRawSaveReqVO updateReqVO);
/**
* 删除菜品原材料
*
* @param id 编号
*/
void deleteDishesRaw(Long id);
/**
* 获得菜品原材料
*
* @param id 编号
* @return 菜品原材料
*/
DishesRawDO getDishesRaw(Long id);
/**
* 获得菜品原材料分页
*
* @param pageReqVO 分页查询
* @return 菜品原材料分页
*/
PageResult<DishesRawDO> getDishesRawPage(DishesRawPageReqVO pageReqVO);
}

View File

@ -0,0 +1,91 @@
package cn.iocoder.yudao.module.system.service.dishesraw;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesraw.DishesRawDO;
import cn.iocoder.yudao.module.system.dal.mysql.dishesraw.DishesRawMapper;
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.util.Base64;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 菜品原材料 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class DishesRawServiceImpl implements DishesRawService {
@Resource
private DishesRawMapper dishesRawMapper;
@Override
public Long createDishesRaw(DishesRawSaveReqVO createReqVO) {
// 插入
DishesRawDO dishesRaw = BeanUtils.toBean(createReqVO, DishesRawDO.class);
dishesRawMapper.insert(dishesRaw);
// 返回
return dishesRaw.getId();
}
@Override
public void updateDishesRaw(DishesRawSaveReqVO updateReqVO) {
// 校验存在
validateDishesRawExists(updateReqVO.getId());
// 更新
DishesRawDO updateObj = BeanUtils.toBean(updateReqVO, DishesRawDO.class);
dishesRawMapper.updateById(updateObj);
}
@Override
public void deleteDishesRaw(Long id) {
// 校验存在
validateDishesRawExists(id);
// 删除
dishesRawMapper.deleteById(id);
}
private void validateDishesRawExists(Long id) {
if (dishesRawMapper.selectById(id) == null) {
throw exception(ErrorCodeConstants.DISHES_RAW_NOT_EXISTS);
}
}
@Override
public DishesRawDO getDishesRaw(Long id) {
return dishesRawMapper.selectById(id);
}
@Override
public PageResult<DishesRawDO> getDishesRawPage(DishesRawPageReqVO pageReqVO) {
return dishesRawMapper.selectPage(pageReqVO);
}
@Override
@SneakyThrows
public Long createDishesRawList(List<DishesRawSaveReqVO> createReqVO) {
for (DishesRawSaveReqVO reqVO : createReqVO) {
String enCode=null;
if(ObjUtil.isNotEmpty(reqVO.getRawImgUrl())){
enCode= Base64.getEncoder().encodeToString(reqVO.getRawImgUrl().getBytes());
}
// 插入
DishesRawDO dishesRaw = BeanUtils.toBean(reqVO, DishesRawDO.class);
dishesRaw.setRawImgUrl(enCode);
dishesRawMapper.insert(dishesRaw);
}
return 1L;
}
}