超市订单统计
This commit is contained in:
		@ -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.order.DishOrderDO;
 | 
			
		||||
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.card.CardMapper;
 | 
			
		||||
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.storebusiness.StoreBusinessMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
@ -38,6 +40,9 @@ public class BusinessNewJob implements JobHandler {
 | 
			
		||||
    @Resource
 | 
			
		||||
    private BusinessMapper businessMapper;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private StoreBusinessMapper storeBusinessMapper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 执行任务
 | 
			
		||||
     *
 | 
			
		||||
@ -53,6 +58,10 @@ public class BusinessNewJob implements JobHandler {
 | 
			
		||||
            BusinessDO businessDO = new BusinessDO();
 | 
			
		||||
            businessDO.setCarteenId(storeId);
 | 
			
		||||
            businessMapper.insert(businessDO);
 | 
			
		||||
 | 
			
		||||
            StoreBusinessDO storeBusinessDO = new StoreBusinessDO();
 | 
			
		||||
            storeBusinessDO.setCarteenId(storeId);
 | 
			
		||||
            storeBusinessMapper.insert(storeBusinessDO);
 | 
			
		||||
        }
 | 
			
		||||
        log.info("[execute][生成当天统计营业数据 {}条]", 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.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
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.StoreOrderPageVO;
 | 
			
		||||
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.service.amount.DeductionService;
 | 
			
		||||
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.user.MemberUserService;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi;
 | 
			
		||||
@ -71,6 +73,8 @@ public class StoreOrderServiceImpl implements StoreOrderService {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private CashregisterinfoApi cashregisterinfoApi;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private StoreBusinessService storeBusinessService;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
@ -188,13 +192,23 @@ public class StoreOrderServiceImpl implements StoreOrderService {
 | 
			
		||||
        }
 | 
			
		||||
        MemberUserDO user = userService.getUser(Long.valueOf(s));
 | 
			
		||||
        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 compute = compute(total, user.getId());
 | 
			
		||||
        if (compute.compareTo(BigDecimal.ZERO) < 0) {
 | 
			
		||||
            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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -247,6 +261,14 @@ public class StoreOrderServiceImpl implements StoreOrderService {
 | 
			
		||||
        storeOrderDO.setTotalPrice(total.subtract(money).doubleValue());
 | 
			
		||||
        storeOrderMapper.updateById(storeOrderDO);
 | 
			
		||||
        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() {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user