营业统计

This commit is contained in:
qjq
2024-04-03 16:44:11 +08:00
parent aaf11dff9f
commit 8bca6551e3
15 changed files with 1071 additions and 15 deletions

View File

@ -0,0 +1,96 @@
package cn.iocoder.yudao.module.member.controller.admin.business;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessRespVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
import cn.iocoder.yudao.module.member.service.business.BusinessService;
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.*;
import javax.servlet.http.*;
import java.time.LocalDateTime;
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.*;
@Tag(name = "管理后台 - 营业统计")
@RestController
@RequestMapping("/t/business")
@Validated
public class BusinessController {
@Resource
private BusinessService businessService;
// @PostMapping("/create")
// @Operation(summary = "创建营业统计")
// @PreAuthorize("@ss.hasPermission('t:business:create')")
// public CommonResult<Long> createBusiness(@Valid @RequestBody BusinessSaveReqVO createReqVO) {
// return success(businessService.createBusiness(createReqVO));
// }
// @PutMapping("/update")
// @Operation(summary = "更新营业统计")
// @PreAuthorize("@ss.hasPermission('t:business:update')")
// public CommonResult<Boolean> updateBusiness(@Valid @RequestBody BusinessSaveReqVO updateReqVO) {
// businessService.updateBusiness(updateReqVO);
// return success(true);
// }
// @DeleteMapping("/delete")
// @Operation(summary = "删除营业统计")
// @Parameter(name = "id", description = "编号", required = true)
// @PreAuthorize("@ss.hasPermission('t:business:delete')")
// public CommonResult<Boolean> deleteBusiness(@RequestParam("id") Long id) {
// businessService.deleteBusiness(id);
// return success(true);
// }
@GetMapping("/get")
@Operation(summary = "获得营业统计")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:business:query')")
public CommonResult<BusinessRespVO> getBusiness(@RequestParam("id") Long id) {
BusinessDO business = businessService.getBusiness(id);
return success(BeanUtils.toBean(business, BusinessRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得营业统计分页")
@PreAuthorize("@ss.hasPermission('t:business:query')")
public CommonResult<PageResult<BusinessRespVO>> getBusinessPage(@Valid BusinessPageReqVO pageReqVO) {
PageResult<BusinessDO> pageResult = businessService.getBusinessPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BusinessRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出营业统计 Excel")
@PreAuthorize("@ss.hasPermission('t:business:export')")
@OperateLog(type = EXPORT)
public void exportBusinessExcel(@Valid BusinessPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<BusinessDO> list = businessService.getBusinessPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "营业统计.xls", "数据", BusinessRespVO.class,
BeanUtils.toBean(list, BusinessRespVO.class));
}
}

View File

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.member.controller.admin.business.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 BusinessPageReqVO 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 rechargePurse;
@Schema(description = "补贴钱包")
private BigDecimal subsidyPurse;
@Schema(description = "VIP免单")
private Integer gratis;
@Schema(description = "早餐")
private BigDecimal breakfast;
@Schema(description = "午餐")
private BigDecimal lunch;
@Schema(description = "晚餐")
private BigDecimal dinner;
@Schema(description = "智能称重")
private BigDecimal weigh;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,69 @@
package cn.iocoder.yudao.module.member.controller.admin.business.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 BusinessRespVO {
@Schema(description = "营业统计编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15591")
@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 rechargePurse;
@Schema(description = "补贴钱包")
@ExcelProperty("补贴钱包")
private BigDecimal subsidyPurse;
@Schema(description = "VIP免单")
@ExcelProperty("VIP免单")
private Integer gratis;
@Schema(description = "早餐")
@ExcelProperty("早餐")
private BigDecimal breakfast;
@Schema(description = "午餐")
@ExcelProperty("午餐")
private BigDecimal lunch;
@Schema(description = "晚餐")
@ExcelProperty("晚餐")
private BigDecimal dinner;
@Schema(description = "智能称重")
@ExcelProperty("智能称重")
private BigDecimal weigh;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.member.controller.admin.business.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 BusinessSaveReqVO {
@Schema(description = "营业统计编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15591")
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 rechargePurse;
@Schema(description = "补贴钱包")
private BigDecimal subsidyPurse;
@Schema(description = "VIP免单")
private Integer gratis;
@Schema(description = "早餐")
private BigDecimal breakfast;
@Schema(description = "午餐")
private BigDecimal lunch;
@Schema(description = "晚餐")
private BigDecimal dinner;
@Schema(description = "智能称重")
private BigDecimal weigh;
}

View File

@ -115,14 +115,6 @@ public class MemberUserController {
convertSet(pageResult.getList(), MemberUserDO::getGroupId));
return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups));
}
@GetMapping("/heat")
@Operation(summary = "获得会员热量分析")
@PreAuthorize("@ss.hasPermission('member:user:query')")
public CommonResult<List<Map>> getUserHeat(@RequestParam(value = "userId",required = false) Long userId,
@RequestParam(value = "startDate",required = false) LocalDateTime startDate,
@RequestParam(value = "endDate",required = false) LocalDateTime endDate,
@RequestParam(value = "orderId",required = false)Long orderId){
return success(memberUserService.getUserHeat(userId,startDate,endDate,orderId));
}
}

