This commit is contained in:
zt
2025-06-14 23:24:31 +08:00
parent 8646e62504
commit 5dbe070640
42 changed files with 1128 additions and 65 deletions

View File

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* 活动付款 DO
@ -47,4 +48,8 @@ public class ActivityPayDTO {
private String transactionId;
private String openid;
private List<MenuDTO> menu;
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.member.api.activitypay.dto;
public class MenuDTO {
private String serialNumbers;
private Long menuId;
private String menuName;
public String getSerialNumbers() {
return serialNumbers;
}
public void setSerialNumbers(String serialNumbers) {
this.serialNumbers = serialNumbers;
}
public Long getMenuId() {
return menuId;
}
public void setMenuId(Long menuId) {
this.menuId = menuId;
}
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
}

View File

@ -214,6 +214,8 @@ public interface ErrorCodeConstants {
ErrorCode ACTIVITY_MERCHANT_NOT_EXISTS = new ErrorCode(1_005_000_22, "活动商家不存在");
ErrorCode ACTIVITY_VOUCHER_NOT_EXISTS = new ErrorCode(1_005_000_23, "活动代金券不存在");
ErrorCode ACTIVITY_VOUCHER_USER_NOT_EXISTS = new ErrorCode(1_005_000_24, "活动用户拥有代金券不存在");
ErrorCode ACTIVITY_MENU_NOT_EXISTS = new ErrorCode(1_005_000_25, "活动套餐不存在");
}

View File

@ -23,6 +23,7 @@ public class ActivityApiImpl implements ActivityApi {
@Override
public void createActivityPay(ActivityPayDTO createReqVO) {
ActivityPaySaveReqVO bean = BeanUtil.toBean(createReqVO, ActivityPaySaveReqVO.class);
bean.setMenu(createReqVO.getMenu());
activityPayService.addActivityPay(bean);
}
}

View File

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.member.controller.admin.activitymenu;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuRespVO;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymenu.ActivityMenuDO;
import cn.iocoder.yudao.module.member.service.activitymenu.ActivityMenuService;
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("/member/activity-menu")
@Validated
public class ActivityMenuController {
@Resource
private ActivityMenuService activityMenuService;
@PostMapping("/create")
@Operation(summary = "创建活动套餐")
@PreAuthorize("@ss.hasPermission('member:activity-menu:create')")
public CommonResult<Long> createActivityMenu(@Valid @RequestBody ActivityMenuSaveReqVO createReqVO) {
return success(activityMenuService.createActivityMenu(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新活动套餐")
@PreAuthorize("@ss.hasPermission('member:activity-menu:update')")
public CommonResult<Boolean> updateActivityMenu(@Valid @RequestBody ActivityMenuSaveReqVO updateReqVO) {
activityMenuService.updateActivityMenu(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除活动套餐")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('member:activity-menu:delete')")
public CommonResult<Boolean> deleteActivityMenu(@RequestParam("id") Long id) {
activityMenuService.deleteActivityMenu(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得活动套餐")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('member:activity-menu:query')")
public CommonResult<ActivityMenuRespVO> getActivityMenu(@RequestParam("id") Long id) {
ActivityMenuDO activityMenu = activityMenuService.getActivityMenu(id);
return success(BeanUtils.toBean(activityMenu, ActivityMenuRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得活动套餐分页")
@PreAuthorize("@ss.hasPermission('member:activity-menu:query')")
public CommonResult<PageResult<ActivityMenuRespVO>> getActivityMenuPage(@Valid ActivityMenuPageReqVO pageReqVO) {
PageResult<ActivityMenuDO> pageResult = activityMenuService.getActivityMenuPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ActivityMenuRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出活动套餐 Excel")
@PreAuthorize("@ss.hasPermission('member:activity-menu:export')")
@OperateLog(type = EXPORT)
public void exportActivityMenuExcel(@Valid ActivityMenuPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ActivityMenuDO> list = activityMenuService.getActivityMenuPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "活动套餐.xls", "数据", ActivityMenuRespVO.class,
BeanUtils.toBean(list, ActivityMenuRespVO.class));
}
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.member.controller.admin.activitymenu.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 ActivityMenuPageReqVO extends PageParam {
@Schema(description = "套餐名字", example = "芋艿")
private String menuName;
@Schema(description = "套餐详情")
private String detail;
@Schema(description = "套餐价格", example = "895")
private BigDecimal dishPrice;
@Schema(description = "商店ID", example = "15270")
private Long merchantId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.member.controller.admin.activitymenu.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 ActivityMenuRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7158")
@ExcelProperty("编号")
private Long id;
@Schema(description = "套餐名字", example = "芋艿")
@ExcelProperty("套餐名字")
private String menuName;
@Schema(description = "套餐详情")
@ExcelProperty("套餐详情")
private String detail;
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "895")
@ExcelProperty("套餐价格")
private BigDecimal dishPrice;
@Schema(description = "商店ID", example = "15270")
@ExcelProperty("商店ID")
private Long merchantId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 活动套餐新增/修改 Request VO")
@Data
public class ActivityMenuSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7158")
private Long id;
@Schema(description = "套餐名字", example = "芋艿")
private String menuName;
@Schema(description = "套餐详情")
private String detail;
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "895")
@NotNull(message = "套餐价格不能为空")
private BigDecimal dishPrice;
@Schema(description = "商店ID", example = "15270")
private Long merchantId;
}

View File

@ -1,10 +1,12 @@
package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
import cn.iocoder.yudao.module.member.api.activitypay.dto.MenuDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Schema(description = "管理后台 - 活动付款新增/修改 Request VO")
@Data
@ -40,4 +42,6 @@ public class ActivityPaySaveReqVO {
private String transactionId;
private String openid;
private List<MenuDTO> menu;
}

View File

@ -6,9 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTablePageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableRespVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymerchant.ActivityMerchantDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
@ -52,6 +50,13 @@ public class ActivityTableController {
return success(activityTableService.createActivityTable(createReqVO));
}
@PostMapping("/createFalse")
@Operation(summary = "创建活动用餐桌子")
@PreAuthorize("@ss.hasPermission('member:activity-table:create')")
public CommonResult<Long> createActivityTable(@Valid @RequestBody ActivityTableCreateVO createReqVO) {
return success(activityTableService.createActivityTableFalse(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新活动用餐桌子")
@PreAuthorize("@ss.hasPermission('member:activity-table:update')")
@ -127,4 +132,10 @@ public class ActivityTableController {
BeanUtils.toBean(list, ActivityTableRespVO.class));
}
@PutMapping("/updateTime")
@Operation(summary = "修改用餐时间")
public CommonResult<Boolean> updateTime(@Valid @RequestBody UpdateTimeVO updateTimeVO) {
return success( activityTableService.updateTime(updateTimeVO));
}
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 活动用餐桌子新增/修改 Request VO")
@Data
public class ActivityTableCreateVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5590")
private Long id;
@Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8513")
@NotNull(message = "活动id不能为空")
private Long activityId;
@Schema(description = "序号")
private Integer serialNumber;
@Schema(description = "序号")
private String reserveTime;
}

View File

@ -0,0 +1,11 @@
package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
import lombok.Data;
@Data
public class UpdateTimeVO {
private Long id;
private String reserveTime;
}

View File

@ -214,4 +214,24 @@ public class CustomizeExcelController {
ExcelUtils.write(response, "现金充值.xlsx", "数据", CashAmountExcelVO.class,
orderExcelVOS);
}
@GetMapping("/activityMxExcel")
@Operation(summary = "活动付款明细导出")
@OperateLog(type = EXPORT)
public void exportActivityMx(HttpServletResponse response) throws IOException {
List<ActivityMxVO> orderExcelVOS = excelService.exportActivityMx();
// 导出 Excel
ExcelUtils.write(response, "现金充值.xlsx", "数据", ActivityMxVO.class,
orderExcelVOS);
}
@GetMapping("/activityReserveExcel")
@Operation(summary = "活动预定桌数导出")
@OperateLog(type = EXPORT)
public void exportActivityReserve(HttpServletResponse response) throws IOException {
List<ActivityReserveVO> orderExcelVOS = excelService.exportActivityReserve();
// 导出 Excel
ExcelUtils.write(response, "现金充值.xlsx", "数据", ActivityReserveVO.class,
orderExcelVOS);
}
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ActivityMxVO {
@ExcelProperty("id")
private Long id;
@ExcelProperty("活动名称")
private String activityName;
@ExcelProperty("商户名称")
private String name;
@ExcelProperty("桌号")
private String serialNumbers;
@ExcelProperty("价格")
private BigDecimal price;
@ExcelProperty("昵称")
private String nickName;
@ExcelProperty("电话")
private String mobile;
@ExcelProperty("预约时间")
private String reserveTime;
@ExcelProperty("创建时间")
private String createTime;
}

View File

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class ActivityReserveVO {
@ExcelProperty("商户名称")
private String name;
@ExcelProperty("2025-06-13")
private String day1;
@ExcelProperty("2025-06-14")
private String day2;
@ExcelProperty("2025-06-15")
private String day3;
@ExcelProperty("2025-06-16")
private String day4;
@ExcelProperty("2025-06-17")
private String day5;
@ExcelProperty("2025-06-18")
private String day6;
@ExcelProperty("2025-06-19")
private String day7;
@ExcelProperty("2025-06-20")
private String day8;
@ExcelProperty("2025-06-21")
private String day9;
@ExcelProperty("2025-06-22")
private String day10;
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.controller.app.activity;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@ -28,6 +29,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymenu.ActivityMenuDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymerchant.ActivityMerchantDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
@ -37,6 +39,7 @@ import cn.iocoder.yudao.module.member.service.activity.ActivityService;
import cn.iocoder.yudao.module.member.service.activityadddish.ActivityAddDishService;
import cn.iocoder.yudao.module.member.service.activityawards.ActivityAwardsService;
import cn.iocoder.yudao.module.member.service.activityawardsuser.ActivityAwardsUserService;
import cn.iocoder.yudao.module.member.service.activitymenu.ActivityMenuService;
import cn.iocoder.yudao.module.member.service.activitymerchant.ActivityMerchantService;
import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
@ -47,12 +50,14 @@ import cn.iocoder.yudao.module.member.service.activityvoucheruser.ActivityVouche
import cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -100,6 +105,9 @@ public class AppActivityDrawController {
@Resource
private ActivityVoucherUserService activityVoucherUserService;
@Resource
private ActivityMenuService activityMenuService;
@GetMapping("/manage/page")
@Operation(summary = "管理员获取当天活动")
public CommonResult<PageResult<ActivityRespVO>> getTodayActivityPage(@Valid ActivityPageReqVO pageReqVO) {
@ -251,6 +259,26 @@ public class AppActivityDrawController {
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
pageReqVO.setUserId(loginUserId);
PageResult<AppActivityPayRespVO> pageResult = activityPayService.getUserActivityPayPage(pageReqVO);
if(CollectionUtil.isNotEmpty(pageResult.getList())){
for (AppActivityPayRespVO item:pageResult.getList()){
if(StringUtils.isBlank(item.getMenuIds())){
continue;
}
String serialNumbers = item.getSerialNumbers();
String menuNames = item.getMenuNames();
String[] split = serialNumbers.split(",");
String[] split1 = menuNames.split(",");
ArrayList<PayVO> payVOS = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
PayVO payVO = new PayVO();
payVO.setSerialNumbers(split[i]);
payVO.setMenuName(split1[i]);
payVOS.add(payVO);
}
item.setPayVOs(payVOS);
}
}
return success(pageResult);
}
@ -390,6 +418,27 @@ public class AppActivityDrawController {
List<Integer> collect = listByActivityIdAndMerchantId.stream().map(ActivityTableDishDO::getSerialNumber).collect(Collectors.toList());
pageReqVO.setSerialNumberList(collect);
PageResult<AppActivityPayRespVO> pageResult = activityPayService.getMerchantActivityPayPage(pageReqVO);
if(CollectionUtil.isNotEmpty(pageResult.getList())){
for (AppActivityPayRespVO item:pageResult.getList()){
if(StringUtils.isBlank(item.getMenuIds())){
continue;
}
String serialNumbers = item.getSerialNumbers();
String menuNames = item.getMenuNames();
String[] split = serialNumbers.split(",");
String[] split1 = menuNames.split(",");
ArrayList<PayVO> payVOS = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
PayVO payVO = new PayVO();
payVO.setSerialNumbers(split[i]);
payVO.setMenuName(split1[i]);
payVOS.add(payVO);
}
item.setPayVOs(payVOS);
}
}
return success(pageResult);
}
@ -400,5 +449,13 @@ public class AppActivityDrawController {
}
@GetMapping("/merchantMenu")
@Operation(summary = "获得商家套餐列表")
public CommonResult<List<ActivityMenuDO>> getMerchantByMobile(@Valid Long merchantId) {
return success(activityMenuService.getListByMerchantId(merchantId));
}
}

View File

@ -8,6 +8,7 @@ import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 活动付款 Response VO")
@Data
@ -47,4 +48,12 @@ public class AppActivityPayRespVO {
private String dish;
private String diningPeriod;
private String menuIds;
private String menuNames;
private String voucher;
private List<PayVO> payVOs;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.controller.app.activity.vo;
import cn.iocoder.yudao.module.member.api.activitypay.dto.MenuDTO;
import lombok.Data;
import java.math.BigDecimal;
@ -18,5 +19,5 @@ public class AppCheckVO {
private BigDecimal price;
private List<MenuDTO> menuList;
}

View File

@ -0,0 +1,12 @@
package cn.iocoder.yudao.module.member.controller.app.activity.vo;
import lombok.Data;
@Data
public class PayVO {
private String serialNumbers;
private String menuName;
}

View File

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.member.dal.dataobject.activitymenu;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.math.BigDecimal;
/**
* 活动套餐 DO
*
* @author 我是秦俊旗
*/
@TableName("member_activity_menu")
@KeySequence("member_activity_menu_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ActivityMenuDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 套餐名字
*/
private String menuName;
/**
* 套餐详情
*/
private String detail;
/**
* 套餐价格
*/
private BigDecimal dishPrice;
/**
* 商店ID
*/
private Long merchantId;
}

View File

@ -64,4 +64,8 @@ public class ActivityPayDO extends BaseDO {
private String transactionId;
private String openid;
private String menuIds;
private String menuNames;
}

View File

@ -58,4 +58,7 @@ public class ActivityTableDO extends BaseDO {
private String type;
private Long menuId;
private String menuName;
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.member.dal.mysql.activitymenu;
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.activitymenu.ActivityMenuDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.*;
/**
* 活动套餐 Mapper
*
* @author 我是秦俊旗
*/
@Mapper
public interface ActivityMenuMapper extends BaseMapperX<ActivityMenuDO> {
default PageResult<ActivityMenuDO> selectPage(ActivityMenuPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ActivityMenuDO>()
.likeIfPresent(ActivityMenuDO::getMenuName, reqVO.getMenuName())
.eqIfPresent(ActivityMenuDO::getDetail, reqVO.getDetail())
.eqIfPresent(ActivityMenuDO::getDishPrice, reqVO.getDishPrice())
.eqIfPresent(ActivityMenuDO::getMerchantId, reqVO.getMerchantId())
.betweenIfPresent(ActivityMenuDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ActivityMenuDO::getId));
}
}

View File

@ -5,7 +5,9 @@ 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.activitypay.vo.ActivityPayCountVO;
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityPayRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -32,4 +34,6 @@ public interface ActivityPayMapper extends BaseMapperX<ActivityPayDO> {
List<ActivityPayCountVO> countByActivityIds(@Param("activityIds") List<Long> activityIds);
Page<AppActivityPayRespVO> getPage(@Param("page") Page<ActivityPayPageReqVO> page, @Param("reqVO") ActivityPayPageReqVO reqVO);
}

View File

@ -25,4 +25,9 @@ public interface CustomizeExcelMapper {
List<CashAmountExcelVO> exportCashAmountExcel(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("carteenId")Long carteenId);
List<ActivityMxVO> exportActivityMx();
List<ActivityReserveVO> exportActivityReserve();
}

View File

@ -99,15 +99,16 @@ public class ActivityAwardsUserServiceImpl implements ActivityAwardsUserService
@Override
public List<ActivityAwardsUserDO> getAwardsUserListByActivityId(Long activityId) {
LocalDateTime date = LocalDateTime.now();
LocalDateTime startOfDay = date.with(LocalTime.MIN);
LocalDateTime endOfDay = date.with(LocalTime.MAX);
// LocalDateTime date = LocalDateTime.now();
//
// LocalDateTime startOfDay = date.with(LocalTime.MIN);
//
// LocalDateTime endOfDay = date.with(LocalTime.MAX);
return activityAwardsUserMapper.selectList(Wrappers.<ActivityAwardsUserDO>lambdaQuery()
.eq(ActivityAwardsUserDO::getActivityId, activityId)
.between(ActivityAwardsUserDO::getCreateTime, startOfDay, endOfDay));
// .between(ActivityAwardsUserDO::getCreateTime, startOfDay, endOfDay)
);
}
@Override

View File

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.member.service.activitymenu;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymenu.ActivityMenuDO;
import javax.validation.Valid;
import java.util.List;
/**
* 活动套餐 Service 接口
*
* @author 我是秦俊旗
*/
public interface ActivityMenuService {
/**
* 创建活动套餐
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createActivityMenu(@Valid ActivityMenuSaveReqVO createReqVO);
/**
* 更新活动套餐
*
* @param updateReqVO 更新信息
*/
void updateActivityMenu(@Valid ActivityMenuSaveReqVO updateReqVO);
/**
* 删除活动套餐
*
* @param id 编号
*/
void deleteActivityMenu(Long id);
/**
* 获得活动套餐
*
* @param id 编号
* @return 活动套餐
*/
ActivityMenuDO getActivityMenu(Long id);
/**
* 获得活动套餐分页
*
* @param pageReqVO 分页查询
* @return 活动套餐分页
*/
PageResult<ActivityMenuDO> getActivityMenuPage(ActivityMenuPageReqVO pageReqVO);
List<ActivityMenuDO> getListByIds(List<Long> ids);
List<ActivityMenuDO> getListByMerchantId(Long merchantId);
}

View File

@ -0,0 +1,84 @@
package cn.iocoder.yudao.module.member.service.activitymenu;
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.activitymenu.vo.ActivityMenuPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitymenu.vo.ActivityMenuSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymenu.ActivityMenuDO;
import cn.iocoder.yudao.module.member.dal.mysql.activitymenu.ActivityMenuMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_MENU_NOT_EXISTS;
/**
* 活动套餐 Service 实现类
*
* @author 我是秦俊旗
*/
@Service
@Validated
public class ActivityMenuServiceImpl implements ActivityMenuService {
@Resource
private ActivityMenuMapper activityMenuMapper;
@Override
public Long createActivityMenu(ActivityMenuSaveReqVO createReqVO) {
// 插入
ActivityMenuDO activityMenu = BeanUtils.toBean(createReqVO, ActivityMenuDO.class);
activityMenuMapper.insert(activityMenu);
// 返回
return activityMenu.getId();
}
@Override
public void updateActivityMenu(ActivityMenuSaveReqVO updateReqVO) {
// 校验存在
validateActivityMenuExists(updateReqVO.getId());
// 更新
ActivityMenuDO updateObj = BeanUtils.toBean(updateReqVO, ActivityMenuDO.class);
activityMenuMapper.updateById(updateObj);
}
@Override
public void deleteActivityMenu(Long id) {
// 校验存在
validateActivityMenuExists(id);
// 删除
activityMenuMapper.deleteById(id);
}
private void validateActivityMenuExists(Long id) {
if (activityMenuMapper.selectById(id) == null) {
throw exception(ACTIVITY_MENU_NOT_EXISTS);
}
}
@Override
public ActivityMenuDO getActivityMenu(Long id) {
return activityMenuMapper.selectById(id);
}
@Override
public PageResult<ActivityMenuDO> getActivityMenuPage(ActivityMenuPageReqVO pageReqVO) {
return activityMenuMapper.selectPage(pageReqVO);
}
@Override
public List<ActivityMenuDO> getListByIds(List<Long> ids) {
return activityMenuMapper.selectList(Wrappers.<ActivityMenuDO>lambdaQuery()
.in(ActivityMenuDO::getId, ids));
}
@Override
public List<ActivityMenuDO> getListByMerchantId(Long merchantId) {
return activityMenuMapper.selectList(Wrappers.<ActivityMenuDO>lambdaQuery()
.eq(ActivityMenuDO::getMerchantId, merchantId));
}
}

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCancelVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
import javax.validation.Valid;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@ -70,4 +71,10 @@ public interface ActivityPayService {
List<ActivityPayDO> getListByTime();
void updateBatch(List<ActivityPayDO> list);
void insertOne(ActivityPayDO activityPayDO);
ActivityPayDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num);
void updateOne(ActivityPayDO activityPayDO );
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
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.api.activitypay.dto.MenuDTO;
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayCountVO;
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPaySaveReqVO;
@ -12,11 +13,16 @@ import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityPayR
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCancelVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitymenu.ActivityMenuDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityvoucher.ActivityVoucherDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activityvoucheruser.ActivityVoucherUserDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.activitypay.ActivityPayMapper;
import cn.iocoder.yudao.module.member.service.activitymenu.ActivityMenuService;
import cn.iocoder.yudao.module.member.service.activitypaytable.ActivityPayTableService;
import cn.iocoder.yudao.module.member.service.activityvoucher.ActivityVoucherService;
import cn.iocoder.yudao.module.member.service.activityvoucheruser.ActivityVoucherUserService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -32,10 +38,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -62,6 +65,13 @@ public class ActivityPayServiceImpl implements ActivityPayService {
@Resource
private ActivityVoucherUserService activityVoucherUserService;
@Resource
private ActivityMenuService activityMenuService;
@Resource
private ActivityVoucherService activityVoucherService;
@Override
public Long createActivityPay(ActivityPaySaveReqVO createReqVO) {
// 插入
@ -131,29 +141,85 @@ public class ActivityPayServiceImpl implements ActivityPayService {
localDate = LocalDate.parse(reserveTime, formatter);
}
activityPayDO.setReserveTime(localDate);
List<MenuDTO> menu = createReqVO.getMenu();
if (CollectionUtil.isNotEmpty(menu)) {
String result = createReqVO.getMenu().stream()
.map(MenuDTO::getSerialNumbers)
.filter(Objects::nonNull) // 过滤可能的 null 值
.collect(Collectors.joining(","));
activityPayDO.setSerialNumbers(result);
}
if (StrUtil.isBlank(createReqVO.getDish())) {
List<Long> collect = menu.stream().map(MenuDTO::getMenuId).collect(Collectors.toList());
List<ActivityMenuDO> listByIds = activityMenuService.getListByIds(collect);
activityPayDO.setMenuIds(listByIds.stream().map(ActivityMenuDO::getId).map(String::valueOf).collect(Collectors.joining(",")));
activityPayDO.setMenuNames(listByIds.stream().map(ActivityMenuDO::getMenuName).collect(Collectors.joining(",")));
}
if (StrUtil.isNotBlank(createReqVO.getVoucherId())) {
activityPayDO.setVoucher(createReqVO.getVoucherId());
}
activityPayMapper.insert(activityPayDO);
String serialNumbers = createReqVO.getSerialNumbers();
String[] split = serialNumbers.split(",");
BigDecimal divide = createReqVO.getPrice().divide(BigDecimal.valueOf(split.length),2, RoundingMode.HALF_UP);
if (StrUtil.isBlank(createReqVO.getDish())) {
List<Long> collect = menu.stream().map(MenuDTO::getMenuId).collect(Collectors.toList());
List<ActivityMenuDO> listByIds = activityMenuService.getListByIds(collect);
Map<Long, ActivityMenuDO> menuMap = listByIds.stream().collect(Collectors.toMap(ActivityMenuDO::getId, vo -> vo));
boolean notBlank = StrUtil.isNotBlank(createReqVO.getVoucherId());
List<ActivityPayTableDO> activityPayTableDOS = new ArrayList<>();
for (String serialNumber : split) {
boolean type2DiscountApplied = false;
for (MenuDTO menuDTO : menu) {
ActivityMenuDO activityMenuDO = menuMap.get(menuDTO.getMenuId());
ActivityPayTableDO activityPayTableDO = new ActivityPayTableDO();
activityPayTableDO.setActivityId(activityPayDO.getActivityId());
activityPayTableDO.setSerialNumbers(serialNumber);
activityPayTableDO.setPrice(divide);
activityPayTableDO.setSerialNumbers(menuDTO.getSerialNumbers());
activityPayTableDO.setPrice(activityMenuDO.getDishPrice());
if (notBlank && !type2DiscountApplied) {
BigDecimal dishPrice = activityMenuDO.getDishPrice();
String voucherId = createReqVO.getVoucherId();
ActivityVoucherUserDO activityVoucherUser = activityVoucherUserService.getActivityVoucherUser(Long.valueOf(voucherId));
ActivityVoucherDO activityVoucher = activityVoucherService.getActivityVoucher(activityVoucherUser.getVoucherId());
if ("1".equals(activityVoucher.getType())) {
dishPrice = dishPrice.multiply(activityVoucher.getNum()).divide(new BigDecimal(10), 2, RoundingMode.HALF_UP);
} else if ("2".equals(activityVoucher.getType())) {
dishPrice = dishPrice.subtract(activityVoucher.getNum());
type2DiscountApplied = true;
}
activityPayTableDO.setPrice(dishPrice);
}
activityPayTableDO.setUserId(activityPayDO.getUserId());
activityPayTableDO.setReserveTime(activityPayDO.getReserveTime());
activityPayTableDO.setNickName(activityPayDO.getNickName());
activityPayTableDO.setMobile(activityPayDO.getMobile());
activityPayTableDOS.add(activityPayTableDO);
}
if (!activityPayTableDOS.isEmpty()) {
activityPayTableService.insertBatch(activityPayTableDOS);
}
} else {
List<ActivityPayTableDO> activityPayTableDOS = new ArrayList<>();
MenuDTO menuDTO1 = menu.get(0);
ActivityPayTableDO activityPayTableDO = new ActivityPayTableDO();
activityPayTableDO.setActivityId(activityPayDO.getActivityId());
activityPayTableDO.setSerialNumbers(menuDTO1.getSerialNumbers());
activityPayTableDO.setPrice(activityPayDO.getPrice());
activityPayTableDO.setUserId(activityPayDO.getUserId());
activityPayTableDO.setReserveTime(activityPayDO.getReserveTime());
activityPayTableDO.setNickName(activityPayDO.getNickName());
activityPayTableDO.setMobile(activityPayDO.getMobile());
activityPayTableDOS.add(activityPayTableDO);
activityPayTableService.insertBatch(activityPayTableDOS);
}
if (StrUtil.isNotBlank(createReqVO.getVoucherId())) {
String voucherId = createReqVO.getVoucherId();
activityVoucherUserService.updateByVoucherIdAndUserId(Long.valueOf(voucherId));
@ -181,18 +247,12 @@ public class ActivityPayServiceImpl implements ActivityPayService {
@Override
public PageResult<AppActivityPayRespVO> getMerchantActivityPayPage(ActivityPayPageReqVO pageReqVO) {
Page<AppActivityPayRespVO> activityAwardsUserRespVOPage = activityPayMapper.selectJoinPage(new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), AppActivityPayRespVO.class,
new MPJLambdaWrapper<ActivityPayDO>()
.selectAll(ActivityPayDO.class)
.select(ActivityDO::getActivityName)
.leftJoin(ActivityDO.class, ActivityDO::getId, ActivityAwardsUserDO::getActivityId)
.isNotNull(pageReqVO.getIsDish(), ActivityPayDO::getDish)
.isNull(!pageReqVO.getIsDish(), ActivityPayDO::getDish)
.eq(pageReqVO.getStatus() != null, ActivityPayDO::getStatus, pageReqVO.getStatus())
.in(CollectionUtil.isNotEmpty(pageReqVO.getSerialNumberList()), ActivityPayDO::getSerialNumbers,pageReqVO.getSerialNumberList())
.orderByAsc(ActivityPayDO::getStatus)
.orderByAsc(ActivityPayDO::getReserveTime)
);
Page<ActivityPayPageReqVO> queryDTOPage = new Page<>();
queryDTOPage.setCurrent(pageReqVO.getPageNo());
queryDTOPage.setSize(pageReqVO.getPageSize());
Page<AppActivityPayRespVO> activityAwardsUserRespVOPage = activityPayMapper.getPage(queryDTOPage, pageReqVO);
return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
}
@ -230,4 +290,24 @@ public class ActivityPayServiceImpl implements ActivityPayService {
public void updateBatch(List<ActivityPayDO> list) {
activityPayMapper.updateBatch(list);
}
@Override
public void insertOne(ActivityPayDO activityPayDO) {
activityPayMapper.insert(activityPayDO);
}
@Override
public ActivityPayDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num) {
return activityPayMapper.selectOne(Wrappers.<ActivityPayDO>lambdaQuery()
.eq(ActivityPayDO::getActivityId, activityId)
.eq(ActivityPayDO::getReserveTime, time)
.eq(ActivityPayDO::getSerialNumbers, num)
.last("limit 1")
);
}
@Override
public void updateOne(ActivityPayDO activityPayDO) {
activityPayMapper.updateById(activityPayDO);
}
}

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo.Activ
import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
import javax.validation.Valid;
import java.time.LocalDate;
import java.util.List;
/**
@ -57,4 +58,10 @@ public interface ActivityPayTableService {
void insertBatch(List<ActivityPayTableDO> list);
PageResult<ActivityPayTableRespVO> getActivityPayTableGroupPage(ActivityPayTablePageReqVO pageReqVO);
void insertOne(ActivityPayTableDO activityPayTableDO);
ActivityPayTableDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num);
void updateOne(ActivityPayTableDO activityPayTableDO);
}

View File

@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -125,4 +126,34 @@ public class ActivityPayTableServiceImpl implements ActivityPayTableService {
public void insertBatch(List<ActivityPayTableDO> list) {
activityPayTableMapper.insertBatch(list);
}
@Override
public void insertOne(ActivityPayTableDO activityPayTableDO) {
activityPayTableMapper.insert(activityPayTableDO);
}
@Override
public ActivityPayTableDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num) {
return activityPayTableMapper.selectOne(new LambdaQueryWrapper<ActivityPayTableDO>()
.eq(ActivityPayTableDO::getActivityId, activityId)
.eq(ActivityPayTableDO::getReserveTime, time)
.eq(ActivityPayTableDO::getSerialNumbers, num)
.select(
ActivityPayTableDO::getId,
ActivityPayTableDO::getActivityId,
ActivityPayTableDO::getReserveTime,
ActivityPayTableDO::getSerialNumbers,
ActivityPayTableDO::getPrice,
ActivityPayTableDO::getUserId,
ActivityPayTableDO::getNickName,
ActivityPayTableDO::getMobile
)
.last("limit 1")
);
}
@Override
public void updateOne(ActivityPayTableDO activityPayTableDO) {
activityPayTableMapper.updateById(activityPayTableDO);
}
}

View File

@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.member.service.activitytable;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTablePageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.*;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCheckVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppUnbindVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.time.LocalDate;
@ -74,4 +73,9 @@ public interface ActivityTableService {
List<ActivityTableDO> getListByActivityId(Long activityId);
List<ActivityTableDO> getListByActivityIdAndTimeAndUserId(Long activityId, LocalDate time, Long userId);
Long createActivityTableFalse( ActivityTableCreateVO createReqVO);
Boolean updateTime(@Valid @RequestBody UpdateTimeVO updateTimeVO);
}

View File

@ -5,23 +5,26 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.api.activitypay.dto.MenuDTO;
import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTablePageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableSaveReqVO;
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.*;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCheckVO;
import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppUnbindVO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.activitytable.ActivityTableMapper;
import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
import cn.iocoder.yudao.module.member.service.activitypaytable.ActivityPayTableService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@ -47,6 +50,12 @@ public class ActivityTableServiceImpl implements ActivityTableService {
@Resource
private MemberUserService memberUserService;
@Resource
private ActivityPayService activityPayService;
@Resource
private ActivityPayTableService activityPayTableService;
@Override
public Long createActivityTable(ActivityTableSaveReqVO createReqVO) {
// 插入
@ -130,17 +139,17 @@ public class ActivityTableServiceImpl implements ActivityTableService {
@Override
public synchronized Boolean userTableCheck(AppCheckVO vo) {
if(CollectionUtil.isEmpty(vo.getSerialNumbers())){
if(CollectionUtil.isEmpty(vo.getMenuList())){
throw exception(new ErrorCode(1_005_000_01, "请选择桌号"));
}
List<String> collect = vo.getMenuList().stream().map(MenuDTO::getSerialNumbers).collect(Collectors.toList());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(vo.getTime(), formatter);
List<ActivityTableDO> activityTableDOS = activityTableMapper.selectList(Wrappers.lambdaQuery(ActivityTableDO.class)
.eq(ActivityTableDO::getReserveTime, localDate)
.eq(ActivityTableDO::getActivityId, vo.getActivityId())
.eq(ActivityTableDO::getType, "0")
.in(ActivityTableDO::getSerialNumber, vo.getSerialNumbers()));
.in(ActivityTableDO::getSerialNumber, collect));
if (!activityTableDOS.isEmpty()) {
String result = activityTableDOS.stream()
@ -152,17 +161,19 @@ public class ActivityTableServiceImpl implements ActivityTableService {
List<ActivityTableDO> addList = new ArrayList<>();
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
MemberUserDO user = memberUserService.getUser(loginUserId);
BigDecimal divide = vo.getPrice().divide(new BigDecimal(vo.getSerialNumbers().size()), 2, RoundingMode.HALF_UP);
for (Integer serialNumber : vo.getSerialNumbers()) {
// BigDecimal divide = vo.getPrice().divide(new BigDecimal(vo.getSerialNumbers().size()), 2, RoundingMode.HALF_UP);
for (MenuDTO menu : vo.getMenuList()) {
ActivityTableDO activityTableDO = new ActivityTableDO();
activityTableDO.setUserId(loginUserId);
activityTableDO.setMobile(user.getMobile());
activityTableDO.setNickName(user.getNickname());
activityTableDO.setAvatar(user.getAvatar());
activityTableDO.setActivityId(vo.getActivityId());
activityTableDO.setSerialNumber(serialNumber);
activityTableDO.setPrice(divide);
activityTableDO.setSerialNumber(Integer.valueOf(menu.getSerialNumbers()));
activityTableDO.setPrice(BigDecimal.ZERO);
activityTableDO.setReserveTime(localDate);
activityTableDO.setMenuId(menu.getMenuId());
activityTableDO.setMenuName(menu.getMenuName());
addList.add(activityTableDO);
}
activityTableMapper.insertBatch(addList);
@ -196,4 +207,84 @@ public class ActivityTableServiceImpl implements ActivityTableService {
.eq(ActivityTableDO::getUserId, userId)
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long createActivityTableFalse(ActivityTableCreateVO createReqVO) {
ActivityTableDO activityTable = BeanUtils.toBean(createReqVO, ActivityTableDO.class);
activityTable.setPrice(BigDecimal.ZERO);
// Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
activityTable.setUserId(408L);
// MemberUserDO user = memberUserService.getUser(loginUserId);
// activityTable.setMobile(user.getMobile());
activityTable.setNickName("管理员");
// activityTable.setAvatar(user.getAvatar());
activityTableMapper.insert(activityTable);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(createReqVO.getReserveTime(), formatter);
ActivityPayDO activityPaySaveReqVO = new ActivityPayDO();
activityPaySaveReqVO.setActivityId(createReqVO.getActivityId());
activityPaySaveReqVO.setPrice(BigDecimal.ZERO);
activityPaySaveReqVO.setSerialNumbers(activityTable.getSerialNumber().toString());
activityPaySaveReqVO.setUserId(408L);
activityPaySaveReqVO.setStatus("1");
activityPaySaveReqVO.setReserveTime(localDate);
activityPaySaveReqVO.setNickName("管理员");
// activityPaySaveReqVO.setMobile(user.getMobile());
activityPayService.insertOne(activityPaySaveReqVO);
ActivityPayTableDO activityPayTableDO = new ActivityPayTableDO();
activityPayTableDO.setActivityId(createReqVO.getActivityId());
activityPayTableDO.setPrice(BigDecimal.ZERO);
activityPayTableDO.setSerialNumbers(activityTable.getSerialNumber().toString());
activityPayTableDO.setUserId(408L);
activityPayTableDO.setReserveTime(localDate);
activityPayTableDO.setNickName("管理员");
// activityPayTableDO.setMobile(user.getMobile());
activityPayTableService.insertOne(activityPayTableDO);
return activityTable.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateTime(UpdateTimeVO updateTimeVO) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(updateTimeVO.getReserveTime(), formatter);
ActivityTableDO activityTableDO = activityTableMapper.selectById(updateTimeVO.getId());
if (activityTableDO == null) {
throw exception(new ErrorCode(1_005_000_02, "订单不存在"));
}
ActivityPayDO oneByActivityIdAndTimeAndNum = activityPayService.getOneByActivityIdAndTimeAndNum(activityTableDO.getActivityId(), activityTableDO.getReserveTime(), activityTableDO.getSerialNumber());
if (oneByActivityIdAndTimeAndNum == null) {
throw exception(new ErrorCode(1_005_000_02, "订单不存在"));
}
ActivityPayTableDO oneByActivityIdAndTimeAndNum1 = activityPayTableService.getOneByActivityIdAndTimeAndNum(activityTableDO.getActivityId(), activityTableDO.getReserveTime(), activityTableDO.getSerialNumber());
if (oneByActivityIdAndTimeAndNum1 == null) {
throw exception(new ErrorCode(1_005_000_02, "订单不存在"));
}
activityTableDO.setReserveTime(localDate);
oneByActivityIdAndTimeAndNum.setReserveTime(localDate);
oneByActivityIdAndTimeAndNum1.setReserveTime(localDate);
int i = activityTableMapper.updateById(activityTableDO);
activityPayService.updateOne(oneByActivityIdAndTimeAndNum);
activityPayTableService.updateOne(oneByActivityIdAndTimeAndNum1);
return i > 0;
}
}

View File

@ -1,8 +1,6 @@
package cn.iocoder.yudao.module.member.service.customizeExcel;
import cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import java.util.List;
@ -23,4 +21,8 @@ public interface CustomizeExcelService {
List<SubsidyExcelVO> exportSubsidyExcel(String startTime,String endTime,Long carteenId);
List<CashAmountExcelVO> exportCashAmountExcel(String startTime,String endTime,Long carteenId);
List<ActivityMxVO> exportActivityMx();
List<ActivityReserveVO> exportActivityReserve();
}

View File

@ -47,4 +47,14 @@ public class CustomizeExcelServiceImpl implements CustomizeExcelService {
public List<CashAmountExcelVO> exportCashAmountExcel(String startTime, String endTime, Long carteenId) {
return customizeExcelMapper.exportCashAmountExcel(startTime,endTime,carteenId);
}
@Override
public List<ActivityMxVO> exportActivityMx() {
return customizeExcelMapper.exportActivityMx();
}
@Override
public List<ActivityReserveVO> exportActivityReserve() {
return customizeExcelMapper.exportActivityReserve();
}
}

View File

@ -22,4 +22,26 @@
GROUP BY activity_id
</select>
<select id="getPage" resultType="cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityPayRespVO">
select p.*,a.activity_name from member_activity_pay p left join member_activity a on p.activity_id = a.id
WHERE 1=1
<if test="reqVO.isDish">
and p.dish is not null
</if>
<if test="!reqVO.isDish">
and p.dish is null
</if>
<if test="reqVO.status != null and reqVO.status!=''">
AND p.status = #{reqVO.status}
</if>
<if test="reqVO.serialNumberList != null and reqVO.serialNumberList.size() > 0">
AND (
SUBSTRING_INDEX(p.serial_numbers, ',', 1) IN
<foreach collection="reqVO.serialNumberList" item="sn" open="(" separator="," close=")">
#{sn}
</foreach>
)
</if>
</select>
</mapper>

View File

@ -160,4 +160,46 @@
and DATE_FORMAT(mc.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
</select>
<select id="exportActivityMx" resultType="cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo.ActivityMxVO">
select t.id,
a.activity_name ,
m.name ,
t.serial_numbers ,
t.price ,
t.nick_name ,
t.mobile ,
t.reserve_time ,
t.create_time
from (select * from member_activity_pay where deleted =false) t
left join member_activity_table_dish d on t.activity_id = d.activity_id and SUBSTRING_INDEX(t.serial_numbers, ',', 1) = d.serial_number
left join member_activity_merchant m on d.merchant_id = m.id
left join member_activity a on a.id = t.activity_id
and d.deleted = false and t.deleted = false
</select>
<select id="exportActivityReserve" resultType="cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo.ActivityReserveVO">
SELECT
m.name,
SUM(CASE WHEN t.reserve_time = '2025-06-13' THEN 1 ELSE 0 END) AS 'day1',
SUM(CASE WHEN t.reserve_time = '2025-06-14' THEN 1 ELSE 0 END) AS 'day2',
SUM(CASE WHEN t.reserve_time = '2025-06-15' THEN 1 ELSE 0 END) AS 'day3',
SUM(CASE WHEN t.reserve_time = '2025-06-16' THEN 1 ELSE 0 END) AS 'day4',
SUM(CASE WHEN t.reserve_time = '2025-06-17' THEN 1 ELSE 0 END) AS 'day5',
SUM(CASE WHEN t.reserve_time = '2025-06-18' THEN 1 ELSE 0 END) AS 'day6',
SUM(CASE WHEN t.reserve_time = '2025-06-19' THEN 1 ELSE 0 END) AS 'day7',
SUM(CASE WHEN t.reserve_time = '2025-06-20' THEN 1 ELSE 0 END) AS 'day8',
SUM(CASE WHEN t.reserve_time = '2025-06-21' THEN 1 ELSE 0 END) AS 'day9',
SUM(CASE WHEN t.reserve_time = '2025-06-22' THEN 1 ELSE 0 END) AS 'day10'
FROM member_activity_merchant m
LEFT JOIN member_activity_table_dish d ON d.merchant_id = m.id AND d.deleted = 0
LEFT JOIN (select * from member_activity_pay_table where reserve_time is not null and deleted = 0) t
ON t.activity_id = d.activity_id
AND t.serial_numbers = d.serial_number
AND t.reserve_time BETWEEN '2025-06-13' AND '2025-06-22'
WHERE
m.deleted = 0
GROUP BY m.name
ORDER BY m.name
</select>
</mapper>

View File

@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.framework.pay.core.client.PayClient;
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
@ -13,10 +14,12 @@ import cn.iocoder.yudao.framework.pay.core.enums.divide.PayDivideRefundStatusRes
import cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum;
import cn.iocoder.yudao.module.member.api.activitypay.ActivityApi;
import cn.iocoder.yudao.module.member.api.activitypay.dto.ActivityPayDTO;
import cn.iocoder.yudao.module.member.api.activitypay.dto.MenuDTO;
import cn.iocoder.yudao.module.member.api.card.CardApi;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskDetailRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskPageReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.MenuVO;
import cn.iocoder.yudao.module.pay.convert.notify.PayNotifyTaskConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO;
@ -32,6 +35,7 @@ import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
import cn.iocoder.yudao.module.pay.service.wxprofitsharing.WxProfitsharingService;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -143,7 +147,7 @@ public class PayNotifyController {
ActivityPayDTO activityPayDTO = new ActivityPayDTO();
activityPayDTO.setActivityId(Long.valueOf(deserializedMap.get("activityId")));
activityPayDTO.setSerialNumbers(deserializedMap.get("serialNumbers"));
// activityPayDTO.setSerialNumbers(deserializedMap.get("serialNumbers"));
activityPayDTO.setPrice(new BigDecimal(deserializedMap.get("price")).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
activityPayDTO.setUserId(Long.valueOf(deserializedMap.get("userId")));
activityPayDTO.setStatus(deserializedMap.get("status"));
@ -154,6 +158,13 @@ public class PayNotifyController {
activityPayDTO.setTransactionId( notify.getChannelOrderNo());
activityPayDTO.setOpenid(deserializedMap.get("openid"));
String s = deserializedMap.get("menuList");
if(StringUtils.isNotBlank(s)){
List<MenuVO> menuVOS = JSON.parseArray(s, MenuVO.class);
List<MenuDTO> bean = BeanUtils.toBean(menuVOS, MenuDTO.class);
activityPayDTO.setMenu(bean);
}
activityApi.createActivityPay(activityPayDTO);
notifyRedisTemplate.delete("RESERVED" + notify.getOutTradeNo());
}

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
public class MenuVO {
private String serialNumbers;
private Long menuId;
private String menuName;
public String getSerialNumbers() {
return serialNumbers;
}
public void setSerialNumbers(String serialNumbers) {
this.serialNumbers = serialNumbers;
}
public Long getMenuId() {
return menuId;
}
public void setMenuId(Long menuId) {
this.menuId = menuId;
}
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
}

View File

@ -6,6 +6,7 @@ import org.hibernate.validator.constraints.URL;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 支付订单提交 Request VO")
@ -45,4 +46,6 @@ public class PayOrderSubmitReqVO {
private String diningPeriod;
private Long voucherId;
private List<MenuVO> menuList;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.pay.service.order;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
@ -178,7 +179,6 @@ public class PayOrderServiceImpl implements PayOrderService {
HashMap<String, String> stringStringHashMap = new HashMap<>();
stringStringHashMap.put("activityId",reqVO.getActivityId().toString());
stringStringHashMap.put("userId",getLoginUserId().toString());
stringStringHashMap.put("serialNumbers",reqVO.getSerialNumbers());
stringStringHashMap.put("price",unifiedOrderReqDTO.getPrice().toString());
stringStringHashMap.put("status",reqVO.getStatus());
stringStringHashMap.put("reserveTime",reqVO.getReserveTime());
@ -188,6 +188,13 @@ public class PayOrderServiceImpl implements PayOrderService {
if(reqVO.getVoucherId()!=null){
stringStringHashMap.put("voucherId",reqVO.getVoucherId().toString());
}
if(reqVO.getSerialNumbers()!=null){
stringStringHashMap.put("serialNumbers",reqVO.getSerialNumbers());
}
if(CollectionUtil.isNotEmpty(reqVO.getMenuList())){
stringStringHashMap.put("menuList", JSONUtil.toJsonStr(reqVO.getMenuList()));
}
payRedis.opsForValue().set("RESERVED"+unifiedOrderReqDTO.getOutTradeNo()
, JSONUtil.toJsonStr(stringStringHashMap));