优化
This commit is contained in:
@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 活动付款 DO
|
* 活动付款 DO
|
||||||
@ -47,4 +48,8 @@ public class ActivityPayDTO {
|
|||||||
private String transactionId;
|
private String transactionId;
|
||||||
|
|
||||||
private String openid;
|
private String openid;
|
||||||
|
|
||||||
|
private List<MenuDTO> menu;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -214,6 +214,8 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode ACTIVITY_MERCHANT_NOT_EXISTS = new ErrorCode(1_005_000_22, "活动商家不存在");
|
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_NOT_EXISTS = new ErrorCode(1_005_000_23, "活动代金券不存在");
|
||||||
ErrorCode ACTIVITY_VOUCHER_USER_NOT_EXISTS = new ErrorCode(1_005_000_24, "活动用户拥有代金券不存在");
|
ErrorCode ACTIVITY_VOUCHER_USER_NOT_EXISTS = new ErrorCode(1_005_000_24, "活动用户拥有代金券不存在");
|
||||||
|
ErrorCode ACTIVITY_MENU_NOT_EXISTS = new ErrorCode(1_005_000_25, "活动套餐不存在");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ public class ActivityApiImpl implements ActivityApi {
|
|||||||
@Override
|
@Override
|
||||||
public void createActivityPay(ActivityPayDTO createReqVO) {
|
public void createActivityPay(ActivityPayDTO createReqVO) {
|
||||||
ActivityPaySaveReqVO bean = BeanUtil.toBean(createReqVO, ActivityPaySaveReqVO.class);
|
ActivityPaySaveReqVO bean = BeanUtil.toBean(createReqVO, ActivityPaySaveReqVO.class);
|
||||||
|
bean.setMenu(createReqVO.getMenu());
|
||||||
activityPayService.addActivityPay(bean);
|
activityPayService.addActivityPay(bean);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -1,10 +1,12 @@
|
|||||||
package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
|
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 活动付款新增/修改 Request VO")
|
@Schema(description = "管理后台 - 活动付款新增/修改 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@ -40,4 +42,6 @@ public class ActivityPaySaveReqVO {
|
|||||||
private String transactionId;
|
private String transactionId;
|
||||||
|
|
||||||
private String openid;
|
private String openid;
|
||||||
|
|
||||||
|
private List<MenuDTO> menu;
|
||||||
}
|
}
|
@ -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.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
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.*;
|
||||||
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.dal.dataobject.activitymerchant.ActivityMerchantDO;
|
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.activitytable.ActivityTableDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
|
||||||
@ -52,6 +50,13 @@ public class ActivityTableController {
|
|||||||
return success(activityTableService.createActivityTable(createReqVO));
|
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")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新活动用餐桌子")
|
@Operation(summary = "更新活动用餐桌子")
|
||||||
@PreAuthorize("@ss.hasPermission('member:activity-table:update')")
|
@PreAuthorize("@ss.hasPermission('member:activity-table:update')")
|
||||||
@ -127,4 +132,10 @@ public class ActivityTableController {
|
|||||||
BeanUtils.toBean(list, ActivityTableRespVO.class));
|
BeanUtils.toBean(list, ActivityTableRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/updateTime")
|
||||||
|
@Operation(summary = "修改用餐时间")
|
||||||
|
public CommonResult<Boolean> updateTime(@Valid @RequestBody UpdateTimeVO updateTimeVO) {
|
||||||
|
return success( activityTableService.updateTime(updateTimeVO));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -214,4 +214,24 @@ public class CustomizeExcelController {
|
|||||||
ExcelUtils.write(response, "现金充值.xlsx", "数据", CashAmountExcelVO.class,
|
ExcelUtils.write(response, "现金充值.xlsx", "数据", CashAmountExcelVO.class,
|
||||||
orderExcelVOS);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.member.controller.app.activity;
|
package cn.iocoder.yudao.module.member.controller.app.activity;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
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.activityadddish.ActivityAddDishDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
|
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.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.activitymerchant.ActivityMerchantDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
|
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.activityadddish.ActivityAddDishService;
|
||||||
import cn.iocoder.yudao.module.member.service.activityawards.ActivityAwardsService;
|
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.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.activitymerchant.ActivityMerchantService;
|
||||||
import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
|
import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
|
||||||
import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
|
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 cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -100,6 +105,9 @@ public class AppActivityDrawController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ActivityVoucherUserService activityVoucherUserService;
|
private ActivityVoucherUserService activityVoucherUserService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActivityMenuService activityMenuService;
|
||||||
|
|
||||||
@GetMapping("/manage/page")
|
@GetMapping("/manage/page")
|
||||||
@Operation(summary = "管理员获取当天活动")
|
@Operation(summary = "管理员获取当天活动")
|
||||||
public CommonResult<PageResult<ActivityRespVO>> getTodayActivityPage(@Valid ActivityPageReqVO pageReqVO) {
|
public CommonResult<PageResult<ActivityRespVO>> getTodayActivityPage(@Valid ActivityPageReqVO pageReqVO) {
|
||||||
@ -251,6 +259,26 @@ public class AppActivityDrawController {
|
|||||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
pageReqVO.setUserId(loginUserId);
|
pageReqVO.setUserId(loginUserId);
|
||||||
PageResult<AppActivityPayRespVO> pageResult = activityPayService.getUserActivityPayPage(pageReqVO);
|
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);
|
return success(pageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,6 +418,27 @@ public class AppActivityDrawController {
|
|||||||
List<Integer> collect = listByActivityIdAndMerchantId.stream().map(ActivityTableDishDO::getSerialNumber).collect(Collectors.toList());
|
List<Integer> collect = listByActivityIdAndMerchantId.stream().map(ActivityTableDishDO::getSerialNumber).collect(Collectors.toList());
|
||||||
pageReqVO.setSerialNumberList(collect);
|
pageReqVO.setSerialNumberList(collect);
|
||||||
PageResult<AppActivityPayRespVO> pageResult = activityPayService.getMerchantActivityPayPage(pageReqVO);
|
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);
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ import lombok.Data;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 活动付款 Response VO")
|
@Schema(description = "管理后台 - 活动付款 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ -47,4 +48,12 @@ public class AppActivityPayRespVO {
|
|||||||
private String dish;
|
private String dish;
|
||||||
|
|
||||||
private String diningPeriod;
|
private String diningPeriod;
|
||||||
|
|
||||||
|
private String menuIds;
|
||||||
|
|
||||||
|
private String menuNames;
|
||||||
|
|
||||||
|
private String voucher;
|
||||||
|
|
||||||
|
private List<PayVO> payVOs;
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.member.controller.app.activity.vo;
|
package cn.iocoder.yudao.module.member.controller.app.activity.vo;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.api.activitypay.dto.MenuDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -18,5 +19,5 @@ public class AppCheckVO {
|
|||||||
|
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
|
|
||||||
|
private List<MenuDTO> menuList;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -64,4 +64,8 @@ public class ActivityPayDO extends BaseDO {
|
|||||||
private String transactionId;
|
private String transactionId;
|
||||||
|
|
||||||
private String openid;
|
private String openid;
|
||||||
|
|
||||||
|
private String menuIds;
|
||||||
|
|
||||||
|
private String menuNames;
|
||||||
}
|
}
|
@ -58,4 +58,7 @@ public class ActivityTableDO extends BaseDO {
|
|||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
|
private Long menuId;
|
||||||
|
|
||||||
|
private String menuName;
|
||||||
}
|
}
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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.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.ActivityPayCountVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
|
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 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.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
@ -32,4 +34,6 @@ public interface ActivityPayMapper extends BaseMapperX<ActivityPayDO> {
|
|||||||
|
|
||||||
List<ActivityPayCountVO> countByActivityIds(@Param("activityIds") List<Long> activityIds);
|
List<ActivityPayCountVO> countByActivityIds(@Param("activityIds") List<Long> activityIds);
|
||||||
|
|
||||||
|
|
||||||
|
Page<AppActivityPayRespVO> getPage(@Param("page") Page<ActivityPayPageReqVO> page, @Param("reqVO") ActivityPayPageReqVO reqVO);
|
||||||
}
|
}
|
@ -25,4 +25,9 @@ public interface CustomizeExcelMapper {
|
|||||||
|
|
||||||
List<CashAmountExcelVO> exportCashAmountExcel(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("carteenId")Long carteenId);
|
List<CashAmountExcelVO> exportCashAmountExcel(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("carteenId")Long carteenId);
|
||||||
|
|
||||||
|
List<ActivityMxVO> exportActivityMx();
|
||||||
|
|
||||||
|
List<ActivityReserveVO> exportActivityReserve();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -99,15 +99,16 @@ public class ActivityAwardsUserServiceImpl implements ActivityAwardsUserService
|
|||||||
@Override
|
@Override
|
||||||
public List<ActivityAwardsUserDO> getAwardsUserListByActivityId(Long activityId) {
|
public List<ActivityAwardsUserDO> getAwardsUserListByActivityId(Long activityId) {
|
||||||
|
|
||||||
LocalDateTime date = LocalDateTime.now();
|
// LocalDateTime date = LocalDateTime.now();
|
||||||
|
//
|
||||||
LocalDateTime startOfDay = date.with(LocalTime.MIN);
|
// LocalDateTime startOfDay = date.with(LocalTime.MIN);
|
||||||
|
//
|
||||||
LocalDateTime endOfDay = date.with(LocalTime.MAX);
|
// LocalDateTime endOfDay = date.with(LocalTime.MAX);
|
||||||
|
|
||||||
return activityAwardsUserMapper.selectList(Wrappers.<ActivityAwardsUserDO>lambdaQuery()
|
return activityAwardsUserMapper.selectList(Wrappers.<ActivityAwardsUserDO>lambdaQuery()
|
||||||
.eq(ActivityAwardsUserDO::getActivityId, activityId)
|
.eq(ActivityAwardsUserDO::getActivityId, activityId)
|
||||||
.between(ActivityAwardsUserDO::getCreateTime, startOfDay, endOfDay));
|
// .between(ActivityAwardsUserDO::getCreateTime, startOfDay, endOfDay)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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);
|
||||||
|
}
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
@ -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 cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -70,4 +71,10 @@ public interface ActivityPayService {
|
|||||||
List<ActivityPayDO> getListByTime();
|
List<ActivityPayDO> getListByTime();
|
||||||
|
|
||||||
void updateBatch(List<ActivityPayDO> list);
|
void updateBatch(List<ActivityPayDO> list);
|
||||||
|
|
||||||
|
void insertOne(ActivityPayDO activityPayDO);
|
||||||
|
|
||||||
|
ActivityPayDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num);
|
||||||
|
|
||||||
|
void updateOne(ActivityPayDO activityPayDO );
|
||||||
}
|
}
|
@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.member.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.ActivityPayCountVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPaySaveReqVO;
|
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.controller.app.activity.vo.AppCancelVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
|
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.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.activitypay.ActivityPayDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
|
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.dataobject.user.MemberUserDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.activitypay.ActivityPayMapper;
|
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.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.activityvoucheruser.ActivityVoucherUserService;
|
||||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
@ -32,10 +38,7 @@ import java.math.BigDecimal;
|
|||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@ -62,6 +65,13 @@ public class ActivityPayServiceImpl implements ActivityPayService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ActivityVoucherUserService activityVoucherUserService;
|
private ActivityVoucherUserService activityVoucherUserService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActivityMenuService activityMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActivityVoucherService activityVoucherService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createActivityPay(ActivityPaySaveReqVO createReqVO) {
|
public Long createActivityPay(ActivityPaySaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -118,43 +128,99 @@ public class ActivityPayServiceImpl implements ActivityPayService {
|
|||||||
public void addActivityPay(ActivityPaySaveReqVO createReqVO) {
|
public void addActivityPay(ActivityPaySaveReqVO createReqVO) {
|
||||||
|
|
||||||
ActivityPayDO activityPayDO = new ActivityPayDO();
|
ActivityPayDO activityPayDO = new ActivityPayDO();
|
||||||
BeanUtil.copyProperties(createReqVO, activityPayDO,"reserveTime");
|
BeanUtil.copyProperties(createReqVO, activityPayDO, "reserveTime");
|
||||||
MemberUserDO user = memberUserService.getUser(createReqVO.getUserId());
|
MemberUserDO user = memberUserService.getUser(createReqVO.getUserId());
|
||||||
activityPayDO.setMobile(user.getMobile());
|
activityPayDO.setMobile(user.getMobile());
|
||||||
activityPayDO.setNickName(user.getNickname());
|
activityPayDO.setNickName(user.getNickname());
|
||||||
|
|
||||||
String reserveTime = createReqVO.getReserveTime();
|
String reserveTime = createReqVO.getReserveTime();
|
||||||
LocalDate localDate = null;
|
LocalDate localDate = null;
|
||||||
if(StrUtil.isNotBlank(reserveTime)){
|
if (StrUtil.isNotBlank(reserveTime)) {
|
||||||
//转化成date
|
//转化成date
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
localDate = LocalDate.parse(reserveTime, formatter);
|
localDate = LocalDate.parse(reserveTime, formatter);
|
||||||
}
|
}
|
||||||
activityPayDO.setReserveTime(localDate);
|
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);
|
activityPayMapper.insert(activityPayDO);
|
||||||
|
|
||||||
String serialNumbers = createReqVO.getSerialNumbers();
|
if (StrUtil.isBlank(createReqVO.getDish())) {
|
||||||
String[] split = serialNumbers.split(",");
|
List<Long> collect = menu.stream().map(MenuDTO::getMenuId).collect(Collectors.toList());
|
||||||
BigDecimal divide = createReqVO.getPrice().divide(BigDecimal.valueOf(split.length),2, RoundingMode.HALF_UP);
|
List<ActivityMenuDO> listByIds = activityMenuService.getListByIds(collect);
|
||||||
List<ActivityPayTableDO> activityPayTableDOS = new ArrayList<>();
|
Map<Long, ActivityMenuDO> menuMap = listByIds.stream().collect(Collectors.toMap(ActivityMenuDO::getId, vo -> vo));
|
||||||
for (String serialNumber : split) {
|
|
||||||
ActivityPayTableDO activityPayTableDO = new ActivityPayTableDO();
|
|
||||||
|
boolean notBlank = StrUtil.isNotBlank(createReqVO.getVoucherId());
|
||||||
|
|
||||||
|
List<ActivityPayTableDO> activityPayTableDOS = new ArrayList<>();
|
||||||
|
boolean type2DiscountApplied = false;
|
||||||
|
for (MenuDTO menuDTO : menu) {
|
||||||
|
ActivityMenuDO activityMenuDO = menuMap.get(menuDTO.getMenuId());
|
||||||
|
|
||||||
|
ActivityPayTableDO activityPayTableDO = new ActivityPayTableDO();
|
||||||
|
activityPayTableDO.setActivityId(activityPayDO.getActivityId());
|
||||||
|
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.setActivityId(activityPayDO.getActivityId());
|
||||||
activityPayTableDO.setSerialNumbers(serialNumber);
|
activityPayTableDO.setSerialNumbers(menuDTO1.getSerialNumbers());
|
||||||
activityPayTableDO.setPrice(divide);
|
activityPayTableDO.setPrice(activityPayDO.getPrice());
|
||||||
activityPayTableDO.setUserId(activityPayDO.getUserId());
|
activityPayTableDO.setUserId(activityPayDO.getUserId());
|
||||||
activityPayTableDO.setReserveTime(activityPayDO.getReserveTime());
|
activityPayTableDO.setReserveTime(activityPayDO.getReserveTime());
|
||||||
activityPayTableDO.setNickName(activityPayDO.getNickName());
|
activityPayTableDO.setNickName(activityPayDO.getNickName());
|
||||||
activityPayTableDO.setMobile(activityPayDO.getMobile());
|
activityPayTableDO.setMobile(activityPayDO.getMobile());
|
||||||
activityPayTableDOS.add(activityPayTableDO);
|
activityPayTableDOS.add(activityPayTableDO);
|
||||||
}
|
|
||||||
|
|
||||||
if(!activityPayTableDOS.isEmpty()){
|
|
||||||
activityPayTableService.insertBatch(activityPayTableDOS);
|
activityPayTableService.insertBatch(activityPayTableDOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(StrUtil.isNotBlank(createReqVO.getVoucherId())){
|
if (StrUtil.isNotBlank(createReqVO.getVoucherId())) {
|
||||||
String voucherId = createReqVO.getVoucherId();
|
String voucherId = createReqVO.getVoucherId();
|
||||||
activityVoucherUserService.updateByVoucherIdAndUserId(Long.valueOf(voucherId));
|
activityVoucherUserService.updateByVoucherIdAndUserId(Long.valueOf(voucherId));
|
||||||
}
|
}
|
||||||
@ -171,9 +237,9 @@ public class ActivityPayServiceImpl implements ActivityPayService {
|
|||||||
.leftJoin(ActivityDO.class, ActivityDO::getId, ActivityAwardsUserDO::getActivityId)
|
.leftJoin(ActivityDO.class, ActivityDO::getId, ActivityAwardsUserDO::getActivityId)
|
||||||
.eq(pageReqVO.getActivityId() != null, ActivityAwardsUserDO::getActivityId, pageReqVO.getActivityId())
|
.eq(pageReqVO.getActivityId() != null, ActivityAwardsUserDO::getActivityId, pageReqVO.getActivityId())
|
||||||
.eq(pageReqVO.getUserId() != null, ActivityPayDO::getUserId, pageReqVO.getUserId())
|
.eq(pageReqVO.getUserId() != null, ActivityPayDO::getUserId, pageReqVO.getUserId())
|
||||||
.isNotNull(pageReqVO.getIsDish(), ActivityPayDO::getDish)
|
.isNotNull(pageReqVO.getIsDish(), ActivityPayDO::getDish)
|
||||||
.eq(pageReqVO.getStatus() != null, ActivityPayDO::getStatus, pageReqVO.getStatus())
|
.eq(pageReqVO.getStatus() != null, ActivityPayDO::getStatus, pageReqVO.getStatus())
|
||||||
.in(CollectionUtil.isNotEmpty(pageReqVO.getSerialNumberList()), ActivityPayDO::getSerialNumbers,pageReqVO.getSerialNumberList())
|
.in(CollectionUtil.isNotEmpty(pageReqVO.getSerialNumberList()), ActivityPayDO::getSerialNumbers, pageReqVO.getSerialNumberList())
|
||||||
.orderByDesc(ActivityPayDO::getCreateTime)
|
.orderByDesc(ActivityPayDO::getCreateTime)
|
||||||
);
|
);
|
||||||
return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
|
return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
|
||||||
@ -181,39 +247,33 @@ public class ActivityPayServiceImpl implements ActivityPayService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<AppActivityPayRespVO> getMerchantActivityPayPage(ActivityPayPageReqVO pageReqVO) {
|
public PageResult<AppActivityPayRespVO> getMerchantActivityPayPage(ActivityPayPageReqVO pageReqVO) {
|
||||||
Page<AppActivityPayRespVO> activityAwardsUserRespVOPage = activityPayMapper.selectJoinPage(new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), AppActivityPayRespVO.class,
|
|
||||||
new MPJLambdaWrapper<ActivityPayDO>()
|
Page<ActivityPayPageReqVO> queryDTOPage = new Page<>();
|
||||||
.selectAll(ActivityPayDO.class)
|
queryDTOPage.setCurrent(pageReqVO.getPageNo());
|
||||||
.select(ActivityDO::getActivityName)
|
queryDTOPage.setSize(pageReqVO.getPageSize());
|
||||||
.leftJoin(ActivityDO.class, ActivityDO::getId, ActivityAwardsUserDO::getActivityId)
|
|
||||||
.isNotNull(pageReqVO.getIsDish(), ActivityPayDO::getDish)
|
Page<AppActivityPayRespVO> activityAwardsUserRespVOPage = activityPayMapper.getPage(queryDTOPage, pageReqVO);
|
||||||
.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)
|
|
||||||
);
|
|
||||||
return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
|
return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean reserveCancel(AppCancelVO vo) {
|
public Boolean reserveCancel(AppCancelVO vo) {
|
||||||
ActivityPayDO activityPayDO = activityPayMapper.selectById(vo.getActivityPayId());
|
ActivityPayDO activityPayDO = activityPayMapper.selectById(vo.getActivityPayId());
|
||||||
if(!"0".equals(activityPayDO.getStatus())){
|
if (!"0".equals(activityPayDO.getStatus())) {
|
||||||
throw exception(ACTIVITY_PAY_USE);
|
throw exception(ACTIVITY_PAY_USE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(StrUtil.isEmpty(activityPayDO.getDish())){
|
if (StrUtil.isEmpty(activityPayDO.getDish())) {
|
||||||
//获取当天日期
|
//获取当天日期
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
//比较日期是否相等
|
//比较日期是否相等
|
||||||
if(! now.isEqual(activityPayDO.getReserveTime())){
|
if (!now.isEqual(activityPayDO.getReserveTime())) {
|
||||||
throw exception(ACTIVITY_PAY_EXPIRE);
|
throw exception(ACTIVITY_PAY_EXPIRE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
activityPayDO.setStatus("1");
|
activityPayDO.setStatus("1");
|
||||||
int i = activityPayMapper.updateById(activityPayDO);
|
int i = activityPayMapper.updateById(activityPayDO);
|
||||||
return i>0;
|
return i > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -228,6 +288,26 @@ public class ActivityPayServiceImpl implements ActivityPayService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateBatch(List<ActivityPayDO> list) {
|
public void updateBatch(List<ActivityPayDO> list) {
|
||||||
activityPayMapper.updateBatch(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,4 +58,10 @@ public interface ActivityPayTableService {
|
|||||||
void insertBatch(List<ActivityPayTableDO> list);
|
void insertBatch(List<ActivityPayTableDO> list);
|
||||||
|
|
||||||
PageResult<ActivityPayTableRespVO> getActivityPayTableGroupPage(ActivityPayTablePageReqVO pageReqVO);
|
PageResult<ActivityPayTableRespVO> getActivityPayTableGroupPage(ActivityPayTablePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
void insertOne(ActivityPayTableDO activityPayTableDO);
|
||||||
|
|
||||||
|
ActivityPayTableDO getOneByActivityIdAndTimeAndNum(Long activityId, LocalDate time, Integer num);
|
||||||
|
|
||||||
|
void updateOne(ActivityPayTableDO activityPayTableDO);
|
||||||
}
|
}
|
@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -125,4 +126,34 @@ public class ActivityPayTableServiceImpl implements ActivityPayTableService {
|
|||||||
public void insertBatch(List<ActivityPayTableDO> list) {
|
public void insertBatch(List<ActivityPayTableDO> list) {
|
||||||
activityPayTableMapper.insertBatch(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);
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,12 +2,11 @@ package cn.iocoder.yudao.module.member.service.activitytable;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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.activityrestaurant.vo.ActivityRestaurantSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
|
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.*;
|
||||||
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.app.activity.vo.AppCheckVO;
|
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.controller.app.activity.vo.AppUnbindVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@ -74,4 +73,9 @@ public interface ActivityTableService {
|
|||||||
List<ActivityTableDO> getListByActivityId(Long activityId);
|
List<ActivityTableDO> getListByActivityId(Long activityId);
|
||||||
|
|
||||||
List<ActivityTableDO> getListByActivityIdAndTimeAndUserId(Long activityId, LocalDate time, Long userId);
|
List<ActivityTableDO> getListByActivityIdAndTimeAndUserId(Long activityId, LocalDate time, Long userId);
|
||||||
|
|
||||||
|
|
||||||
|
Long createActivityTableFalse( ActivityTableCreateVO createReqVO);
|
||||||
|
|
||||||
|
Boolean updateTime(@Valid @RequestBody UpdateTimeVO updateTimeVO);
|
||||||
}
|
}
|
@ -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.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
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.activityrestaurant.vo.ActivityRestaurantSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
|
import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.*;
|
||||||
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.app.activity.vo.AppCheckVO;
|
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.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.activitytable.ActivityTableDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
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.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 cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -47,6 +50,12 @@ public class ActivityTableServiceImpl implements ActivityTableService {
|
|||||||
@Resource
|
@Resource
|
||||||
private MemberUserService memberUserService;
|
private MemberUserService memberUserService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActivityPayService activityPayService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActivityPayTableService activityPayTableService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createActivityTable(ActivityTableSaveReqVO createReqVO) {
|
public Long createActivityTable(ActivityTableSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -130,17 +139,17 @@ public class ActivityTableServiceImpl implements ActivityTableService {
|
|||||||
@Override
|
@Override
|
||||||
public synchronized Boolean userTableCheck(AppCheckVO vo) {
|
public synchronized Boolean userTableCheck(AppCheckVO vo) {
|
||||||
|
|
||||||
if(CollectionUtil.isEmpty(vo.getSerialNumbers())){
|
if(CollectionUtil.isEmpty(vo.getMenuList())){
|
||||||
throw exception(new ErrorCode(1_005_000_01, "请选择桌号"));
|
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");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
LocalDate localDate = LocalDate.parse(vo.getTime(), formatter);
|
LocalDate localDate = LocalDate.parse(vo.getTime(), formatter);
|
||||||
List<ActivityTableDO> activityTableDOS = activityTableMapper.selectList(Wrappers.lambdaQuery(ActivityTableDO.class)
|
List<ActivityTableDO> activityTableDOS = activityTableMapper.selectList(Wrappers.lambdaQuery(ActivityTableDO.class)
|
||||||
.eq(ActivityTableDO::getReserveTime, localDate)
|
.eq(ActivityTableDO::getReserveTime, localDate)
|
||||||
.eq(ActivityTableDO::getActivityId, vo.getActivityId())
|
.eq(ActivityTableDO::getActivityId, vo.getActivityId())
|
||||||
.eq(ActivityTableDO::getType, "0")
|
.eq(ActivityTableDO::getType, "0")
|
||||||
.in(ActivityTableDO::getSerialNumber, vo.getSerialNumbers()));
|
.in(ActivityTableDO::getSerialNumber, collect));
|
||||||
|
|
||||||
if (!activityTableDOS.isEmpty()) {
|
if (!activityTableDOS.isEmpty()) {
|
||||||
String result = activityTableDOS.stream()
|
String result = activityTableDOS.stream()
|
||||||
@ -152,17 +161,19 @@ public class ActivityTableServiceImpl implements ActivityTableService {
|
|||||||
List<ActivityTableDO> addList = new ArrayList<>();
|
List<ActivityTableDO> addList = new ArrayList<>();
|
||||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
MemberUserDO user = memberUserService.getUser(loginUserId);
|
MemberUserDO user = memberUserService.getUser(loginUserId);
|
||||||
BigDecimal divide = vo.getPrice().divide(new BigDecimal(vo.getSerialNumbers().size()), 2, RoundingMode.HALF_UP);
|
// BigDecimal divide = vo.getPrice().divide(new BigDecimal(vo.getSerialNumbers().size()), 2, RoundingMode.HALF_UP);
|
||||||
for (Integer serialNumber : vo.getSerialNumbers()) {
|
for (MenuDTO menu : vo.getMenuList()) {
|
||||||
ActivityTableDO activityTableDO = new ActivityTableDO();
|
ActivityTableDO activityTableDO = new ActivityTableDO();
|
||||||
activityTableDO.setUserId(loginUserId);
|
activityTableDO.setUserId(loginUserId);
|
||||||
activityTableDO.setMobile(user.getMobile());
|
activityTableDO.setMobile(user.getMobile());
|
||||||
activityTableDO.setNickName(user.getNickname());
|
activityTableDO.setNickName(user.getNickname());
|
||||||
activityTableDO.setAvatar(user.getAvatar());
|
activityTableDO.setAvatar(user.getAvatar());
|
||||||
activityTableDO.setActivityId(vo.getActivityId());
|
activityTableDO.setActivityId(vo.getActivityId());
|
||||||
activityTableDO.setSerialNumber(serialNumber);
|
activityTableDO.setSerialNumber(Integer.valueOf(menu.getSerialNumbers()));
|
||||||
activityTableDO.setPrice(divide);
|
activityTableDO.setPrice(BigDecimal.ZERO);
|
||||||
activityTableDO.setReserveTime(localDate);
|
activityTableDO.setReserveTime(localDate);
|
||||||
|
activityTableDO.setMenuId(menu.getMenuId());
|
||||||
|
activityTableDO.setMenuName(menu.getMenuName());
|
||||||
addList.add(activityTableDO);
|
addList.add(activityTableDO);
|
||||||
}
|
}
|
||||||
activityTableMapper.insertBatch(addList);
|
activityTableMapper.insertBatch(addList);
|
||||||
@ -196,4 +207,84 @@ public class ActivityTableServiceImpl implements ActivityTableService {
|
|||||||
.eq(ActivityTableDO::getUserId, userId)
|
.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;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,8 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.customizeExcel;
|
package cn.iocoder.yudao.module.member.service.customizeExcel;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.customizeExcel.vo.*;
|
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;
|
import java.util.List;
|
||||||
|
|
||||||
@ -23,4 +21,8 @@ public interface CustomizeExcelService {
|
|||||||
List<SubsidyExcelVO> exportSubsidyExcel(String startTime,String endTime,Long carteenId);
|
List<SubsidyExcelVO> exportSubsidyExcel(String startTime,String endTime,Long carteenId);
|
||||||
|
|
||||||
List<CashAmountExcelVO> exportCashAmountExcel(String startTime,String endTime,Long carteenId);
|
List<CashAmountExcelVO> exportCashAmountExcel(String startTime,String endTime,Long carteenId);
|
||||||
|
|
||||||
|
List<ActivityMxVO> exportActivityMx();
|
||||||
|
|
||||||
|
List<ActivityReserveVO> exportActivityReserve();
|
||||||
}
|
}
|
||||||
|
@ -47,4 +47,14 @@ public class CustomizeExcelServiceImpl implements CustomizeExcelService {
|
|||||||
public List<CashAmountExcelVO> exportCashAmountExcel(String startTime, String endTime, Long carteenId) {
|
public List<CashAmountExcelVO> exportCashAmountExcel(String startTime, String endTime, Long carteenId) {
|
||||||
return customizeExcelMapper.exportCashAmountExcel(startTime,endTime,carteenId);
|
return customizeExcelMapper.exportCashAmountExcel(startTime,endTime,carteenId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ActivityMxVO> exportActivityMx() {
|
||||||
|
return customizeExcelMapper.exportActivityMx();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ActivityReserveVO> exportActivityReserve() {
|
||||||
|
return customizeExcelMapper.exportActivityReserve();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,26 @@
|
|||||||
GROUP BY activity_id
|
GROUP BY activity_id
|
||||||
</select>
|
</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>
|
</mapper>
|
@ -160,4 +160,46 @@
|
|||||||
and DATE_FORMAT(mc.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
|
and DATE_FORMAT(mc.create_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
|
||||||
</select>
|
</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>
|
</mapper>
|
@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
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.operatelog.core.annotations.OperateLog;
|
||||||
import cn.iocoder.yudao.framework.pay.core.client.PayClient;
|
import cn.iocoder.yudao.framework.pay.core.client.PayClient;
|
||||||
import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
|
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.framework.pay.core.enums.refund.PayRefundStatusRespEnum;
|
||||||
import cn.iocoder.yudao.module.member.api.activitypay.ActivityApi;
|
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.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.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.PayNotifyTaskDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.notify.vo.PayNotifyTaskPageReqVO;
|
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.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.convert.notify.PayNotifyTaskConvert;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO;
|
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.order.PayOrderService;
|
||||||
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
|
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
|
||||||
import cn.iocoder.yudao.module.pay.service.wxprofitsharing.WxProfitsharingService;
|
import cn.iocoder.yudao.module.pay.service.wxprofitsharing.WxProfitsharingService;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@ -143,7 +147,7 @@ public class PayNotifyController {
|
|||||||
|
|
||||||
ActivityPayDTO activityPayDTO = new ActivityPayDTO();
|
ActivityPayDTO activityPayDTO = new ActivityPayDTO();
|
||||||
activityPayDTO.setActivityId(Long.valueOf(deserializedMap.get("activityId")));
|
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.setPrice(new BigDecimal(deserializedMap.get("price")).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
||||||
activityPayDTO.setUserId(Long.valueOf(deserializedMap.get("userId")));
|
activityPayDTO.setUserId(Long.valueOf(deserializedMap.get("userId")));
|
||||||
activityPayDTO.setStatus(deserializedMap.get("status"));
|
activityPayDTO.setStatus(deserializedMap.get("status"));
|
||||||
@ -154,6 +158,13 @@ public class PayNotifyController {
|
|||||||
activityPayDTO.setTransactionId( notify.getChannelOrderNo());
|
activityPayDTO.setTransactionId( notify.getChannelOrderNo());
|
||||||
activityPayDTO.setOpenid(deserializedMap.get("openid"));
|
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);
|
activityApi.createActivityPay(activityPayDTO);
|
||||||
notifyRedisTemplate.delete("RESERVED" + notify.getOutTradeNo());
|
notifyRedisTemplate.delete("RESERVED" + notify.getOutTradeNo());
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import org.hibernate.validator.constraints.URL;
|
|||||||
|
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 支付订单提交 Request VO")
|
@Schema(description = "管理后台 - 支付订单提交 Request VO")
|
||||||
@ -45,4 +46,6 @@ public class PayOrderSubmitReqVO {
|
|||||||
private String diningPeriod;
|
private String diningPeriod;
|
||||||
|
|
||||||
private Long voucherId;
|
private Long voucherId;
|
||||||
|
|
||||||
|
private List<MenuVO> menuList;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.pay.service.order;
|
package cn.iocoder.yudao.module.pay.service.order;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
@ -178,7 +179,6 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|||||||
HashMap<String, String> stringStringHashMap = new HashMap<>();
|
HashMap<String, String> stringStringHashMap = new HashMap<>();
|
||||||
stringStringHashMap.put("activityId",reqVO.getActivityId().toString());
|
stringStringHashMap.put("activityId",reqVO.getActivityId().toString());
|
||||||
stringStringHashMap.put("userId",getLoginUserId().toString());
|
stringStringHashMap.put("userId",getLoginUserId().toString());
|
||||||
stringStringHashMap.put("serialNumbers",reqVO.getSerialNumbers());
|
|
||||||
stringStringHashMap.put("price",unifiedOrderReqDTO.getPrice().toString());
|
stringStringHashMap.put("price",unifiedOrderReqDTO.getPrice().toString());
|
||||||
stringStringHashMap.put("status",reqVO.getStatus());
|
stringStringHashMap.put("status",reqVO.getStatus());
|
||||||
stringStringHashMap.put("reserveTime",reqVO.getReserveTime());
|
stringStringHashMap.put("reserveTime",reqVO.getReserveTime());
|
||||||
@ -188,6 +188,13 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|||||||
if(reqVO.getVoucherId()!=null){
|
if(reqVO.getVoucherId()!=null){
|
||||||
stringStringHashMap.put("voucherId",reqVO.getVoucherId().toString());
|
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()
|
payRedis.opsForValue().set("RESERVED"+unifiedOrderReqDTO.getOutTradeNo()
|
||||||
, JSONUtil.toJsonStr(stringStringHashMap));
|
, JSONUtil.toJsonStr(stringStringHashMap));
|
||||||
|
Reference in New Issue
Block a user