View File

@ -17,16 +17,17 @@ import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@ -107,6 +108,14 @@ public class AppMemberUserController {
public CommonResult<Boolean> NutritionWeek(@Valid @RequestBody AppBindCardVO vo){
return success(userService.bindCard(vo.getCardId()));
}
@GetMapping("/heat")
@Operation(summary = "获得会员热量分析")
@PreAuthorize("@ss.hasPermission('member:user:query')")
public CommonResult<List<Map>> getUserHeat(@RequestParam(value = "userId",required = false) Long userId,
@RequestParam(value = "startDate",required = false) LocalDateTime startDate,
@RequestParam(value = "endDate",required = false) LocalDateTime endDate,
@RequestParam(value = "orderId",required = false)Long orderId){
return success(userService.getUserHeat(userId,startDate,endDate,orderId));
}
}

View File

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.member.dal.dataobject.business;
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("t_business")
@KeySequence("t_business_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusinessDO extends BaseDO {
/**
* 营业统计编号
*/
@TableId
private Long id;
/**
* 营业额
*/
private BigDecimal turnover;
/**
* 订单数
*/
private Integer orderSum;
/**
* 顾客数
*/
private Integer customerSum;
/**
* 均单价
*/
private BigDecimal priceAvg;
/**
* 充值钱包
*/
private BigDecimal rechargePurse;
/**
* 补贴钱包
*/
private BigDecimal subsidyPurse;
/**
* VIP免单
*/
private Integer gratis;
/**
* 早餐
*/
private BigDecimal breakfast;
/**
* 午餐
*/
private BigDecimal lunch;
/**
* 晚餐
*/
private BigDecimal dinner;
/**
* 智能称重
*/
private BigDecimal weigh;
/**
* 门店编号
*/
private Long carteenId;
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.member.dal.mysql.business;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 营业统计 Mapper
*
* @author 开发账号
*/
@Mapper
public interface BusinessMapper extends BaseMapperX<BusinessDO> {
default PageResult<BusinessDO> selectPage(BusinessPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BusinessDO>()
.eqIfPresent(BusinessDO::getTurnover, reqVO.getTurnover())
.eqIfPresent(BusinessDO::getOrderSum, reqVO.getOrderSum())
.eqIfPresent(BusinessDO::getCustomerSum, reqVO.getCustomerSum())
.eqIfPresent(BusinessDO::getPriceAvg, reqVO.getPriceAvg())
.eqIfPresent(BusinessDO::getRechargePurse, reqVO.getRechargePurse())
.eqIfPresent(BusinessDO::getSubsidyPurse, reqVO.getSubsidyPurse())
.eqIfPresent(BusinessDO::getGratis, reqVO.getGratis())
.eqIfPresent(BusinessDO::getBreakfast, reqVO.getBreakfast())
.eqIfPresent(BusinessDO::getLunch, reqVO.getLunch())
.eqIfPresent(BusinessDO::getDinner, reqVO.getDinner())
.eqIfPresent(BusinessDO::getWeigh, reqVO.getWeigh())
.betweenIfPresent(BusinessDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BusinessDO::getId));
}
}

