diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
index bfdbbbff..31abbf3b 100644
--- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
+++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
@@ -66,7 +66,7 @@ public interface ErrorCodeConstants {
ErrorCode ALLOC_NOT_EXISTS = new ErrorCode(1_004_013_007, "订单明细不存在");
ErrorCode STORE_EVALUATE_NOT_EXISTS = new ErrorCode(1_004_013_008, "订单明细不存在");
ErrorCode STORE_COMPLAIN_NOT_EXISTS = new ErrorCode(1_004_013_009, "订单明细不存在");
-
+ ErrorCode CUSTOMER_TRAFFIC_NOT_EXISTS = new ErrorCode(1_004_013_009, "订单明细不存在");
ErrorCode DINING_PLATES_NOT_EXISTS = new ErrorCode(1_004_099_000, "餐盘不存在");
@@ -79,4 +79,5 @@ public interface ErrorCodeConstants {
ErrorCode INSUFFICIENT_BALANCE = new ErrorCode(1_004_099_007, "余额不足30元,请充值");
ErrorCode CARD_ALREADY_BIND = new ErrorCode(1_004_099_008, "卡号已绑定");
+
}
diff --git a/yudao-module-member/yudao-module-member-biz/pom.xml b/yudao-module-member/yudao-module-member-biz/pom.xml
index 249c061a..5ea21262 100644
--- a/yudao-module-member/yudao-module-member-biz/pom.xml
+++ b/yudao-module-member/yudao-module-member-biz/pom.xml
@@ -89,6 +89,10 @@
cn.iocoder.boot
yudao-spring-boot-starter-biz-ip
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-websocket
+
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/CustomerTrafficController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/CustomerTrafficController.java
new file mode 100644
index 00000000..841079b3
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/CustomerTrafficController.java
@@ -0,0 +1,102 @@
+package cn.iocoder.yudao.module.member.controller.admin.customertraffic;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+import cn.iocoder.yudao.module.member.service.customertraffic.CustomerTrafficService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+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.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 顾客流量")
+@RestController
+@RequestMapping("/member/customer-traffic")
+@Validated
+public class CustomerTrafficController {
+
+ @Resource
+ private CustomerTrafficService customerTrafficService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建顾客流量")
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:create')")
+ public CommonResult createCustomerTraffic(@Valid @RequestBody CustomerTrafficSaveReqVO createReqVO) {
+ return success(customerTrafficService.createCustomerTraffic(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新顾客流量")
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:update')")
+ public CommonResult updateCustomerTraffic(@Valid @RequestBody CustomerTrafficSaveReqVO updateReqVO) {
+ customerTrafficService.updateCustomerTraffic(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除顾客流量")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:delete')")
+ public CommonResult deleteCustomerTraffic(@RequestParam("id") Long id) {
+ customerTrafficService.deleteCustomerTraffic(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得顾客流量")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:query')")
+ public CommonResult getCustomerTraffic(@RequestParam("id") Long id) {
+ CustomerTrafficDO customerTraffic = customerTrafficService.getCustomerTraffic(id);
+ return success(BeanUtils.toBean(customerTraffic, CustomerTrafficRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得顾客流量分页")
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:query')")
+ public CommonResult> getCustomerTrafficPage(@Valid CustomerTrafficPageReqVO pageReqVO) {
+ PageResult pageResult = customerTrafficService.getCustomerTrafficPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, CustomerTrafficRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出顾客流量 Excel")
+ @PreAuthorize("@ss.hasPermission('member:customer-traffic:export')")
+ @OperateLog(type = EXPORT)
+ public void exportCustomerTrafficExcel(@Valid CustomerTrafficPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = customerTrafficService.getCustomerTrafficPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "顾客流量.xls", "数据", CustomerTrafficRespVO.class,
+ BeanUtils.toBean(list, CustomerTrafficRespVO.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/customertraffic/vo/CustomerTrafficPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficPageReqVO.java
new file mode 100644
index 00000000..968f6251
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficPageReqVO.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.member.controller.admin.customertraffic.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 CustomerTrafficPageReqVO extends PageParam {
+
+ @Schema(description = "时间节点")
+ private String timePoint;
+
+ @Schema(description = "门店id", example = "19185")
+ private Long storeId;
+
+ @Schema(description = "顾客数")
+ private Integer customerNum;
+
+ @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/customertraffic/vo/CustomerTrafficRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficRespVO.java
new file mode 100644
index 00000000..4587b765
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficRespVO.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.member.controller.admin.customertraffic.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 CustomerTrafficRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8312")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "时间节点")
+ @ExcelProperty("时间节点")
+ private String timePoint;
+
+ @Schema(description = "门店id", example = "19185")
+ @ExcelProperty("门店id")
+ private Long storeId;
+
+ @Schema(description = "顾客数")
+ @ExcelProperty("顾客数")
+ private Integer customerNum;
+
+ @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/customertraffic/vo/CustomerTrafficSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficSaveReqVO.java
new file mode 100644
index 00000000..de54be19
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/customertraffic/vo/CustomerTrafficSaveReqVO.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.member.controller.admin.customertraffic.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 CustomerTrafficSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8312")
+ private Long id;
+
+ @Schema(description = "时间节点")
+ private String timePoint;
+
+ @Schema(description = "门店id", example = "19185")
+ private Long storeId;
+
+ @Schema(description = "顾客数")
+ private Integer customerNum;
+
+}
\ 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/screen/ScreenController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java
new file mode 100644
index 00000000..a04c316f
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/ScreenController.java
@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.member.controller.admin.screen;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVo;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+import cn.iocoder.yudao.module.member.service.customertraffic.CustomerTrafficService;
+import cn.iocoder.yudao.module.member.service.order.OrderService;
+import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
+import cn.iocoder.yudao.module.member.service.storeevaluate.StoreEvaluateService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+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.annotation.security.PermitAll;
+import java.util.List;
+import java.util.Map;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+/**
+ * @author zt
+ * @description
+ * @since 2024/4/16
+ */
+@Tag(name = "管理后台 - 大屏")
+@RestController
+@RequestMapping("/member/screen")
+@PermitAll
+public class ScreenController {
+
+ @Resource
+ private StoreEvaluateService storeEvaluateService;
+ @Resource
+ private CustomerTrafficService customerTrafficService;
+ @Resource
+ private OrderService orderService;
+ @Resource
+ private OrderDetailService orderDetailService;
+
+ @GetMapping("/getEvaluate")
+ @Operation(summary = "获得店铺评价,1-好评,2-差评")
+ public Map getEvaluate(){
+ return storeEvaluateService.getEvaluate();
+ }
+
+ @GetMapping("/getData")
+ @Operation(summary = "食堂今日顾客流量")
+ public CommonResult> getData() {
+ List data = customerTrafficService.getData();
+ return success(BeanUtils.toBean(data, CustomerTrafficRespVO.class));
+ }
+
+ @GetMapping("/getUserCount")
+ @Operation(summary = "获取总顾客流量")
+ public CommonResult getUserCount() {
+ return success(orderService.selectTodayUser());
+ }
+
+ @GetMapping("/selectDishSale")
+ @Operation(summary = "菜品今日销售")
+ public CommonResult> selectDishSale() {
+ return success(orderDetailService.selectDishSale());
+ }
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/DishVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/DishVo.java
new file mode 100644
index 00000000..edf36be7
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/screen/vo/DishVo.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.member.controller.admin.screen.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zt
+ * @description
+ * @since 2024/4/16
+ */
+@Data
+public class DishVo {
+
+ @Schema(description = "菜品")
+ private String dishesName;
+
+ @Schema(description = "重量")
+ private BigDecimal weight;
+
+ @Schema(description = "价钱")
+ private BigDecimal price;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeevaluate/StoreEvaluateController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeevaluate/StoreEvaluateController.java
index 54da3ec1..5e812a81 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeevaluate/StoreEvaluateController.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeevaluate/StoreEvaluateController.java
@@ -1,33 +1,38 @@
package cn.iocoder.yudao.module.member.controller.admin.storeevaluate;
-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.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-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.*;
-
-import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.*;
+import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluatePageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluateRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluateSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeevaluate.StoreEvaluateDO;
import cn.iocoder.yudao.module.member.service.storeevaluate.StoreEvaluateService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+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.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 店铺评价")
@RestController
@@ -92,4 +97,7 @@ public class StoreEvaluateController {
BeanUtils.toBean(list, StoreEvaluateRespVO.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/dal/dataobject/customertraffic/CustomerTrafficDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/customertraffic/CustomerTrafficDO.java
new file mode 100644
index 00000000..c33e8290
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/customertraffic/CustomerTrafficDO.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.customertraffic;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * 顾客流量 DO
+ *
+ * @author 开发账号
+ */
+@TableName("member_customer_traffic")
+@KeySequence("member_customer_traffic_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomerTrafficDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 时间节点
+ */
+ private String timePoint;
+ /**
+ * 门店id
+ */
+ private Long storeId;
+ /**
+ * 顾客数
+ */
+ private Integer customerNum;
+
+}
\ 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/customertraffic/CustomerTrafficMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/customertraffic/CustomerTrafficMapper.java
new file mode 100644
index 00000000..e8497d30
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/customertraffic/CustomerTrafficMapper.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.dal.mysql.customertraffic;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.*;
+
+/**
+ * 顾客流量 Mapper
+ *
+ * @author 开发账号
+ */
+@Mapper
+public interface CustomerTrafficMapper extends BaseMapperX {
+
+ default PageResult selectPage(CustomerTrafficPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(CustomerTrafficDO::getTimePoint, reqVO.getTimePoint())
+ .eqIfPresent(CustomerTrafficDO::getStoreId, reqVO.getStoreId())
+ .eqIfPresent(CustomerTrafficDO::getCustomerNum, reqVO.getCustomerNum())
+ .betweenIfPresent(CustomerTrafficDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(CustomerTrafficDO::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 6f29ffe6..6a3f399a 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
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqV
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 org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import java.time.LocalDateTime;
import java.util.List;
@@ -42,4 +44,7 @@ public interface DishOrderMapper extends BaseMapperX {
.orderByDesc(DishOrderDO::getId));
}
+ @Select("select count(distinct user_id) from member_dish_order where create_time between #{startTime} and #{endTime}")
+ Integer selectTodayUser(@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
}
\ 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/orderdetail/OrderDetailMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/orderdetail/OrderDetailMapper.java
index 974c0742..27d504d1 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/orderdetail/OrderDetailMapper.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/orderdetail/OrderDetailMapper.java
@@ -3,9 +3,15 @@ package cn.iocoder.yudao.module.member.dal.mysql.orderdetail;
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.screen.vo.DishVo;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
+import java.util.List;
/**
* 订单明细 Mapper
@@ -26,4 +32,7 @@ public interface OrderDetailMapper extends BaseMapperX {
.orderByDesc(OrderDetailDO::getId));
}
+ @Select("select dishes_name, sum(a.weight) as weight , sum(a.price) as price from member_order_detail a where a.create_time between #{startTime} and #{endTime} group by a.dishes_id,a.dishes_name")
+ List selectDishSale(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java
index f3f35718..8acd9e82 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/BalanceDeductionJob.java
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.member.service.order.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -22,7 +23,7 @@ import java.util.List;
import java.util.stream.Collectors;
/**
- * 物理删除 N 天前的任务日志的 Job
+ * 自动扣款 Job
*
* @author j-sentinel
*/
@@ -47,6 +48,7 @@ public class BalanceDeductionJob implements JobHandler {
@Override
@TenantIgnore
+ @Transactional(rollbackFor = Exception.class)
public String execute(String param) {
//查询扣费用户
List diningPlatesToCharging = platesService.getDiningPlatesToCharging(EXPIRATION_TIME);
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/CustomerTrafficJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/CustomerTrafficJob.java
new file mode 100644
index 00000000..f1aa3d42
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/CustomerTrafficJob.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.member.job;
+
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+import cn.iocoder.yudao.module.member.service.customertraffic.CustomerTrafficService;
+import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
+import cn.iocoder.yudao.module.member.util.MemberConstants;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @author zt
+ * @description
+ * @since 2024/4/15
+ */
+@Slf4j
+@Component
+public class CustomerTrafficJob implements JobHandler {
+
+ @Resource
+ private DiningPlatesService platesService;
+ @Resource
+ private CustomerTrafficService trafficService;
+ /**
+ * 10分钟为1轮
+ */
+ private static final Integer ROUND_TIME = 10;
+
+ @Override
+ @TenantIgnore
+ public String execute(String param) {
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(MemberConstants.HOUR_FORMAT);
+ LocalDateTime localDateTime = LocalDateTime.now().withSecond(0);
+ Integer diningPlatesNum = platesService.getDiningPlatesNum(localDateTime,ROUND_TIME);
+ CustomerTrafficDO customerTrafficDO = new CustomerTrafficDO();
+ customerTrafficDO.setCustomerNum(diningPlatesNum).setTimePoint(localDateTime.format(dateFormatter));
+
+ trafficService.insertOne(customerTrafficDO);
+ log.info("[execute][顾客统计任务顾客数量 ({}) 个]", diningPlatesNum);
+ return String.format("顾客统计定时任务顾客数量 %s 个", diningPlatesNum);
+ }
+
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/customertraffic/CustomerTrafficService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/customertraffic/CustomerTrafficService.java
new file mode 100644
index 00000000..3470a53e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/customertraffic/CustomerTrafficService.java
@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.member.service.customertraffic;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 顾客流量 Service 接口
+ *
+ * @author 开发账号
+ */
+public interface CustomerTrafficService {
+
+ /**
+ * 创建顾客流量
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createCustomerTraffic(@Valid CustomerTrafficSaveReqVO createReqVO);
+
+ /**
+ * 更新顾客流量
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateCustomerTraffic(@Valid CustomerTrafficSaveReqVO updateReqVO);
+
+ /**
+ * 删除顾客流量
+ *
+ * @param id 编号
+ */
+ void deleteCustomerTraffic(Long id);
+
+ /**
+ * 获得顾客流量
+ *
+ * @param id 编号
+ * @return 顾客流量
+ */
+ CustomerTrafficDO getCustomerTraffic(Long id);
+
+ /**
+ * 获得顾客流量分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 顾客流量分页
+ */
+ PageResult getCustomerTrafficPage(CustomerTrafficPageReqVO pageReqVO);
+
+
+ void insertOne(CustomerTrafficDO customerTrafficDO);
+
+ /**
+ * 获取最新7个时间节点的数据
+ */
+ List getData();
+
+}
\ 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/customertraffic/CustomerTrafficServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/customertraffic/CustomerTrafficServiceImpl.java
new file mode 100644
index 00000000..f88c03ba
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/customertraffic/CustomerTrafficServiceImpl.java
@@ -0,0 +1,88 @@
+package cn.iocoder.yudao.module.member.service.customertraffic;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.customertraffic.vo.CustomerTrafficSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
+import cn.iocoder.yudao.module.member.dal.mysql.customertraffic.CustomerTrafficMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CUSTOMER_TRAFFIC_NOT_EXISTS;
+
+/**
+ * 顾客流量 Service 实现类
+ *
+ * @author 开发账号
+ */
+@Service
+@Validated
+public class CustomerTrafficServiceImpl implements CustomerTrafficService {
+
+ @Resource
+ private CustomerTrafficMapper customerTrafficMapper;
+
+ @Override
+ public Long createCustomerTraffic(CustomerTrafficSaveReqVO createReqVO) {
+ // 插入
+ CustomerTrafficDO customerTraffic = BeanUtils.toBean(createReqVO, CustomerTrafficDO.class);
+ customerTrafficMapper.insert(customerTraffic);
+ // 返回
+ return customerTraffic.getId();
+ }
+
+ @Override
+ public void updateCustomerTraffic(CustomerTrafficSaveReqVO updateReqVO) {
+ // 校验存在
+ validateCustomerTrafficExists(updateReqVO.getId());
+ // 更新
+ CustomerTrafficDO updateObj = BeanUtils.toBean(updateReqVO, CustomerTrafficDO.class);
+ customerTrafficMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteCustomerTraffic(Long id) {
+ // 校验存在
+ validateCustomerTrafficExists(id);
+ // 删除
+ customerTrafficMapper.deleteById(id);
+ }
+
+ private void validateCustomerTrafficExists(Long id) {
+ if (customerTrafficMapper.selectById(id) == null) {
+ throw exception(CUSTOMER_TRAFFIC_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public CustomerTrafficDO getCustomerTraffic(Long id) {
+ return customerTrafficMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getCustomerTrafficPage(CustomerTrafficPageReqVO pageReqVO) {
+ return customerTrafficMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public void insertOne(CustomerTrafficDO customerTrafficDO) {
+ customerTrafficMapper.insert(customerTrafficDO);
+ }
+
+ @Override
+ public List getData() {
+ LocalDateTime now = LocalDateTime.now();
+ List customerTrafficDOS = customerTrafficMapper.selectList(Wrappers.lambdaQuery()
+ .lt(CustomerTrafficDO::getCreateTime, now)
+ .orderByDesc(CustomerTrafficDO::getCustomerNum)
+ .last("limit 7"));
+ return customerTrafficDOS;
+ }
+}
\ 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/diningplates/DiningPlatesService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java
index 51d6f4d9..edcf0c01 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesService.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
import javax.validation.Valid;
+import java.time.LocalDateTime;
import java.util.List;
/**
@@ -88,4 +89,6 @@ public interface DiningPlatesService {
Boolean checkBind(String diningPlatesNum);
AppUserInfoCardVO appCheckBind(String diningPlatesNum);
+
+ Integer getDiningPlatesNum(LocalDateTime localDateTime,Integer time);
}
\ 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/diningplates/DiningPlatesServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java
index 02fda947..6231d544 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java
@@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.member.service.diningplates;
import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
@@ -15,6 +17,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.util.MemberConstants;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@@ -23,7 +26,10 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -48,6 +54,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
private DishOrderMapper dishOrderMapper;
@Resource
private StringRedisTemplate stringRedisTemplate;
+ @Resource
+ private WebSocketMessageSender webSocketMessageSender;
@Override
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
@@ -162,6 +170,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
AppUserInfoCardVO data = new AppUserInfoCardVO();
data.setName(memberUserDO.getNickname());
data.setMoney(money);
+
+ //afterBind(memberUserDO.getId());
return data;
}
@@ -197,6 +207,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
AppUserInfoCardVO data = new AppUserInfoCardVO();
data.setName(memberUserDO.getNickname());
data.setMoney(money);
+
+ //afterBind(memberUserDO.getId());
return data;
}
@Override
@@ -253,4 +265,55 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
throw exception(INSUFFICIENT_BALANCE);
}
}
+
+
+ @Override
+ public Integer getDiningPlatesNum(LocalDateTime localDateTime, Integer time) {
+ // 获取当前时间
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(MemberConstants.TIME_FORMAT);
+ LocalDateTime currentTime = localDateTime;
+
+ // 计算指定分钟之前的时间
+ LocalDateTime timeMinutesAgo = currentTime.minusMinutes(time);
+ String end = currentTime.format(dateFormatter);
+ String start = timeMinutesAgo.format(dateFormatter);
+
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.le("date_format(binding_time,'%Y-%m-%d %H:%i:%s')",end)
+ .gt("date_format(binding_time,'%Y-%m-%d %H:%i:%s')",start);
+
+ Integer l = diningPlatesMapper.selectCount(queryWrapper).intValue();
+ return l;
+ }
+
+ /**
+ * 绑定之后的操作
+ */
+ public void afterBind(Long userId){
+ //判断是否已记录
+ LocalDate today = LocalDate.now();
+
+ // 一天的开始时间
+ LocalDateTime startOfDay = today.atStartOfDay();
+ // 一天的结束时间
+ LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+
+ List dishOrderDOS = dishOrderMapper.selectList(Wrappers.lambdaQuery()
+ .eq(DishOrderDO::getUserId, userId)
+ .between(DishOrderDO::getCreateTime, startOfDay, endOfDay));
+ if(dishOrderDOS.size() > 0){
+ return;
+ }
+
+ String s = stringRedisTemplate.opsForValue().get(MemberConstants.CUSTOMER_PREFIX);
+ if(StrUtil.isBlank(s)){
+ s = "1";
+ }else {
+ s = String.valueOf(Integer.valueOf(s)+1);
+ }
+ stringRedisTemplate.opsForValue().set(MemberConstants.CUSTOMER_PREFIX,s);
+ //根据餐盘对应的门店ID发送给对应的用户
+ webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), 1L, // 给指定用户
+ "demo-message-receive", s);
+ }
}
\ 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 75ef77ee..8e6195e4 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
@@ -83,6 +83,12 @@ public interface OrderService {
*/
List getDishOrderByTime(LocalDateTime startTime ,LocalDateTime endTime );
-
PageResult getPageOrderDetails(OrderDetailsReqVO reqVO);
+
+ /**
+ * 获取今日顾客总量
+ * @return
+ */
+ Integer selectTodayUser();
+
}
\ 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 75e34396..d4ba462d 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
@@ -28,7 +28,9 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -210,5 +212,22 @@ public class OrderServiceImpl implements OrderService {
.eq(DishOrderDO::getUserId,SecurityFrameworkUtils.getLoginUserId())
.between(DishOrderDO::getCreateTime, startTime, endTime));
return dishOrderDOS;
+ }
+
+ @Override
+ public Integer selectTodayUser() {
+ LocalDate today = LocalDate.now();
+
+ // 一天的开始时间
+ LocalDateTime startOfDay = today.atStartOfDay();
+ // 一天的结束时间
+ LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+
+ return dishOrderMapper.selectTodayUser(startOfDay,endOfDay);
+
+
+
+
+
}
}
\ 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/orderdetail/OrderDetailService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailService.java
index 9511e84a..7c66397b 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailService.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailService.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.service.orderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVo;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
@@ -57,4 +58,6 @@ public interface OrderDetailService {
List selectListByOrderId(Long orderId);
List selectListByOrderIds(List orderIds);
+
+ List selectDishSale();
}
\ 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/orderdetail/OrderDetailServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java
index 1a816488..b9a5625b 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.service.orderdetail;
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.module.member.controller.admin.screen.vo.DishVo;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
@@ -28,6 +29,9 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -174,4 +178,20 @@ public class OrderDetailServiceImpl implements OrderDetailService {
throw exception(2000_10_001,"无法获取设备编码");
}
}
+
+ @Override
+ public List selectDishSale() {
+ // 获取当前日期
+ LocalDate today = LocalDate.now();
+
+ // 一天的开始时间
+ LocalDateTime startOfDay = today.atStartOfDay();
+
+ // 一天的结束时间
+ LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+
+ return orderDetailMapper.selectDishSale(startOfDay,endOfDay);
+ }
+
+
}
\ 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/storeevaluate/StoreEvaluateService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateService.java
index 6e110c3f..116ba1f5 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateService.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateService.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.controller.app.storeevaluate.vo.AppStoreEv
import cn.iocoder.yudao.module.member.dal.dataobject.storeevaluate.StoreEvaluateDO;
import javax.validation.Valid;
+import java.util.Map;
/**
* 店铺评价 Service 接口
@@ -58,4 +59,8 @@ public interface StoreEvaluateService {
StoreEvaluateDO selectByUserId(Long storeId);
+ Map getEvaluate();
+
+
+
}
\ 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/storeevaluate/StoreEvaluateServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateServiceImpl.java
index 45074b82..986e101a 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateServiceImpl.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeevaluate/StoreEvaluateServiceImpl.java
@@ -15,10 +15,14 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_EVALUATE_NOT_EXISTS;
+
/**
* 店铺评价 Service 实现类
*
@@ -101,4 +105,22 @@ public class StoreEvaluateServiceImpl implements StoreEvaluateService {
.last(MemberConstants.LIMIT_ONE));
return storeEvaluateDO;
}
+
+ @Override
+ public Map getEvaluate() {
+ HashMap result = new HashMap<>();
+ Long good = storeEvaluateMapper.selectCount(Wrappers.lambdaQuery()
+ .gt(StoreEvaluateDO::getEvaluate, MemberConstants.GOOD_EVALUATE));
+ Long total = storeEvaluateMapper.selectCount();
+ if(total == 0){
+ result.put("1","0");
+ result.put("0","0");
+ return result;
+ }
+ BigDecimal goodPercent = new BigDecimal(good).divide(new BigDecimal(total), 4, BigDecimal.ROUND_HALF_UP);
+ BigDecimal badPercent = BigDecimal.ONE.subtract(goodPercent);
+ result.put("1",goodPercent.multiply(new BigDecimal("100")).toString()+"%");
+ result.put("0",badPercent.multiply(new BigDecimal("100")).toString()+"%");
+ return result;
+ }
}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberConstants.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberConstants.java
index 56a6a6aa..5eabbc1f 100644
--- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberConstants.java
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/util/MemberConstants.java
@@ -24,6 +24,11 @@ public class MemberConstants {
*/
public static final String DATE_FORMAT = "yyyy-MM-dd";
+ /**
+ * 时间格式
+ */
+ public static final String HOUR_FORMAT = "HH:mm";
+
/**
* limit
*/
@@ -54,4 +59,13 @@ public class MemberConstants {
*/
public static final String EXCEED_PROPOSAL = "您本周摄入的热量超标,饮食均衡才能保证每天活动的能量和营养素供应充足,减肥也要吃饱,吃好哦。建议多吃水果,少吃肉类以及根茎类的蔬菜。以上建议不成为医疗建议";
+ /**
+ * 好评星级
+ */
+ public static final String GOOD_EVALUATE = "3";
+
+ /**
+ * 门店顾客流量key
+ */
+ public static final String CUSTOMER_PREFIX = "store";
}