diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/CarteenMoneyController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/CarteenMoneyController.java new file mode 100644 index 00000000..4d6ebc6e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/CarteenMoneyController.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.member.controller.admin.carteenmoney; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneyPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneyRespVO; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneySaveReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.carteenmoney.CarteenMoneyDO; +import cn.iocoder.yudao.module.member.service.carteenmoney.CarteenMoneyService; +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/carteen-money") +@Validated +public class CarteenMoneyController { + + @Resource + private CarteenMoneyService carteenMoneyService; + +// @PostMapping("/create") +// @Operation(summary = "创建门店流水") +// @PreAuthorize("@ss.hasPermission('t:carteen-money:create')") +// public CommonResult createCarteenMoney(@Valid @RequestBody CarteenMoneySaveReqVO createReqVO) { +// return success(carteenMoneyService.createCarteenMoney(createReqVO)); +// } +// +// @PutMapping("/update") +// @Operation(summary = "更新门店流水") +// @PreAuthorize("@ss.hasPermission('t:carteen-money:update')") +// public CommonResult updateCarteenMoney(@Valid @RequestBody CarteenMoneySaveReqVO updateReqVO) { +// carteenMoneyService.updateCarteenMoney(updateReqVO); +// return success(true); +// } +// +// @DeleteMapping("/delete") +// @Operation(summary = "删除门店流水") +// @Parameter(name = "id", description = "编号", required = true) +// @PreAuthorize("@ss.hasPermission('t:carteen-money:delete')") +// public CommonResult deleteCarteenMoney(@RequestParam("id") Long id) { +// carteenMoneyService.deleteCarteenMoney(id); +// return success(true); +// } + + @GetMapping("/get") + @Operation(summary = "获得门店流水") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('t:carteen-money:query')") + public CommonResult getCarteenMoney(@RequestParam("id") Long id) { + CarteenMoneyDO carteenMoney = carteenMoneyService.getCarteenMoney(id); + return success(BeanUtils.toBean(carteenMoney, CarteenMoneyRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得门店流水分页") + @PreAuthorize("@ss.hasPermission('t:carteen-money:query')") + public CommonResult> getCarteenMoneyPage(@Valid CarteenMoneyPageReqVO pageReqVO) { + PageResult pageResult = carteenMoneyService.getCarteenMoneyPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, CarteenMoneyRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出门店流水 Excel") + @PreAuthorize("@ss.hasPermission('t:carteen-money:export')") + @OperateLog(type = EXPORT) + public void exportCarteenMoneyExcel(@Valid CarteenMoneyPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = carteenMoneyService.getCarteenMoneyPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "门店流水.xls", "数据", CarteenMoneyRespVO.class, + BeanUtils.toBean(list, CarteenMoneyRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyPageReqVO.java new file mode 100644 index 00000000..f212b824 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.member.controller.admin.carteenmoney.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 CarteenMoneyPageReqVO extends PageParam { + + @Schema(description = "门店id", example = "927") + private Long carteenId; + + @Schema(description = "门店名称", example = "王五") + private String carteenName; + + @Schema(description = "成交金额") + private BigDecimal successMoney; + + @Schema(description = "退款金额") + private BigDecimal errorMoney; + + @Schema(description = "平台预留金额") + private BigDecimal estimateMoney; + + @Schema(description = "总收入") + private BigDecimal sumMoney; + + @Schema(description = "总成本") + private BigDecimal totalCost; + + @Schema(description = "总利润") + private BigDecimal totalProfit; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyRespVO.java new file mode 100644 index 00000000..2442cdd8 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneyRespVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.member.controller.admin.carteenmoney.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 CarteenMoneyRespVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14879") + @ExcelProperty("主键id") + private Long id; + + @Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "927") + @ExcelProperty("门店id") + private Long carteenId; + + @Schema(description = "门店名称", example = "王五") + @ExcelProperty("门店名称") + private String carteenName; + + @Schema(description = "成交金额") + @ExcelProperty("成交金额") + private BigDecimal successMoney; + + @Schema(description = "退款金额") + @ExcelProperty("退款金额") + private BigDecimal errorMoney; + + @Schema(description = "平台预留金额") + @ExcelProperty("平台预留金额") + private BigDecimal estimateMoney; + + @Schema(description = "总收入") + @ExcelProperty("总收入") + private BigDecimal sumMoney; + + @Schema(description = "总成本") + @ExcelProperty("总成本") + private BigDecimal totalCost; + + @Schema(description = "总利润") + @ExcelProperty("总利润") + private BigDecimal totalProfit; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneySaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneySaveReqVO.java new file mode 100644 index 00000000..23b4ffda --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/carteenmoney/vo/CarteenMoneySaveReqVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 门店流水新增/修改 Request VO") +@Data +public class CarteenMoneySaveReqVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14879") + private Long id; + + @Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "927") + @NotNull(message = "门店id不能为空") + private Long carteenId; + + @Schema(description = "门店名称", example = "王五") + private String carteenName; + + @Schema(description = "成交金额") + private BigDecimal successMoney; + + @Schema(description = "退款金额") + private BigDecimal errorMoney; + + @Schema(description = "平台预留金额") + private BigDecimal estimateMoney; + + @Schema(description = "总收入") + private BigDecimal sumMoney; + + @Schema(description = "总成本") + private BigDecimal totalCost; + + @Schema(description = "总利润") + private BigDecimal totalProfit; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java index f793eff1..7fc57f5e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/OrderController.java @@ -1,18 +1,30 @@ package cn.iocoder.yudao.module.member.controller.admin.order; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO; +import cn.iocoder.yudao.module.member.service.order.OrderService; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.Map; + @Tag(name = "管理后台 - 会员订单") @RestController @RequestMapping("/member/order") @Validated public class OrderController { - //@Resource - //private OrderService orderService; + @Resource + private OrderService orderService; // //@PostMapping("/create") //@Operation(summary = "创建会员订单") @@ -67,5 +79,18 @@ public class OrderController { // ExcelUtils.write(response, "会员订单.xls", "数据", OrderRespVO.class, // BeanUtils.toBean(list, OrderRespVO.class)); //} + /*================后台管理-订单管理========================*/ + /** + * @Description: + * @Author: qjq + * @Date: 2024/4/1 9:13 + * @return + */ + @GetMapping("/page") + @Operation(summary = "获得会员订单分页") + @PreAuthorize("@ss.hasPermission('member:order:query')") + public CommonResult> getPageResult(@Valid OrderDetailsReqVO reqVO){ + return CommonResult.success(orderService.getPageOrderDetails(reqVO)); + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java new file mode 100644 index 00000000..a3d68218 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsReqVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.member.controller.admin.order.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author:qjq + * @Date:2024/4/1 9:28 + */ +@Schema(description = "管理后台 - 订单管理分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class OrderDetailsReqVO extends PageParam { + @Schema(description = "门店Id", example = "24217") + private String storeId; + @Schema(description = "开始时间", example = "2024-4-12 9:00:00") + private LocalDateTime startDate; + @Schema(description = "结束时间", example = "2024-4-12 18:00:00") + private LocalDateTime endDate; + @Schema(description = "订单号", example = "20240401085810236196705") + private String orderId; + @Schema(description = "用户名称", example = "张三") + private String userName; + @Schema(description = "用户账号", example = "13527409779") + private String userAccount; + @Schema(description = "卡号", example = "13527409779") + private String userJob; + @Schema(description = "最小金额", example = "0.00") + private BigDecimal minAmount; + @Schema(description = "最大金额", example = "999") + private BigDecimal maxAmount; + @Schema(description = "订单状态", example = "1") + private String orderStatus; + @Schema(description = "支付方式", example = "钱包") + private String payMethods; + @Schema(description = "时间段", example = "早餐") + private String timePeriod; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java new file mode 100644 index 00000000..0bb8bf9f --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/order/vo/OrderDetailsRespVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.member.controller.admin.order.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author:qjq + * @Date:2024/4/1 10:14 + */ +@Schema(description = "管理后台 - 订单管理分页 Response VO") +@Data +@ToString(callSuper = true) +@ExcelIgnoreUnannotated +public class OrderDetailsRespVO { + @Schema(description = "门店名称", example = "真好") + @ExcelProperty("门店名称") + private String storeName; + + @Schema(description = "订单编号", example = "20240401090630943547146") + @ExcelProperty("订单编号") + private Long id; + + @Schema(description = "门店Id", example = "127") + private Long storeId; + + @Schema(description = "用户名称", example = "张三") + @ExcelProperty("用户名称") + private String userName; + + @Schema(description = "用户账号", example = "15111956918") + @ExcelProperty("用户账号") + private String userAccount; + + @Schema(description = "工号", example = "15111956918") + @ExcelProperty("工号") + private String userJob; + + @Schema(description = "订单交易时间", example = "2024-04-01 09:06:19") + @ExcelProperty("订单交易时间") + private LocalDateTime createTime; + + @Schema(description = "金额", example = "123.11") + @ExcelProperty("金额") + private BigDecimal totalMoney; + + @Schema(description = "支付方式", example = "钱包") + @ExcelProperty("钱包") + private String payMethods; + + @Schema(description = "时间段", example = "早餐") + @ExcelProperty("时间段") + private String timePeriod; + + @Schema(description = "订单状态", example = "交易完成") + @ExcelProperty("订单状态") + private String orderStatus ; + + @Schema(description = "用户id", example = "1024") + private Long userId; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/carteenmoney/CarteenMoneyDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/carteenmoney/CarteenMoneyDO.java new file mode 100644 index 00000000..ff5be683 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/carteenmoney/CarteenMoneyDO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.carteenmoney; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +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_carteen_money") +@KeySequence("t_carteen_money_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CarteenMoneyDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 门店id + */ + private Long carteenId; + /** + * 门店名称 + */ + private String carteenName; + /** + * 成交金额 + */ + private BigDecimal successMoney; + /** + * 退款金额 + */ + private BigDecimal errorMoney; + /** + * 平台预留金额 + */ + private BigDecimal estimateMoney; + /** + * 总收入 + */ + private BigDecimal sumMoney; + /** + * 总成本 + */ + private BigDecimal totalCost; + /** + * 总利润 + */ + private BigDecimal totalProfit; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java index fea6b6c6..1d3863a3 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/order/DishOrderDO.java @@ -54,4 +54,8 @@ public class DishOrderDO extends BaseDO { * 用户 */ private Long userId; + /** + * 支付方式 + */ + private String payMethods; } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/carteenmoney/CarteenMoneyMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/carteenmoney/CarteenMoneyMapper.java new file mode 100644 index 00000000..043b36da --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/carteenmoney/CarteenMoneyMapper.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.member.dal.mysql.carteenmoney; + + +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.member.controller.admin.carteenmoney.vo.CarteenMoneyPageReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.carteenmoney.CarteenMoneyDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 门店流水 Mapper + * + * @author 开发账号 + */ +@Mapper +public interface CarteenMoneyMapper extends BaseMapperX { + + default PageResult selectPage(CarteenMoneyPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(CarteenMoneyDO::getCarteenId, reqVO.getCarteenId()) + .likeIfPresent(CarteenMoneyDO::getCarteenName, reqVO.getCarteenName()) + .eqIfPresent(CarteenMoneyDO::getSuccessMoney, reqVO.getSuccessMoney()) + .eqIfPresent(CarteenMoneyDO::getErrorMoney, reqVO.getErrorMoney()) + .eqIfPresent(CarteenMoneyDO::getEstimateMoney, reqVO.getEstimateMoney()) + .eqIfPresent(CarteenMoneyDO::getSumMoney, reqVO.getSumMoney()) + .eqIfPresent(CarteenMoneyDO::getTotalCost, reqVO.getTotalCost()) + .eqIfPresent(CarteenMoneyDO::getTotalProfit, reqVO.getTotalProfit()) + .betweenIfPresent(CarteenMoneyDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(CarteenMoneyDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/DishOrderMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/DishOrderMapper.java index ea41dd76..6f29ffe6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/DishOrderMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/order/DishOrderMapper.java @@ -3,10 +3,14 @@ package cn.iocoder.yudao.module.member.dal.mysql.order; 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.member.controller.admin.order.vo.OrderDetailsReqVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import org.apache.ibatis.annotations.Mapper; +import java.time.LocalDateTime; +import java.util.List; + /** * 会员订单 Mapper * @@ -25,5 +29,17 @@ public interface DishOrderMapper extends BaseMapperX { .eqIfPresent(DishOrderDO::getUserId, reqVO.getUserId()) .orderByDesc(DishOrderDO::getId)); } + default PageResult selectPageList(OrderDetailsReqVO reqVO, List userIds, LocalDateTime startTime, LocalDateTime endTime) { + return selectPage( reqVO, new LambdaQueryWrapperX() + .eqIfPresent(DishOrderDO::getStoreId, reqVO.getStoreId()) + .betweenIfPresent(DishOrderDO::getCreateTime, reqVO.getStartDate(), reqVO.getEndDate()) + .eqIfPresent(DishOrderDO::getOrderStatus, reqVO.getOrderStatus()) + .inIfPresent(DishOrderDO::getUserId, userIds) + .eqIfPresent(DishOrderDO::getId, reqVO.getOrderId()) + .betweenIfPresent(DishOrderDO::getTotalMoney, reqVO.getMinAmount(), reqVO.getMaxAmount()) + .betweenIfPresent(DishOrderDO::getCreateTime, startTime, endTime) + .eqIfPresent(DishOrderDO::getPayMethods, reqVO.getPayMethods()) + .orderByDesc(DishOrderDO::getId)); + } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyService.java new file mode 100644 index 00000000..c9f757c7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.member.service.carteenmoney; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneyPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneySaveReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.carteenmoney.CarteenMoneyDO; + +import javax.validation.*; + +/** + * 门店流水 Service 接口 + * + * @author 开发账号 + */ +public interface CarteenMoneyService { + + /** + * 创建门店流水 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createCarteenMoney(@Valid CarteenMoneySaveReqVO createReqVO); + + /** + * 更新门店流水 + * + * @param updateReqVO 更新信息 + */ + void updateCarteenMoney(@Valid CarteenMoneySaveReqVO updateReqVO); + + /** + * 删除门店流水 + * + * @param id 编号 + */ + void deleteCarteenMoney(Long id); + + /** + * 获得门店流水 + * + * @param id 编号 + * @return 门店流水 + */ + CarteenMoneyDO getCarteenMoney(Long id); + + /** + * 获得门店流水分页 + * + * @param pageReqVO 分页查询 + * @return 门店流水分页 + */ + PageResult getCarteenMoneyPage(CarteenMoneyPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyServiceImpl.java new file mode 100644 index 00000000..43b18d23 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/carteenmoney/CarteenMoneyServiceImpl.java @@ -0,0 +1,170 @@ +package cn.iocoder.yudao.module.member.service.carteenmoney; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneyPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.carteenmoney.vo.CarteenMoneySaveReqVO; +import cn.iocoder.yudao.module.member.dal.dataobject.carteenmoney.CarteenMoneyDO; +import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; +import cn.iocoder.yudao.module.member.dal.mysql.carteenmoney.CarteenMoneyMapper; +import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 门店流水 Service 实现类 + * + * @author 开发账号 + */ +@Service +@Validated +public class CarteenMoneyServiceImpl implements CarteenMoneyService { + + @Resource + private CarteenMoneyMapper carteenMoneyMapper; + @Resource + private DishOrderMapper dishOrderMapper; + + + + @Override + public Long createCarteenMoney(CarteenMoneySaveReqVO createReqVO) { + // 插入 + CarteenMoneyDO carteenMoney = BeanUtils.toBean(createReqVO, CarteenMoneyDO.class); + carteenMoneyMapper.insert(carteenMoney); + // 返回 + return carteenMoney.getId(); + } + + @Override + public void updateCarteenMoney(CarteenMoneySaveReqVO updateReqVO) { + // 校验存在 + validateCarteenMoneyExists(updateReqVO.getId()); + // 更新 + CarteenMoneyDO updateObj = BeanUtils.toBean(updateReqVO, CarteenMoneyDO.class); + carteenMoneyMapper.updateById(updateObj); + } + + @Override + public void deleteCarteenMoney(Long id) { + // 校验存在 + validateCarteenMoneyExists(id); + // 删除 + carteenMoneyMapper.deleteById(id); + } + + private void validateCarteenMoneyExists(Long id) { + if (carteenMoneyMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.CARTEEN_MONEY_NOT_EXISTS); + } + } + + @Override + public CarteenMoneyDO getCarteenMoney(Long id) { + return carteenMoneyMapper.selectById(id); + } + + @Override + public PageResult getCarteenMoneyPage(CarteenMoneyPageReqVO pageReqVO) { + List todayCarteenMoney = this.getTodayCarteenMoney(pageReqVO.getCreateTime()[1],pageReqVO.getCarteenId()); + Long size= 0L; + //表示要进行处理 + if(ObjUtil.isNotEmpty(todayCarteenMoney) && (pageReqVO.getPageNo()==1 || pageReqVO.getPageNo()==-1)){ + todayCarteenMoney.forEach(c -> c.setCreateTime(LocalDateTime.now())); + LocalDateTime localDateTime = pageReqVO.getCreateTime()[1]; + LocalDateTime localDateTime1 = pageReqVO.getCreateTime()[0]; + //获取昨天 + LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, -1, ChronoUnit.DAYS); + LocalDateTime end = LocalDateTimeUtil.endOfDay(offset); + pageReqVO.setCreateTime(new LocalDateTime[]{localDateTime1,end}); + PageResult page = carteenMoneyMapper.selectPage(pageReqVO); + List list = page.getList(); + list.addAll(todayCarteenMoney); + list.sort(Comparator.comparing(CarteenMoneyDO::getCreateTime).reversed()); + page.setList(list); + page.setTotal(page.getTotal() + todayCarteenMoney.size()); + return page; + }else if(ObjUtil.isNotEmpty(todayCarteenMoney)){ + size= (long) todayCarteenMoney.size(); + } + PageResult pageResult = carteenMoneyMapper.selectPage(pageReqVO); + pageResult.setTotal(pageResult.getTotal() + size); + return pageResult; + } + /** + * @Description: 获取今日门店流水 + * @Author: qjq + * @Date: 2024/4/2 9:10 + * @return + */ + public List getTodayCarteenMoney(LocalDateTime endTime,Long storeId){ + //判断是否为同一天 + if(LocalDateTimeUtil.isSameDay(endTime,LocalDateTime.now())){ + //今日开始时间 + LocalDateTime localDateTime = LocalDateTimeUtil.beginOfDay(endTime); + //今日流水明细 + return this.getDishOrderDO(localDateTime, endTime,storeId); + } + return Collections.emptyList(); + } + + /** + * @Description: 定时计算门店流水信息 + * @Author: qjq + * @Date: 2024/4/1 17:38 + * @return + */ + public void insertCarteenMoney(){ + //计算昨天的门店流水 + LocalDateTime now = LocalDateTimeUtil.now(); + //获取昨天 + LocalDateTime offset = LocalDateTimeUtil.offset(now, -1, ChronoUnit.DAYS); + //昨天开始时间 + LocalDateTime startDate = LocalDateTimeUtil.beginOfDay(offset); + //昨天结束时间 + LocalDateTime endDate = LocalDateTimeUtil.endOfDay(offset); + carteenMoneyMapper.insertBatch(this.getDishOrderDO(startDate,endDate,null)); + } + public List getDishOrderDO(LocalDateTime startDate, LocalDateTime endDate,Long storeId){ + List dishOrderDOS = dishOrderMapper.selectList(new LambdaQueryWrapperX() + .betweenIfPresent(DishOrderDO::getCreateTime, startDate, endDate) + .eqIfPresent(DishOrderDO::getStoreId,storeId)); + //根据门店id分组 + Map> collect = dishOrderDOS.stream().collect(Collectors.groupingBy(DishOrderDO::getStoreId)); + List list= new ArrayList<>(); + for (Map.Entry> longListEntry : collect.entrySet()) { + //门店id + Long storeId1 = longListEntry.getKey(); + List value = longListEntry.getValue(); + //获取昨天门店的成交金额 + double sum = value.stream().map(DishOrderDO::getTotalMoney).mapToDouble(BigDecimal::doubleValue).sum(); + BigDecimal bigDecimal1 = BigDecimal.valueOf(sum); + CarteenMoneyDO build = CarteenMoneyDO.builder() + .carteenName(value.get(0).getStoreName()) + .carteenId(storeId1) + .successMoney(bigDecimal1) + .sumMoney(bigDecimal1).build(); + list.add(build); + } + return list; + } +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java index cedd9dab..799bc7eb 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderService.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.member.service.order; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO; @@ -60,4 +62,5 @@ public interface OrderService { */ List getOrderList(); + PageResult getPageOrderDetails(OrderDetailsReqVO reqVO); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java index 924d7745..bdba2bc1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java @@ -1,14 +1,25 @@ package cn.iocoder.yudao.module.member.service.order; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO; +import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.CostTypeEnum; +import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; @@ -16,8 +27,16 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalUnit; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_NOT_EXISTS; @@ -36,7 +55,8 @@ public class OrderServiceImpl implements OrderService { @Resource private OrderDetailService orderDetailService; - + @Resource + private MemberUserMapper memberUserMapper; @Override public Long createOrder(AppOrderSaveReqVO createReqVO) { // 插入 @@ -103,6 +123,57 @@ public class OrderServiceImpl implements OrderService { } return vos; } + @Override + public PageResult getPageOrderDetails(OrderDetailsReqVO reqVO) { + List userIds=new ArrayList<>(); + if(ObjUtil.isNotEmpty(reqVO.getUserName()) + || ObjUtil.isNotEmpty(reqVO.getUserAccount()) + || ObjUtil.isNotEmpty(reqVO.getUserJob())){ + //根据用户属性获取ids + userIds = memberUserMapper.selectList(new LambdaQueryWrapperX() + .likeIfPresent(MemberUserDO::getNickname, reqVO.getUserName()) + .eqIfPresent(MemberUserDO::getMobile, reqVO.getUserAccount()) + .eqIfPresent(MemberUserDO::getCardId, reqVO.getUserJob())) + .stream().map(MemberUserDO::getId).collect(Collectors.toList()); + } + Map timePeriod = this.getTimePeriod(reqVO.getTimePeriod()); + LocalDateTime startTime =null; + LocalDateTime endTime =null; + if(ObjUtil.isNotEmpty(timePeriod)){ + startTime=timePeriod.get("start"); + endTime=timePeriod.get("end"); + } + //进行分页查询 + PageResult pageResult = dishOrderMapper.selectPageList(reqVO, userIds, startTime, endTime); + List list=new ArrayList<>(); + for (DishOrderDO dishOrderDO : pageResult.getList()) { + OrderDetailsRespVO bean = BeanUtils.toBean(dishOrderDO, OrderDetailsRespVO.class); + MemberUserDO userDO = memberUserMapper.selectById(bean.getUserId()); + bean.setUserName(userDO.getName()); + bean.setUserJob(userDO.getMobile()); + bean.setUserAccount(userDO.getMobile()); + bean.setTimePeriod(TimePeriodEnum.MIDDAY.getTimePeriod(bean.getCreateTime())); + list.add(bean); + } + return new PageResult<>(list,pageResult.getTotal()); + } + /** + * @Description: 数据类型对标 {@link CostTypeEnum} + * @Author: qjq + * @Date: 2024/4/1 11:18 + * @return + */ + public Map getTimePeriod(String type){ + if(TimePeriodEnum.MORNING.getCode().equalsIgnoreCase(type)){ + return TimePeriodEnum.MORNING.getStartToEnd(); + }else if(TimePeriodEnum.MIDDAY.getCode().equalsIgnoreCase(type)){ + return TimePeriodEnum.MIDDAY.getStartToEnd(); + }else if(TimePeriodEnum.NIGHT.getCode().equalsIgnoreCase(type)){ + return TimePeriodEnum.NIGHT.getStartToEnd(); + }else { + return Collections.emptyMap(); + } + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 1e15da1a..ab04f39e 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -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, "菜品原材料不存在"); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/DishesNutritionController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/DishesNutritionController.java new file mode 100644 index 00000000..df024e68 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/DishesNutritionController.java @@ -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 createDishesNutrition(@Valid @RequestBody DishesNutritionSaveReqVO createReqVO) { + return success(dishesNutritionService.createDishesNutrition(createReqVO)); + } + @PostMapping("/createbtch") + @Operation(summary = "创建菜品营养") + @PreAuthorize("@ss.hasPermission('t:dishes-nutrition:create')") + public CommonResult createDishesNutrition(@Valid @RequestBody List createReqVO) { + return success(dishesNutritionService.createDishesNutritionList(createReqVO)); + } + @PutMapping("/update") + @Operation(summary = "更新菜品营养") + @PreAuthorize("@ss.hasPermission('t:dishes-nutrition:update')") + public CommonResult 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 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 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> getDishesNutritionPage(@Valid DishesNutritionPageReqVO pageReqVO) { + PageResult pageResult = dishesNutritionService.getDishesNutritionPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DishesNutritionRespVO.class)); + } + @GetMapping("/list") + @Operation(summary = "获得菜品营养集合") + @PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')") + public CommonResult> getDishesNutritionList(@Valid DishesNutritionPageReqVO pageReqVO) { + List 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 list = dishesNutritionService.getDishesNutritionPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "菜品营养.xls", "数据", DishesNutritionRespVO.class, + BeanUtils.toBean(list, DishesNutritionRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionPageReqVO.java new file mode 100644 index 00000000..56420cf4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionPageReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionRespVO.java new file mode 100644 index 00000000..00816e12 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionRespVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionSaveReqVO.java new file mode 100644 index 00000000..82c97fbc --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesnutrition/vo/DishesNutritionSaveReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/DishesRawController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/DishesRawController.java new file mode 100644 index 00000000..6c9b17ec --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/DishesRawController.java @@ -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 createDishesRaw(@Valid @RequestBody List createReqVO) { + return success(dishesRawService.createDishesRawList(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新菜品原材料") + @PreAuthorize("@ss.hasPermission('t:dishes-raw:update')") + public CommonResult 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 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 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> getDishesRawPage(@Valid DishesRawPageReqVO pageReqVO) { + PageResult 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 list = dishesRawService.getDishesRawPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "菜品原材料.xls", "数据", DishesRawRespVO.class, + BeanUtils.toBean(list, DishesRawRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawPageReqVO.java new file mode 100644 index 00000000..c09aad85 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawPageReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawRespVO.java new file mode 100644 index 00000000..c34023f2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawRespVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawSaveReqVO.java new file mode 100644 index 00000000..83aeb4e6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dishesraw/vo/DishesRawSaveReqVO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesnutrition/DishesNutritionDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesnutrition/DishesNutritionDO.java new file mode 100644 index 00000000..5f1b0a37 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesnutrition/DishesNutritionDO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesraw/DishesRawDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesraw/DishesRawDO.java new file mode 100644 index 00000000..04edc5d1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dishesraw/DishesRawDO.java @@ -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; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesnutrition/DishesNutritionMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesnutrition/DishesNutritionMapper.java new file mode 100644 index 00000000..9eb00ba1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesnutrition/DishesNutritionMapper.java @@ -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 { + + default PageResult selectPage(DishesNutritionPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .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)); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesraw/DishesRawMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesraw/DishesRawMapper.java new file mode 100644 index 00000000..bd32c8e6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dishesraw/DishesRawMapper.java @@ -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 { + + default PageResult selectPage(DishesRawPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .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)); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java index 577ba015..0b693de3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishes/DishesServiceImpl.java @@ -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); // 返回 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionService.java new file mode 100644 index 00000000..3b3c175d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionService.java @@ -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 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 getDishesNutritionPage(DishesNutritionPageReqVO pageReqVO); + /** + * @Description: 获得菜品营养集合 + * @Author: qjq + * @Date: 2024/4/2 10:28 + * @return + */ + ListgetDishesNutritionList(DishesNutritionPageReqVO pageReqV); +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionServiceImpl.java new file mode 100644 index 00000000..2fffc9b1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesnutrition/DishesNutritionServiceImpl.java @@ -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 getDishesNutritionPage(DishesNutritionPageReqVO pageReqVO) { + return dishesNutritionMapper.selectPage(pageReqVO); + } + + /** + * @param pageReqV + * @return + * @Description: 获得菜品营养集合 + * @Author: qjq + * @Date: 2024/4/2 10:28 + */ + @Override + public List getDishesNutritionList(DishesNutritionPageReqVO pageReqV) { + return dishesNutritionMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(DishesNutritionDO::getDishesId,pageReqV.getDishesId())); + } + + @Override + public Long createDishesNutritionList(List 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 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+"%"); + } + } + } +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawService.java new file mode 100644 index 00000000..b7e87218 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawService.java @@ -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 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 getDishesRawPage(DishesRawPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawServiceImpl.java new file mode 100644 index 00000000..d5d2de6d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dishesraw/DishesRawServiceImpl.java @@ -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 getDishesRawPage(DishesRawPageReqVO pageReqVO) { + return dishesRawMapper.selectPage(pageReqVO); + } + + @Override + @SneakyThrows + public Long createDishesRawList(List 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; + } +} \ No newline at end of file