View File

@ -0,0 +1,139 @@
package cn.iocoder.yudao.module.member.job;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
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.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.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author:qjq
* @Date:2024/4/3 14:50
*/
@Slf4j
@Component
public class BusinessBatchJob implements JobHandler {
@Resource
private BusinessMapper businessMapper;
@Resource
private DishOrderMapper dishOrderMapper;
@Resource
private OrderDetailMapper orderDetailMapper;
@Resource
private CardMapper cardMapper;
/**
* 执行任务
*
* @param param 参数
* @return 结果
* @throws Exception 异常
*/
@Override
@TenantIgnore
public String execute(String param) throws Exception {
LocalDateTime now = LocalDateTimeUtil.now();
//昨天时间
LocalDateTime offset = LocalDateTimeUtil.offset(now, -1, ChronoUnit.DAYS);
//获取昨天开始与结束
LocalDateTime startDate = LocalDateTimeUtil.beginOfDay(offset);
LocalDateTime endDate = LocalDateTimeUtil.endOfDay(offset);
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
.betweenIfPresent(DishOrderDO::getCreateTime, startDate, endDate)
.eq(DishOrderDO::getOrderStatus, DishOrderDO.COMPLETE));
//根据名店id进行分组
Map<Long, List<DishOrderDO>> collect = dishOrderDOS.stream().collect(Collectors.groupingBy(DishOrderDO::getStoreId));
List<BusinessDO> list=new ArrayList<>();
for (Map.Entry<Long, List<DishOrderDO>> map : collect.entrySet()) {
BusinessDO build = BusinessDO.builder().build();
List<DishOrderDO> value = map.getValue();
Long carteenId = map.getKey();
//获取营业额
double sum = value.stream().mapToDouble(d -> d.getTotalMoney().doubleValue()).sum();
build.setTurnover(BigDecimal.valueOf(sum));
//订单数
build.setOrderSum(value.size());
//顾客数 根据用户id进行去重统计
long count = value.stream().map(DishOrderDO::getUserId).distinct().count();
build.setCustomerSum((int) count);
//均单价 总价和/订单数
BigDecimal divide = value.stream()
.map(DishOrderDO::getTotalMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.divide(BigDecimal.valueOf(build.getOrderSum()), RoundingMode.CEILING);
build.setPriceAvg(divide);
//充值钱包
BigDecimal reduce = cardMapper.selectList(new LambdaQueryWrapperX<CardDO>()
.betweenIfPresent(CardDO::getCreateTime, startDate, endDate)
.inIfPresent(CardDO::getUserId, value
.stream()
.map(DishOrderDO::getUserId)
.collect(Collectors.toList()))
.eq(CardDO::getFlag, CardDO.ADD))
.stream()
.map(CardDO::getMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
build.setRechargePurse(reduce);
//早餐
value.forEach(x-> x.setPayMethods(TimePeriodEnum.getTimePeriod(x.getCreateTime())));
Map<String, List<DishOrderDO>> collect1 = value.stream().collect(Collectors.groupingBy(DishOrderDO::getPayMethods));
for (Map.Entry<String, List<DishOrderDO>> maps : collect1.entrySet()) {
List<DishOrderDO> value1 = maps.getValue();
String key = maps.getKey();
//早餐
if(key.equalsIgnoreCase(CostTypeEnum.MORNING.getCode())){
build.setBreakfast(value1
.stream()
.map(DishOrderDO::getTotalMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add));
}
//午餐
else if(key.equalsIgnoreCase(CostTypeEnum.NOON.getCode())){
build.setLunch(value1
.stream()
.map(DishOrderDO::getTotalMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add));
}else {
build.setDinner(value1
.stream()
.map(DishOrderDO::getTotalMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add));
}
}
//统计称重数据
List<Long> orderIds = value.stream().map(DishOrderDO::getId).collect(Collectors.toList());
BigDecimal decimal = orderDetailMapper.selectList(new LambdaQueryWrapperX<OrderDetailDO>()
.inIfPresent(OrderDetailDO::getOrderId, orderIds))
.stream()
.map(OrderDetailDO::getWeight)
.reduce(BigDecimal.ZERO, BigDecimal::add);
build.setWeigh(decimal);
//设置门店编号
build.setCarteenId(carteenId);
list.add(build);
}
Boolean b = businessMapper.insertBatch(list);
log.info("[execute][定时插入统计营业数据是否成功 {}]", b);
return String.format("定时插入统计营业数据是否成功 %s ", b);
}
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.member.service.business;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
import javax.validation.*;
/**
* 营业统计 Service 接口
*
* @author 开发账号
*/
public interface BusinessService {
/**
* 创建营业统计
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createBusiness(@Valid BusinessSaveReqVO createReqVO);
/**
* 更新营业统计
*
* @param updateReqVO 更新信息
*/
void updateBusiness(@Valid BusinessSaveReqVO updateReqVO);
/**
* 删除营业统计
*
* @param id 编号
*/
void deleteBusiness(Long id);
/**
* 获得营业统计
*
* @param id 编号
* @return 营业统计
*/
BusinessDO getBusiness(Long id);
/**
* 获得营业统计分页
*
* @param pageReqVO 分页查询
* @return 营业统计分页
*/
PageResult<BusinessDO> getBusinessPage(BusinessPageReqVO pageReqVO);
}

View File

@ -0,0 +1,81 @@
package cn.iocoder.yudao.module.member.service.business;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.BusinessSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.business.BusinessDO;
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.system.enums.ErrorCodeConstants;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 营业统计 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class BusinessServiceImpl implements BusinessService {
@Resource
private BusinessMapper businessMapper;
@Resource
private DishOrderMapper dishOrderMapper;
@Resource
private OrderDetailMapper orderDetailMapper;
@Resource
private CardMapper cardMapper;
@Override
public Long createBusiness(BusinessSaveReqVO createReqVO) {
// 插入
BusinessDO business = BeanUtils.toBean(createReqVO, BusinessDO.class);
businessMapper.insert(business);
// 返回
return business.getId();
}
@Override
public void updateBusiness(BusinessSaveReqVO updateReqVO) {
// 校验存在
validateBusinessExists(updateReqVO.getId());
// 更新
BusinessDO updateObj = BeanUtils.toBean(updateReqVO, BusinessDO.class);
businessMapper.updateById(updateObj);
}
@Override
public void deleteBusiness(Long id) {
// 校验存在
validateBusinessExists(id);
// 删除
businessMapper.deleteById(id);
}
private void validateBusinessExists(Long id) {
if (businessMapper.selectById(id) == null) {
throw exception(ErrorCodeConstants.BUSINESS_NOT_EXISTS);
}
}
@Override
public BusinessDO getBusiness(Long id) {
return businessMapper.selectById(id);
}
@Override
public PageResult<BusinessDO> getBusinessPage(BusinessPageReqVO pageReqVO) {
return businessMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,94 @@
package cn.iocoder.yudao.module.system.controller.app.dishes;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.dishes.vo.DishesPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishes.vo.DishesRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishes.vo.DishesSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishes.DishesDO;
import cn.iocoder.yudao.module.system.service.dishes.DishesService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 菜品管理")
@RestController
@RequestMapping("/app/t/dishes")
@Validated
public class DishesAppController {
@Resource
private DishesService dishesService;
@PostMapping("/create")
@Operation(summary = "创建菜品管理")
@PreAuthorize("@ss.hasPermission('t:dishes:create')")
public CommonResult<Long> createDishes(@Valid DishesSaveReqVO createReqVO) {
return success(dishesService.createDishes(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品管理")
@PreAuthorize("@ss.hasPermission('t:dishes:update')")
public CommonResult<Boolean> updateDishes(@Valid @RequestBody DishesSaveReqVO updateReqVO) {
dishesService.updateDishes(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品管理")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes:delete')")
public CommonResult<Boolean> deleteDishes(@RequestParam("id") Long id) {
dishesService.deleteDishes(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes:query')")
public CommonResult<DishesRespVO> getDishes(@RequestParam("id") Long id) {
DishesDO dishes = dishesService.getDishes(id);
return success(BeanUtils.toBean(dishes, DishesRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品管理分页")
@PreAuthorize("@ss.hasPermission('t:dishes:query')")
public CommonResult<PageResult<DishesRespVO>> getDishesPage(@Valid DishesPageReqVO pageReqVO) {
PageResult<DishesDO> pageResult = dishesService.getDishesPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品管理 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes:export')")
@OperateLog(type = EXPORT)
public void exportDishesExcel(@Valid DishesPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesDO> list = dishesService.getDishesPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品管理.xls", "数据", DishesRespVO.class,
BeanUtils.toBean(list, DishesRespVO.class));
}
}

View File

@ -0,0 +1,105 @@
package cn.iocoder.yudao.module.system.controller.app.dishesnutrition;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesnutrition.vo.DishesNutritionSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesnutrition.DishesNutritionDO;
import cn.iocoder.yudao.module.system.service.dishesnutrition.DishesNutritionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 菜品营养")
@RestController
@RequestMapping("/app/t/dishes-nutrition")
@Validated
public class DishesNutritionAppController {
@Resource
private DishesNutritionService dishesNutritionService;
@PostMapping("/create")
@Operation(summary = "创建菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:create')")
public CommonResult<Long> createDishesNutrition(@Valid @RequestBody DishesNutritionSaveReqVO createReqVO) {
return success(dishesNutritionService.createDishesNutrition(createReqVO));
}
@PostMapping("/createbtch")
@Operation(summary = "创建菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:create')")
public CommonResult<Long> createDishesNutrition(@Valid @RequestBody List<DishesNutritionSaveReqVO> createReqVO) {
return success(dishesNutritionService.createDishesNutritionList(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品营养")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:update')")
public CommonResult<Boolean> updateDishesNutrition(@Valid @RequestBody DishesNutritionSaveReqVO updateReqVO) {
dishesNutritionService.updateDishesNutrition(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品营养")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:delete')")
public CommonResult<Boolean> deleteDishesNutrition(@RequestParam("id") Long id) {
dishesNutritionService.deleteDishesNutrition(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品营养")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<DishesNutritionRespVO> getDishesNutrition(@RequestParam("id") Long id) {
DishesNutritionDO dishesNutrition = dishesNutritionService.getDishesNutrition(id);
return success(BeanUtils.toBean(dishesNutrition, DishesNutritionRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品营养分页")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<PageResult<DishesNutritionRespVO>> getDishesNutritionPage(@Valid DishesNutritionPageReqVO pageReqVO) {
PageResult<DishesNutritionDO> pageResult = dishesNutritionService.getDishesNutritionPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesNutritionRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得菜品营养集合")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:query')")
public CommonResult<List<DishesNutritionRespVO>> getDishesNutritionList(@Valid DishesNutritionPageReqVO pageReqVO) {
List<DishesNutritionDO> pageResult = dishesNutritionService.getDishesNutritionList(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesNutritionRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品营养 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes-nutrition:export')")
@OperateLog(type = EXPORT)
public void exportDishesNutritionExcel(@Valid DishesNutritionPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesNutritionDO> list = dishesNutritionService.getDishesNutritionPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品营养.xls", "数据", DishesNutritionRespVO.class,
BeanUtils.toBean(list, DishesNutritionRespVO.class));
}
}

View File

@ -0,0 +1,94 @@
package cn.iocoder.yudao.module.system.controller.app.dishesraw;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishesraw.vo.DishesRawSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishesraw.DishesRawDO;
import cn.iocoder.yudao.module.system.service.dishesraw.DishesRawService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 菜品原材料")
@RestController
@RequestMapping("/app/t/dishes-raw")
@Validated
public class DishesRawAppController {
@Resource
private DishesRawService dishesRawService;
@PostMapping("/create")
@Operation(summary = "创建菜品原材料")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:create')")
public CommonResult<Long> createDishesRaw(@Valid @RequestBody List<DishesRawSaveReqVO> createReqVO) {
return success(dishesRawService.createDishesRawList(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品原材料")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:update')")
public CommonResult<Boolean> updateDishesRaw(@Valid @RequestBody DishesRawSaveReqVO updateReqVO) {
dishesRawService.updateDishesRaw(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品原材料")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes-raw:delete')")
public CommonResult<Boolean> deleteDishesRaw(@RequestParam("id") Long id) {
dishesRawService.deleteDishesRaw(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品原材料")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:query')")
public CommonResult<DishesRawRespVO> getDishesRaw(@RequestParam("id") Long id) {
DishesRawDO dishesRaw = dishesRawService.getDishesRaw(id);
return success(BeanUtils.toBean(dishesRaw, DishesRawRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品原材料分页")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:query')")
public CommonResult<PageResult<DishesRawRespVO>> getDishesRawPage(@Valid DishesRawPageReqVO pageReqVO) {
PageResult<DishesRawDO> pageResult = dishesRawService.getDishesRawPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesRawRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品原材料 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes-raw:export')")
@OperateLog(type = EXPORT)
public void exportDishesRawExcel(@Valid DishesRawPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesRawDO> list = dishesRawService.getDishesRawPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品原材料.xls", "数据", DishesRawRespVO.class,
BeanUtils.toBean(list, DishesRawRespVO.class));
}
}

View File

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.system.controller.app.dishestype;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.dishestype.vo.DishesTypePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dishestype.vo.DishesTypeRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dishestype.vo.DishesTypeSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dishestype.DishesTypeDO;
import cn.iocoder.yudao.module.system.service.dishestype.DishesTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 菜品分类")
@RestController
@RequestMapping("/app/t/dishes-type")
@Validated
public class DishesTypeAppController {
@Resource
private DishesTypeService dishesTypeService;
@PostMapping("/create")
@Operation(summary = "创建菜品分类")
@PreAuthorize("@ss.hasPermission('t:dishes-type:create')")
public CommonResult<Long> createDishesType(@Valid @RequestBody DishesTypeSaveReqVO createReqVO) {
return success(dishesTypeService.createDishesType(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新菜品分类")
@PreAuthorize("@ss.hasPermission('t:dishes-type:update')")
public CommonResult<Boolean> updateDishesType(@Valid @RequestBody DishesTypeSaveReqVO updateReqVO) {
dishesTypeService.updateDishesType(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除菜品分类")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('t:dishes-type:delete')")
public CommonResult<Boolean> deleteDishesType(@RequestParam("id") Long id) {
dishesTypeService.deleteDishesType(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得菜品分类")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('t:dishes-type:query')")
public CommonResult<DishesTypeRespVO> getDishesType(@RequestParam("id") Long id) {
DishesTypeDO dishesType = dishesTypeService.getDishesType(id);
return success(BeanUtils.toBean(dishesType, DishesTypeRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得菜品分类分页")
@PreAuthorize("@ss.hasPermission('t:dishes-type:query')")
public CommonResult<PageResult<DishesTypeRespVO>> getDishesTypePage(@Valid DishesTypePageReqVO pageReqVO) {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
PageResult<DishesTypeDO> pageResult = dishesTypeService.getDishesTypePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DishesTypeRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出菜品分类 Excel")
@PreAuthorize("@ss.hasPermission('t:dishes-type:export')")
@OperateLog(type = EXPORT)
public void exportDishesTypeExcel(@Valid DishesTypePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishesTypeDO> list = dishesTypeService.getDishesTypePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "菜品分类.xls", "数据", DishesTypeRespVO.class,
BeanUtils.toBean(list, DishesTypeRespVO.class));
}
}