超市订单统计
This commit is contained in:
@ -120,5 +120,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在");
|
ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在");
|
||||||
//========== 用户余额明细 1-004-016-000 =============
|
//========== 用户余额明细 1-004-016-000 =============
|
||||||
ErrorCode ORDER_SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_016_001, "太空舱订单不存在");
|
ErrorCode ORDER_SPACE_CAPSULE_NOT_EXISTS = new ErrorCode(1_004_016_001, "太空舱订单不存在");
|
||||||
|
|
||||||
|
ErrorCode STORE_BUSINESS_NOT_EXISTS = new ErrorCode(1_004_017_001, "超市营业统计不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.controller.admin.storebusiness;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
|
import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 超市营业统计")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/member/store-business")
|
||||||
|
@Validated
|
||||||
|
public class StoreBusinessController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StoreBusinessService storeBusinessService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建超市营业统计")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:create')")
|
||||||
|
public CommonResult<Long> createStoreBusiness(@Valid @RequestBody StoreBusinessSaveReqVO createReqVO) {
|
||||||
|
return success(storeBusinessService.createStoreBusiness(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新超市营业统计")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:update')")
|
||||||
|
public CommonResult<Boolean> updateStoreBusiness(@Valid @RequestBody StoreBusinessSaveReqVO updateReqVO) {
|
||||||
|
storeBusinessService.updateStoreBusiness(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除超市营业统计")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:delete')")
|
||||||
|
public CommonResult<Boolean> deleteStoreBusiness(@RequestParam("id") Long id) {
|
||||||
|
storeBusinessService.deleteStoreBusiness(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得超市营业统计")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:query')")
|
||||||
|
public CommonResult<StoreBusinessRespVO> getStoreBusiness(@RequestParam("id") Long id) {
|
||||||
|
StoreBusinessDO storeBusiness = storeBusinessService.getStoreBusiness(id);
|
||||||
|
return success(BeanUtils.toBean(storeBusiness, StoreBusinessRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得超市营业统计分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:query')")
|
||||||
|
public CommonResult<PageResult<StoreBusinessRespVO>> getStoreBusinessPage(@Valid StoreBusinessPageReqVO pageReqVO) {
|
||||||
|
PageResult<StoreBusinessDO> pageResult = storeBusinessService.getStoreBusinessPage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, StoreBusinessRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出超市营业统计 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('member:store-business:export')")
|
||||||
|
@OperateLog(type = EXPORT)
|
||||||
|
public void exportStoreBusinessExcel(@Valid StoreBusinessPageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<StoreBusinessDO> list = storeBusinessService.getStoreBusinessPage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "超市营业统计.xls", "数据", StoreBusinessRespVO.class,
|
||||||
|
BeanUtils.toBean(list, StoreBusinessRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 超市营业统计分页 Request VO")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class StoreBusinessPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "营业额")
|
||||||
|
private BigDecimal turnover;
|
||||||
|
|
||||||
|
@Schema(description = "订单数")
|
||||||
|
private Integer orderSum;
|
||||||
|
|
||||||
|
@Schema(description = "顾客数")
|
||||||
|
private Integer customerSum;
|
||||||
|
|
||||||
|
@Schema(description = "均单价")
|
||||||
|
private BigDecimal priceAvg;
|
||||||
|
|
||||||
|
@Schema(description = "减免金额")
|
||||||
|
private BigDecimal reduce;
|
||||||
|
|
||||||
|
@Schema(description = "补贴钱包")
|
||||||
|
private BigDecimal subsidyPurse;
|
||||||
|
|
||||||
|
@Schema(description = "VIP免单")
|
||||||
|
private Integer gratis;
|
||||||
|
|
||||||
|
@Schema(description = "早餐")
|
||||||
|
private BigDecimal breakfast;
|
||||||
|
|
||||||
|
@Schema(description = "早餐订单")
|
||||||
|
private Integer breakfastNum;
|
||||||
|
|
||||||
|
@Schema(description = "午餐")
|
||||||
|
private BigDecimal lunch;
|
||||||
|
|
||||||
|
@Schema(description = "午餐订单")
|
||||||
|
private Integer lunchNum;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐")
|
||||||
|
private BigDecimal dinner;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐订单")
|
||||||
|
private Integer dinnerNum;
|
||||||
|
|
||||||
|
@Schema(description = "智能称重")
|
||||||
|
private BigDecimal weigh;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
@Schema(description = "门店编号", example = "5950")
|
||||||
|
private Long carteenId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.excel.annotation.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 超市营业统计 Response VO")
|
||||||
|
@Data
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class StoreBusinessRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "营业统计编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27161")
|
||||||
|
@ExcelProperty("营业统计编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "营业额")
|
||||||
|
@ExcelProperty("营业额")
|
||||||
|
private BigDecimal turnover;
|
||||||
|
|
||||||
|
@Schema(description = "订单数")
|
||||||
|
@ExcelProperty("订单数")
|
||||||
|
private Integer orderSum;
|
||||||
|
|
||||||
|
@Schema(description = "顾客数")
|
||||||
|
@ExcelProperty("顾客数")
|
||||||
|
private Integer customerSum;
|
||||||
|
|
||||||
|
@Schema(description = "均单价")
|
||||||
|
@ExcelProperty("均单价")
|
||||||
|
private BigDecimal priceAvg;
|
||||||
|
|
||||||
|
@Schema(description = "减免金额")
|
||||||
|
@ExcelProperty("减免金额")
|
||||||
|
private BigDecimal reduce;
|
||||||
|
|
||||||
|
@Schema(description = "补贴钱包")
|
||||||
|
@ExcelProperty("补贴钱包")
|
||||||
|
private BigDecimal subsidyPurse;
|
||||||
|
|
||||||
|
@Schema(description = "VIP免单")
|
||||||
|
@ExcelProperty("VIP免单")
|
||||||
|
private Integer gratis;
|
||||||
|
|
||||||
|
@Schema(description = "早餐")
|
||||||
|
@ExcelProperty("早餐")
|
||||||
|
private BigDecimal breakfast;
|
||||||
|
|
||||||
|
@Schema(description = "早餐订单")
|
||||||
|
@ExcelProperty("早餐订单")
|
||||||
|
private Integer breakfastNum;
|
||||||
|
|
||||||
|
@Schema(description = "午餐")
|
||||||
|
@ExcelProperty("午餐")
|
||||||
|
private BigDecimal lunch;
|
||||||
|
|
||||||
|
@Schema(description = "午餐订单")
|
||||||
|
@ExcelProperty("午餐订单")
|
||||||
|
private Integer lunchNum;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐")
|
||||||
|
@ExcelProperty("晚餐")
|
||||||
|
private BigDecimal dinner;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐订单")
|
||||||
|
@ExcelProperty("晚餐订单")
|
||||||
|
private Integer dinnerNum;
|
||||||
|
|
||||||
|
@Schema(description = "智能称重")
|
||||||
|
@ExcelProperty("智能称重")
|
||||||
|
private BigDecimal weigh;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@Schema(description = "门店编号", example = "5950")
|
||||||
|
@ExcelProperty("门店编号")
|
||||||
|
private Long carteenId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 超市营业统计新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class StoreBusinessSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "营业统计编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27161")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "营业额")
|
||||||
|
private BigDecimal turnover;
|
||||||
|
|
||||||
|
@Schema(description = "订单数")
|
||||||
|
private Integer orderSum;
|
||||||
|
|
||||||
|
@Schema(description = "顾客数")
|
||||||
|
private Integer customerSum;
|
||||||
|
|
||||||
|
@Schema(description = "均单价")
|
||||||
|
private BigDecimal priceAvg;
|
||||||
|
|
||||||
|
@Schema(description = "减免金额")
|
||||||
|
private BigDecimal reduce;
|
||||||
|
|
||||||
|
@Schema(description = "补贴钱包")
|
||||||
|
private BigDecimal subsidyPurse;
|
||||||
|
|
||||||
|
@Schema(description = "VIP免单")
|
||||||
|
private Integer gratis;
|
||||||
|
|
||||||
|
@Schema(description = "早餐")
|
||||||
|
private BigDecimal breakfast;
|
||||||
|
|
||||||
|
@Schema(description = "早餐订单")
|
||||||
|
private Integer breakfastNum;
|
||||||
|
|
||||||
|
@Schema(description = "午餐")
|
||||||
|
private BigDecimal lunch;
|
||||||
|
|
||||||
|
@Schema(description = "午餐订单")
|
||||||
|
private Integer lunchNum;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐")
|
||||||
|
private BigDecimal dinner;
|
||||||
|
|
||||||
|
@Schema(description = "晚餐订单")
|
||||||
|
private Integer dinnerNum;
|
||||||
|
|
||||||
|
@Schema(description = "智能称重")
|
||||||
|
private BigDecimal weigh;
|
||||||
|
|
||||||
|
@Schema(description = "门店编号", example = "5950")
|
||||||
|
private Long carteenId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.dal.dataobject.storebusiness;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超市营业统计 DO
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@TableName("member_store_business")
|
||||||
|
@KeySequence("member_store_business_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class StoreBusinessDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 营业统计编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 营业额
|
||||||
|
*/
|
||||||
|
private BigDecimal turnover;
|
||||||
|
/**
|
||||||
|
* 订单数
|
||||||
|
*/
|
||||||
|
private Integer orderSum;
|
||||||
|
/**
|
||||||
|
* 顾客数
|
||||||
|
*/
|
||||||
|
private Integer customerSum;
|
||||||
|
/**
|
||||||
|
* 均单价
|
||||||
|
*/
|
||||||
|
private BigDecimal priceAvg;
|
||||||
|
/**
|
||||||
|
* 减免金额
|
||||||
|
*/
|
||||||
|
private BigDecimal reduce;
|
||||||
|
/**
|
||||||
|
* 补贴钱包
|
||||||
|
*/
|
||||||
|
private BigDecimal subsidyPurse;
|
||||||
|
/**
|
||||||
|
* VIP免单
|
||||||
|
*/
|
||||||
|
private Integer gratis;
|
||||||
|
/**
|
||||||
|
* 早餐
|
||||||
|
*/
|
||||||
|
private BigDecimal breakfast;
|
||||||
|
/**
|
||||||
|
* 早餐订单
|
||||||
|
*/
|
||||||
|
private Integer breakfastNum;
|
||||||
|
/**
|
||||||
|
* 午餐
|
||||||
|
*/
|
||||||
|
private BigDecimal lunch;
|
||||||
|
/**
|
||||||
|
* 午餐订单
|
||||||
|
*/
|
||||||
|
private Integer lunchNum;
|
||||||
|
/**
|
||||||
|
* 晚餐
|
||||||
|
*/
|
||||||
|
private BigDecimal dinner;
|
||||||
|
/**
|
||||||
|
* 晚餐订单
|
||||||
|
*/
|
||||||
|
private Integer dinnerNum;
|
||||||
|
/**
|
||||||
|
* 智能称重
|
||||||
|
*/
|
||||||
|
private BigDecimal weigh;
|
||||||
|
/**
|
||||||
|
* 门店编号
|
||||||
|
*/
|
||||||
|
private Long carteenId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.dal.mysql.storebusiness;
|
||||||
|
|
||||||
|
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.storebusiness.StoreBusinessDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超市营业统计 Mapper
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface StoreBusinessMapper extends BaseMapperX<StoreBusinessDO> {
|
||||||
|
|
||||||
|
default PageResult<StoreBusinessDO> selectPage(StoreBusinessPageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<StoreBusinessDO>()
|
||||||
|
.eqIfPresent(StoreBusinessDO::getTurnover, reqVO.getTurnover())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getOrderSum, reqVO.getOrderSum())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getCustomerSum, reqVO.getCustomerSum())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getPriceAvg, reqVO.getPriceAvg())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getReduce, reqVO.getReduce())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getSubsidyPurse, reqVO.getSubsidyPurse())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getGratis, reqVO.getGratis())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getBreakfast, reqVO.getBreakfast())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getBreakfastNum, reqVO.getBreakfastNum())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getLunch, reqVO.getLunch())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getLunchNum, reqVO.getLunchNum())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getDinner, reqVO.getDinner())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getDinnerNum, reqVO.getDinnerNum())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getWeigh, reqVO.getWeigh())
|
||||||
|
.betweenIfPresent(StoreBusinessDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.eqIfPresent(StoreBusinessDO::getCarteenId, reqVO.getCarteenId())
|
||||||
|
.orderByDesc(StoreBusinessDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,10 +8,12 @@ import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
|
|||||||
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.business.BusinessMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.business.BusinessMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -38,6 +40,9 @@ public class BusinessNewJob implements JobHandler {
|
|||||||
@Resource
|
@Resource
|
||||||
private BusinessMapper businessMapper;
|
private BusinessMapper businessMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StoreBusinessMapper storeBusinessMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行任务
|
* 执行任务
|
||||||
*
|
*
|
||||||
@ -53,6 +58,10 @@ public class BusinessNewJob implements JobHandler {
|
|||||||
BusinessDO businessDO = new BusinessDO();
|
BusinessDO businessDO = new BusinessDO();
|
||||||
businessDO.setCarteenId(storeId);
|
businessDO.setCarteenId(storeId);
|
||||||
businessMapper.insert(businessDO);
|
businessMapper.insert(businessDO);
|
||||||
|
|
||||||
|
StoreBusinessDO storeBusinessDO = new StoreBusinessDO();
|
||||||
|
storeBusinessDO.setCarteenId(storeId);
|
||||||
|
storeBusinessMapper.insert(storeBusinessDO);
|
||||||
}
|
}
|
||||||
log.info("[execute][生成当天统计营业数据 {}条]", allStoreId.size());
|
log.info("[execute][生成当天统计营业数据 {}条]", allStoreId.size());
|
||||||
return String.format("生成当天统计营业数据 %s 条 ", allStoreId.size());
|
return String.format("生成当天统计营业数据 %s 条 ", allStoreId.size());
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.service.storebusiness;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超市营业统计 Service 接口
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
public interface StoreBusinessService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建超市营业统计
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createStoreBusiness(@Valid StoreBusinessSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新超市营业统计
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateStoreBusiness(@Valid StoreBusinessSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除超市营业统计
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteStoreBusiness(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得超市营业统计
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 超市营业统计
|
||||||
|
*/
|
||||||
|
StoreBusinessDO getStoreBusiness(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得超市营业统计分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 超市营业统计分页
|
||||||
|
*/
|
||||||
|
PageResult<StoreBusinessDO> getStoreBusinessPage(StoreBusinessPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
|
||||||
|
void updateStatistics(StatisticsVo vo);
|
||||||
|
}
|
@ -0,0 +1,154 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.service.storebusiness;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
||||||
|
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.*;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.storebusiness.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.storebusiness.StoreBusinessDO;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.dal.mysql.storebusiness.StoreBusinessMapper;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||||
|
import static cn.iocoder.yudao.module.member.service.amount.LockManager.getStoreLock;
|
||||||
|
import static cn.iocoder.yudao.module.member.service.amount.LockManager.getSupermarketLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超市营业统计 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 管理员
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class StoreBusinessServiceImpl implements StoreBusinessService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StoreBusinessMapper storeBusinessMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createStoreBusiness(StoreBusinessSaveReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
StoreBusinessDO storeBusiness = BeanUtils.toBean(createReqVO, StoreBusinessDO.class);
|
||||||
|
storeBusinessMapper.insert(storeBusiness);
|
||||||
|
// 返回
|
||||||
|
return storeBusiness.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateStoreBusiness(StoreBusinessSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateStoreBusinessExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
StoreBusinessDO updateObj = BeanUtils.toBean(updateReqVO, StoreBusinessDO.class);
|
||||||
|
storeBusinessMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteStoreBusiness(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateStoreBusinessExists(id);
|
||||||
|
// 删除
|
||||||
|
storeBusinessMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateStoreBusinessExists(Long id) {
|
||||||
|
if (storeBusinessMapper.selectById(id) == null) {
|
||||||
|
throw exception(STORE_BUSINESS_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoreBusinessDO getStoreBusiness(Long id) {
|
||||||
|
return storeBusinessMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<StoreBusinessDO> getStoreBusinessPage(StoreBusinessPageReqVO pageReqVO) {
|
||||||
|
return storeBusinessMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateStatistics(StatisticsVo vo) {
|
||||||
|
synchronized(getSupermarketLock(vo.getCarteenId())){
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
if(vo.getTime()!=null){
|
||||||
|
now = vo.getTime().toLocalDate();
|
||||||
|
}
|
||||||
|
// 获取今天的开始时间
|
||||||
|
LocalDateTime startOfDay =now.atStartOfDay();
|
||||||
|
// 获取今天的结束时间 (23:59:59.999)
|
||||||
|
LocalDateTime endOfDay = LocalDateTime.of(now, LocalTime.MAX);
|
||||||
|
|
||||||
|
List<StoreBusinessDO> storeBusinessDOS = storeBusinessMapper.selectList(Wrappers.<StoreBusinessDO>lambdaQuery()
|
||||||
|
.between(StoreBusinessDO::getCreateTime, startOfDay, endOfDay)
|
||||||
|
.eq(StoreBusinessDO::getCarteenId, vo.getCarteenId()));
|
||||||
|
if (CollectionUtil.isNotEmpty(storeBusinessDOS)) {
|
||||||
|
StoreBusinessDO storeBusinessDO = storeBusinessDOS.get(0);
|
||||||
|
|
||||||
|
//重量
|
||||||
|
// if(ObjectUtil.isNotEmpty(vo.getOrderId())){
|
||||||
|
// List<OrderDetailDO> orderDetailDOS = orderDetailMapper.selectList(Wrappers.<OrderDetailDO>lambdaQuery().eq(OrderDetailDO::getOrderId, vo.getOrderId()));
|
||||||
|
// if (CollectionUtil.isNotEmpty(orderDetailDOS)) {
|
||||||
|
// BigDecimal reduce = orderDetailDOS.stream().map(OrderDetailDO::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
// businessDO.setWeigh(businessDO.getWeigh().add(reduce));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//订单数
|
||||||
|
storeBusinessDO.setOrderSum(storeBusinessDO.getOrderSum() + vo.getOrderSum());
|
||||||
|
|
||||||
|
//营业额
|
||||||
|
if(ObjectUtil.isNotEmpty(vo.getTotalMoney())){
|
||||||
|
storeBusinessDO.setTurnover(storeBusinessDO.getTurnover().add(vo.getTotalMoney()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//客单价
|
||||||
|
if(storeBusinessDO.getOrderSum() != 0){
|
||||||
|
storeBusinessDO.setPriceAvg(storeBusinessDO.getTurnover().divide(new BigDecimal(storeBusinessDO.getOrderSum()), 2, RoundingMode.HALF_UP));
|
||||||
|
}
|
||||||
|
|
||||||
|
//减免金额
|
||||||
|
if(ObjectUtil.isNotEmpty(vo.getReduceMoney())){
|
||||||
|
storeBusinessDO.setReduce(storeBusinessDO.getReduce().add(vo.getReduceMoney()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//早中晚金额
|
||||||
|
if(ObjectUtil.isNotEmpty(vo.getTime())){
|
||||||
|
String timePeriod = TimePeriodEnum.getTimePeriod(vo.getTime());
|
||||||
|
|
||||||
|
if(timePeriod.equals(CostTypeEnum.MORNING.getCode())){
|
||||||
|
storeBusinessDO.setBreakfast(storeBusinessDO.getBreakfast().add(vo.getTotalMoney()));
|
||||||
|
storeBusinessDO.setBreakfastNum(storeBusinessDO.getBreakfastNum() + vo.getOrderSum());
|
||||||
|
}else if (timePeriod.equals(CostTypeEnum.NOON.getCode())){
|
||||||
|
storeBusinessDO.setLunch(storeBusinessDO.getLunch().add(vo.getTotalMoney()));
|
||||||
|
storeBusinessDO.setLunchNum(storeBusinessDO.getLunchNum() + vo.getOrderSum());
|
||||||
|
}else if (timePeriod.equals(CostTypeEnum.NIGHT.getCode())){
|
||||||
|
storeBusinessDO.setDinner(storeBusinessDO.getDinner().add(vo.getTotalMoney()));
|
||||||
|
storeBusinessDO.setDinnerNum(storeBusinessDO.getDinnerNum() + vo.getOrderSum());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
storeBusinessMapper.updateById(storeBusinessDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageVO;
|
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderPageVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderSaveReqVO;
|
||||||
@ -23,6 +24,7 @@ import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
|
|||||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
|
||||||
import cn.iocoder.yudao.module.member.service.amount.DeductionService;
|
import cn.iocoder.yudao.module.member.service.amount.DeductionService;
|
||||||
import cn.iocoder.yudao.module.member.service.card.CardService;
|
import cn.iocoder.yudao.module.member.service.card.CardService;
|
||||||
|
import cn.iocoder.yudao.module.member.service.storebusiness.StoreBusinessService;
|
||||||
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||||
import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi;
|
import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi;
|
||||||
@ -71,6 +73,8 @@ public class StoreOrderServiceImpl implements StoreOrderService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CashregisterinfoApi cashregisterinfoApi;
|
private CashregisterinfoApi cashregisterinfoApi;
|
||||||
|
@Resource
|
||||||
|
private StoreBusinessService storeBusinessService;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@ -188,13 +192,23 @@ public class StoreOrderServiceImpl implements StoreOrderService {
|
|||||||
}
|
}
|
||||||
MemberUserDO user = userService.getUser(Long.valueOf(s));
|
MemberUserDO user = userService.getUser(Long.valueOf(s));
|
||||||
dto.setUserId(user.getId());
|
dto.setUserId(user.getId());
|
||||||
Double totalPrice = createOrder(dto).getTotalPrice();
|
StoreOrderDO order = createOrder(dto);
|
||||||
|
Double totalPrice = order.getTotalPrice();
|
||||||
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
|
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
BigDecimal compute = compute(total, user.getId());
|
BigDecimal compute = compute(total, user.getId());
|
||||||
if (compute.compareTo(BigDecimal.ZERO) < 0) {
|
if (compute.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
return "金额不足";
|
return "金额不足";
|
||||||
}
|
}
|
||||||
|
//营业数据
|
||||||
|
StatisticsVo statisticsVo = new StatisticsVo();
|
||||||
|
statisticsVo.setCarteenId(order.getCarteenId());
|
||||||
|
statisticsVo.setTotalMoney(total);
|
||||||
|
statisticsVo.setOrderSum(1);
|
||||||
|
statisticsVo.setTime(order.getCreateTime());
|
||||||
|
statisticsVo.setOrderId(order.getOrderId().longValue());
|
||||||
|
storeBusinessService.updateStatistics(statisticsVo);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,6 +261,14 @@ public class StoreOrderServiceImpl implements StoreOrderService {
|
|||||||
storeOrderDO.setTotalPrice(total.subtract(money).doubleValue());
|
storeOrderDO.setTotalPrice(total.subtract(money).doubleValue());
|
||||||
storeOrderMapper.updateById(storeOrderDO);
|
storeOrderMapper.updateById(storeOrderDO);
|
||||||
deductionService.reduction(storeOrderDO.getUserId(), money, BigDecimal.ZERO,money, BigDecimal.ZERO);
|
deductionService.reduction(storeOrderDO.getUserId(), money, BigDecimal.ZERO,money, BigDecimal.ZERO);
|
||||||
|
//营业数据
|
||||||
|
StatisticsVo statisticsVo = new StatisticsVo();
|
||||||
|
statisticsVo.setCarteenId(storeOrderDO.getCarteenId());
|
||||||
|
statisticsVo.setTotalMoney(money.negate());
|
||||||
|
statisticsVo.setOrderSum(0);
|
||||||
|
statisticsVo.setReduceMoney(money);
|
||||||
|
statisticsVo.setTime(storeOrderDO.getCreateTime());
|
||||||
|
storeBusinessService.updateStatistics(statisticsVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test() {
|
public void test() {
|
||||||
|
Reference in New Issue
Block a user