大屏接口
This commit is contained in:
@ -66,7 +66,9 @@ 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 CUSTOMER_TRAFFIC_NOT_EXISTS = new ErrorCode(1_004_013_010, "订单明细不存在");
|
||||
ErrorCode DEVICE_WARN_NOT_EXISTS = new ErrorCode(1_004_013_011, "订单明细不存在");
|
||||
|
||||
|
||||
ErrorCode DINING_PLATES_NOT_EXISTS = new ErrorCode(1_004_099_000, "餐盘不存在");
|
||||
|
||||
|
@ -0,0 +1,100 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.devicewarn;
|
||||
|
||||
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.devicewarn.vo.DeviceWarnPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.DeviceWarnRespVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.DeviceWarnSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.devicewarn.DeviceWarnDO;
|
||||
import cn.iocoder.yudao.module.member.service.devicewarn.DeviceWarnService;
|
||||
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/device-warn")
|
||||
@Validated
|
||||
public class DeviceWarnController {
|
||||
|
||||
@Resource
|
||||
private DeviceWarnService deviceWarnService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建设备告警次数")
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:create')")
|
||||
public CommonResult<Long> createDeviceWarn(@Valid @RequestBody DeviceWarnSaveReqVO createReqVO) {
|
||||
return success(deviceWarnService.createDeviceWarn(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新设备告警次数")
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:update')")
|
||||
public CommonResult<Boolean> updateDeviceWarn(@Valid @RequestBody DeviceWarnSaveReqVO updateReqVO) {
|
||||
deviceWarnService.updateDeviceWarn(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除设备告警次数")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:delete')")
|
||||
public CommonResult<Boolean> deleteDeviceWarn(@RequestParam("id") Long id) {
|
||||
deviceWarnService.deleteDeviceWarn(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得设备告警次数")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:query')")
|
||||
public CommonResult<DeviceWarnRespVO> getDeviceWarn(@RequestParam("id") Long id) {
|
||||
DeviceWarnDO deviceWarn = deviceWarnService.getDeviceWarn(id);
|
||||
return success(BeanUtils.toBean(deviceWarn, DeviceWarnRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得设备告警次数分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:query')")
|
||||
public CommonResult<PageResult<DeviceWarnRespVO>> getDeviceWarnPage(@Valid DeviceWarnPageReqVO pageReqVO) {
|
||||
PageResult<DeviceWarnDO> pageResult = deviceWarnService.getDeviceWarnPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, DeviceWarnRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出设备告警次数 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:device-warn:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportDeviceWarnExcel(@Valid DeviceWarnPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<DeviceWarnDO> list = deviceWarnService.getDeviceWarnPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "设备告警次数.xls", "数据", DeviceWarnRespVO.class,
|
||||
BeanUtils.toBean(list, DeviceWarnRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.devicewarn.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 DeviceWarnPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "设备Ip")
|
||||
private String deviceSn;
|
||||
|
||||
@Schema(description = "门店id", example = "27128")
|
||||
private Long storeId;
|
||||
|
||||
@Schema(description = "报警次数")
|
||||
private Integer warnNum;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.devicewarn.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 DeviceWarnRespVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26802")
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "设备Ip")
|
||||
@ExcelProperty("设备Ip")
|
||||
private String deviceSn;
|
||||
|
||||
@Schema(description = "门店id", example = "27128")
|
||||
@ExcelProperty("门店id")
|
||||
private Long storeId;
|
||||
|
||||
@Schema(description = "报警次数")
|
||||
@ExcelProperty("报警次数")
|
||||
private Integer warnNum;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 设备告警次数新增/修改 Request VO")
|
||||
@Data
|
||||
public class DeviceWarnSaveReqVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26802")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "设备Ip")
|
||||
private String deviceSn;
|
||||
|
||||
@Schema(description = "门店id", example = "27128")
|
||||
private Long storeId;
|
||||
|
||||
@Schema(description = "报警次数")
|
||||
private Integer warnNum;
|
||||
|
||||
}
|
@ -9,11 +9,14 @@ import lombok.Data;
|
||||
* @since 2024/4/16
|
||||
*/
|
||||
@Data
|
||||
public class DiningPlatesStoreVo {
|
||||
public class DiningPlatesStoreVO {
|
||||
|
||||
@Schema(description = "门店ID")
|
||||
private Long storeId;
|
||||
|
||||
@Schema(description = "门店ID")
|
||||
@Schema(description = "人数")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "门店名")
|
||||
private String storeName;
|
||||
}
|
@ -5,14 +5,19 @@ import cn.hutool.core.date.DateTime;
|
||||
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.controller.admin.screen.vo.CarTeenInfoVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.StoreEvaluateVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.customertraffic.CustomerTrafficDetailDO;
|
||||
import cn.iocoder.yudao.module.member.service.customertraffic.CustomerTrafficService;
|
||||
import cn.iocoder.yudao.module.member.service.devicewarn.DeviceWarnService;
|
||||
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.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -22,8 +27,9 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.annotation.security.PermitAll;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@ -45,11 +51,13 @@ public class ScreenController {
|
||||
private OrderService orderService;
|
||||
@Resource
|
||||
private OrderDetailService orderDetailService;
|
||||
@Resource
|
||||
private DeviceWarnService deviceWarnService;
|
||||
|
||||
@GetMapping("/getEvaluate")
|
||||
@Operation(summary = "获得店铺评价,1-好评,2-差评")
|
||||
@PermitAll
|
||||
public Map<String,String> getEvaluate(Long storeId){
|
||||
public StoreEvaluateVO getEvaluate(Long storeId){
|
||||
return storeEvaluateService.getEvaluate(storeId);
|
||||
}
|
||||
|
||||
@ -78,14 +86,52 @@ public class ScreenController {
|
||||
@GetMapping("/getUserCount")
|
||||
@Operation(summary = "获取总顾客流量")
|
||||
@PermitAll
|
||||
public CommonResult<Integer> getUserCount(Long storeId) {
|
||||
return success(orderService.selectTodayUser(storeId));
|
||||
@Parameters({
|
||||
@Parameter(name = "storeId", description = "门店Id,不传查所有"),
|
||||
@Parameter(name = "time", description = "时间,不传查总所有,yyyy-mm-dd")
|
||||
})
|
||||
public CommonResult<Integer> getUserCount(Long storeId,String time) {
|
||||
return success(orderService.selectUser(storeId,time));
|
||||
}
|
||||
|
||||
@GetMapping("/selectDishSale")
|
||||
@Operation(summary = "菜品今日销售")
|
||||
@PermitAll
|
||||
public CommonResult<List<DishVo>> selectDishSale(Long storeId) {
|
||||
public CommonResult<List<DishVO>> selectDishSale(Long storeId) {
|
||||
return success(orderDetailService.selectDishSale(storeId));
|
||||
}
|
||||
|
||||
@GetMapping("/addWarn")
|
||||
@Operation(summary = "添加设备报警次数")
|
||||
@PermitAll
|
||||
public void addWarn(HttpServletRequest request) {
|
||||
deviceWarnService.addDeviceWarn(request);
|
||||
}
|
||||
|
||||
@GetMapping("/getWarn")
|
||||
@Operation(summary = "获取门店报警次数")
|
||||
@PermitAll
|
||||
public CommonResult<Long> getWarn(Long storeId) {
|
||||
return success(deviceWarnService.getWarn(storeId));
|
||||
}
|
||||
|
||||
@GetMapping("/getSaleMoney")
|
||||
@Operation(summary = "销售额")
|
||||
@PermitAll
|
||||
@Parameters({
|
||||
@Parameter(name = "storeId", description = "门店Id,不传查所有门店"),
|
||||
@Parameter(name = "time", description = "时间,不传查总销售额,yyyy-mm-dd")
|
||||
})
|
||||
public CommonResult<BigDecimal> getSaleMoney(Long storeId, String time) {
|
||||
return success(orderService.getSaleMoney(storeId,time));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getCarTeenInfo")
|
||||
@Operation(summary = "获取食堂信息")
|
||||
@PermitAll
|
||||
public CommonResult<List<CarTeenInfoVO>> getCarTeenInfo() {
|
||||
return success(orderService.getCarTeenInfo());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
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 <description class purpose>
|
||||
* @since 2024/4/19
|
||||
*/
|
||||
@Data
|
||||
public class CarTeenInfoVO {
|
||||
@Schema(description = "今日销售额")
|
||||
private BigDecimal todayMoney;
|
||||
@Schema(description = "总销售e")
|
||||
private BigDecimal totalMoney;
|
||||
@Schema(description = "设备数量")
|
||||
private String deviceNum;
|
||||
@Schema(description = "供应人数")
|
||||
private String peopleNUm;
|
||||
@Schema(description = "门店Id")
|
||||
private Long storeId;
|
||||
@Schema(description = "门店名")
|
||||
private String storesName;
|
||||
}
|
@ -11,7 +11,7 @@ import java.math.BigDecimal;
|
||||
* @since 2024/4/16
|
||||
*/
|
||||
@Data
|
||||
public class DishVo {
|
||||
public class DishVO {
|
||||
|
||||
@Schema(description = "菜品")
|
||||
private String dishesName;
|
||||
|
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.screen.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author zt
|
||||
* @description <description class purpose>
|
||||
* @since 2024/4/19
|
||||
*/
|
||||
@Data
|
||||
public class StoreEvaluateVO {
|
||||
@Schema(description = "好评率")
|
||||
private String good;
|
||||
@Schema(description = "差评率")
|
||||
private String bad;
|
||||
@Schema(description = "次数")
|
||||
private Long num;
|
||||
}
|
@ -39,6 +39,12 @@ public class CustomerTrafficDO extends BaseDO {
|
||||
* 门店id
|
||||
*/
|
||||
private Long storeId;
|
||||
|
||||
/**
|
||||
* 门店名
|
||||
*/
|
||||
private String storeName;
|
||||
|
||||
/**
|
||||
* 顾客数
|
||||
*/
|
||||
|
@ -0,0 +1,43 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.devicewarn;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 设备告警次数 DO
|
||||
*
|
||||
* @author 开发账号
|
||||
*/
|
||||
@TableName("member_device_warn")
|
||||
@KeySequence("member_device_warn_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DeviceWarnDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 编号
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 设备Ip
|
||||
*/
|
||||
private String deviceSn;
|
||||
/**
|
||||
* 门店id
|
||||
*/
|
||||
private Long storeId;
|
||||
/**
|
||||
* 报警次数
|
||||
*/
|
||||
private Integer warnNum;
|
||||
|
||||
}
|
@ -54,6 +54,17 @@ public class DiningPlatesDO extends BaseDO {
|
||||
* 状态:付费标志(0-无付费,1-正在付费)
|
||||
*/
|
||||
private String payFlag;
|
||||
|
||||
/**
|
||||
* 所属门店
|
||||
*/
|
||||
private Long storeId;
|
||||
|
||||
/**
|
||||
* 所属门店
|
||||
*/
|
||||
private String storeName;
|
||||
|
||||
/**
|
||||
* 绑定时间
|
||||
*/
|
||||
|
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.member.dal.mysql.devicewarn;
|
||||
|
||||
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.devicewarn.DeviceWarnDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.*;
|
||||
|
||||
/**
|
||||
* 设备告警次数 Mapper
|
||||
*
|
||||
* @author 开发账号
|
||||
*/
|
||||
@Mapper
|
||||
public interface DeviceWarnMapper extends BaseMapperX<DeviceWarnDO> {
|
||||
|
||||
default PageResult<DeviceWarnDO> selectPage(DeviceWarnPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<DeviceWarnDO>()
|
||||
.eqIfPresent(DeviceWarnDO::getDeviceSn, reqVO.getDeviceSn())
|
||||
.eqIfPresent(DeviceWarnDO::getStoreId, reqVO.getStoreId())
|
||||
.eqIfPresent(DeviceWarnDO::getWarnNum, reqVO.getWarnNum())
|
||||
.betweenIfPresent(DeviceWarnDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(DeviceWarnDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -4,12 +4,8 @@ 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.diningplates.vo.DiningPlatesPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 餐盘 Mapper
|
||||
@ -29,7 +25,6 @@ public interface DiningPlatesMapper extends BaseMapperX<DiningPlatesDO> {
|
||||
.orderByDesc(DiningPlatesDO::getId));
|
||||
}
|
||||
|
||||
@Select("select store_id,count(*) as num from member_dining_plates where create_time = #{time} group by store_id")
|
||||
List<DiningPlatesStoreVo> selectCountByStore(String time);
|
||||
|
||||
|
||||
}
|
@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ -44,6 +45,8 @@ public interface DishOrderMapper extends BaseMapperX<DishOrderDO> {
|
||||
}
|
||||
|
||||
|
||||
Integer selectTodayUser(@Param("time") String time,@Param("storeId") Long storeId);
|
||||
Integer selectUser(@Param("time")Long storeId,@Param("storeId")String time);
|
||||
|
||||
BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time);
|
||||
|
||||
}
|
@ -3,12 +3,11 @@ 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.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.util.List;
|
||||
|
||||
@ -31,7 +30,6 @@ public interface OrderDetailMapper extends BaseMapperX<OrderDetailDO> {
|
||||
.orderByDesc(OrderDetailDO::getId));
|
||||
}
|
||||
|
||||
@Select("")
|
||||
List<DishVo> selectDishSale(@Param("time") String time, @Param("storeId") Long storeId);
|
||||
List<DishVO> selectDishSale(@Param("time") String time, @Param("storeId") Long storeId);
|
||||
|
||||
}
|
@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.job;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
||||
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVo;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO;
|
||||
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;
|
||||
@ -40,7 +40,7 @@ public class CustomerTrafficJob implements JobHandler {
|
||||
public String execute(String param) {
|
||||
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(MemberConstants.HOUR_FORMAT);
|
||||
LocalDateTime localDateTime = LocalDateTime.now().withSecond(0);
|
||||
List<DiningPlatesStoreVo> diningPlatesNum = platesService.getDiningPlatesNum(localDateTime, ROUND_TIME);
|
||||
List<DiningPlatesStoreVO> diningPlatesNum = platesService.getDiningPlatesNum(localDateTime, ROUND_TIME);
|
||||
if(CollectionUtil.isNotEmpty(diningPlatesNum)){
|
||||
List<CustomerTrafficDO> addList = new ArrayList<>();
|
||||
diningPlatesNum.forEach(a -> {
|
||||
@ -48,7 +48,8 @@ public class CustomerTrafficJob implements JobHandler {
|
||||
CustomerTrafficDO customerTrafficDO = new CustomerTrafficDO();
|
||||
customerTrafficDO.setCustomerNum(a.getNum())
|
||||
.setTimePoint(localDateTime.format(dateFormatter))
|
||||
.setStoreId(a.getStoreId());
|
||||
.setStoreId(a.getStoreId()).setStoreName(a.getStoreName())
|
||||
.setCreateTime(localDateTime.withNano(0));
|
||||
addList.add(customerTrafficDO);
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,60 @@
|
||||
package cn.iocoder.yudao.module.member.service.devicewarn;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.DeviceWarnPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.DeviceWarnSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.devicewarn.DeviceWarnDO;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 设备告警次数 Service 接口
|
||||
*
|
||||
* @author 开发账号
|
||||
*/
|
||||
public interface DeviceWarnService {
|
||||
|
||||
/**
|
||||
* 创建设备告警次数
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createDeviceWarn(@Valid DeviceWarnSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新设备告警次数
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateDeviceWarn(@Valid DeviceWarnSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除设备告警次数
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteDeviceWarn(Long id);
|
||||
|
||||
/**
|
||||
* 获得设备告警次数
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 设备告警次数
|
||||
*/
|
||||
DeviceWarnDO getDeviceWarn(Long id);
|
||||
|
||||
/**
|
||||
* 获得设备告警次数分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 设备告警次数分页
|
||||
*/
|
||||
PageResult<DeviceWarnDO> getDeviceWarnPage(DeviceWarnPageReqVO pageReqVO);
|
||||
|
||||
|
||||
void addDeviceWarn(HttpServletRequest request);
|
||||
|
||||
Long getWarn(Long storeId);
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package cn.iocoder.yudao.module.member.service.devicewarn;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
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.devicewarn.vo.DeviceWarnPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.devicewarn.vo.DeviceWarnSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.devicewarn.DeviceWarnDO;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.devicewarn.DeviceWarnMapper;
|
||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||
import cn.iocoder.yudao.module.system.api.deviceInfo.DeviceInfoApi;
|
||||
import cn.iocoder.yudao.module.system.api.deviceInfo.dto.DeviceInfoDto;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.DEVICE_WARN_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 设备告警次数 Service 实现类
|
||||
*
|
||||
* @author 开发账号
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class DeviceWarnServiceImpl implements DeviceWarnService {
|
||||
|
||||
@Resource
|
||||
private DeviceWarnMapper deviceWarnMapper;
|
||||
@Resource
|
||||
private DeviceInfoApi deviceInfoApi;
|
||||
|
||||
|
||||
@Override
|
||||
public Long createDeviceWarn(DeviceWarnSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
DeviceWarnDO deviceWarn = BeanUtils.toBean(createReqVO, DeviceWarnDO.class);
|
||||
deviceWarnMapper.insert(deviceWarn);
|
||||
// 返回
|
||||
return deviceWarn.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceWarn(DeviceWarnSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateDeviceWarnExists(updateReqVO.getId());
|
||||
// 更新
|
||||
DeviceWarnDO updateObj = BeanUtils.toBean(updateReqVO, DeviceWarnDO.class);
|
||||
deviceWarnMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDeviceWarn(Long id) {
|
||||
// 校验存在
|
||||
validateDeviceWarnExists(id);
|
||||
// 删除
|
||||
deviceWarnMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateDeviceWarnExists(Long id) {
|
||||
if (deviceWarnMapper.selectById(id) == null) {
|
||||
throw exception(DEVICE_WARN_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceWarnDO getDeviceWarn(Long id) {
|
||||
return deviceWarnMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<DeviceWarnDO> getDeviceWarnPage(DeviceWarnPageReqVO pageReqVO) {
|
||||
return deviceWarnMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDeviceWarn(HttpServletRequest request) {
|
||||
String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
|
||||
String deviceIp = request.getHeader("Authorization");
|
||||
DeviceInfoDto device = deviceInfoApi.getDevice(deviceIp);
|
||||
QueryWrapper<DeviceWarnDO> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("date_format(create_time,'%Y-%m-%d')", format)
|
||||
.eq("device_sn", deviceIp)
|
||||
.last(MemberConstants.LIMIT_ONE);
|
||||
DeviceWarnDO old = deviceWarnMapper.selectOne(queryWrapper);
|
||||
if (ObjUtil.isNotEmpty(old)) {
|
||||
old.setWarnNum(old.getWarnNum() + 1);
|
||||
deviceWarnMapper.updateById(old);
|
||||
} else {
|
||||
DeviceWarnDO deviceWarnDO = new DeviceWarnDO();
|
||||
deviceWarnDO.setDeviceSn(deviceIp).setWarnNum(1).setStoreId(device.getCarteenId());
|
||||
deviceWarnMapper.insert(deviceWarnDO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getWarn(Long storeId) {
|
||||
String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
|
||||
QueryWrapper<DeviceWarnDO> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select("sum(warn_num) as warnNum")
|
||||
.eq("date_format(create_time,'%Y-%m-%d')", format)
|
||||
.eq(storeId!=null,"store_id", storeId);
|
||||
List<Map<String, Object>> maps = deviceWarnMapper.selectMaps(queryWrapper);
|
||||
if(CollectionUtil.isNotEmpty(maps) && maps.get(0)!=null){
|
||||
return Long.valueOf(maps.get(0).get("warnNum").toString());
|
||||
}
|
||||
return 0L;
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.service.diningplates;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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.admin.diningplates.vo.DiningPlatesStoreVo;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||
|
||||
@ -91,5 +91,5 @@ public interface DiningPlatesService {
|
||||
|
||||
AppUserInfoCardVO appCheckBind(String diningPlatesNum);
|
||||
|
||||
List<DiningPlatesStoreVo> getDiningPlatesNum(LocalDateTime localDateTime, Integer time);
|
||||
List<DiningPlatesStoreVO> getDiningPlatesNum(LocalDateTime localDateTime, Integer time);
|
||||
}
|
@ -7,7 +7,7 @@ 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.admin.diningplates.vo.DiningPlatesStoreVo;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.diningplates.vo.DiningPlatesStoreVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||
@ -17,6 +17,8 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
|
||||
import cn.iocoder.yudao.module.member.service.card.CardService;
|
||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
@ -29,7 +31,7 @@ import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
@ -56,6 +58,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
@Resource
|
||||
private WebSocketMessageSender webSocketMessageSender;
|
||||
@Resource
|
||||
private CarteenApi carteenApi;
|
||||
|
||||
@Override
|
||||
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
|
||||
@ -148,7 +152,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
MemberUserDO memberUserDO = memberUserMapper.selectOne(Wrappers.<MemberUserDO>lambdaQuery()
|
||||
.eq(MemberUserDO::getCardId, cardId)
|
||||
.last(MemberConstants.LIMIT_ONE));
|
||||
checkMemberUser(memberUserDO,false);
|
||||
checkMemberUser(memberUserDO, false);
|
||||
//余额验证
|
||||
BigDecimal money = cardService.getMoneyByUserId(memberUserDO.getId());
|
||||
checkMoney(money);
|
||||
@ -160,9 +164,11 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
|
||||
//创建初始订单
|
||||
DishOrderDO dishOrderDO = new DishOrderDO();
|
||||
dishOrderDO.setDiningPlatesNum(diningPlatesNum);
|
||||
dishOrderDO.setOrderStatus(DishOrderDO.INCOMPLETE);
|
||||
dishOrderDO.setUserId(memberUserDO.getId());
|
||||
dishOrderDO.setDiningPlatesNum(diningPlatesNum)
|
||||
.setOrderStatus(DishOrderDO.INCOMPLETE)
|
||||
.setUserId(memberUserDO.getId())
|
||||
.setStoreId(diningPlatesDO.getStoreId())
|
||||
.setStoreName(diningPlatesDO.getStoreName());
|
||||
dishOrderMapper.insert(dishOrderDO);
|
||||
|
||||
//设置总价
|
||||
@ -185,7 +191,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
MemberUserDO memberUserDO = memberUserMapper.selectOne(Wrappers.<MemberUserDO>lambdaQuery()
|
||||
.eq(MemberUserDO::getFaceId, faceId)
|
||||
.last(MemberConstants.LIMIT_ONE));
|
||||
checkMemberUser(memberUserDO,true);
|
||||
checkMemberUser(memberUserDO, true);
|
||||
//余额验证
|
||||
BigDecimal money = cardService.getMoneyByUserId(memberUserDO.getId());
|
||||
checkMoney(money);
|
||||
@ -211,6 +217,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
//afterBind(memberUserDO.getId());
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean checkBind(String diningPlatesNum) {
|
||||
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.<DiningPlatesDO>lambdaQuery()
|
||||
@ -221,6 +228,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppUserInfoCardVO appCheckBind(String diningPlatesNum) {
|
||||
DiningPlatesDO diningPlatesDO = diningPlatesMapper.selectOne(Wrappers.<DiningPlatesDO>lambdaQuery()
|
||||
@ -239,7 +247,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
|
||||
|
||||
public void checkDiningPlates(DiningPlatesDO diningPlatesDO) {
|
||||
if(diningPlatesDO == null) {
|
||||
if (diningPlatesDO == null) {
|
||||
throw exception(DINING_PLATES_NOT_EXISTS);
|
||||
}
|
||||
if (diningPlatesDO.getUserId() != null) {
|
||||
@ -247,11 +255,11 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
}
|
||||
}
|
||||
|
||||
public void checkMemberUser(MemberUserDO memberUserDo,Boolean isFace) {
|
||||
if(memberUserDo == null){
|
||||
if (isFace){
|
||||
public void checkMemberUser(MemberUserDO memberUserDo, Boolean isFace) {
|
||||
if (memberUserDo == null) {
|
||||
if (isFace) {
|
||||
throw exception(FACE_NOT_BIND_USER);
|
||||
}else {
|
||||
} else {
|
||||
throw exception(CARD_NOT_BIND_USER);
|
||||
}
|
||||
}
|
||||
@ -268,21 +276,33 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
|
||||
|
||||
@Override
|
||||
public List<DiningPlatesStoreVo> getDiningPlatesNum(LocalDateTime localDateTime, Integer time) {
|
||||
public List<DiningPlatesStoreVO> getDiningPlatesNum(LocalDateTime localDateTime, Integer time) {
|
||||
List<DiningPlatesStoreVO> result = new ArrayList<>();
|
||||
// 获取当前时间
|
||||
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT);
|
||||
LocalDateTime currentTime = localDateTime;
|
||||
LocalDateTime endTime = localDateTime;
|
||||
|
||||
// 计算指定分钟之前的时间
|
||||
String nowTime = currentTime.format(dateFormatter);
|
||||
List<DiningPlatesStoreVo> diningPlatesStoreVos = diningPlatesMapper.selectCountByStore(nowTime);
|
||||
return diningPlatesStoreVos;
|
||||
LocalDateTime startTime = endTime.minusMinutes(10);
|
||||
|
||||
List<DiningPlatesDO> diningPlatesDOS = diningPlatesMapper.selectList(Wrappers.<DiningPlatesDO>lambdaQuery()
|
||||
.le(DiningPlatesDO::getBindingTime, endTime)
|
||||
.gt(DiningPlatesDO::getBindingTime, startTime));
|
||||
List<CarteenRespDto> carteenList = carteenApi.getCarteenList();
|
||||
carteenList.forEach(dto->{
|
||||
DiningPlatesStoreVO diningPlatesStoreVO = new DiningPlatesStoreVO();
|
||||
diningPlatesStoreVO.setStoreId(dto.getId());
|
||||
diningPlatesStoreVO.setStoreName(dto.getStoresName());
|
||||
long count = diningPlatesDOS.stream().filter(diningPlatesDO -> dto.getId().equals(diningPlatesDO.getStoreId())).count();
|
||||
diningPlatesStoreVO.setNum(Integer.valueOf(String.valueOf(count)));
|
||||
result.add(diningPlatesStoreVO);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定之后的操作
|
||||
*/
|
||||
public void afterBind(Long userId){
|
||||
public void afterBind(Long userId) {
|
||||
//判断是否已记录
|
||||
LocalDate today = LocalDate.now();
|
||||
|
||||
@ -294,17 +314,17 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
|
||||
.eq(DishOrderDO::getUserId, userId)
|
||||
.between(DishOrderDO::getCreateTime, startOfDay, endOfDay));
|
||||
if(dishOrderDOS.size() > 0){
|
||||
if (dishOrderDOS.size() > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
String s = stringRedisTemplate.opsForValue().get(MemberConstants.CUSTOMER_PREFIX);
|
||||
if(StrUtil.isBlank(s)){
|
||||
if (StrUtil.isBlank(s)) {
|
||||
s = "1";
|
||||
}else {
|
||||
s = String.valueOf(Integer.valueOf(s)+1);
|
||||
} else {
|
||||
s = String.valueOf(Integer.valueOf(s) + 1);
|
||||
}
|
||||
stringRedisTemplate.opsForValue().set(MemberConstants.CUSTOMER_PREFIX,s);
|
||||
stringRedisTemplate.opsForValue().set(MemberConstants.CUSTOMER_PREFIX, s);
|
||||
//根据餐盘对应的门店ID发送给对应的用户
|
||||
webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), 1L, // 给指定用户
|
||||
"demo-message-receive", s);
|
||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.service.order;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.CarTeenInfoVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
|
||||
@ -10,6 +11,7 @@ import cn.iocoder.yudao.module.member.controller.app.order.vo.AppPageVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ -90,6 +92,13 @@ public interface OrderService {
|
||||
* 获取今日顾客总量
|
||||
* @return
|
||||
*/
|
||||
Integer selectTodayUser(Long storeId);
|
||||
Integer selectUser(Long storeId,String time);
|
||||
|
||||
/**
|
||||
* 获取销售额
|
||||
* @return
|
||||
*/
|
||||
BigDecimal getSaleMoney(Long storeId,String time);
|
||||
|
||||
List<CarTeenInfoVO> getCarTeenInfo();
|
||||
}
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.order.vo.OrderDetailsRespVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.CarTeenInfoVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
|
||||
@ -21,6 +22,10 @@ import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
|
||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
|
||||
import cn.iocoder.yudao.module.system.api.deviceInfo.DeviceInfoApi;
|
||||
import cn.iocoder.yudao.module.system.api.deviceInfo.dto.DeviceInfoDto;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -29,7 +34,6 @@ 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.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
@ -57,6 +61,10 @@ public class OrderServiceImpl implements OrderService {
|
||||
private OrderDetailService orderDetailService;
|
||||
@Resource
|
||||
private MemberUserMapper memberUserMapper;
|
||||
@Resource
|
||||
private DeviceInfoApi deviceInfoApi;
|
||||
@Resource
|
||||
private CarteenApi carteenApi;
|
||||
|
||||
@Value("${propose.morning}")
|
||||
private Double proposeMorning;
|
||||
@ -230,9 +238,43 @@ public class OrderServiceImpl implements OrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectTodayUser(Long storeId) {
|
||||
LocalDate today = LocalDate.now();
|
||||
String time = today.format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
|
||||
return dishOrderMapper.selectTodayUser(time,storeId);
|
||||
public Integer selectUser(Long storeId, String time) {
|
||||
return dishOrderMapper.selectUser(storeId,time);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getSaleMoney(Long storeId, String time) {
|
||||
return dishOrderMapper.getSaleMoney(storeId,time);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CarTeenInfoVO> getCarTeenInfo() {
|
||||
List<CarTeenInfoVO> result = new ArrayList<>();
|
||||
List<CarteenRespDto> carteenList = carteenApi.getCarteenList();
|
||||
List<DeviceInfoDto> device = deviceInfoApi.getDevice();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT);
|
||||
String today = LocalDateTime.now().format(formatter);
|
||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList();
|
||||
for (CarteenRespDto dto : carteenList){
|
||||
CarTeenInfoVO carTeenInfoVO = new CarTeenInfoVO();
|
||||
long deviceNum = device.stream().filter(vo -> vo.getCarteenId().equals(dto.getId())).count();
|
||||
carTeenInfoVO.setDeviceNum(String.valueOf(deviceNum));
|
||||
|
||||
List<DishOrderDO> carteenOrderList = dishOrderDOS.stream().filter(dishOrderDO -> dishOrderDO.getStoreId().equals(dto.getId())).collect(Collectors.toList());
|
||||
BigDecimal totalMoney = carteenOrderList.stream().map(DishOrderDO::getTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
carTeenInfoVO.setTodayMoney(totalMoney);
|
||||
|
||||
List<DishOrderDO> todayCarteenOrderList = carteenOrderList.stream().filter(vo -> today.equals(vo.getCreateTime().format(formatter))).collect(Collectors.toList());
|
||||
BigDecimal todayMoney = todayCarteenOrderList.stream().map(DishOrderDO::getTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
carTeenInfoVO.setTodayMoney(todayMoney);
|
||||
long peopleNUm = todayCarteenOrderList.stream().map(DishOrderDO::getUserId).distinct().count();
|
||||
carTeenInfoVO.setPeopleNUm(String.valueOf(peopleNUm));
|
||||
|
||||
carTeenInfoVO.setStoresName(dto.getStoresName());
|
||||
carTeenInfoVO.setStoreId(dto.getId());
|
||||
|
||||
result.add(carTeenInfoVO);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
@ -1,7 +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.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;
|
||||
@ -59,5 +59,5 @@ public interface OrderDetailService {
|
||||
|
||||
List<OrderDetailDO> selectListByOrderIds(List<Long> orderIds);
|
||||
|
||||
List<DishVo> selectDishSale(Long storeId);
|
||||
List<DishVO> selectDishSale(Long storeId);
|
||||
}
|
@ -3,7 +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.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;
|
||||
@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
||||
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
|
||||
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
|
||||
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
|
||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
||||
@ -93,12 +92,12 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||
// 插入数据
|
||||
OrderDetailDO orderDetail = BeanUtils.toBean(createReqVO, OrderDetailDO.class);
|
||||
|
||||
//判定门店资料是否录入
|
||||
if(dishOrderDO.getStoreId()==null){
|
||||
CarteenRespDto carteen = carteenApi.getCarteen(createReqVO.getDishesId());
|
||||
dishOrderDO.setStoreId(carteen.getId()).setStoreName(carteen.getStoresName());
|
||||
dishOrderMapper.updateById(dishOrderDO);
|
||||
}
|
||||
//判定门店资料是否录入 ->移动到绑盘的时候
|
||||
//if(dishOrderDO.getStoreId()==null){
|
||||
// CarteenRespDto carteen = carteenApi.getCarteen(createReqVO.getDishesId());
|
||||
// dishOrderDO.setStoreId(carteen.getId()).setStoreName(carteen.getStoresName());
|
||||
// dishOrderMapper.updateById(dishOrderDO);
|
||||
//}
|
||||
//计算新总价
|
||||
String old = stringRedisTemplate.opsForValue().get(createReqVO.getDiningPlatesNum());
|
||||
BigDecimal oldBigDecimal = new BigDecimal(old);
|
||||
@ -182,7 +181,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DishVo> selectDishSale(Long storeId) {
|
||||
public List<DishVO> selectDishSale(Long storeId) {
|
||||
LocalDate today = LocalDate.now();
|
||||
String time = today.format(DateTimeFormatter.ofPattern(MemberConstants.DATE_FORMAT));
|
||||
return orderDetailMapper.selectDishSale(time,storeId);
|
||||
|
@ -1,13 +1,13 @@
|
||||
package cn.iocoder.yudao.module.member.service.storeevaluate;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.StoreEvaluateVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluatePageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluateSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.storeevaluate.vo.AppStoreEvaluateSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeevaluate.StoreEvaluateDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 店铺评价 Service 接口
|
||||
@ -59,7 +59,7 @@ public interface StoreEvaluateService {
|
||||
|
||||
StoreEvaluateDO selectByUserId(Long storeId);
|
||||
|
||||
Map<String,String> getEvaluate(Long storeId);
|
||||
StoreEvaluateVO getEvaluate(Long storeId);
|
||||
|
||||
|
||||
|
||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.screen.vo.StoreEvaluateVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluatePageReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.storeevaluate.vo.StoreEvaluateSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.storeevaluate.vo.AppStoreEvaluateSaveReqVO;
|
||||
@ -17,8 +18,6 @@ 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;
|
||||
@ -108,23 +107,24 @@ public class StoreEvaluateServiceImpl implements StoreEvaluateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getEvaluate(Long storeId) {
|
||||
HashMap<String, String> result = new HashMap<>();
|
||||
public StoreEvaluateVO getEvaluate(Long storeId) {
|
||||
StoreEvaluateVO storeEvaluateVO = new StoreEvaluateVO();
|
||||
LambdaQueryWrapper<StoreEvaluateDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(storeId != null,StoreEvaluateDO::getStoreId,storeId);
|
||||
Long good = storeEvaluateMapper.selectCount(queryWrapper
|
||||
.gt(StoreEvaluateDO::getEvaluate, MemberConstants.GOOD_EVALUATE)
|
||||
);
|
||||
Long total = storeEvaluateMapper.selectCount(queryWrapper);
|
||||
storeEvaluateVO.setNum(total);
|
||||
if(total == 0){
|
||||
result.put("1","0.00%");
|
||||
result.put("0","0.00%");
|
||||
return result;
|
||||
storeEvaluateVO.setGood("0.00%");
|
||||
storeEvaluateVO.setBad("0.00%");
|
||||
}else{
|
||||
BigDecimal goodPercent = new BigDecimal(good).divide(new BigDecimal(total), 4, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal badPercent = BigDecimal.ONE.subtract(goodPercent);
|
||||
storeEvaluateVO.setGood(goodPercent.multiply(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_HALF_UP).toString()+"%");
|
||||
storeEvaluateVO.setBad(badPercent.multiply(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_HALF_UP).toString()+"%");
|
||||
}
|
||||
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")).setScale(2,BigDecimal.ROUND_HALF_UP).toString()+"%");
|
||||
result.put("0",badPercent.multiply(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_HALF_UP).toString()+"%");
|
||||
return result;
|
||||
return storeEvaluateVO;
|
||||
}
|
||||
}
|
@ -8,13 +8,29 @@
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
<select id="selectTodayUser" resultType="integer">
|
||||
<select id="selectUser" resultType="integer">
|
||||
select count(distinct user_id) from member_dish_order where
|
||||
date_format(create_time,'%Y-%m-%d') = #{time}
|
||||
<if test="storeId != null">
|
||||
and store_id = #{storeId}
|
||||
</if>
|
||||
<where>
|
||||
<if test="time != null and time !=''">
|
||||
date_format(create_time,'%Y-%m-%d') = #{time}
|
||||
</if>
|
||||
<if test="storeId != null">
|
||||
and store_id = #{storeId}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
</select>
|
||||
|
||||
<select id="getSaleMoney" resultType="java.math.BigDecimal">
|
||||
select sum(total_money) from member_dish_order
|
||||
<where>
|
||||
<if test="time != null and time !=''">
|
||||
date_format(create_time,'%Y-%m-%d') = #{time}
|
||||
</if>
|
||||
<if test="storeId != null">
|
||||
and store_id = #{storeId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -8,7 +8,7 @@
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
<select id="selectDishSale" resultType="cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVo">
|
||||
<select id="selectDishSale" resultType="cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO">
|
||||
select dishes_name, sum(a.weight) as weight , sum(a.price) as price
|
||||
from member_order_detail a
|
||||
where date_format(a.create_time,'%Y-%m-%d') = #{time}
|
||||
|
@ -17,4 +17,8 @@ public interface DeviceInfoApi {
|
||||
* @return
|
||||
*/
|
||||
String getDeviceInfoName(String deviceIp);
|
||||
|
||||
DeviceInfoDto getDevice(String deviceIp);
|
||||
|
||||
List<DeviceInfoDto> getDevice();
|
||||
}
|
||||
|
@ -38,4 +38,18 @@ public class DeviceInfoApiImpl implements DeviceInfoApi {
|
||||
.last(" limit 1"))
|
||||
.getDeviceName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeviceInfoDto getDevice(String deviceIp) {
|
||||
DeviceInfoDO deviceInfoDO = deviceInfoMapper.selectOne(new LambdaQueryWrapperX<DeviceInfoDO>()
|
||||
.eq(DeviceInfoDO::getDeviceIp, deviceIp)
|
||||
.last(" limit 1"));
|
||||
return BeanUtils.toBean(deviceInfoDO,DeviceInfoDto.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeviceInfoDto> getDevice() {
|
||||
List<DeviceInfoDO> deviceInfoDOS = deviceInfoMapper.selectList();
|
||||
return BeanUtils.toBean(deviceInfoDOS,DeviceInfoDto.class);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user