大屏接口

This commit is contained in:
zengtao01
2024-04-22 09:25:11 +08:00
parent 59463d439c
commit d56e53508f
32 changed files with 741 additions and 87 deletions

View File

@ -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, "餐盘不存在");

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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());
}
}

View File

@ -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;
}

View File

@ -11,7 +11,7 @@ import java.math.BigDecimal;
* @since 2024/4/16
*/
@Data
public class DishVo {
public class DishVO {
@Schema(description = "菜品")
private String dishesName;

View File

@ -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;
}

View File

@ -39,6 +39,12 @@ public class CustomerTrafficDO extends BaseDO {
* 门店id
*/
private Long storeId;
/**
* 门店名
*/
private String storeName;
/**
* 顾客数
*/

View File

@ -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;
}

View File

@ -54,6 +54,17 @@ public class DiningPlatesDO extends BaseDO {
* 状态:付费标志(0-无付费1-正在付费)
*/
private String payFlag;
/**
* 所属门店
*/
private Long storeId;
/**
* 所属门店
*/
private String storeName;
/**
* 绑定时间
*/

View File

@ -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));
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
});

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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>

View File

@ -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}