From 2d6377a23da9e34c818fb9f5e1becf39838d59f4 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Mon, 11 Mar 2024 20:25:50 +0800 Subject: [PATCH] feat: init --- .gitignore | 6 + pom.xml | 137 ++++++++++++++++ sky-common/pom.xml | 60 +++++++ sky-pojo/pom.xml | 35 +++++ .../java/com/sky/pojo/dto/CategoryDTO.java | 22 +++ .../sky/pojo/dto/CategoryPageQueryDTO.java | 22 +++ .../sky/pojo/dto/DataOverViewQueryDTO.java | 21 +++ .../main/java/com/sky/pojo/dto/DishDTO.java | 28 ++++ .../com/sky/pojo/dto/DishPageQueryDTO.java | 22 +++ .../java/com/sky/pojo/dto/EmployeeDTO.java | 22 +++ .../com/sky/pojo/dto/EmployeeLoginDTO.java | 18 +++ .../sky/pojo/dto/EmployeePageQueryDTO.java | 15 ++ .../java/com/sky/pojo/dto/GoodsSalesDTO.java | 20 +++ .../com/sky/pojo/dto/OrdersCancelDTO.java | 14 ++ .../com/sky/pojo/dto/OrdersConfirmDTO.java | 12 ++ .../main/java/com/sky/pojo/dto/OrdersDTO.java | 56 +++++++ .../com/sky/pojo/dto/OrdersPageQueryDTO.java | 30 ++++ .../com/sky/pojo/dto/OrdersPaymentDTO.java | 14 ++ .../com/sky/pojo/dto/OrdersRejectionDTO.java | 15 ++ .../com/sky/pojo/dto/OrdersSubmitDTO.java | 31 ++++ .../com/sky/pojo/dto/PasswordEditDTO.java | 19 +++ .../java/com/sky/pojo/dto/SetmealDTO.java | 35 +++++ .../com/sky/pojo/dto/SetmealPageQueryDTO.java | 22 +++ .../com/sky/pojo/dto/ShoppingCartDTO.java | 12 ++ .../java/com/sky/pojo/dto/UserLoginDTO.java | 15 ++ .../java/com/sky/pojo/entity/AddressBook.java | 61 ++++++++ .../java/com/sky/pojo/entity/Category.java | 43 ++++++ .../main/java/com/sky/pojo/entity/Dish.java | 50 ++++++ .../java/com/sky/pojo/entity/DishFlavor.java | 31 ++++ .../java/com/sky/pojo/entity/Employee.java | 46 ++++++ .../java/com/sky/pojo/entity/OrderDetail.java | 47 ++++++ .../main/java/com/sky/pojo/entity/Orders.java | 110 +++++++++++++ .../java/com/sky/pojo/entity/Setmeal.java | 49 ++++++ .../java/com/sky/pojo/entity/SetmealDish.java | 38 +++++ .../com/sky/pojo/entity/ShoppingCart.java | 50 ++++++ .../main/java/com/sky/pojo/entity/User.java | 42 +++++ .../java/com/sky/pojo/vo/BusinessDataVO.java | 29 ++++ .../main/java/com/sky/pojo/vo/DishItemVO.java | 27 ++++ .../java/com/sky/pojo/vo/DishOverViewVO.java | 23 +++ .../src/main/java/com/sky/pojo/vo/DishVO.java | 41 +++++ .../java/com/sky/pojo/vo/EmployeeLoginVO.java | 31 ++++ .../java/com/sky/pojo/vo/OrderOverViewVO.java | 32 ++++ .../java/com/sky/pojo/vo/OrderPaymentVO.java | 23 +++ .../java/com/sky/pojo/vo/OrderReportVO.java | 34 ++++ .../com/sky/pojo/vo/OrderStatisticsVO.java | 16 ++ .../java/com/sky/pojo/vo/OrderSubmitVO.java | 25 +++ .../main/java/com/sky/pojo/vo/OrderVO.java | 21 +++ .../com/sky/pojo/vo/SalesTop10ReportVO.java | 22 +++ .../com/sky/pojo/vo/SetmealOverViewVO.java | 23 +++ .../main/java/com/sky/pojo/vo/SetmealVO.java | 48 ++++++ .../com/sky/pojo/vo/TurnoverReportVO.java | 20 +++ .../java/com/sky/pojo/vo/UserLoginVO.java | 20 +++ .../java/com/sky/pojo/vo/UserReportVO.java | 25 +++ sky-server/pom.xml | 146 ++++++++++++++++++ .../src/main/java/com/sky/SkyApplication.java | 20 +++ .../src/main/resources/application-dev.yml | 32 ++++ sky-server/src/main/resources/application.yml | 59 +++++++ sky-server/src/main/resources/favicon.ico | Bin 0 -> 13342 bytes .../resources/template/运营数据报表模板.xlsx | Bin 0 -> 12570 bytes 59 files changed, 1987 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 sky-common/pom.xml create mode 100644 sky-pojo/pom.xml create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/CategoryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/CategoryPageQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/DataOverViewQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/DishDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/DishPageQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeLoginDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/EmployeePageQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/GoodsSalesDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersCancelDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersConfirmDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPageQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPaymentDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersRejectionDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/OrdersSubmitDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/PasswordEditDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/SetmealDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/SetmealPageQueryDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/ShoppingCartDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/dto/UserLoginDTO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/AddressBook.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/Category.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/Dish.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/DishFlavor.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/Employee.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/OrderDetail.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/Orders.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/Setmeal.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/SetmealDish.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/ShoppingCart.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/entity/User.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/BusinessDataVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/DishItemVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/DishOverViewVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/DishVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/EmployeeLoginVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderOverViewVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderPaymentVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderReportVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderStatisticsVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderSubmitVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/OrderVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/SalesTop10ReportVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/SetmealOverViewVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/SetmealVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/TurnoverReportVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/UserLoginVO.java create mode 100644 sky-pojo/src/main/java/com/sky/pojo/vo/UserReportVO.java create mode 100644 sky-server/pom.xml create mode 100644 sky-server/src/main/java/com/sky/SkyApplication.java create mode 100644 sky-server/src/main/resources/application-dev.yml create mode 100644 sky-server/src/main/resources/application.yml create mode 100644 sky-server/src/main/resources/favicon.ico create mode 100644 sky-server/src/main/resources/template/运营数据报表模板.xlsx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3df42cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +**/target/ +.idea +*.iml +*.class +*Test.java +**/test/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..59ca7f3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,137 @@ + + + 4.0.0 + + spring-boot-starter-parent + org.springframework.boot + 2.7.3 + + com.sky + sky-take-out + pom + 1.0-SNAPSHOT + + sky-common + sky-pojo + sky-server + + + 8 + 8 + 2.2.0 + 1.18.20 + 1.2.76 + 2.6 + 1.2.1 + 1.3.0 + 3.10.2 + 3.0.3 + 1.9.4 + 0.9.1 + 2.3.1 + 3.16 + 8.4.3 + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.spring} + + + + org.projectlombok + lombok + ${lombok} + + + + com.alibaba + fastjson + ${fastjson} + + + + commons-lang + commons-lang + ${commons.lang} + + + + com.alibaba + druid-spring-boot-starter + ${druid} + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper} + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j} + + + + org.aspectj + aspectjrt + ${aspectj} + + + + org.aspectj + aspectjweaver + ${aspectj} + + + + io.jsonwebtoken + jjwt + ${jjwt} + + + + com.aliyun.oss + aliyun-sdk-oss + ${aliyun.sdk.oss} + + + + javax.xml.bind + jaxb-api + ${jaxb-api} + + + + + org.apache.poi + poi + ${poi} + + + org.apache.poi + poi-ooxml + ${poi} + + + + com.github.wechatpay-apiv3 + wechatpay-apache-httpclient + 0.4.8 + + + + io.minio + minio + ${minio} + + + + + diff --git a/sky-common/pom.xml b/sky-common/pom.xml new file mode 100644 index 0000000..192675c --- /dev/null +++ b/sky-common/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.sky + sky-take-out + 1.0-SNAPSHOT + + + sky-common + + + 17 + 17 + UTF-8 + + + + org.projectlombok + lombok + + + com.alibaba + fastjson + + + commons-lang + commons-lang + + + org.springframework.boot + spring-boot-starter-json + + + io.jsonwebtoken + jjwt + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + com.aliyun.oss + aliyun-sdk-oss + + + javax.xml.bind + jaxb-api + + + + com.github.wechatpay-apiv3 + wechatpay-apache-httpclient + + + \ No newline at end of file diff --git a/sky-pojo/pom.xml b/sky-pojo/pom.xml new file mode 100644 index 0000000..733491c --- /dev/null +++ b/sky-pojo/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.sky + sky-take-out + 1.0-SNAPSHOT + + + sky-pojo + + + 17 + 17 + UTF-8 + + + + + org.projectlombok + lombok + + + com.fasterxml.jackson.core + jackson-databind + 2.9.2 + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + \ No newline at end of file diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryDTO.java new file mode 100644 index 0000000..8eb8b60 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryDTO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class CategoryDTO implements Serializable { + + //主键 + private Long id; + + //类型 1 菜品分类 2 套餐分类 + private Integer type; + + //分类名称 + private String name; + + //排序 + private Integer sort; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryPageQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryPageQueryDTO.java new file mode 100644 index 0000000..fb1821a --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/CategoryPageQueryDTO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class CategoryPageQueryDTO implements Serializable { + + //页码 + private int page; + + //每页记录数 + private int pageSize; + + //分类名称 + private String name; + + //分类类型 1菜品分类 2套餐分类 + private Integer type; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/DataOverViewQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/DataOverViewQueryDTO.java new file mode 100644 index 0000000..32d5e30 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/DataOverViewQueryDTO.java @@ -0,0 +1,21 @@ +package com.sky.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DataOverViewQueryDTO implements Serializable { + + private LocalDateTime begin; + + private LocalDateTime end; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/DishDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/DishDTO.java new file mode 100644 index 0000000..1568633 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/DishDTO.java @@ -0,0 +1,28 @@ +package com.sky.pojo.dto; + +import com.sky.pojo.entity.DishFlavor; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Data +public class DishDTO implements Serializable { + private Long id; + // 菜品名称 + private String name; + // 菜品分类id + private Long categoryId; + // 菜品价格 + private BigDecimal price; + // 图片 + private String image; + // 描述信息 + private String description; + // 0 停售 1 起售 + private Integer status; + // 口味 + private List flavors = new ArrayList<>(); +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/DishPageQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/DishPageQueryDTO.java new file mode 100644 index 0000000..e52179f --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/DishPageQueryDTO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DishPageQueryDTO implements Serializable { + + private int page; + + private int pageSize; + + private String name; + + //分类id + private Integer categoryId; + + //状态 0表示禁用 1表示启用 + private Integer status; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeDTO.java new file mode 100644 index 0000000..ab09e68 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeDTO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmployeeDTO implements Serializable { + + private Long id; + + private String username; + + private String name; + + private String phone; + + private String sex; + + private String idNumber; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeLoginDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeLoginDTO.java new file mode 100644 index 0000000..29a6a3f --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeeLoginDTO.java @@ -0,0 +1,18 @@ +package com.sky.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(description = "员工登录时传递的数据模型") +public class EmployeeLoginDTO implements Serializable { + + @ApiModelProperty("用户名") + private String username; + + @ApiModelProperty("密码") + private String password; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeePageQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeePageQueryDTO.java new file mode 100644 index 0000000..e9cd8cc --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/EmployeePageQueryDTO.java @@ -0,0 +1,15 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EmployeePageQueryDTO implements Serializable { + //员工姓名 + private String name; + //页码 + private int page; + //每页显示记录数 + private int pageSize; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/GoodsSalesDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/GoodsSalesDTO.java new file mode 100644 index 0000000..6dfc767 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/GoodsSalesDTO.java @@ -0,0 +1,20 @@ +package com.sky.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class GoodsSalesDTO implements Serializable { + //商品名称 + private String name; + + //销量 + private Integer number; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersCancelDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersCancelDTO.java new file mode 100644 index 0000000..a4d2d8a --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersCancelDTO.java @@ -0,0 +1,14 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrdersCancelDTO implements Serializable { + + private Long id; + //订单取消原因 + private String cancelReason; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersConfirmDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersConfirmDTO.java new file mode 100644 index 0000000..9fa9611 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersConfirmDTO.java @@ -0,0 +1,12 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrdersConfirmDTO implements Serializable { + private Long id; + // 订单状态 1待付款 2待接单 3 已接单 4 派送中 5 已完成 6 已取消 7 退款 + private Integer status; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersDTO.java new file mode 100644 index 0000000..c3ad52b --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersDTO.java @@ -0,0 +1,56 @@ +package com.sky.pojo.dto; + +import com.sky.pojo.entity.OrderDetail; +import lombok.Data; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class OrdersDTO implements Serializable { + + private Long id; + + //订单号 + private String number; + + //订单状态 1待付款,2待派送,3已派送,4已完成,5已取消 + private Integer status; + + //下单用户id + private Long userId; + + //地址id + private Long addressBookId; + + //下单时间 + private LocalDateTime orderTime; + + //结账时间 + private LocalDateTime checkoutTime; + + //支付方式 1微信,2支付宝 + private Integer payMethod; + + //实收金额 + private BigDecimal amount; + + //备注 + private String remark; + + //用户名 + private String userName; + + //手机号 + private String phone; + + //地址 + private String address; + + //收货人 + private String consignee; + + private List orderDetails; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPageQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPageQueryDTO.java new file mode 100644 index 0000000..0c51f7d --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPageQueryDTO.java @@ -0,0 +1,30 @@ +package com.sky.pojo.dto; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class OrdersPageQueryDTO implements Serializable { + + private int page; + + private int pageSize; + + private String number; + + private String phone; + + private Integer status; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime beginTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + private Long userId; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPaymentDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPaymentDTO.java new file mode 100644 index 0000000..0a70e57 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersPaymentDTO.java @@ -0,0 +1,14 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrdersPaymentDTO implements Serializable { + // 订单号 + private String orderNumber; + + // 付款方式 + private Integer payMethod; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersRejectionDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersRejectionDTO.java new file mode 100644 index 0000000..073c14c --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersRejectionDTO.java @@ -0,0 +1,15 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrdersRejectionDTO implements Serializable { + + private Long id; + + //订单拒绝原因 + private String rejectionReason; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersSubmitDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersSubmitDTO.java new file mode 100644 index 0000000..4750727 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/OrdersSubmitDTO.java @@ -0,0 +1,31 @@ +package com.sky.pojo.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class OrdersSubmitDTO implements Serializable { + //地址簿id + private Long addressBookId; + //付款方式 + private int payMethod; + //备注 + private String remark; + //预计送达时间 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime estimatedDeliveryTime; + //配送状态 1立即送出 0选择具体时间 + private Integer deliveryStatus; + //餐具数量 + private Integer tablewareNumber; + //餐具数量状态 1按餐量提供 0选择具体数量 + private Integer tablewareStatus; + //打包费 + private Integer packAmount; + //总金额 + private BigDecimal amount; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/PasswordEditDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/PasswordEditDTO.java new file mode 100644 index 0000000..a066c38 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/PasswordEditDTO.java @@ -0,0 +1,19 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class PasswordEditDTO implements Serializable { + + //员工id + private Long empId; + + //旧密码 + private String oldPassword; + + //新密码 + private String newPassword; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealDTO.java new file mode 100644 index 0000000..bc0c893 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealDTO.java @@ -0,0 +1,35 @@ +package com.sky.pojo.dto; + +import com.sky.pojo.entity.SetmealDish; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Data +public class SetmealDTO implements Serializable { + private Long id; + + // 分类id + private Long categoryId; + + // 套餐名称 + private String name; + + // 套餐价格 + private BigDecimal price; + + // 状态 0:停用 1:启用 + private Integer status; + + // 描述信息 + private String description; + + // 图片 + private String image; + + // 套餐菜品关系 + private List setmealDishes = new ArrayList<>(); +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealPageQueryDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealPageQueryDTO.java new file mode 100644 index 0000000..6588dd6 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/SetmealPageQueryDTO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SetmealPageQueryDTO implements Serializable { + + private int page; + + private int pageSize; + + private String name; + + //分类id + private Integer categoryId; + + //状态 0表示禁用 1表示启用 + private Integer status; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/ShoppingCartDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/ShoppingCartDTO.java new file mode 100644 index 0000000..fae2380 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/ShoppingCartDTO.java @@ -0,0 +1,12 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ShoppingCartDTO implements Serializable { + private Long dishId; + private Long setmealId; + private String dishFlavor; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/dto/UserLoginDTO.java b/sky-pojo/src/main/java/com/sky/pojo/dto/UserLoginDTO.java new file mode 100644 index 0000000..bdcc44c --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/dto/UserLoginDTO.java @@ -0,0 +1,15 @@ +package com.sky.pojo.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * C端用户登录 + */ +@Data +public class UserLoginDTO implements Serializable { + + private String code; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/AddressBook.java b/sky-pojo/src/main/java/com/sky/pojo/entity/AddressBook.java new file mode 100644 index 0000000..74f7094 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/AddressBook.java @@ -0,0 +1,61 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 地址簿 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AddressBook implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //用户id + private Long userId; + + //收货人 + private String consignee; + + //手机号 + private String phone; + + //性别 0 女 1 男 + private String sex; + + //省级区划编号 + private String provinceCode; + + //省级名称 + private String provinceName; + + //市级区划编号 + private String cityCode; + + //市级名称 + private String cityName; + + //区级区划编号 + private String districtCode; + + //区级名称 + private String districtName; + + //详细地址 + private String detail; + + //标签 + private String label; + + //是否默认 0否 1是 + private Integer isDefault; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/Category.java b/sky-pojo/src/main/java/com/sky/pojo/entity/Category.java new file mode 100644 index 0000000..264c03c --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/Category.java @@ -0,0 +1,43 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Category implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //类型: 1菜品分类 2套餐分类 + private Integer type; + + //分类名称 + private String name; + + //顺序 + private Integer sort; + + //分类状态 0标识禁用 1表示启用 + private Integer status; + + //创建时间 + private LocalDateTime createTime; + + //更新时间 + private LocalDateTime updateTime; + + //创建人 + private Long createUser; + + //修改人 + private Long updateUser; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/Dish.java b/sky-pojo/src/main/java/com/sky/pojo/entity/Dish.java new file mode 100644 index 0000000..14ea07e --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/Dish.java @@ -0,0 +1,50 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 菜品 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Dish implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //菜品名称 + private String name; + + //菜品分类id + private Long categoryId; + + //菜品价格 + private BigDecimal price; + + //图片 + private String image; + + //描述信息 + private String description; + + //0 停售 1 起售 + private Integer status; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; + + private Long createUser; + + private Long updateUser; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/DishFlavor.java b/sky-pojo/src/main/java/com/sky/pojo/entity/DishFlavor.java new file mode 100644 index 0000000..9ebc896 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/DishFlavor.java @@ -0,0 +1,31 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 菜品口味 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DishFlavor implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + //菜品id + private Long dishId; + + //口味名称 + private String name; + + //口味数据list + private String value; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/Employee.java b/sky-pojo/src/main/java/com/sky/pojo/entity/Employee.java new file mode 100644 index 0000000..543cfed --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/Employee.java @@ -0,0 +1,46 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Employee implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + private String username; + + private String name; + + private String password; + + private String phone; + + private String sex; + + private String idNumber; + + private Integer status; + + //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + private Long createUser; + + private Long updateUser; + private String shopAddress; + private String employeeAddress; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/OrderDetail.java b/sky-pojo/src/main/java/com/sky/pojo/entity/OrderDetail.java new file mode 100644 index 0000000..3010356 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/OrderDetail.java @@ -0,0 +1,47 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 订单明细 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //名称 + private String name; + + //订单id + private Long orderId; + + //菜品id + private Long dishId; + + //套餐id + private Long setmealId; + + //口味 + private String dishFlavor; + + //数量 + private Integer number; + + //金额 + private BigDecimal amount; + + //图片 + private String image; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/Orders.java b/sky-pojo/src/main/java/com/sky/pojo/entity/Orders.java new file mode 100644 index 0000000..bc94be2 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/Orders.java @@ -0,0 +1,110 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 订单 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Orders implements Serializable { + + /** + * 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消 + */ + public static final Integer PENDING_PAYMENT = 1; + public static final Integer TO_BE_CONFIRMED = 2; + public static final Integer CONFIRMED = 3; + public static final Integer DELIVERY_IN_PROGRESS = 4; + public static final Integer COMPLETED = 5; + public static final Integer CANCELLED = 6; + + /** + * 支付状态 0未支付 1已支付 2退款 + */ + public static final Integer UN_PAID = 0; + public static final Integer PAID = 1; + public static final Integer REFUND = 2; + + private static final long serialVersionUID = 1L; + + private Long id; + + //订单号 + private String number; + + //订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消 7退款 + private Integer status; + + //下单用户id + private Long userId; + + //地址id + private Long addressBookId; + + //下单时间 + private LocalDateTime orderTime; + + //结账时间 + private LocalDateTime checkoutTime; + + //支付方式 1微信,2支付宝 + private Integer payMethod; + + //支付状态 0未支付 1已支付 2退款 + private Integer payStatus; + + //实收金额 + private BigDecimal amount; + + //备注 + private String remark; + + //用户名 + private String userName; + + //手机号 + private String phone; + + //地址 + private String address; + + //收货人 + private String consignee; + + //订单取消原因 + private String cancelReason; + + //订单拒绝原因 + private String rejectionReason; + + //订单取消时间 + private LocalDateTime cancelTime; + + //预计送达时间 + private LocalDateTime estimatedDeliveryTime; + + //配送状态 1立即送出 0选择具体时间 + private Integer deliveryStatus; + + //送达时间 + private LocalDateTime deliveryTime; + + //打包费 + private int packAmount; + + //餐具数量 + private int tablewareNumber; + + //餐具数量状态 1按餐量提供 0选择具体数量 + private Integer tablewareStatus; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/Setmeal.java b/sky-pojo/src/main/java/com/sky/pojo/entity/Setmeal.java new file mode 100644 index 0000000..5d94215 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/Setmeal.java @@ -0,0 +1,49 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 套餐 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Setmeal implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //分类id + private Long categoryId; + + //套餐名称 + private String name; + + //套餐价格 + private BigDecimal price; + + //状态 0:停用 1:启用 + private Integer status; + + //描述信息 + private String description; + + //图片 + private String image; + + private LocalDateTime createTime; + + private LocalDateTime updateTime; + + private Long createUser; + + private Long updateUser; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/SetmealDish.java b/sky-pojo/src/main/java/com/sky/pojo/entity/SetmealDish.java new file mode 100644 index 0000000..966b1ee --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/SetmealDish.java @@ -0,0 +1,38 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 套餐菜品关系 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SetmealDish implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //套餐id + private Long setmealId; + + //菜品id + private Long dishId; + + //菜品名称 (冗余字段) + private String name; + + //菜品原价 + private BigDecimal price; + + //份数 + private Integer copies; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/ShoppingCart.java b/sky-pojo/src/main/java/com/sky/pojo/entity/ShoppingCart.java new file mode 100644 index 0000000..8772f51 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/ShoppingCart.java @@ -0,0 +1,50 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 购物车 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShoppingCart implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //名称 + private String name; + + //用户id + private Long userId; + + //菜品id + private Long dishId; + + //套餐id + private Long setmealId; + + //口味 + private String dishFlavor; + + //数量 + private Integer number; + + //金额 + private BigDecimal amount; + + //图片 + private String image; + + private LocalDateTime createTime; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/entity/User.java b/sky-pojo/src/main/java/com/sky/pojo/entity/User.java new file mode 100644 index 0000000..af2ce1f --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/entity/User.java @@ -0,0 +1,42 @@ +package com.sky.pojo.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class User implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //微信用户唯一标识 + private String openid; + + //姓名 + private String name; + + //手机号 + private String phone; + + //性别 0 女 1 男 + private String sex; + + //身份证号 + private String idNumber; + + //头像 + private String avatar; + + //注册时间 + private LocalDateTime createTime; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/BusinessDataVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/BusinessDataVO.java new file mode 100644 index 0000000..d8716ec --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/BusinessDataVO.java @@ -0,0 +1,29 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 数据概览 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BusinessDataVO implements Serializable { + + private Double turnover;//营业额 + + private Integer validOrderCount;//有效订单数 + + private Double orderCompletionRate;//订单完成率 + + private Double unitPrice;//平均客单价 + + private Integer newUsers;//新增用户数 + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/DishItemVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/DishItemVO.java new file mode 100644 index 0000000..6d5adb3 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/DishItemVO.java @@ -0,0 +1,27 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DishItemVO implements Serializable { + + //菜品名称 + private String name; + + //份数 + private Integer copies; + + //菜品图片 + private String image; + + //菜品描述 + private String description; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/DishOverViewVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/DishOverViewVO.java new file mode 100644 index 0000000..024cc7f --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/DishOverViewVO.java @@ -0,0 +1,23 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 菜品总览 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DishOverViewVO implements Serializable { + // 已启售数量 + private Integer sold; + + // 已停售数量 + private Integer discontinued; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/DishVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/DishVO.java new file mode 100644 index 0000000..a1d9e79 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/DishVO.java @@ -0,0 +1,41 @@ +package com.sky.pojo.vo; + +import com.sky.pojo.entity.DishFlavor; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DishVO implements Serializable { + + private Long id; + //菜品名称 + private String name; + //菜品分类id + private Long categoryId; + //菜品价格 + private BigDecimal price; + //图片 + private String image; + //描述信息 + private String description; + //0 停售 1 起售 + private Integer status; + //更新时间 + private LocalDateTime updateTime; + //分类名称 + private String categoryName; + //菜品关联的口味 + private List flavors = new ArrayList<>(); + + //private Integer copies; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/EmployeeLoginVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/EmployeeLoginVO.java new file mode 100644 index 0000000..63c8eb0 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/EmployeeLoginVO.java @@ -0,0 +1,31 @@ +package com.sky.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(description = "员工登录返回的数据格式") +public class EmployeeLoginVO implements Serializable { + + @ApiModelProperty("主键值") + private Long id; + + @ApiModelProperty("用户名") + private String userName; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("jwt令牌") + private String token; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderOverViewVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderOverViewVO.java new file mode 100644 index 0000000..48dd971 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderOverViewVO.java @@ -0,0 +1,32 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 订单概览数据 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderOverViewVO implements Serializable { + //待接单数量 + private Integer waitingOrders; + + //待派送数量 + private Integer deliveredOrders; + + //已完成数量 + private Integer completedOrders; + + //已取消数量 + private Integer cancelledOrders; + + //全部订单 + private Integer allOrders; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderPaymentVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderPaymentVO.java new file mode 100644 index 0000000..1eba5e7 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderPaymentVO.java @@ -0,0 +1,23 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderPaymentVO implements Serializable { + + private String nonceStr; //随机字符串 + private String paySign; //签名 + private String timeStamp; //时间戳 + private String signType; //签名算法 + private String packageStr; //统一下单接口返回的 prepay_id 参数值 + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderReportVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderReportVO.java new file mode 100644 index 0000000..65142fd --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderReportVO.java @@ -0,0 +1,34 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderReportVO implements Serializable { + + //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03 + private String dateList; + + //每日订单数,以逗号分隔,例如:260,210,215 + private String orderCountList; + + //每日有效订单数,以逗号分隔,例如:20,21,10 + private String validOrderCountList; + + //订单总数 + private Integer totalOrderCount; + + //有效订单数 + private Integer validOrderCount; + + //订单完成率 + private Double orderCompletionRate; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderStatisticsVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderStatisticsVO.java new file mode 100644 index 0000000..f46f21b --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderStatisticsVO.java @@ -0,0 +1,16 @@ +package com.sky.pojo.vo; + +import lombok.Data; +import java.io.Serializable; + +@Data +public class OrderStatisticsVO implements Serializable { + //待接单数量 + private Integer toBeConfirmed; + + //待派送数量 + private Integer confirmed; + + //派送中数量 + private Integer deliveryInProgress; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderSubmitVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderSubmitVO.java new file mode 100644 index 0000000..296cfda --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderSubmitVO.java @@ -0,0 +1,25 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderSubmitVO implements Serializable { + //订单id + private Long id; + //订单号 + private String orderNumber; + //订单金额 + private BigDecimal orderAmount; + //下单时间 + private LocalDateTime orderTime; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/OrderVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderVO.java new file mode 100644 index 0000000..37d06d2 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/OrderVO.java @@ -0,0 +1,21 @@ +package com.sky.pojo.vo; + +import com.sky.pojo.entity.OrderDetail; +import com.sky.pojo.entity.Orders; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OrderVO extends Orders implements Serializable { + // 订单菜品信息 + private String orderDishes; + + // 订单详情 + private List orderDetailList; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/SalesTop10ReportVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/SalesTop10ReportVO.java new file mode 100644 index 0000000..d583677 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/SalesTop10ReportVO.java @@ -0,0 +1,22 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalesTop10ReportVO implements Serializable { + + //商品名称列表,以逗号分隔,例如:鱼香肉丝,宫保鸡丁,水煮鱼 + private String nameList; + + //销量列表,以逗号分隔,例如:260,215,200 + private String numberList; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealOverViewVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealOverViewVO.java new file mode 100644 index 0000000..8a1a05b --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealOverViewVO.java @@ -0,0 +1,23 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 套餐总览 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SetmealOverViewVO implements Serializable { + // 已启售数量 + private Integer sold; + + // 已停售数量 + private Integer discontinued; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealVO.java new file mode 100644 index 0000000..7545445 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/SetmealVO.java @@ -0,0 +1,48 @@ +package com.sky.pojo.vo; + +import com.sky.pojo.entity.SetmealDish; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SetmealVO implements Serializable { + + private Long id; + + //分类id + private Long categoryId; + + //套餐名称 + private String name; + + //套餐价格 + private BigDecimal price; + + //状态 0:停用 1:启用 + private Integer status; + + //描述信息 + private String description; + + //图片 + private String image; + + //更新时间 + private LocalDateTime updateTime; + + //分类名称 + private String categoryName; + + //套餐和菜品的关联关系 + private List setmealDishes = new ArrayList<>(); +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/TurnoverReportVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/TurnoverReportVO.java new file mode 100644 index 0000000..aa82bab --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/TurnoverReportVO.java @@ -0,0 +1,20 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TurnoverReportVO implements Serializable { + // 日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03 + private String dateList; + + // 营业额,以逗号分隔,例如:406.0,1520.0,75.0 + private String turnoverList; +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/UserLoginVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/UserLoginVO.java new file mode 100644 index 0000000..098bf6c --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/UserLoginVO.java @@ -0,0 +1,20 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserLoginVO implements Serializable { + + private Long id; + private String openid; + private String token; + +} diff --git a/sky-pojo/src/main/java/com/sky/pojo/vo/UserReportVO.java b/sky-pojo/src/main/java/com/sky/pojo/vo/UserReportVO.java new file mode 100644 index 0000000..7da27d4 --- /dev/null +++ b/sky-pojo/src/main/java/com/sky/pojo/vo/UserReportVO.java @@ -0,0 +1,25 @@ +package com.sky.pojo.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserReportVO implements Serializable { + + //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03 + private String dateList; + + //用户总量,以逗号分隔,例如:200,210,220 + private String totalUserList; + + //新增用户,以逗号分隔,例如:20,21,10 + private String newUserList; + +} diff --git a/sky-server/pom.xml b/sky-server/pom.xml new file mode 100644 index 0000000..5d67038 --- /dev/null +++ b/sky-server/pom.xml @@ -0,0 +1,146 @@ + + + 4.0.0 + + com.sky + sky-take-out + 1.0-SNAPSHOT + + + sky-server + + + 17 + 17 + UTF-8 + + + + + com.sky + sky-common + 1.0-SNAPSHOT + + + + com.sky + sky-pojo + 1.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-web + compile + + + + mysql + mysql-connector-java + runtime + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + + org.projectlombok + lombok + + + + com.alibaba + fastjson + + + + com.alibaba + druid-spring-boot-starter + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + org.aspectj + aspectjrt + + + + org.aspectj + aspectjweaver + + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.springframework.boot + spring-boot-starter-cache + + + + org.springframework.boot + spring-boot-starter-websocket + + + + javax.xml.bind + jaxb-api + + + + + org.apache.poi + poi + + + org.apache.poi + poi-ooxml + + + + io.minio + minio + + + junit + junit + 4.13.1 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/sky-server/src/main/java/com/sky/SkyApplication.java b/sky-server/src/main/java/com/sky/SkyApplication.java new file mode 100644 index 0000000..792cb51 --- /dev/null +++ b/sky-server/src/main/java/com/sky/SkyApplication.java @@ -0,0 +1,20 @@ +package com.sky; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@SpringBootApplication +@EnableTransactionManagement // 开启注解方式的事务管理 +@EnableCaching// 开启缓存注解 +@EnableScheduling +@Slf4j +public class SkyApplication { + public static void main(String[] args) { + SpringApplication.run(SkyApplication.class, args); + log.info("server started"); + } +} diff --git a/sky-server/src/main/resources/application-dev.yml b/sky-server/src/main/resources/application-dev.yml new file mode 100644 index 0000000..f340038 --- /dev/null +++ b/sky-server/src/main/resources/application-dev.yml @@ -0,0 +1,32 @@ +sky: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + host: 106.15.251.123 + port: 3305 + database: sky_take_out + username: root + password: "02120212" + + minio: + endpointUrl: "http://129.211.31.58:9000" + bucket-name: sky + accessKey: "bunny" + secretKey: "02120212" + + redis: + host: 106.15.251.123 + port: 6378 + password: "02120212" + database: 10 + + wechat: + appid: wx18e5556d7539757b + secret: ac06f1c49f90a2ed69f1a946d4981833 + + baidu: + ak: sUMa2pGqc6z2gYbQyeRVMQuyinKWjmKP + +spring: + servlet: + multipart: + max-file-size: 2MB diff --git a/sky-server/src/main/resources/application.yml b/sky-server/src/main/resources/application.yml new file mode 100644 index 0000000..4dc57cb --- /dev/null +++ b/sky-server/src/main/resources/application.yml @@ -0,0 +1,59 @@ +server: + port: 8080 + +spring: + profiles: + active: dev + main: + allow-circular-references: true + datasource: + druid: + driver-class-name: ${sky.datasource.driver-class-name} + url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + username: ${sky.datasource.username} + password: ${sky.datasource.password} + redis: + host: ${sky.redis.host} + port: ${sky.redis.port} + password: ${sky.redis.password} + database: ${sky.redis.database} + +mybatis: + #mapper配置文件 + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.sky.entity + configuration: + map-underscore-to-camel-case: true # 开启驼峰命名 + +logging: + level: + com: + sky: + mapper: debug + service: info + controller: info + +sky: + jwt: + # 设置jwt签名加密时使用的秘钥 + admin-secret-key: itcast + # 设置jwt过期时间 + admin-ttl: 7200000 + # 设置前端传递过来的令牌名称 + admin-token-name: token + user-secret-key: itheima + user-ttl: 7200000 + user-token-name: authentication + + wechat: + appid: ${sky.wechat.appid} + secret: ${sky.wechat.secret} + + minio: + endpointUrl: ${sky.minio.endpointUrl} + accessKey: ${sky.minio.accessKey} + secretKey: ${sky.minio.secretKey} + bucket-name: ${sky.minio.bucket-name} + + baidu: + ak: ${sky.baidu.ak} \ No newline at end of file diff --git a/sky-server/src/main/resources/favicon.ico b/sky-server/src/main/resources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1ba397c45de65f92b238bb9f94608320bf32209b GIT binary patch literal 13342 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 literal 0 HcmV?d00001 diff --git a/sky-server/src/main/resources/template/运营数据报表模板.xlsx b/sky-server/src/main/resources/template/运营数据报表模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..76806c553826045fe5f3fc6f81dd7e2cef56b3a9 GIT binary patch literal 12570 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 literal 0 HcmV?d00001