超市订单统计
This commit is contained in:
@ -120,5 +120,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode COMBO_NOT_EXISTS = new ErrorCode(1_004_015_001, "套餐不存在");
|
||||
//========== 用户余额明细 1-004-016-000 =============
|
||||
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.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