初始化order和pay模块

This commit is contained in:
2025-08-27 10:02:53 +08:00
parent ea780302e3
commit 1555739fcd
536 changed files with 6640 additions and 17174 deletions

View File

@@ -6,25 +6,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 项目的启动类
*
* 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
* 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
* 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
*
* @author 芋道源码
*/
@SpringBootApplication
public class TradeServerApplication {
public static void main(String[] args) {
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
SpringApplication.run(TradeServerApplication.class, args);
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
// 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章
}
}

View File

@@ -1,47 +0,0 @@
package com.tashow.cloud.trade.api.order;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.trade.convert.order.TradeOrderConvert;
import com.tashow.cloud.trade.service.order.TradeOrderQueryService;
import com.tashow.cloud.trade.service.order.TradeOrderUpdateService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collection;
import java.util.List;
import static com.tashow.cloud.common.pojo.CommonResult.success;
/**
* 订单 API 接口实现类
*
* @author HUIHUI
*/
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class TradeOrderApiImpl implements TradeOrderApi {
@Resource
private TradeOrderUpdateService tradeOrderUpdateService;
@Resource
private TradeOrderQueryService tradeOrderQueryService;
@Override
public CommonResult<List<TradeOrderRespDTO>> getOrderList(Collection<Long> ids) {
return success(TradeOrderConvert.INSTANCE.convertList04(tradeOrderQueryService.getOrderList(ids)));
}
@Override
public CommonResult<TradeOrderRespDTO> getOrder(Long id) {
return success(TradeOrderConvert.INSTANCE.convert(tradeOrderQueryService.getOrder(id)));
}
@Override
public CommonResult<Boolean> cancelPaidOrder(Long userId, Long orderId, Integer cancelType) {
tradeOrderUpdateService.cancelPaidOrder(userId, orderId, cancelType);
return success(true);
}
}

View File

@@ -1,12 +1,10 @@
package com.tashow.cloud.trade.controller.admin.aftersale;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO;
import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.*;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.memberapi.api.user.MemberUserApi;
import com.tashow.cloud.payapi.api.notify.dto.PayRefundNotifyReqDTO;
import com.tashow.cloud.trade.controller.admin.aftersale.vo.*;
import com.tashow.cloud.trade.convert.aftersale.AfterSaleConvert;
import com.tashow.cloud.trade.dal.dataobject.aftersale.AfterSaleDO;
@@ -16,26 +14,22 @@ import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderItemDO;
import com.tashow.cloud.trade.service.aftersale.AfterSaleLogService;
import com.tashow.cloud.trade.service.aftersale.AfterSaleService;
import com.tashow.cloud.trade.service.order.TradeOrderQueryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.tashow.cloud.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.util.servlet.ServletUtils.getClientIP;
import static com.tashow.cloud.security.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 售后订单")
// 管理后台 - 售后订单
@RestController
@RequestMapping("/trade/after-sale")
@Validated
@@ -51,8 +45,8 @@ public class AfterSaleController {
@Resource
private MemberUserApi memberUserApi;
// 获得售后订单分页
@GetMapping("/page")
@Operation(summary = "获得售后订单分页")
@PreAuthorize("@ss.hasPermission('trade:after-sale:query')")
public CommonResult<PageResult<AfterSaleRespPageItemVO>> getAfterSalePage(@Valid AfterSalePageReqVO pageVO) {
// 查询售后
@@ -62,14 +56,14 @@ public class AfterSaleController {
}
// 查询会员
Map<Long, MemberUserRespDTO> memberUsers = memberUserApi.getUserMap(
convertSet(pageResult.getList(), AfterSaleDO::getUserId));
return success(AfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers));
// Map<Long, MemberUserRespDTO> memberUsers = memberUserApi.getUserMap(
// convertSet(pageResult.getList(), AfterSaleDO::getUserId));
return success(AfterSaleConvert.INSTANCE.convertPage(pageResult, null));
}
@GetMapping("/get-detail")
@Operation(summary = "获得售后订单详情")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
// 获得售后订单详情
// 售后编号 - 必填 - 示例: 1
@PreAuthorize("@ss.hasPermission('trade:after-sale:query')")
public CommonResult<AfterSaleDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
// 查询订单
@@ -83,57 +77,78 @@ public class AfterSaleController {
// 查询订单项
TradeOrderItemDO orderItem = tradeOrderQueryService.getOrderItem(afterSale.getOrderItemId());
// 拼接数据
MemberUserRespDTO user = memberUserApi.getUser(afterSale.getUserId()).getCheckedData();
// MemberUserRespDTO user = memberUserApi.getUser(afterSale.getUserId()).getCheckedData();
List<AfterSaleLogDO> logs = afterSaleLogService.getAfterSaleLogList(afterSale.getId());
return success(AfterSaleConvert.INSTANCE.convert(afterSale, order, orderItem, user, logs));
return success(AfterSaleConvert.INSTANCE.convert(afterSale, order, orderItem, null, logs));
}
/**
* 同意售后
* @param id 售后编号
* @return
*/
@PutMapping("/agree")
@Operation(summary = "同意售后")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('trade:after-sale:agree')")
public CommonResult<Boolean> agreeAfterSale(@RequestParam("id") Long id) {
afterSaleService.agreeAfterSale(getLoginUserId(), id);
return success(true);
}
/**
* 拒绝售后
* @param confirmReqVO
* @return
*/
@PutMapping("/disagree")
@Operation(summary = "拒绝售后")
@PreAuthorize("@ss.hasPermission('trade:after-sale:disagree')")
public CommonResult<Boolean> disagreeAfterSale(@RequestBody AfterSaleDisagreeReqVO confirmReqVO) {
afterSaleService.disagreeAfterSale(getLoginUserId(), confirmReqVO);
return success(true);
}
/**
* 确认收货
* @param id 售后编号
* @return
*/
@PutMapping("/receive")
@Operation(summary = "确认收货")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('trade:after-sale:receive')")
public CommonResult<Boolean> receiveAfterSale(@RequestParam("id") Long id) {
afterSaleService.receiveAfterSale(getLoginUserId(), id);
return success(true);
}
/**
* 拒绝收货
* @param refuseReqVO 售后编号
* @return
*/
@PutMapping("/refuse")
@Operation(summary = "拒绝收货")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('trade:after-sale:receive')")
public CommonResult<Boolean> refuseAfterSale(AfterSaleRefuseReqVO refuseReqVO) {
afterSaleService.refuseAfterSale(getLoginUserId(), refuseReqVO);
return success(true);
}
/**
* 确认退款
* @param id 售后编号
* @return
*/
@PutMapping("/refund")
@Operation(summary = "确认退款")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('trade:after-sale:refund')")
public CommonResult<Boolean> refundAfterSale(@RequestParam("id") Long id) {
afterSaleService.refundAfterSale(getLoginUserId(), getClientIP(), id);
return success(true);
}
/**
* 更新售后订单为已退款
* @param notifyReqDTO
* @return
*/
@PostMapping("/update-refunded")
@Operation(summary = "更新售后订单为已退款") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob
@PermitAll // 无需登录,安全由 PayDemoOrderService 内部校验实现
public CommonResult<Boolean> updateAfterRefund(@RequestBody PayRefundNotifyReqDTO notifyReqDTO) {
// 目前业务逻辑,不需要做任何事情

View File

@@ -1,14 +1,15 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 交易售后 Base VO提供给添加、修改、详细的子 VO 使用
@@ -17,103 +18,103 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Data
public class AfterSaleBaseVO {
@Schema(description = "售后流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "202211190847450020500077")
// 售后流水号 - 必填 - 示例: 202211190847450020500077
@NotNull(message = "售后流水号不能为空")
private String no;
@Schema(description = "售后状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
// 售后状态 - 必填 - 示例: 10
@NotNull(message = "售后状态不能为空")
private Integer status;
@Schema(description = "售后类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
// 售后类型 - 必填 - 示例: 20
@NotNull(message = "售后类型不能为空")
private Integer type;
@Schema(description = "售后方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
// 售后方式 - 必填 - 示例: 10
@NotNull(message = "售后方式不能为空")
private Integer way;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30337")
// 用户编号 - 必填 - 示例: 30337
@NotNull(message = "用户编号不能为空")
private Long userId;
@Schema(description = "申请原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "不喜欢")
// 申请原因 - 必填 - 示例: 不喜欢
@NotNull(message = "申请原因不能为空")
private String applyReason;
@Schema(description = "补充描述", example = "你说的对")
// 补充描述 - 示例: 你说的对
private String applyDescription;
@Schema(description = "补充凭证图片", example = "https://www.iocoder.cn/1.png")
// 补充凭证图片 - 示例: https://www.iocoder.cn/1.png
private List<String> applyPicUrls;
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18078")
// 订单编号 - 必填 - 示例: 18078
@NotNull(message = "订单编号不能为空")
private Long orderId;
@Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022111917190001")
// 订单流水号 - 必填 - 示例: 2022111917190001
@NotNull(message = "订单流水号不能为空")
private String orderNo;
@Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "572")
// 订单项编号 - 必填 - 示例: 572
@NotNull(message = "订单项编号不能为空")
private Long orderItemId;
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2888")
// 商品 SPU 编号 - 必填 - 示例: 2888
@NotNull(message = "商品 SPU 编号不能为空")
private Long spuId;
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
// 商品 SPU 名称 - 必填 - 示例: 李四
@NotNull(message = "商品 SPU 名称不能为空")
private String spuName;
@Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15657")
// 商品 SKU 编号 - 必填 - 示例: 15657
@NotNull(message = "商品 SKU 编号不能为空")
private Long skuId;
@Schema(description = "商品图片", example = "https://www.iocoder.cn/2.png")
// 商品图片 - 示例: https://www.iocoder.cn/2.png
private String picUrl;
@Schema(description = "购买数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20012")
// 购买数量 - 必填 - 示例: 20012
@NotNull(message = "购买数量不能为空")
private Integer count;
@Schema(description = "审批时间")
// 审批时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime auditTime;
@Schema(description = "审批人", example = "30835")
// 审批人 - 示例: 30835
private Long auditUserId;
@Schema(description = "审批备注", example = "不香")
// 审批备注 - 示例: 不香
private String auditReason;
@Schema(description = "退款金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "18077")
// 退款金额,单位:分 - 必填 - 示例: 18077
@NotNull(message = "退款金额,单位:分不能为空")
private Integer refundPrice;
@Schema(description = "支付退款编号", example = "10271")
// 支付退款编号 - 示例: 10271
private Long payRefundId;
@Schema(description = "退款时间")
// 退款时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime refundTime;
@Schema(description = "退货物流公司编号", example = "10")
//退货物流公司编号
private Long logisticsId;
@Schema(description = "退货物流单号", example = "610003952009")
//退货物流单号
private String logisticsNo;
@Schema(description = "退货时间")
//退货时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime deliveryTime;
@Schema(description = "收货时间")
//收货时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime receiveTime;
@Schema(description = "收货备注", example = "不喜欢")
//收货备注
private String receiveReason;
}

View File

@@ -1,20 +1,21 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.admin.aftersale.vo.log.AfterSaleLogRespVO;
import com.tashow.cloud.trade.controller.admin.base.member.user.MemberUserRespVO;
import com.tashow.cloud.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderBaseVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderItemBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 售后订单的详情 Response VO")
// 管理后台 - 售后订单的详情 Response VO
@Data
public class AfterSaleDetailRespVO extends AfterSaleBaseVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 售后编号 - 必填 - 示例: 1024
private Long id;
@@ -38,7 +39,7 @@ public class AfterSaleDetailRespVO extends AfterSaleBaseVO {
*/
private List<AfterSaleLogRespVO> logs;
@Schema(description = "管理后台 - 交易订单的详情的订单项目")
// 管理后台 - 交易订单的详情的订单项目
@Data
public static class OrderItem extends TradeOrderItemBaseVO {

View File

@@ -1,20 +1,19 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 交易售后拒绝 Request VO")
// 管理后台 - 交易售后拒绝 Request VO
@Data
public class AfterSaleDisagreeReqVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 售后编号 - 必填 - 示例: 1024
@NotNull(message = "售后编号不能为空")
private Long id;
@Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
// 审批备注 - 必填 - 示例: 你猜
@NotEmpty(message = "审批备注不能为空")
private String auditReason;

View File

@@ -1,11 +1,12 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum;
import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum;
import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import com.tashow.cloud.common.pojo.PageParam;
import com.tashow.cloud.common.validation.InEnum;
import com.tashow.cloud.tradeapi.enums.aftersale.AfterSaleStatusEnum;
import com.tashow.cloud.tradeapi.enums.aftersale.AfterSaleTypeEnum;
import com.tashow.cloud.tradeapi.enums.aftersale.AfterSaleWayEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -13,39 +14,40 @@ 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;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 交易售后分页 Request VO")
// 管理后台 - 交易售后分页 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AfterSalePageReqVO extends PageParam {
@Schema(description = "用户编号", example = "1024")
// 用户编号 - 示例: 1024
private Long userId;
@Schema(description = "售后流水号", example = "202211190847450020500077")
// 售后流水号 - 示例: 202211190847450020500077
private String no;
@Schema(description = "售后状态", example = "10")
// 售后状态 - 示例: 10
@InEnum(value = AfterSaleStatusEnum.class, message = "售后状态必须是 {value}")
private Integer status;
@Schema(description = "售后类型", example = "20")
// 售后类型 - 示例: 20
@InEnum(value = AfterSaleTypeEnum.class, message = "售后类型必须是 {value}")
private Integer type;
@Schema(description = "售后方式", example = "10")
// 售后方式 - 示例: 10
@InEnum(value = AfterSaleWayEnum.class, message = "售后方式必须是 {value}")
private Integer way;
@Schema(description = "订单编号", example = "18078")
// 订单编号 - 示例: 18078
private String orderNo;
@Schema(description = "商品 SPU 名称", example = "李四")
// 商品 SPU 名称 - 示例: 李四
private String spuName;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@@ -1,19 +1,18 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Schema(description = "管理后台 - 交易售后拒绝收货 Request VO")
// 管理后台 - 交易售后拒绝收货 Request VO
@Data
public class AfterSaleRefuseReqVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 售后编号 - 必填 - 示例: 1024
@NotNull(message = "售后编号不能为空")
private Long id;
@Schema(description = "收货备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
// 收货备注 - 必填 - 示例: 你猜
@NotNull(message = "收货备注不能为空")
private String refuseMemo;

View File

@@ -1,8 +1,9 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.admin.base.member.user.MemberUserRespVO;
import com.tashow.cloud.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -10,16 +11,16 @@ import lombok.ToString;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 交易售后分页的每一条记录 Response VO")
// 管理后台 - 交易售后分页 Response VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AfterSaleRespPageItemVO extends AfterSaleBaseVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27630")
// 售后编号 - 必填 - 示例: 27630
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
/**

View File

@@ -1,37 +1,36 @@
package com.tashow.cloud.trade.controller.admin.aftersale.vo.log;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 交易售后日志 Response VO")
// 管理后台 - 交易售后日志 Response VO
@Data
public class AfterSaleLogRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20669")
// 编号 - 必填 - 示例: 20669
private Long id;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22634")
// 用户编号 - 必填 - 示例: 22634
private Long userId;
@Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
// 用户类型 - 必填 - 示例: 2
private Integer userType;
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3023")
// 售后编号 - 必填 - 示例: 3023
private Long afterSaleId;
@Schema(description = "售后状态(之前)", example = "2")
// 售后状态(之前) - 示例: 2
private Integer beforeStatus;
@Schema(description = "售后状态(之后)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后状态(之后) - 必填 - 示例: 1
private Integer afterStatus;
@Schema(description = "操作明细", requiredMode = Schema.RequiredMode.REQUIRED, example = "维权完成退款金额¥37776.00")
// 操作明细 - 必填 - 示例: 维权完成退款金额¥37776.00
private String content;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
}

View File

@@ -1,19 +1,19 @@
package com.tashow.cloud.trade.controller.admin.base.member.user;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
@Schema(description = "管理后台 - 会员用户 Response VO")
// 管理后台 - 会员用户 Response VO
@Data
public class MemberUserRespVO {
@Schema(description = "用户 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 用户 ID - 必填 - 示例: 1
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
// 用户昵称 - 必填 - 示例: 芋道源码
private String nickname;
@Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png")
// 用户头像 - 示例: https://www.iocoder.cn/xxx.png
private String avatar;
}

View File

@@ -1,22 +1,22 @@
package com.tashow.cloud.trade.controller.admin.base.product.property;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
@Schema(description = "管理后台 - 商品属性值的明细 Response VO")
// 管理后台 - 商品属性值的明细 Response VO
@Data
public class ProductPropertyValueDetailRespVO {
@Schema(description = "属性的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 属性的编号 - 必填 - 示例: 1
private Long propertyId;
@Schema(description = "属性的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "颜色")
// 属性的名称 - 必填 - 示例: 颜色
private String propertyName;
@Schema(description = "属性值的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 属性值的编号 - 必填 - 示例: 1024
private Long valueId;
@Schema(description = "属性值的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "红色")
// 属性值的名称 - 必填 - 示例: 红色
private String valueName;
}

View File

@@ -1,19 +1,19 @@
package com.tashow.cloud.trade.controller.admin.base.system.user;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
@Schema(description = "用户精简信息 VO")
// 用户精简信息 VO
@Data
public class UserSimpleBaseVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 用户编号 - 必填 - 示例: 1
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
// 用户昵称 - 必填 - 示例: 芋艿
private String nickname;
@Schema(description = "用户头像", example = "https://www.iocoder.cn/1.png")
// 用户头像 - 示例: https://www.iocoder.cn/1.png
private String avatar;
}

View File

@@ -1,66 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.record.BrokerageRecordPageReqVO;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.record.BrokerageRecordRespVO;
import com.tashow.cloud.trade.convert.brokerage.BrokerageRecordConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageRecordDO;
import com.tashow.cloud.trade.service.brokerage.BrokerageRecordService;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.Map;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@Tag(name = "管理后台 - 佣金记录")
@RestController
@RequestMapping("/trade/brokerage-record")
@Validated
public class BrokerageRecordController {
@Resource
private BrokerageRecordService brokerageRecordService;
@Resource
private MemberUserApi memberUserApi;
@GetMapping("/get")
@Operation(summary = "获得佣金记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('trade:brokerage-record:query')")
public CommonResult<BrokerageRecordRespVO> getBrokerageRecord(@RequestParam("id") Long id) {
BrokerageRecordDO brokerageRecord = brokerageRecordService.getBrokerageRecord(id);
return success(BrokerageRecordConvert.INSTANCE.convert(brokerageRecord));
}
@GetMapping("/page")
@Operation(summary = "获得佣金记录分页")
@PreAuthorize("@ss.hasPermission('trade:brokerage-record:query')")
public CommonResult<PageResult<BrokerageRecordRespVO>> getBrokerageRecordPage(@Valid BrokerageRecordPageReqVO pageVO) {
PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(pageVO);
// 查询用户信息
Set<Long> userIds = convertSet(pageResult.getList(), BrokerageRecordDO::getUserId);
userIds.addAll(convertList(pageResult.getList(), BrokerageRecordDO::getSourceUserId));
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
// 拼接数据
return success(BrokerageRecordConvert.INSTANCE.convertPage(pageResult, userMap));
}
}

View File

@@ -1,121 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.*;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.user.*;
import com.tashow.cloud.trade.convert.brokerage.BrokerageUserConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageUserDO;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
import com.tashow.cloud.trade.service.brokerage.BrokerageRecordService;
import com.tashow.cloud.trade.service.brokerage.BrokerageUserService;
import com.tashow.cloud.trade.service.brokerage.BrokerageWithdrawService;
import com.tashow.cloud.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO;
import com.tashow.cloud.trade.service.brokerage.bo.UserBrokerageSummaryRespBO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static java.util.Arrays.asList;
@Tag(name = "管理后台 - 分销用户")
@RestController
@RequestMapping("/trade/brokerage-user")
@Validated
public class BrokerageUserController {
@Resource
private BrokerageUserService brokerageUserService;
@Resource
private BrokerageRecordService brokerageRecordService;
@Resource
private BrokerageWithdrawService brokerageWithdrawService;
@Resource
private MemberUserApi memberUserApi;
@PostMapping("/create")
@Operation(summary = "创建分销用户")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:create')")
public CommonResult<Long> createBrokerageUser(@Valid @RequestBody BrokerageUserCreateReqVO createReqVO) {
return success(brokerageUserService.createBrokerageUser(createReqVO));
}
@PutMapping("/update-bind-user")
@Operation(summary = "修改推广员")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-bind-user')")
public CommonResult<Boolean> updateBindUser(@Valid @RequestBody BrokerageUserUpdateBrokerageUserReqVO updateReqVO) {
brokerageUserService.updateBrokerageUserId(updateReqVO.getId(), updateReqVO.getBindUserId());
return success(true);
}
@PutMapping("/clear-bind-user")
@Operation(summary = "清除推广员")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:clear-bind-user')")
public CommonResult<Boolean> clearBindUser(@Valid @RequestBody BrokerageUserClearBrokerageUserReqVO updateReqVO) {
brokerageUserService.updateBrokerageUserId(updateReqVO.getId(), null);
return success(true);
}
@PutMapping("/update-brokerage-enable")
@Operation(summary = "修改推广资格")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-brokerage-enable')")
public CommonResult<Boolean> updateBrokerageEnabled(@Valid @RequestBody BrokerageUserUpdateBrokerageEnabledReqVO updateReqVO) {
brokerageUserService.updateBrokerageUserEnabled(updateReqVO.getId(), updateReqVO.getEnabled());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得分销用户")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')")
public CommonResult<BrokerageUserRespVO> getBrokerageUser(@RequestParam("id") Long id) {
BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(id);
// TODO @疯狂:是不是搞成一个统一的 convert
BrokerageUserRespVO respVO = BrokerageUserConvert.INSTANCE.convert(brokerageUser);
return success(BrokerageUserConvert.INSTANCE.copyTo(memberUserApi.getUser(id).getCheckedData(), respVO));
}
@GetMapping("/page")
@Operation(summary = "获得分销用户分页")
@PreAuthorize("@ss.hasPermission('trade:brokerage-user:query')")
public CommonResult<PageResult<BrokerageUserRespVO>> getBrokerageUserPage(@Valid BrokerageUserPageReqVO pageVO) {
// 分页查询
PageResult<BrokerageUserDO> pageResult = brokerageUserService.getBrokerageUserPage(pageVO);
// 查询用户信息
Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId);
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
// 合计分佣的推广订单
Map<Long, UserBrokerageSummaryRespBO> brokerageOrderSummaryMap = brokerageRecordService.getUserBrokerageSummaryMapByUserId(
userIds, BrokerageRecordBizTypeEnum.ORDER.getType(), BrokerageRecordStatusEnum.SETTLEMENT.getStatus());
// 合计分佣的推广用户
// TODO @疯狂:转成 map 批量读取
Map<Long, Long> brokerageUserCountMap = convertMap(userIds,
userId -> userId,
userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null));
// 合计分佣的提现
// TODO @疯狂:如果未来支持了打款这个动作,可能 status 会不对;
Map<Long, BrokerageWithdrawSummaryRespBO> withdrawMap = brokerageWithdrawService.getWithdrawSummaryMapByUserId(
userIds, asList(BrokerageWithdrawStatusEnum.AUDIT_SUCCESS, BrokerageWithdrawStatusEnum.WITHDRAW_SUCCESS));
// 拼接返回
return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap,
brokerageOrderSummaryMap, withdrawMap));
}
}

View File

@@ -1,96 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.pay.api.notify.dto.PayTransferNotifyReqDTO;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawRejectReqVO;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawPageReqVO;
import com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawRespVO;
import com.tashow.cloud.trade.convert.brokerage.BrokerageWithdrawConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageWithdrawDO;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
import com.tashow.cloud.trade.service.brokerage.BrokerageWithdrawService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.security.PermitAll;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
@Tag(name = "管理后台 - 佣金提现")
@RestController
@RequestMapping("/trade/brokerage-withdraw")
@Validated
@Slf4j
public class BrokerageWithdrawController {
@Resource
private BrokerageWithdrawService brokerageWithdrawService;
@Resource
private MemberUserApi memberUserApi;
@PutMapping("/approve")
@Operation(summary = "通过申请")
@PreAuthorize("@ss.hasPermission('trade:brokerage-withdraw:audit')")
public CommonResult<Boolean> approveBrokerageWithdraw(@RequestParam("id") Long id) {
brokerageWithdrawService.auditBrokerageWithdraw(id,
BrokerageWithdrawStatusEnum.AUDIT_SUCCESS, "", getClientIP());
return success(true);
}
@PutMapping("/reject")
@Operation(summary = "驳回申请")
@PreAuthorize("@ss.hasPermission('trade:brokerage-withdraw:audit')")
public CommonResult<Boolean> rejectBrokerageWithdraw(@Valid @RequestBody BrokerageWithdrawRejectReqVO reqVO) {
brokerageWithdrawService.auditBrokerageWithdraw(reqVO.getId(),
BrokerageWithdrawStatusEnum.AUDIT_FAIL, reqVO.getAuditReason(), getClientIP());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得佣金提现")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('trade:brokerage-withdraw:query')")
public CommonResult<BrokerageWithdrawRespVO> getBrokerageWithdraw(@RequestParam("id") Long id) {
BrokerageWithdrawDO brokerageWithdraw = brokerageWithdrawService.getBrokerageWithdraw(id);
return success(BrokerageWithdrawConvert.INSTANCE.convert(brokerageWithdraw));
}
@GetMapping("/page")
@Operation(summary = "获得佣金提现分页")
@PreAuthorize("@ss.hasPermission('trade:brokerage-withdraw:query')")
public CommonResult<PageResult<BrokerageWithdrawRespVO>> getBrokerageWithdrawPage(@Valid BrokerageWithdrawPageReqVO pageVO) {
// 分页查询
PageResult<BrokerageWithdrawDO> pageResult = brokerageWithdrawService.getBrokerageWithdrawPage(pageVO);
// 拼接信息
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(
convertSet(pageResult.getList(), BrokerageWithdrawDO::getUserId));
return success(BrokerageWithdrawConvert.INSTANCE.convertPage(pageResult, userMap));
}
// TODO @luchiupdate-transferredurl 改成这个。和 update-paid 、update-refunded 保持一致
@PostMapping("/update-transfer")
@Operation(summary = "更新转账订单为转账成功") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob
@PermitAll // 无需登录,安全由 PayDemoOrderService 内部校验实现
public CommonResult<Boolean> updateBrokerageWithdrawTransferred(@RequestBody PayTransferNotifyReqDTO notifyReqDTO) {
log.info("[updateAfterRefund][notifyReqDTO({})]", notifyReqDTO);
brokerageWithdrawService.updateBrokerageWithdrawTransferred(
Long.parseLong(notifyReqDTO.getMerchantTransferId()), notifyReqDTO.getPayTransferId());
return success(true);
}
}

View File

@@ -1,65 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.record;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
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;
/**
* 佣金记录 Base VO提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class BrokerageRecordBaseVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25973")
@NotNull(message = "用户编号不能为空")
private Long userId;
@Schema(description = "业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23353")
@NotEmpty(message = "业务编号不能为空")
private String bizId;
@Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "业务类型不能为空")
private Integer bizType;
@Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "标题不能为空")
private String title;
@Schema(description = "金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "28731")
@NotNull(message = "金额不能为空")
private Integer price;
@Schema(description = "当前总佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "13226")
@NotNull(message = "当前总佣金不能为空")
private Integer totalPrice;
@Schema(description = "说明", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
@NotNull(message = "说明不能为空")
private String description;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
@Schema(description = "冻结时间(天)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "冻结时间(天)不能为空")
private Integer frozenDays;
@Schema(description = "解冻时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime unfreezeTime;
@Schema(description = "来源用户等级")
private Integer sourceUserLevel;
@Schema(description = "来源用户编号")
private Long sourceUserId;
}

View File

@@ -1,36 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.record;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
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 BrokerageRecordPageReqVO extends PageParam {
@Schema(description = "用户编号", example = "25973")
private Long userId;
@Schema(description = "业务类型", example = "1")
private Integer bizType;
@Schema(description = "状态", example = "1")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "用户类型", example = "1")
private Integer sourceUserLevel;
}

View File

@@ -1,37 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.record;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 佣金记录 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BrokerageRecordRespVO extends BrokerageRecordBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28896")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
// ========== 用户信息 ==========
@Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png")
private String userAvatar;
@Schema(description = "用户昵称", example = "李四")
private String userNickname;
// ========== 来源用户信息 ==========
@Schema(description = "来源用户头像", example = "https://www.iocoder.cn/xxx.png")
private String sourceUserAvatar;
@Schema(description = "来源用户昵称", example = "李四")
private String sourceUserNickname;
}

View File

@@ -1,43 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
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;
/**
* 分销用户 Base VO提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class BrokerageUserBaseVO {
@Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4587")
@NotNull(message = "推广员编号不能为空")
private Long bindUserId;
@Schema(description = "推广员绑定时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime bindUserTime;
@Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "推广资格不能为空")
private Boolean brokerageEnabled;
@Schema(description = "成为分销员时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime brokerageTime;
@Schema(description = "可用佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "11089")
@NotNull(message = "可用佣金不能为空")
private Integer price;
@Schema(description = "冻结佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "30916")
@NotNull(message = "冻结佣金不能为空")
private Integer frozenPrice;
}

View File

@@ -1,17 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
@Schema(description = "管理后台 - 分销用户 - 清除推广员 Request VO")
@Data
@ToString(callSuper = true)
public class BrokerageUserClearBrokerageUserReqVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
@NotNull(message = "用户编号不能为空")
private Long id;
}

View File

@@ -1,18 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 分销用户创建 Request VO")
@Data
public class BrokerageUserCreateReqVO {
@Schema(description = "分销用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "分销用户编号不能为空")
private Long userId;
@Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4587")
private Long bindUserId;
}

View File

@@ -1,37 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
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 BrokerageUserPageReqVO extends PageParam {
@Schema(description = "推广员编号", example = "4587")
private Long bindUserId;
@Schema(description = "推广资格", example = "true")
private Boolean brokerageEnabled;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "用户等级", example = "1") // 注意,这了不是用户的会员等级,而是过滤推广的层级
private Integer level;
@Schema(description = "绑定时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] bindUserTime;
}

View File

@@ -1,45 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 分销用户 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BrokerageUserRespVO extends BrokerageUserBaseVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
// ========== 用户信息 ==========
@Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.png")
private String avatar;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
private String nickname;
// ========== 推广信息 ========== 注意:是包括 1 + 2 级的数据
@Schema(description = "推广用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Integer brokerageUserCount;
@Schema(description = "推广订单数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Integer brokerageOrderCount;
@Schema(description = "推广订单金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Integer brokerageOrderPrice;
// ========== 提现信息 ==========
@Schema(description = "已提现金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Integer withdrawPrice;
@Schema(description = "已提现次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
private Integer withdrawCount;
}

View File

@@ -1,21 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
@Schema(description = "管理后台 - 分销用户 - 修改推广员 Request VO")
@Data
@ToString(callSuper = true)
public class BrokerageUserUpdateBrokerageEnabledReqVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
@NotNull(message = "用户编号不能为空")
private Long id;
@Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "推广资格不能为空")
private Boolean enabled;
}

View File

@@ -1,21 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
@Schema(description = "管理后台 - 分销用户 - 修改推广员 Request VO")
@Data
@ToString(callSuper = true)
public class BrokerageUserUpdateBrokerageUserReqVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20019")
@NotNull(message = "用户编号不能为空")
private Long id;
@Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4587")
@NotNull(message = "推广员编号不能为空")
private Long bindUserId;
}

View File

@@ -1,68 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
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;
/**
* 佣金提现 Base VO提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class BrokerageWithdrawBaseVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11436")
@NotNull(message = "用户编号不能为空")
private Long userId;
@Schema(description = "提现金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "18781")
@NotNull(message = "提现金额不能为空")
private Integer price;
@Schema(description = "提现手续费", requiredMode = Schema.RequiredMode.REQUIRED, example = "11417")
@NotNull(message = "提现手续费不能为空")
private Integer feePrice;
@Schema(description = "当前总佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "18576")
@NotNull(message = "当前总佣金不能为空")
private Integer totalPrice;
@Schema(description = "提现类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "提现类型不能为空")
private Integer type;
@Schema(description = "真实姓名", example = "赵六")
private String name;
@Schema(description = "账号", example = "88677912132")
private String accountNo;
@Schema(description = "银行名称", example = "1")
private String bankName;
@Schema(description = "开户地址", example = "海淀支行")
private String bankAddress;
@Schema(description = "收款码", example = "https://www.iocoder.cn")
private String accountQrCodeUrl;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
@Schema(description = "审核驳回原因", example = "不对")
private String auditReason;
@Schema(description = "审核时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime auditTime;
@Schema(description = "备注", example = "随便")
private String remark;
}

View File

@@ -1,47 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
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 BrokerageWithdrawPageReqVO extends PageParam {
@Schema(description = "用户编号", example = "11436")
private Long userId;
@Schema(description = "提现类型", example = "1")
@InEnum(value = BrokerageWithdrawTypeEnum.class, message = "提现类型必须是 {value}")
private Integer type;
@Schema(description = "真实姓名", example = "赵六")
private String name;
@Schema(description = "账号", example = "886779132")
private String accountNo;
@Schema(description = "银行名称", example = "1")
private String bankName;
@Schema(description = "状态", example = "1")
@InEnum(value = BrokerageWithdrawStatusEnum.class, message = "状态必须是 {value}")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@@ -1,22 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.ToString;
@Schema(description = "管理后台 - 驳回申请 Request VO")
@Data
@ToString(callSuper = true)
public class BrokerageWithdrawRejectReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7161")
@NotNull(message = "编号不能为空")
private Long id;
@Schema(description = "审核驳回原因", example = "不对")
@NotEmpty(message = "审核驳回原因不能为空")
private String auditReason;
}

View File

@@ -1,25 +0,0 @@
package com.tashow.cloud.trade.controller.admin.brokerage.vo.withdraw;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 佣金提现 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BrokerageWithdrawRespVO extends BrokerageWithdrawBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7161")
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
private String userNickname;
}

View File

@@ -1,53 +0,0 @@
package com.tashow.cloud.trade.controller.admin.config;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import com.tashow.cloud.trade.controller.admin.config.vo.TradeConfigRespVO;
import com.tashow.cloud.trade.controller.admin.config.vo.TradeConfigSaveReqVO;
import com.tashow.cloud.trade.convert.config.TradeConfigConvert;
import com.tashow.cloud.trade.dal.dataobject.config.TradeConfigDO;
import com.tashow.cloud.trade.service.config.TradeConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 交易中心配置")
@RestController
@RequestMapping("/trade/config")
@Validated
public class TradeConfigController {
@Resource
private TradeConfigService tradeConfigService;
@Value("${yudao.tencent-lbs-key}")
private String tencentLbsKey;
@PutMapping("/save")
@Operation(summary = "更新交易中心配置")
@PreAuthorize("@ss.hasPermission('trade:config:save')")
public CommonResult<Boolean> updateConfig(@Valid @RequestBody TradeConfigSaveReqVO updateReqVO) {
tradeConfigService.saveTradeConfig(updateReqVO);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得交易中心配置")
@PreAuthorize("@ss.hasPermission('trade:config:query')")
public CommonResult<TradeConfigRespVO> getConfig() {
TradeConfigDO config = tradeConfigService.getTradeConfig();
TradeConfigRespVO configVO = TradeConfigConvert.INSTANCE.convert(config);
if (configVO != null) {
configVO.setTencentLbsKey(tencentLbsKey);
}
return success(configVO);
}
}

View File

@@ -1,100 +0,0 @@
package com.tashow.cloud.trade.controller.admin.config.vo;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageBindModeEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageEnabledConditionEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PositiveOrZero;
import java.util.List;
/**
* 交易中心配置 Base VO提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class TradeConfigBaseVO {
// ========== 售后相关 ==========
@Schema(description = "售后的退款理由", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "售后的退款理由不能为空")
private List<String> afterSaleRefundReasons;
@Schema(description = "售后的退货理由", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "售后的退货理由不能为空")
private List<String> afterSaleReturnReasons;
// ========== 配送相关 ==========
/**
* 是否启用全场包邮
*/
@Schema(description = "是否启用全场包邮", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
@NotNull(message = "是否启用全场包邮不能为空")
private Boolean deliveryExpressFreeEnabled;
@Schema(description = "全场包邮的最小金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
@NotNull(message = "全场包邮的最小金额不能为空")
@PositiveOrZero(message = "全场包邮的最小金额不能是负数")
private Integer deliveryExpressFreePrice;
@Schema(description = "是否开启自提", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
@NotNull(message = "是否开启自提不能为空")
private Boolean deliveryPickUpEnabled;
// ========== 分销相关 ==========
@Schema(description = "是否启用分佣", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
@NotNull(message = "是否启用分佣不能为空")
private Boolean brokerageEnabled;
@Schema(description = "分佣模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
@NotNull(message = "分佣模式不能为空")
@InEnum(value = BrokerageEnabledConditionEnum.class, message = "分佣模式必须是 {value}")
private Integer brokerageEnabledCondition;
@Schema(description = "分销关系绑定模式", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
@NotNull(message = "分销关系绑定模式不能为空")
@InEnum(value = BrokerageBindModeEnum.class, message = "分销关系绑定模式必须是 {value}")
private Integer brokerageBindMode;
@Schema(description = "分销海报图地址数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[https://www.iocoder.cn/yudao.jpg]")
private List<String> brokeragePosterUrls;
@Schema(description = "一级返佣比例", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
@NotNull(message = "一级返佣比例不能为空")
@Range(min = 0, max = 100, message = "一级返佣比例必须在 0 - 100 之间")
private Integer brokerageFirstPercent;
@Schema(description = "二级返佣比例", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
@NotNull(message = "二级返佣比例不能为空")
@Range(min = 0, max = 100, message = "二级返佣比例必须在 0 - 100 之间")
private Integer brokerageSecondPercent;
@Schema(description = "用户提现最低金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
@NotNull(message = "用户提现最低金额不能为空")
@PositiveOrZero(message = "用户提现最低金额不能是负数")
private Integer brokerageWithdrawMinPrice;
@Schema(description = "用户提现手续费百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
@NotNull(message = "用户提现手续费百分比不能为空")
@PositiveOrZero(message = "用户提现手续费百分比不能是负数")
private Integer brokerageWithdrawFeePercent;
@Schema(description = "佣金冻结时间(天)", requiredMode = Schema.RequiredMode.REQUIRED, example = "7")
@NotNull(message = "佣金冻结时间(天)不能为空")
@PositiveOrZero(message = "佣金冻结时间不能是负数")
private Integer brokerageFrozenDays;
@Schema(description = "提现方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "[0, 1]")
@NotEmpty(message = "提现方式不能为空")
@InEnum(value = BrokerageWithdrawTypeEnum.class, message = "提现方式必须是 {value}")
private List<Integer> brokerageWithdrawTypes;
}

View File

@@ -1,20 +0,0 @@
package com.tashow.cloud.trade.controller.admin.config.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 交易中心配置 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TradeConfigRespVO extends TradeConfigBaseVO {
@Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "腾讯地图 KEY", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
private String tencentLbsKey;
}

View File

@@ -1,14 +0,0 @@
package com.tashow.cloud.trade.controller.admin.config.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 交易中心配置更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class TradeConfigSaveReqVO extends TradeConfigBaseVO {
}

View File

@@ -1,18 +1,16 @@
package com.tashow.cloud.trade.controller.admin.delivery;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.*;
// 移除Swagger相关导入
import com.tashow.cloud.common.enums.CommonStatusEnum;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.excel.excel.core.util.ExcelUtils;
import com.tashow.cloud.trade.controller.admin.delivery.vo.express.*;
import com.tashow.cloud.trade.convert.delivery.DeliveryExpressConvert;
import com.tashow.cloud.trade.dal.dataobject.delivery.DeliveryExpressDO;
import com.tashow.cloud.trade.service.delivery.DeliveryExpressService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
@@ -23,10 +21,11 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.pojo.CommonResult.success;
import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 快递公司")
// 管理后台 - 快递公司
@RestController
@RequestMapping("/trade/delivery/express")
@Validated
@@ -36,14 +35,14 @@ public class DeliveryExpressController {
private DeliveryExpressService deliveryExpressService;
@PostMapping("/create")
@Operation(summary = "创建快递公司")
// 创建快递公司
@PreAuthorize("@ss.hasPermission('trade:delivery:express:create')")
public CommonResult<Long> createDeliveryExpress(@Valid @RequestBody DeliveryExpressCreateReqVO createReqVO) {
return success(deliveryExpressService.createDeliveryExpress(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新快递公司")
// 更新快递公司
@PreAuthorize("@ss.hasPermission('trade:delivery:express:update')")
public CommonResult<Boolean> updateDeliveryExpress(@Valid @RequestBody DeliveryExpressUpdateReqVO updateReqVO) {
deliveryExpressService.updateDeliveryExpress(updateReqVO);
@@ -51,8 +50,8 @@ public class DeliveryExpressController {
}
@DeleteMapping("/delete")
@Operation(summary = "删除快递公司")
@Parameter(name = "id", description = "编号", required = true)
// 删除快递公司
// 编号 - 必填
@PreAuthorize("@ss.hasPermission('trade:delivery:express:delete')")
public CommonResult<Boolean> deleteDeliveryExpress(@RequestParam("id") Long id) {
deliveryExpressService.deleteDeliveryExpress(id);
@@ -60,8 +59,8 @@ public class DeliveryExpressController {
}
@GetMapping("/get")
@Operation(summary = "获得快递公司")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
// 获得快递公司
// 编号 - 必填示例1024
@PreAuthorize("@ss.hasPermission('trade:delivery:express:query')")
public CommonResult<DeliveryExpressRespVO> getDeliveryExpress(@RequestParam("id") Long id) {
DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(id);
@@ -69,14 +68,14 @@ public class DeliveryExpressController {
}
@GetMapping("/list-all-simple")
@Operation(summary = "获取快递公司精简信息列表", description = "主要用于前端的下拉选项")
// 获取快递公司精简信息列表 - 主要用于前端的下拉选项
public CommonResult<List<DeliveryExpressSimpleRespVO>> getSimpleDeliveryExpressList() {
List<DeliveryExpressDO> list = deliveryExpressService.getDeliveryExpressListByStatus(CommonStatusEnum.ENABLE.getStatus());
return success(DeliveryExpressConvert.INSTANCE.convertList1(list));
}
@GetMapping("/page")
@Operation(summary = "获得快递公司分页")
// 获得快递公司分页
@PreAuthorize("@ss.hasPermission('trade:delivery:express:query')")
public CommonResult<PageResult<DeliveryExpressRespVO>> getDeliveryExpressPage(@Valid DeliveryExpressPageReqVO pageVO) {
PageResult<DeliveryExpressDO> pageResult = deliveryExpressService.getDeliveryExpressPage(pageVO);
@@ -84,7 +83,7 @@ public class DeliveryExpressController {
}
@GetMapping("/export-excel")
@Operation(summary = "导出快递公司 Excel")
// 导出快递公司 Excel
@PreAuthorize("@ss.hasPermission('trade:delivery:express:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDeliveryExpressExcel(@Valid DeliveryExpressExportReqVO exportReqVO,

View File

@@ -1,27 +1,24 @@
package com.tashow.cloud.trade.controller.admin.delivery;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.*;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate.*;
import com.tashow.cloud.trade.convert.delivery.DeliveryExpressTemplateConvert;
import com.tashow.cloud.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO;
import com.tashow.cloud.trade.service.delivery.DeliveryExpressTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 快递运费模板")
// 管理后台 - 快递运费模板
@RestController
@RequestMapping("/trade/delivery/express-template")
@Validated
@@ -31,14 +28,14 @@ public class DeliveryExpressTemplateController {
private DeliveryExpressTemplateService deliveryExpressTemplateService;
@PostMapping("/create")
@Operation(summary = "创建快递运费模板")
// 创建快递运费模板
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:create')")
public CommonResult<Long> createDeliveryExpressTemplate(@Valid @RequestBody DeliveryExpressTemplateCreateReqVO createReqVO) {
return success(deliveryExpressTemplateService.createDeliveryExpressTemplate(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新快递运费模板")
// 更新快递运费模板
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:update')")
public CommonResult<Boolean> updateDeliveryExpressTemplate(@Valid @RequestBody DeliveryExpressTemplateUpdateReqVO updateReqVO) {
deliveryExpressTemplateService.updateDeliveryExpressTemplate(updateReqVO);
@@ -46,8 +43,8 @@ public class DeliveryExpressTemplateController {
}
@DeleteMapping("/delete")
@Operation(summary = "删除快递运费模板")
@Parameter(name = "id", description = "编号", required = true)
// 删除快递运费模板
// 编号 - 必填
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:delete')")
public CommonResult<Boolean> deleteDeliveryExpressTemplate(@RequestParam("id") Long id) {
deliveryExpressTemplateService.deleteDeliveryExpressTemplate(id);
@@ -55,16 +52,16 @@ public class DeliveryExpressTemplateController {
}
@GetMapping("/get")
@Operation(summary = "获得快递运费模板")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
// 获得快递运费模板
// 编号 - 必填示例1024
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')")
public CommonResult<DeliveryExpressTemplateDetailRespVO> getDeliveryExpressTemplate(@RequestParam("id") Long id) {
return success(deliveryExpressTemplateService.getDeliveryExpressTemplate(id));
}
@GetMapping("/list")
@Operation(summary = "获得快递运费模板列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
// 获得快递运费模板列表
// 编号列表 - 必填,示例:1024,2048
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')")
public CommonResult<List<DeliveryExpressTemplateRespVO>> getDeliveryExpressTemplateList(@RequestParam("ids") Collection<Long> ids) {
List<DeliveryExpressTemplateDO> list = deliveryExpressTemplateService.getDeliveryExpressTemplateList(ids);
@@ -72,7 +69,7 @@ public class DeliveryExpressTemplateController {
}
@GetMapping("/list-all-simple")
@Operation(summary = "获取快递模版精简信息列表", description = "主要用于前端的下拉选项")
// 获取快递模版精简信息列表 - 主要用于前端的下拉选项
public CommonResult<List<DeliveryExpressTemplateSimpleRespVO>> getSimpleTemplateList() {
// 获取运费模版列表,只要开启状态的
List<DeliveryExpressTemplateDO> list = deliveryExpressTemplateService.getDeliveryExpressTemplateList();
@@ -81,7 +78,7 @@ public class DeliveryExpressTemplateController {
}
@GetMapping("/page")
@Operation(summary = "获得快递运费模板分页")
// 获得快递运费模板分页
@PreAuthorize("@ss.hasPermission('trade:delivery:express-template:query')")
public CommonResult<PageResult<DeliveryExpressTemplateRespVO>> getDeliveryExpressTemplatePage(@Valid DeliveryExpressTemplatePageReqVO pageVO) {
PageResult<DeliveryExpressTemplateDO> pageResult = deliveryExpressTemplateService.getDeliveryExpressTemplatePage(pageVO);

View File

@@ -1,21 +1,17 @@
package com.tashow.cloud.trade.controller.admin.delivery;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.tashow.cloud.common.enums.CommonStatusEnum;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.util.object.BeanUtils;
import com.tashow.cloud.systemapi.api.user.AdminUserApi;
import com.tashow.cloud.systemapi.api.user.dto.AdminUserRespDTO;
import com.tashow.cloud.trade.controller.admin.base.system.user.UserSimpleBaseVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.*;
import com.tashow.cloud.trade.controller.admin.delivery.vo.pickup.*;
import com.tashow.cloud.trade.convert.delivery.DeliveryPickUpStoreConvert;
import com.tashow.cloud.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;
import com.tashow.cloud.trade.service.delivery.DeliveryPickUpStoreService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -25,9 +21,10 @@ import org.springframework.web.bind.annotation.*;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 自提门店")
// 管理后台 - 自提门店
@RestController
@RequestMapping("/trade/delivery/pick-up-store")
@Validated
@@ -40,14 +37,14 @@ public class DeliveryPickUpStoreController {
private AdminUserApi adminUserApi;
@PostMapping("/create")
@Operation(summary = "创建自提门店")
// 创建自提门店
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:create')")
public CommonResult<Long> createDeliveryPickUpStore(@Valid @RequestBody DeliveryPickUpStoreCreateReqVO createReqVO) {
return success(deliveryPickUpStoreService.createDeliveryPickUpStore(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新自提门店")
// 更新自提门店
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:update')")
public CommonResult<Boolean> updateDeliveryPickUpStore(@Valid @RequestBody DeliveryPickUpStoreUpdateReqVO updateReqVO) {
deliveryPickUpStoreService.updateDeliveryPickUpStore(updateReqVO);
@@ -55,8 +52,8 @@ public class DeliveryPickUpStoreController {
}
@DeleteMapping("/delete")
@Operation(summary = "删除自提门店")
@Parameter(name = "id", description = "编号", required = true)
// 删除自提门店
// 编号 - 必填
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:delete')")
public CommonResult<Boolean> deleteDeliveryPickUpStore(@RequestParam("id") Long id) {
deliveryPickUpStoreService.deleteDeliveryPickUpStore(id);
@@ -64,8 +61,8 @@ public class DeliveryPickUpStoreController {
}
@GetMapping("/get")
@Operation(summary = "获得自提门店")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
// 获得自提门店
// 编号 - 必填示例1024
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:query')")
public CommonResult<DeliveryPickUpStoreRespVO> getDeliveryPickUpStore(@RequestParam("id") Long id) {
DeliveryPickUpStoreDO deliveryPickUpStore = deliveryPickUpStoreService.getDeliveryPickUpStore(id);
@@ -79,7 +76,7 @@ public class DeliveryPickUpStoreController {
}
@GetMapping("/simple-list")
@Operation(summary = "获得自提门店精简信息列表")
// 获得自提门店精简信息列表
public CommonResult<List<DeliveryPickUpStoreSimpleRespVO>> getSimpleDeliveryPickUpStoreList() {
List<DeliveryPickUpStoreDO> list = deliveryPickUpStoreService.getDeliveryPickUpStoreListByStatus(
CommonStatusEnum.ENABLE.getStatus());
@@ -87,8 +84,8 @@ public class DeliveryPickUpStoreController {
}
@GetMapping("/list")
@Operation(summary = "获得自提门店列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
// 获得自提门店列表
// 编号列表 - 必填,示例:1024,2048
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:query')")
public CommonResult<List<DeliveryPickUpStoreRespVO>> getDeliveryPickUpStoreList(@RequestParam("ids") Collection<Long> ids) {
List<DeliveryPickUpStoreDO> list = deliveryPickUpStoreService.getDeliveryPickUpStoreList(ids);
@@ -96,7 +93,7 @@ public class DeliveryPickUpStoreController {
}
@GetMapping("/page")
@Operation(summary = "获得自提门店分页")
// 获得自提门店分页
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:query')")
public CommonResult<PageResult<DeliveryPickUpStoreRespVO>> getDeliveryPickUpStorePage(@Valid DeliveryPickUpStorePageReqVO pageVO) {
PageResult<DeliveryPickUpStoreDO> pageResult = deliveryPickUpStoreService.getDeliveryPickUpStorePage(pageVO);
@@ -104,7 +101,7 @@ public class DeliveryPickUpStoreController {
}
@PostMapping("/bind")
@Operation(summary = "绑定自提店员")
// 绑定自提店员
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:create')")
public CommonResult<Boolean> bindDeliveryPickUpStore(@Valid @RequestBody DeliveryPickUpBindReqVO bindReqVO) {
deliveryPickUpStoreService.bindDeliveryPickUpStore(bindReqVO);

View File

@@ -1,9 +1,8 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 快递公司 Base VO提供给添加、修改、详细的子 VO 使用
@@ -12,22 +11,22 @@ import jakarta.validation.constraints.NotNull;
@Data
public class DeliveryExpressBaseVO {
@Schema(description = "快递公司编码", requiredMode = Schema.RequiredMode.REQUIRED)
// 快递公司编码 - 必填
@NotNull(message = "快递公司编码不能为空")
private String code;
@Schema(description = "快递公司名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
// 快递公司名称 - 必填,示例:李四
@NotNull(message = "快递公司名称不能为空")
private String name;
@Schema(description = "快递公司logo")
// 快递公司logo
private String logo;
@Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
// 排序 - 必填
@NotNull(message = "排序不能为空")
private Integer sort;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 状态 - 必填示例1
@NotNull(message = "状态不能为空")
private Integer status;

View File

@@ -1,9 +1,11 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 快递公司创建 Request VO")
// 管理后台 - 快递公司创建 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@@ -1,9 +1,9 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import com.tashow.cloud.excel.excel.core.annotations.DictFormat;
import com.tashow.cloud.excel.excel.core.convert.DictConvert;
import com.tashow.cloud.systemapi.enums.DictTypeConstants;
import lombok.Data;
import java.time.LocalDateTime;

View File

@@ -1,27 +1,27 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
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;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 快递公司 Excel 导出 Request VO")
// 管理后台 - 快递公司 Excel 导出 Request VO
@Data
public class DeliveryExpressExportReqVO {
@Schema(description = "快递公司编码")
// 快递公司编码
private String code;
@Schema(description = "快递公司名称", example = "李四")
// 快递公司名称,示例:李四
private String name;
@Schema(description = "状态0正常 1停用", example = "1")
// 状态0正常 1停用示例1
private Integer status;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@@ -1,30 +1,34 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
// 移除Swagger相关导入
import com.tashow.cloud.common.pojo.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
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;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 快递公司分页 Request VO")
// 管理后台 - 快递公司分页 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressPageReqVO extends PageParam {
@Schema(description = "快递公司编码")
// 快递公司编码
private String code;
@Schema(description = "快递公司名称", example = "李四")
// 快递公司名称,示例:李四
private String name;
@Schema(description = "状态0正常 1停用", example = "1")
// 状态0正常 1停用示例1
private Integer status;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@@ -1,22 +1,22 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 快递公司 Response VO")
// 管理后台 - 快递公司 Response VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressRespVO extends DeliveryExpressBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6592")
// 编号 - 必填示例6592
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
}

View File

@@ -1,23 +1,22 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.validation.constraints.NotNull;
@Schema(description = "管理后台 - 快递公司精简信息 Response VO")
// 管理后台 - 快递公司精简信息 Response VO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeliveryExpressSimpleRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6592")
// 编号 - 必填示例6592
@NotNull(message = "编号不能为空")
private Long id;
@Schema(description = "快递公司名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "顺丰速运")
// 快递公司名称 - 必填,示例:顺丰速运
@NotNull(message = "快递公司名称不能为空")
private String name;

View File

@@ -1,19 +1,18 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.express;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import jakarta.validation.constraints.NotNull;
@Schema(description = "管理后台 - 快递公司更新 Request VO")
// 管理后台 - 快递公司更新 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressUpdateReqVO extends DeliveryExpressBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6592")
// 编号 - 必填示例6592
@NotNull(message = "编号不能为空")
private Long id;

View File

@@ -1,9 +1,8 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 快递运费模板 Base VO提供给添加、修改、详细的子 VO 使用
@@ -12,15 +11,15 @@ import jakarta.validation.constraints.NotNull;
@Data
public class DeliveryExpressTemplateBaseVO {
@Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
// 模板名称 - 必填,示例:王五
@NotNull(message = "模板名称不能为空")
private String name;
@Schema(description = "配送计费方式 1:按件 2:按重量 3:按体积", requiredMode = Schema.RequiredMode.REQUIRED)
// 配送计费方式 1:按件 2:按重量 3:按体积 - 必填
@NotNull(message = "配送计费方式 1:按件 2:按重量 3:按体积不能为空")
private Integer chargeMode;
@Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
// 排序 - 必填
@NotNull(message = "排序不能为空")
private Integer sort;

View File

@@ -1,10 +1,10 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
@@ -13,26 +13,26 @@ import java.util.List;
@Data
public class DeliveryExpressTemplateChargeBaseVO {
@Schema(description = "编号", example = "6592", hidden = true) // 由于想简单一点,复用这个 VO 在更新操作,所以 hidden 为 false
// 编号 - 示例6592 (hidden)
private Long id;
@Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]")
// 区域编号列表 - 必填,示例:[1,120000]
@NotEmpty(message = "区域编号列表不能为空")
private List<Integer> areaIds;
@Schema(description = "首件数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
// 首件数量 - 必填示例5
@NotNull(message = "首件数量不能为空")
private Double startCount;
@Schema(description = "起步价", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
// 起步价 - 必填示例1000
@NotNull(message = "起步价不能为空")
private Integer startPrice;
@Schema(description = "续件数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
// 续件数量 - 必填示例10
@NotNull(message = "续件数量不能为空")
private Double extraCount;
@Schema(description = "额外价", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000")
// 额外价 - 必填示例2000
@NotNull(message = "额外价不能为空")
private Integer extraPrice;
}

View File

@@ -1,24 +1,24 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.Valid;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import jakarta.validation.Valid;
import java.util.List;
@Schema(description = "管理后台 - 快递运费模板创建 Request VO")
// 管理后台 - 快递运费模板创建 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressTemplateCreateReqVO extends DeliveryExpressTemplateBaseVO {
@Schema(description = "区域运费列表")
// 区域运费列表
@Valid
private List<DeliveryExpressTemplateChargeBaseVO> charges;
@Schema(description = "包邮区域列表")
// 包邮区域列表
@Valid
private List<DeliveryExpressTemplateFreeBaseVO> frees;

View File

@@ -1,25 +1,25 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 快递运费模板的详细 Response VO")
// 管理后台 - 快递运费模板的详细 Response VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressTemplateDetailRespVO extends DeliveryExpressTemplateBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "371")
// 编号 - 必填示例371
private Long id;
@Schema(description = "运费模板运费设置", requiredMode = Schema.RequiredMode.REQUIRED)
// 运费模板运费设置 - 必填
private List<DeliveryExpressTemplateChargeBaseVO> charges;
@Schema(description = "运费模板包邮区域", requiredMode = Schema.RequiredMode.REQUIRED)
// 运费模板包邮区域 - 必填
private List<DeliveryExpressTemplateFreeBaseVO> frees;
}

View File

@@ -1,10 +1,10 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
@@ -13,15 +13,15 @@ import java.util.List;
@Data
public class DeliveryExpressTemplateFreeBaseVO {
@Schema(description = "区域编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,120000]")
// 区域编号列表 - 必填,示例:[1,120000]
@NotEmpty(message = "区域编号列表不能为空")
private List<Integer> areaIds;
@Schema(description = "包邮金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "5000")
// 包邮金额 - 必填示例5000
@NotNull(message = "包邮金额不能为空")
private Integer freePrice;
@Schema(description = "包邮件数", requiredMode = Schema.RequiredMode.REQUIRED, example = "5")
// 包邮件数 - 必填示例5
@NotNull(message = "包邮件数不能为空")
private Integer freeCount;

View File

@@ -1,7 +1,8 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import com.tashow.cloud.common.pojo.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -9,21 +10,22 @@ 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;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 快递运费模板分页 Request VO")
// 管理后台 - 快递运费模板分页 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressTemplatePageReqVO extends PageParam {
@Schema(description = "模板名称", example = "王五")
// 模板名称 - 示例:王五
private String name;
@Schema(description = "配送计费方式 1:按件 2:按重量 3:按体积")
// 配送计费方式 1:按件 2:按重量 3:按体积
private Integer chargeMode;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@@ -1,22 +1,22 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 快递运费模板 Response VO")
// 管理后台 - 快递运费模板 Response VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressTemplateRespVO extends DeliveryExpressTemplateBaseVO {
@Schema(description = "编号,自增", requiredMode = Schema.RequiredMode.REQUIRED, example = "371")
// 编号,自增 - 必填示例371
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
}

View File

@@ -1,21 +1,21 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Schema(description = "管理后台 - 模版精简信息 Response VO")
// 管理后台 - 模版精简信息 Response VO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeliveryExpressTemplateSimpleRespVO {
@Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 模版编号 - 必填示例1024
private Long id;
@Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试模版")
// 模板名称 - 必填,示例:测试模版
private String name;
}

View File

@@ -1,29 +1,29 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.expresstemplate;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "管理后台 - 快递运费模板更新 Request VO")
// 管理后台 - 快递运费模板更新 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryExpressTemplateUpdateReqVO extends DeliveryExpressTemplateBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "371")
// 编号 - 必填示例371
@NotNull(message = "编号不能为空")
private Long id;
@Schema(description = "区域运费列表")
// 区域运费列表
@Valid
private List<DeliveryExpressTemplateChargeBaseVO> charges;
@Schema(description = "包邮区域列表")
// 包邮区域列表
@Valid
private List<DeliveryExpressTemplateFreeBaseVO> frees;

View File

@@ -1,6 +1,6 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -8,16 +8,16 @@ import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 自提门店绑定核销人 Request VO")
// 管理后台 - 自提门店绑定核销人 Request VO
@Data
@ToString(callSuper = true)
public class DeliveryPickUpBindReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 编号 - 必填示例23128
@NotNull(message = "编号不能为空")
private Long id;
@Schema(description = "绑定用户编号组数", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 绑定用户编号组数 - 必填示例23128
@NotEmpty(message = "绑定用户编号组数不能未空")
private List<Long> verifyUserIds;

View File

@@ -1,10 +1,9 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import com.tashow.cloud.common.enums.CommonStatusEnum;
import com.tashow.cloud.common.validation.InEnum;
import com.tashow.cloud.common.validation.Mobile;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -18,49 +17,49 @@ import java.time.LocalTime;
@Data
public class DeliveryPickUpStoreBaseVO {
@Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
// 门店名称 - 必填,示例:李四
@NotBlank(message = "门店名称不能为空")
private String name;
@Schema(description = "门店简介", example = "我是门店简介")
// 门店简介 - 示例:我是门店简介
private String introduction;
@Schema(description = "门店手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601892312")
// 门店手机 - 必填,示例:15601892312
@NotBlank(message = "门店手机不能为空")
@Mobile
private String phone;
@Schema(description = "区域编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18733")
// 区域编号 - 必填示例18733
@NotNull(message = "区域编号不能为空")
private Integer areaId;
@Schema(description = "门店详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "复旦大学路 188 号")
// 门店详细地址 - 必填,示例:复旦大学路 188 号
@NotBlank(message = "门店详细地址不能为空")
private String detailAddress;
@Schema(description = "门店 logo", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
// 门店 logo - 必填,示例:https://www.iocoder.cn/1.png
@NotBlank(message = "门店 logo 不能为空")
private String logo;
@Schema(description = "营业开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 营业开始时间 - 必填
@NotNull(message = "营业开始时间不能为空")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
private LocalTime openingTime;
@Schema(description = "营业结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 营业结束时间 - 必填
@NotNull(message = "营业结束时间不能为空")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
private LocalTime closingTime;
@Schema(description = "纬度", requiredMode = Schema.RequiredMode.REQUIRED, example = "5.88")
// 纬度 - 必填示例5.88
@NotNull(message = "纬度不能为空")
private Double latitude;
@Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED, example = "6.99")
// 经度 - 必填示例6.99
@NotNull(message = "经度不能为空")
private Double longitude;
@Schema(description = "门店状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 门店状态 - 必填示例1
@NotNull(message = "门店状态不能为空")
@InEnum(CommonStatusEnum.class)
private Integer status;

View File

@@ -1,11 +1,11 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 自提门店创建 Request VO")
// 管理后台 - 自提门店创建 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@@ -1,9 +1,10 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import com.tashow.cloud.common.enums.CommonStatusEnum;
import com.tashow.cloud.common.pojo.PageParam;
import com.tashow.cloud.common.validation.InEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -11,28 +12,29 @@ 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;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 自提门店分页 Request VO")
// 管理后台 - 自提门店分页 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryPickUpStorePageReqVO extends PageParam {
@Schema(description = "门店名称", example = "李四")
// 门店名称 - 示例:李四
private String name;
@Schema(description = "门店手机")
// 门店手机
private String phone;
@Schema(description = "区域编号", example = "18733")
// 区域编号 - 示例18733
private Integer areaId;
@Schema(description = "门店状态", example = "1")
// 门店状态 - 示例1
@InEnum(CommonStatusEnum.class)
private Integer status;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@@ -1,7 +1,8 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.admin.base.system.user.UserSimpleBaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -9,19 +10,19 @@ import lombok.ToString;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 自提门店 Response VO")
// 管理后台 - 自提门店 Response VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryPickUpStoreRespVO extends DeliveryPickUpStoreBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 编号 - 必填示例23128
private Long id;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
@Schema(description = "核销用户数组", requiredMode = Schema.RequiredMode.REQUIRED)
// 核销用户数组 - 必填
private List<UserSimpleBaseVO> verifyUsers;
}

View File

@@ -1,37 +1,37 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Schema(description = "管理后台 - 自提门店精简信息 Response VO")
// 管理后台 - 自提门店精简信息 Response VO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeliveryPickUpStoreSimpleRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 编号 - 必填示例23128
private Long id;
@Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
// 门店名称 - 必填,示例:李四
private String name;
@Schema(description = "门店手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601892312")
// 门店手机 - 必填,示例:15601892312
private String phone;
@Schema(description = "区域编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18733")
// 区域编号 - 必填示例18733
private Integer areaId;
@Schema(description = "区域名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "xx市")
// 区域名称 - 必填示例xx市
private String areaName;
@Schema(description = "门店详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "复旦大学路 188 号")
// 门店详细地址 - 必填,示例:复旦大学路 188 号
private String detailAddress;
@Schema(description = "绑定用户编号组数", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 绑定用户编号组数 - 必填示例23128
private List<Long> verifyUserIds;
}

View File

@@ -1,18 +1,18 @@
package com.tashow.cloud.trade.controller.admin.delivery.vo.pickup;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 自提门店更新 Request VO")
// 管理后台 - 自提门店更新 Request VO
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeliveryPickUpStoreUpdateReqVO extends DeliveryPickUpStoreBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
// 编号 - 必填示例23128
@NotNull(message = "编号不能为空")
private Long id;

View File

@@ -1,12 +1,12 @@
package com.tashow.cloud.trade.controller.admin.order;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*;
import com.tashow.cloud.trade.controller.admin.order.vo.*;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.memberapi.api.user.MemberUserApi;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderDetailRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import com.tashow.cloud.trade.convert.order.TradeOrderConvert;
import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderDO;
import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderItemDO;
@@ -14,26 +14,24 @@ import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderLogDO;
import com.tashow.cloud.trade.service.order.TradeOrderLogService;
import com.tashow.cloud.trade.service.order.TradeOrderQueryService;
import com.tashow.cloud.trade.service.order.TradeOrderUpdateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
import static com.tashow.cloud.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.util.collection.CollectionUtils.convertSet;
@Tag(name = "管理后台 - 交易订单")
/**
* 管理后台 - 交易订单
*/
@RestController
@RequestMapping("/trade/order")
@Validated
@@ -50,38 +48,40 @@ public class TradeOrderController {
@Resource
private MemberUserApi memberUserApi;
/**
* 获得交易订单分页
* @param reqVO
* @return
*/
@GetMapping("/page")
@Operation(summary = "获得交易订单分页")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<PageResult<TradeOrderPageItemRespVO>> getOrderPage(TradeOrderPageReqVO reqVO) {
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<PageResult<TradeOrderPageItemRespVO>> getOrderPage(@Validated TradeOrderPageReqVO reqVO) {
// 查询订单
PageResult<TradeOrderDO> pageResult = tradeOrderQueryService.getOrderPage(reqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(PageResult.empty());
}
// 查询用户信息
Set<Long> userIds = CollUtil.unionDistinct(convertList(pageResult.getList(), TradeOrderDO::getUserId),
convertList(pageResult.getList(), TradeOrderDO::getBrokerageUserId, Objects::nonNull));
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
// // 查询用户信息
// Set<Long> userIds = CollUtil.unionDistinct(convertList(pageResult.getList(), TradeOrderDO::getUserId),
// convertList(pageResult.getList(), TradeOrderDO::getBrokerageUserId, Objects::nonNull));
// Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
// 查询订单项
List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(
convertSet(pageResult.getList(), TradeOrderDO::getId));
// 最终组合
return success(TradeOrderConvert.INSTANCE.convertPage(pageResult, orderItems, userMap));
}
@GetMapping("/summary")
@Operation(summary = "获得交易订单统计")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<TradeOrderSummaryRespVO> getOrderSummary(TradeOrderPageReqVO reqVO) {
return success(tradeOrderQueryService.getOrderSummary(reqVO));
return success(TradeOrderConvert.INSTANCE.convertPage(pageResult, orderItems, null));
}
/**
* 获得交易订单详情
* @param id 订单编号
* @return
*/
@GetMapping("/get-detail")
@Operation(summary = "获得交易订单详情")
@Parameter(name = "id", description = "订单编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<TradeOrderDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
// 查询订单
TradeOrderDO order = tradeOrderQueryService.getOrder(id);
@@ -92,79 +92,86 @@ public class TradeOrderController {
List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(id);
// 拼接数据
MemberUserRespDTO user = memberUserApi.getUser(order.getUserId()).getCheckedData();
MemberUserRespDTO brokerageUser = order.getBrokerageUserId() != null ?
memberUserApi.getUser(order.getBrokerageUserId()).getCheckedData() : null;
// MemberUserRespDTO user = memberUserApi.getUser(order.getUserId()).getCheckedData();
// MemberUserRespDTO brokerageUser = order.getBrokerageUserId() != null ?
// memberUserApi.getUser(order.getBrokerageUserId()).getCheckedData() : null;
List<TradeOrderLogDO> orderLogs = tradeOrderLogService.getOrderLogListByOrderId(id);
return success(TradeOrderConvert.INSTANCE.convert(order, orderItems, orderLogs, user, brokerageUser));
return success(TradeOrderConvert.INSTANCE.convert(order, orderItems, orderLogs, null, null));
}
@GetMapping("/get-express-track-list")
@Operation(summary = "获得交易订单的物流轨迹")
@Parameter(name = "id", description = "交易订单编号")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<List<?>> getOrderExpressTrackList(@RequestParam("id") Long id) {
return success(TradeOrderConvert.INSTANCE.convertList02(
tradeOrderQueryService.getExpressTrackList(id)));
}
@PutMapping("/delivery")
@Operation(summary = "订单发货")
@PreAuthorize("@ss.hasPermission('trade:order:update')")
public CommonResult<Boolean> deliveryOrder(@RequestBody TradeOrderDeliveryReqVO deliveryReqVO) {
tradeOrderUpdateService.deliveryOrder(deliveryReqVO);
return success(true);
}
@PutMapping("/update-remark")
@Operation(summary = "订单备注")
@PreAuthorize("@ss.hasPermission('trade:order:update')")
public CommonResult<Boolean> updateOrderRemark(@RequestBody TradeOrderRemarkReqVO reqVO) {
tradeOrderUpdateService.updateOrderRemark(reqVO);
return success(true);
}
@PutMapping("/update-price")
@Operation(summary = "订单调价")
@PreAuthorize("@ss.hasPermission('trade:order:update')")
public CommonResult<Boolean> updateOrderPrice(@RequestBody TradeOrderUpdatePriceReqVO reqVO) {
tradeOrderUpdateService.updateOrderPrice(reqVO);
return success(true);
}
@PutMapping("/update-address")
@Operation(summary = "修改订单收货地址")
@PreAuthorize("@ss.hasPermission('trade:order:update')")
public CommonResult<Boolean> updateOrderAddress(@RequestBody TradeOrderUpdateAddressReqVO reqVO) {
tradeOrderUpdateService.updateOrderAddress(reqVO);
return success(true);
}
@PutMapping("/pick-up-by-id")
@Operation(summary = "订单核销")
@Parameter(name = "id", description = "交易订单编号")
@PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
public CommonResult<Boolean> pickUpOrderById(@RequestParam("id") Long id) {
tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), id);
return success(true);
}
@PutMapping("/pick-up-by-verify-code")
@Operation(summary = "订单核销")
@Parameter(name = "pickUpVerifyCode", description = "自提核销码")
@PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
public CommonResult<Boolean> pickUpOrderByVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), pickUpVerifyCode);
return success(true);
}
@GetMapping("/get-by-pick-up-verify-code")
@Operation(summary = "查询核销码对应的订单")
@Parameter(name = "pickUpVerifyCode", description = "自提核销码")
@PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<TradeOrderDetailRespVO> getByPickUpVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
TradeOrderDO tradeOrder = tradeOrderUpdateService.getByPickUpVerifyCode(pickUpVerifyCode);
return success(TradeOrderConvert.INSTANCE.convert2(tradeOrder, null));
}
// // 获得交易订单统计
// @GetMapping("/summary")
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
// public CommonResult<TradeOrderSummaryRespVO> getOrderSummary(TradeOrderPageReqVO reqVO) {
// return success(tradeOrderQueryService.getOrderSummary(reqVO));
// }
//
// // 获得交易订单的物流轨迹
// // id: 交易订单编号
// @GetMapping("/get-express-track-list")
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
// public CommonResult<List<?>> getOrderExpressTrackList(@RequestParam("id") Long id) {
// return success(TradeOrderConvert.INSTANCE.convertList02(
// tradeOrderQueryService.getExpressTrackList(id)));
// }
//
// // 订单发货
// @PutMapping("/delivery")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> deliveryOrder(@RequestBody TradeOrderDeliveryReqVO deliveryReqVO) {
// tradeOrderUpdateService.deliveryOrder(deliveryReqVO);
// return success(true);
// }
//
// // 订单备注
// @PutMapping("/update-remark")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderRemark(@RequestBody TradeOrderRemarkReqVO reqVO) {
// tradeOrderUpdateService.updateOrderRemark(reqVO);
// return success(true);
// }
//
// // 订单调价
// @PutMapping("/update-price")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderPrice(@RequestBody TradeOrderUpdatePriceReqVO reqVO) {
// tradeOrderUpdateService.updateOrderPrice(reqVO);
// return success(true);
// }
//
// // 修改订单收货地址
// @PutMapping("/update-address")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderAddress(@RequestBody TradeOrderUpdateAddressReqVO reqVO) {
// tradeOrderUpdateService.updateOrderAddress(reqVO);
// return success(true);
// }
//
// // 订单核销
// // id: 交易订单编号
// @PutMapping("/pick-up-by-id")
// @PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
// public CommonResult<Boolean> pickUpOrderById(@RequestParam("id") Long id) {
// tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), id);
// return success(true);
// }
//
// // 订单核销
// // pickUpVerifyCode: 自提核销码
// @PutMapping("/pick-up-by-verify-code")
// @PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
// public CommonResult<Boolean> pickUpOrderByVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
// tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), pickUpVerifyCode);
// return success(true);
// }
//
// // 查询核销码对应的订单
// // pickUpVerifyCode: 自提核销码
// @GetMapping("/get-by-pick-up-verify-code")
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
// public CommonResult<TradeOrderDetailRespVO> getByPickUpVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
// TradeOrderDO tradeOrder = tradeOrderUpdateService.getByPickUpVerifyCode(pickUpVerifyCode);
// return success(TradeOrderConvert.INSTANCE.convert2(tradeOrder, null));
// }
}

View File

@@ -1,6 +1,6 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import java.time.LocalDateTime;
@@ -14,138 +14,138 @@ public class TradeOrderBaseVO {
// ========== 订单基本信息 ==========
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单编号 - 必填示例1024
private Long id;
@Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1146347329394184195")
private String no;
// 订单流水号 - 必填,示例:1146347329394184195
private String orderNum;
@Schema(description = "下单时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 下单时间 - 必填
private LocalDateTime createTime;
@Schema(description = "订单类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 订单类型 - 必填示例1
private Integer type;
@Schema(description = "订单来源", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 订单来源 - 必填示例1
private Integer terminal;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
// 用户编号 - 必填示例2048
private Long userId;
@Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
// 用户 IP - 必填,示例:127.0.0.1
private String userIp;
@Schema(description = "用户备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
// 用户备注 - 必填,示例:你猜
private String userRemark;
@Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 订单状态 - 必填示例1
private Integer status;
@Schema(description = "购买的商品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
// 购买的商品数量 - 必填示例10
private Integer productCount;
@Schema(description = "订单完成时间")
// 订单完成时间
private LocalDateTime finishTime;
@Schema(description = "订单取消时间")
// 订单取消时间
private LocalDateTime cancelTime;
@Schema(description = "取消类型", example = "10")
// 取消类型示例10
private Integer cancelType;
@Schema(description = "商家备注", example = "你猜一下")
// 商家备注,示例:你猜一下
private String remark;
// ========== 价格 + 支付基本信息 ==========
@Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 支付订单编号 - 必填示例1024
private Long payOrderId;
@Schema(description = "是否已支付", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
// 是否已支付 - 必填示例true
private Boolean payStatus;
@Schema(description = "付款时间")
// 付款时间
private LocalDateTime payTime;
@Schema(description = "支付渠道", requiredMode = Schema.RequiredMode.REQUIRED, example = "wx_lite")
// 支付渠道 - 必填,示例:wx_lite
private String payChannelCode;
@Schema(description = "商品原价(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
// 商品原价(总) - 必填示例1000
private Integer totalPrice;
@Schema(description = "订单优惠(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 订单优惠(总) - 必填示例100
private Integer discountPrice;
@Schema(description = "运费金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 运费金额 - 必填示例100
private Integer deliveryPrice;
@Schema(description = "订单调价(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 订单调价(总) - 必填示例100
private Integer adjustPrice;
@Schema(description = "应付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
// 应付金额(总) - 必填示例1000
private Integer payPrice;
// ========== 收件 + 物流基本信息 ==========
@Schema(description = "配送方式", example = "10")
// 配送方式示例10
private Integer deliveryType;
@Schema(description = "自提门店", example = "10")
// 自提门店示例10
private Long pickUpStoreId;
@Schema(description = "自提核销码", example = "10")
// 自提核销码示例10
private Long pickUpVerifyCode;
@Schema(description = "配送模板编号", example = "1024")
// 配送模板编号示例1024
private Long deliveryTemplateId;
@Schema(description = "发货物流公司编号", example = "1024")
// 发货物流公司编号示例1024
private Long logisticsId;
@Schema(description = "发货物流单号", example = "1024")
// 发货物流单号示例1024
private String logisticsNo;
@Schema(description = "发货时间")
// 发货时间
private LocalDateTime deliveryTime;
@Schema(description = "收货时间")
// 收货时间
private LocalDateTime receiveTime;
@Schema(description = "收件人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
// 收件人名称 - 必填,示例:张三
private String receiverName;
@Schema(description = "收件人手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "13800138000")
// 收件人手机 - 必填,示例:13800138000
private String receiverMobile;
@Schema(description = "收件人地区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "110000")
// 收件人地区编号 - 必填示例110000
private Integer receiverAreaId;
@Schema(description = "收件人详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "中关村大街 1 号")
// 收件人详细地址 - 必填,示例:中关村大街 1 号
private String receiverDetailAddress;
// ========== 售后基本信息 ==========
@Schema(description = "售后状态", example = "1")
// 售后状态示例1
private Integer afterSaleStatus;
@Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 退款金额 - 必填示例100
private Integer refundPrice;
// ========== 营销基本信息 ==========
@Schema(description = "优惠劵编号", example = "1024")
// 优惠劵编号示例1024
private Long couponId;
@Schema(description = "优惠劵减免金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 优惠劵减免金额 - 必填示例100
private Integer couponPrice;
@Schema(description = "积分抵扣的金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 积分抵扣的金额 - 必填示例100
private Integer pointPrice;
@Schema(description = "VIP 减免金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "888")
// VIP 减免金额 - 必填示例888
private Integer vipPrice;
@Schema(description = "推广人编号", example = "1")
// 推广人编号示例1
private Long brokerageUserId;
}

View File

@@ -1,23 +1,22 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Schema(description = "管理后台 - 订单发货 Request VO")
// 管理后台 - 订单发货 Request VO
@Data
public class TradeOrderDeliveryReqVO {
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单编号 - 必填示例1024
@NotNull(message = "订单编号不能为空")
private Long id;
@Schema(description = "发货物流公司编号", example = "1")
// 发货物流公司编号示例1
@NotNull(message = "发货物流公司不能为空")
private Long logisticsId;
@Schema(description = "发货物流单号", example = "SF123456789")
// 发货物流单号,示例:SF123456789
private String logisticsNo;
}

View File

@@ -1,14 +1,15 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.admin.base.member.user.MemberUserRespVO;
import com.tashow.cloud.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 交易订单的详情 Response VO")
// 管理后台 - 交易订单的详情 Response VO
@Data
public class TradeOrderDetailRespVO extends TradeOrderBaseVO {
@@ -31,25 +32,25 @@ public class TradeOrderDetailRespVO extends TradeOrderBaseVO {
*/
private List<OrderLog> logs;
@Schema(description = "收件人地区名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海 上海市 普陀区")
// 收件人地区名字 - 必填,示例:上海 上海市 普陀区
private String receiverAreaName;
@Schema(description = "管理后台 - 交易订单的操作日志")
// 管理后台 - 交易订单的操作日志
@Data
public static class OrderLog {
@Schema(description = "操作详情", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单发货")
// 操作详情 - 必填,示例:订单发货
private String content;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-06-01 10:50:20")
// 创建时间 - 必填,示例:2023-06-01 10:50:20
private LocalDateTime createTime;
@Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 用户类型 - 必填示例1
private Integer userType;
}
@Schema(description = "管理后台 - 交易订单的详情的订单项目")
// 管理后台 - 交易订单的详情的订单项目
@Data
public static class Item extends TradeOrderItemBaseVO {

View File

@@ -1,6 +1,6 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
/**
@@ -12,47 +12,47 @@ public class TradeOrderItemBaseVO {
// ========== 订单项基本信息 ==========
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 编号 - 必填示例1
private Long id;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 用户编号 - 必填示例1
private Long userId;
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 订单编号 - 必填示例1
private Long orderId;
// ========== 商品基本信息 ==========
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 商品 SPU 编号 - 必填示例1
private Long spuId;
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
// 商品 SPU 名称 - 必填,示例:芋道源码
private String spuName;
@Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 商品 SKU 编号 - 必填示例1
private Long skuId;
@Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
// 商品图片 - 必填,示例:https://www.iocoder.cn/1.png
private String picUrl;
@Schema(description = "购买数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 购买数量 - 必填示例1
private Integer count;
// ========== 价格 + 支付基本信息 ==========
@Schema(description = "商品原价(单)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 商品原价(单) - 必填示例100
private Integer price;
@Schema(description = "商品优惠(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 商品优惠(总) - 必填示例100
private Integer discountPrice;
@Schema(description = "商品实付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 商品实付金额(总) - 必填示例100
private Integer payPrice;
@Schema(description = "子订单分摊金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 子订单分摊金额(总) - 必填示例100
private Integer orderPartPrice;
@Schema(description = "分摊后子订单实付金额(总)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 分摊后子订单实付金额(总) - 必填示例100
private Integer orderDividePrice;
// ========== 营销基本信息 ==========
@@ -61,7 +61,7 @@ public class TradeOrderItemBaseVO {
// ========== 售后基本信息 ==========
@Schema(description = "售后状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后状态 - 必填示例1
private Integer afterSaleStatus;
}

View File

@@ -1,33 +1,33 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import com.tashow.cloud.trade.controller.admin.base.member.user.MemberUserRespVO;
import com.tashow.cloud.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 交易订单的分页项 Response VO")
// 管理后台 - 交易订单的分页项 Response VO
@Data
public class TradeOrderPageItemRespVO extends TradeOrderBaseVO {
@Schema(description = "收件人地区名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海 上海市 普陀区")
// 收件人地区名字 - 必填,示例:上海 上海市 普陀区
private String receiverAreaName;
@Schema(description = "订单项列表", requiredMode = Schema.RequiredMode.REQUIRED)
// 订单项列表 - 必填
private List<Item> items;
@Schema(description = "用户信息", requiredMode = Schema.RequiredMode.REQUIRED)
// 用户信息 - 必填
private MemberUserRespVO user;
@Schema(description = "推广人信息")
// 推广人信息
private MemberUserRespVO brokerageUser;
@Schema(description = "管理后台 - 交易订单的分页项的订单项目")
// 管理后台 - 交易订单的分页项的订单项目
@Data
public static class Item extends TradeOrderItemBaseVO {
@Schema(description = "属性列表", requiredMode = Schema.RequiredMode.REQUIRED)
// 属性列表 - 必填
private List<ProductPropertyValueDetailRespVO> properties;
}

View File

@@ -1,63 +1,65 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import com.tashow.cloud.common.enums.TerminalEnum;
import com.tashow.cloud.common.pojo.PageParam;
import com.tashow.cloud.common.validation.InEnum;
import com.tashow.cloud.common.validation.Mobile;
import com.tashow.cloud.tradeapi.enums.order.TradeOrderStatusEnum;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 交易订单的分页 Request VO")
// 管理后台 - 交易订单的分页 Request VO
@Data
public class TradeOrderPageReqVO extends PageParam {
@Schema(description = "订单号", example = "88888888")
private String no;
// 订单号,示例:88888888
private String orderNum;
@Schema(description = "用户编号", example = "1024")
// 用户编号示例1024
private Long userId;
@Schema(description = "用户昵称", example = "小王")
// 用户昵称,示例:小王
private String userNickname;
@Schema(description = "用户手机号", example = "小王")
// 用户手机号,示例:小王
@Mobile
private String userMobile;
@Schema(description = "配送方式", example = "1")
// 配送方式示例1
private Integer deliveryType;
@Schema(description = "发货物流公司编号", example = "1")
// 发货物流公司编号示例1
private Long logisticsId;
@Schema(description = "自提门店编号", example = "[1,2]")
// 自提门店编号,示例:[1,2]
private List<Long> pickUpStoreIds;
@Schema(description = "自提核销码", example = "12345678")
// 自提核销码,示例:12345678
private String pickUpVerifyCode;
@Schema(description = "订单类型", example = "1")
// 订单类型示例1
private Integer type;
@Schema(description = "订单状态", example = "1")
// 订单状态示例1
@InEnum(value = TradeOrderStatusEnum.class, message = "订单状态必须是 {value}")
private Integer status;
@Schema(description = "支付渠道", example = "wx_lite")
// 支付渠道,示例:wx_lite
private String payChannelCode;
@Schema(description = "创建时间")
// 创建时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "订单来源", example = "10")
// 订单来源示例10
@InEnum(value = TerminalEnum.class, message = "订单来源 {value}")
private Integer terminal;

View File

@@ -1,20 +1,19 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 订单备注 Request VO")
// 管理后台 - 订单备注 Request VO
@Data
public class TradeOrderRemarkReqVO {
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单编号 - 必填示例1024
@NotNull(message = "订单编号不能为空")
private Long id;
@Schema(description = "商家备注", example = "你猜一下")
// 商家备注,示例:你猜一下
@NotEmpty(message = "订单备注不能为空")
private String remark;

View File

@@ -1,22 +1,22 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
@Schema(description = "管理后台 - 交易订单统计 Response VO")
// 管理后台 - 交易订单统计 Response VO
@Data
public class TradeOrderSummaryRespVO {
@Schema(description = "订单数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单数量 - 必填示例1024
private Long orderCount;
@Schema(description = "订单金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单金额 - 必填示例1024
private Long orderPayPrice;
@Schema(description = "退款单数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 退款单数 - 必填示例1024
private Long afterSaleCount;
@Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 退款金额 - 必填示例1024
private Long afterSalePrice;
}

View File

@@ -1,32 +1,31 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 订单修改地址 Request VO")
// 管理后台 - 订单修改地址 Request VO
@Data
public class TradeOrderUpdateAddressReqVO {
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 订单编号 - 必填示例1
@NotNull(message = "订单编号不能为空")
private Long id;
@Schema(description = "收件人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "z张三")
// 收件人名称 - 必填示例z张三
@NotEmpty(message = "收件人名称不能为空")
private String receiverName;
@Schema(description = "收件人手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "19988188888")
// 收件人手机 - 必填,示例:19988188888
@NotEmpty(message = "收件人手机不能为空")
private String receiverMobile;
@Schema(description = "收件人地区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7310")
// 收件人地区编号 - 必填示例7310
@NotNull(message = "收件人地区编号不能为空")
private Integer receiverAreaId;
@Schema(description = "收件人详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "昆明市五华区xxx小区xxx")
// 收件人详细地址 - 必填,示例:昆明市五华区xxx小区xxx
@NotEmpty(message = "收件人详细地址不能为空")
private String receiverDetailAddress;

View File

@@ -1,19 +1,18 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Schema(description = "管理后台 - 订单改价 Request VO")
// 管理后台 - 订单改价 Request VO
@Data
public class TradeOrderUpdatePriceReqVO {
@Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单编号 - 必填示例1024
@NotNull(message = "订单编号不能为空")
private Long id;
@Schema(description = "订单调价,单位:分。正数,加价;负数,减价", requiredMode = Schema.RequiredMode.REQUIRED, example = "-100")
// 订单调价,单位:分。正数,加价;负数,减价 - 必填,示例:-100
@NotNull(message = "订单调价价格不能为空")
private Integer adjustPrice;

View File

@@ -1,25 +1,24 @@
package com.tashow.cloud.trade.controller.app.aftersale;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
// 移除Swagger相关导入
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageParam;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO;
import com.tashow.cloud.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO;
import com.tashow.cloud.trade.controller.app.aftersale.vo.AppAfterSaleRespVO;
import com.tashow.cloud.trade.convert.aftersale.AfterSaleConvert;
import com.tashow.cloud.trade.service.aftersale.AfterSaleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static com.tashow.cloud.common.pojo.CommonResult.success;
import static com.tashow.cloud.security.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "用户 App - 交易售后")
// 用户 App - 交易售后
@RestController
@RequestMapping("/trade/after-sale")
@Validated
@@ -30,35 +29,35 @@ public class AppAfterSaleController {
private AfterSaleService afterSaleService;
@GetMapping(value = "/page")
@Operation(summary = "获得售后分页")
// 获得售后分页
public CommonResult<PageResult<AppAfterSaleRespVO>> getAfterSalePage(PageParam pageParam) {
return success(AfterSaleConvert.INSTANCE.convertPage02(
afterSaleService.getAfterSalePage(getLoginUserId(), pageParam)));
}
@GetMapping(value = "/get")
@Operation(summary = "获得售后订单")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
// 获得售后订单
// id: 售后编号 - 必填示例1
public CommonResult<AppAfterSaleRespVO> getAfterSale(@RequestParam("id") Long id) {
return success(AfterSaleConvert.INSTANCE.convert(afterSaleService.getAfterSale(getLoginUserId(), id)));
}
@PostMapping(value = "/create")
@Operation(summary = "申请售后")
// 申请售后
public CommonResult<Long> createAfterSale(@RequestBody AppAfterSaleCreateReqVO createReqVO) {
return success(afterSaleService.createAfterSale(getLoginUserId(), createReqVO));
}
@PutMapping(value = "/delivery")
@Operation(summary = "退回货物")
// 退回货物
public CommonResult<Boolean> deliveryAfterSale(@RequestBody AppAfterSaleDeliveryReqVO deliveryReqVO) {
afterSaleService.deliveryAfterSale(getLoginUserId(), deliveryReqVO);
return success(true);
}
@DeleteMapping(value = "/cancel")
@Operation(summary = "取消售后")
@Parameter(name = "id", description = "售后编号", required = true, example = "1")
// 取消售后
// id: 售后编号 - 必填示例1
public CommonResult<Boolean> cancelAfterSale(@RequestParam("id") Long id) {
afterSaleService.cancelAfterSale(getLoginUserId(), id);
return success(true);

View File

@@ -1,13 +1,12 @@
package com.tashow.cloud.trade.controller.app.aftersale;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
// 移除Swagger相关导入
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.util.object.BeanUtils;
import com.tashow.cloud.trade.controller.app.aftersale.vo.log.AppAfterSaleLogRespVO;
import com.tashow.cloud.trade.dal.dataobject.aftersale.AfterSaleLogDO;
import com.tashow.cloud.trade.service.aftersale.AfterSaleLogService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@@ -18,9 +17,10 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "用户 App - 售后日志")
// 用户 App - 售后日志
@RestController
@RequestMapping("/trade/after-sale-log")
@Validated
@@ -31,8 +31,8 @@ public class AppAfterSaleLogController {
private AfterSaleLogService afterSaleLogService;
@GetMapping("/list")
@Operation(summary = "获得售后日志列表")
@Parameter(name = "afterSaleId", description = "售后编号", required = true, example = "1")
// 获得售后日志列表
// afterSaleId: 售后编号 - 必填示例1
public CommonResult<List<AppAfterSaleLogRespVO>> getAfterSaleLogList(
@RequestParam("afterSaleId") Long afterSaleId) {
List<AfterSaleLogDO> logs = afterSaleLogService.getAfterSaleLogList(afterSaleId);

View File

@@ -1,40 +1,41 @@
package com.tashow.cloud.trade.controller.app.aftersale.vo;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
// 移除Swagger相关导入
import com.tashow.cloud.common.validation.InEnum;
import com.tashow.cloud.tradeapi.enums.aftersale.AfterSaleWayEnum;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Schema(description = "用户 App - 交易售后创建 Request VO")
// 用户 App - 交易售后创建 Request VO
@Data
public class AppAfterSaleCreateReqVO {
@Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 订单项编号 - 必填示例1024
@NotNull(message = "订单项编号不能为空")
private Long orderItemId;
@Schema(description = "售后方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后方式 - 必填示例1
@NotNull(message = "售后方式不能为空")
@InEnum(value = AfterSaleWayEnum.class, message = "售后方式必须是 {value}")
private Integer way;
@Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 退款金额 - 必填示例100
@NotNull(message = "退款金额不能为空")
@Min(value = 1, message = "退款金额必须大于 0")
private Integer refundPrice;
@Schema(description = "申请原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 申请原因 - 必填示例1
@NotNull(message = "申请原因不能为空")
private String applyReason;
@Schema(description = "补充描述", example = "商品质量不好")
// 补充描述,示例:商品质量不好
private String applyDescription;
@Schema(description = "补充凭证图片", example = "https://www.iocoder.cn/1.png, https://www.iocoder.cn/2.png")
// 补充凭证图片,示例:https://www.iocoder.cn/1.png, https://www.iocoder.cn/2.png
private List<String> applyPicUrls;
}

View File

@@ -1,23 +1,22 @@
package com.tashow.cloud.trade.controller.app.aftersale.vo;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Schema(description = "用户 App - 交易售后退回货物 Request VO")
// 用户 App - 交易售后退回货物 Request VO
@Data
public class AppAfterSaleDeliveryReqVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 售后编号 - 必填示例1024
@NotNull(message = "售后编号不能为空")
private Long id;
@Schema(description = "退货物流公司编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 退货物流公司编号 - 必填示例1
@NotNull(message = "退货物流公司编号不能为空")
private Long logisticsId;
@Schema(description = "退货物流单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SF123456789")
// 退货物流单号 - 必填,示例:SF123456789
@NotNull(message = "退货物流单号不能为空")
private String logisticsNo;

View File

@@ -1,64 +1,65 @@
package com.tashow.cloud.trade.controller.app.aftersale.vo;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "用户 App - 交易售后 Response VO")
// 用户 App - 交易售后 Response VO
@Data
public class AppAfterSaleRespVO {
@Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 售后编号 - 必填示例1024
private Long id;
@Schema(description = "售后流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1146347329394184195")
// 售后流水号 - 必填,示例:1146347329394184195
private String no;
@Schema(description = "售后状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后状态 - 必填示例1
private Integer status;
@Schema(description = "售后方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后方式 - 必填示例1
private Integer way;
@Schema(description = "售后类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 售后类型 - 必填示例1
private Integer type;
@Schema(description = "申请原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 申请原因 - 必填示例1
private String applyReason;
@Schema(description = "补充描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 补充描述 - 必填示例1
private String applyDescription;
@Schema(description = "补充凭证图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 补充凭证图片 - 必填示例1
private List<String> applyPicUrls;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 更新时间 - 必填
private LocalDateTime updateTime;
// ========== 交易订单相关 ==========
@Schema(description = "交易订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 交易订单编号 - 必填示例1
private Long orderId;
@Schema(description = "交易订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 交易订单流水号 - 必填示例1
private String orderNo;
@Schema(description = "交易订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 交易订单项编号 - 必填示例1
private Long orderItemId;
@Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 商品 SPU 编号 - 必填示例1
private Long spuId;
@Schema(description = "商品 SPU 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 商品 SPU 名称 - 必填示例1
private String spuName;
@Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 商品 SKU 编号 - 必填示例1
private Long skuId;
/**
@@ -66,10 +67,10 @@ public class AppAfterSaleRespVO {
*/
private List<AppProductPropertyValueDetailRespVO> properties;
@Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/01.jpg")
// 商品图片 - 必填,示例:https://www.iocoder.cn/01.jpg
private String picUrl;
@Schema(description = "退货商品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 退货商品数量 - 必填示例1
private Integer count;
// ========== 审批相关 ==========
@@ -83,27 +84,27 @@ public class AppAfterSaleRespVO {
// ========== 退款相关 ==========
@Schema(description = "退款金额,单位:分", example = "100")
// 退款金额单位示例100
private Integer refundPrice;
@Schema(description = "退款时间")
// 退款时间
private LocalDateTime refundTime;
// ========== 退货相关 ==========
@Schema(description = "退货物流公司编号", example = "1")
// 退货物流公司编号示例1
private Long logisticsId;
@Schema(description = "退货物流单号", example = "SF123456789")
// 退货物流单号,示例:SF123456789
private String logisticsNo;
@Schema(description = "退货时间")
// 退货时间
private LocalDateTime deliveryTime;
@Schema(description = "收货时间")
// 收货时间
private LocalDateTime receiveTime;
@Schema(description = "收货备注")
// 收货备注
private String receiveReason;
}

View File

@@ -1,21 +1,21 @@
package com.tashow.cloud.trade.controller.app.aftersale.vo.log;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - App 交易售后日志 Response VO")
// 管理后台 - App 交易售后日志 Response VO
@Data
public class AppAfterSaleLogRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20669")
// 编号 - 必填示例20669
private Long id;
@Schema(description = "操作明细", requiredMode = Schema.RequiredMode.REQUIRED, example = "维权完成退款金额¥37776.00")
// 操作明细 - 必填,示例:维权完成退款金额¥37776.00
private String content;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
// 创建时间 - 必填
private LocalDateTime createTime;
}

View File

@@ -1,22 +1,22 @@
package com.tashow.cloud.trade.controller.app.base.property;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
@Schema(description = "用户 App - 商品属性值的明细 Response VO")
// 用户 App - 商品属性值的明细 Response VO
@Data
public class AppProductPropertyValueDetailRespVO {
@Schema(description = "属性的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 属性的编号 - 必填示例1
private Long propertyId;
@Schema(description = "属性的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "颜色")
// 属性的名称 - 必填,示例:颜色
private String propertyName;
@Schema(description = "属性值的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 属性值的编号 - 必填示例1024
private Long valueId;
@Schema(description = "属性值的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "红色")
// 属性值的名称 - 必填,示例:红色
private String valueName;
}

View File

@@ -1,7 +1,8 @@
package com.tashow.cloud.trade.controller.app.base.sku;
// 移除Swagger相关导入
import com.tashow.cloud.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@@ -14,16 +15,16 @@ import java.util.List;
@Data
public class AppProductSkuBaseRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 主键 - 必填示例1024
private Long id;
@Schema(description = "图片地址", example = "https://www.iocoder.cn/xx.png")
// 图片地址,示例:https://www.iocoder.cn/xx.png
private String picUrl;
@Schema(description = "销售价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
// 销售价格,单位:分 - 必填示例100
private Integer price;
@Schema(description = "库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
// 库存 - 必填示例1
private Integer stock;
/**

View File

@@ -1,10 +1,8 @@
package com.tashow.cloud.trade.controller.app.base.spu;
import io.swagger.v3.oas.annotations.media.Schema;
// 移除Swagger相关导入
import lombok.Data;
import java.util.List;
/**
* 商品 SPU 基础 Response VO
*
@@ -13,16 +11,16 @@ import java.util.List;
@Data
public class AppProductSpuBaseRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
// 主键 - 必填示例1024
private Long id;
@Schema(description = "商品 SPU 名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
// 商品 SPU 名字 - 必填,示例:芋道
private String name;
@Schema(description = "商品主图地址", example = "https://www.iocoder.cn/xx.png")
// 商品主图地址,示例:https://www.iocoder.cn/xx.png
private String picUrl;
@Schema(description = "商品分类编号", example = "1")
// 商品分类编号示例1
private Long categoryId;
}

View File

@@ -1,51 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import com.tashow.cloud.trade.controller.app.brokerage.vo.record.AppBrokerageProductPriceRespVO;
import com.tashow.cloud.trade.controller.app.brokerage.vo.record.AppBrokerageRecordPageReqVO;
import com.tashow.cloud.trade.controller.app.brokerage.vo.record.AppBrokerageRecordRespVO;
import com.tashow.cloud.trade.convert.brokerage.BrokerageRecordConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageRecordDO;
import com.tashow.cloud.trade.service.brokerage.BrokerageRecordService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
@Tag(name = "用户 APP - 分销用户")
@RestController
@RequestMapping("/trade/brokerage-record")
@Validated
@Slf4j
public class AppBrokerageRecordController {
@Resource
private BrokerageRecordService brokerageRecordService;
@GetMapping("/page")
@Operation(summary = "获得分销记录分页")
public CommonResult<PageResult<AppBrokerageRecordRespVO>> getBrokerageRecordPage(@Valid AppBrokerageRecordPageReqVO pageReqVO) {
PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(
BrokerageRecordConvert.INSTANCE.convert(pageReqVO, getLoginUserId()));
return success(BeanUtils.toBean(pageResult, AppBrokerageRecordRespVO.class));
}
@GetMapping("/get-product-brokerage-price")
@Operation(summary = "获得商品的分销金额")
public CommonResult<AppBrokerageProductPriceRespVO> getProductBrokeragePrice(@RequestParam("spuId") Long spuId) {
return success(brokerageRecordService.calculateProductBrokeragePrice(getLoginUserId(), spuId));
}
}

View File

@@ -1,136 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.*;
import com.tashow.cloud.trade.controller.app.brokerage.vo.user.*;
import com.tashow.cloud.trade.convert.brokerage.BrokerageRecordConvert;
import com.tashow.cloud.trade.convert.brokerage.BrokerageUserConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageUserDO;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
import com.tashow.cloud.trade.service.brokerage.BrokerageRecordService;
import com.tashow.cloud.trade.service.brokerage.BrokerageUserService;
import com.tashow.cloud.trade.service.brokerage.BrokerageWithdrawService;
import com.tashow.cloud.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static java.util.Arrays.asList;
@Tag(name = "用户 APP - 分销用户")
@RestController
@RequestMapping("/trade/brokerage-user")
@Validated
@Slf4j
public class AppBrokerageUserController {
@Resource
private BrokerageUserService brokerageUserService;
@Resource
private BrokerageRecordService brokerageRecordService;
@Resource
private BrokerageWithdrawService brokerageWithdrawService;
@Resource
private MemberUserApi memberUserApi;
@GetMapping("/get")
@Operation(summary = "获得个人分销信息")
public CommonResult<AppBrokerageUserRespVO> getBrokerageUser() {
Optional<BrokerageUserDO> user = Optional.ofNullable(brokerageUserService.getOrCreateBrokerageUser(getLoginUserId()));
// 返回数据
AppBrokerageUserRespVO respVO = new AppBrokerageUserRespVO()
.setBrokerageEnabled(user.map(BrokerageUserDO::getBrokerageEnabled).orElse(false))
.setBrokeragePrice(user.map(BrokerageUserDO::getBrokeragePrice).orElse(0))
.setFrozenPrice(user.map(BrokerageUserDO::getFrozenPrice).orElse(0));
return success(respVO);
}
@PutMapping("/bind")
@Operation(summary = "绑定推广员")
public CommonResult<Boolean> bindBrokerageUser(@Valid @RequestBody AppBrokerageUserBindReqVO reqVO) {
return success(brokerageUserService.bindBrokerageUser(getLoginUserId(), reqVO.getBindUserId()));
}
@GetMapping("/get-summary")
@Operation(summary = "获得个人分销统计")
public CommonResult<AppBrokerageUserMySummaryRespVO> getBrokerageUserSummary() {
// 查询当前登录用户信息
Long userId = getLoginUserId();
BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(userId);
// 统计用户昨日的佣金
LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday);
LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday);
Integer yesterdayPrice = brokerageRecordService.getSummaryPriceByUserId(userId,
BrokerageRecordBizTypeEnum.ORDER, BrokerageRecordStatusEnum.SETTLEMENT, beginTime, endTime);
// 统计用户提现的佣金
Integer withdrawPrice = brokerageWithdrawService.getWithdrawSummaryListByUserId(Collections.singleton(userId),
asList(BrokerageWithdrawStatusEnum.AUDIT_SUCCESS, BrokerageWithdrawStatusEnum.WITHDRAW_SUCCESS)).stream()
.findFirst().map(BrokerageWithdrawSummaryRespBO::getPrice).orElse(0);
// 统计分销用户数量(一级)
Long firstBrokerageUserCount = brokerageUserService.getBrokerageUserCountByBindUserId(userId, 1);
// 统计分销用户数量(二级)
Long secondBrokerageUserCount = brokerageUserService.getBrokerageUserCountByBindUserId(userId, 2);
// 拼接返回
return success(BrokerageUserConvert.INSTANCE.convert(yesterdayPrice, withdrawPrice, firstBrokerageUserCount, secondBrokerageUserCount, brokerageUser));
}
@GetMapping("/rank-page-by-user-count")
@Operation(summary = "获得分销用户排行分页(基于用户量)")
public CommonResult<PageResult<AppBrokerageUserRankByUserCountRespVO>> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO) {
// 分页查询
PageResult<AppBrokerageUserRankByUserCountRespVO> pageResult = brokerageUserService.getBrokerageUserRankPageByUserCount(pageReqVO);
// 拼接数据
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(convertSet(pageResult.getList(), AppBrokerageUserRankByUserCountRespVO::getId));
return success(BrokerageUserConvert.INSTANCE.convertPage03(pageResult, userMap));
}
@GetMapping("/rank-page-by-price")
@Operation(summary = "获得分销用户排行分页(基于佣金)")
public CommonResult<PageResult<AppBrokerageUserRankByPriceRespVO>> getBrokerageUserChildSummaryPageByPrice(AppBrokerageUserRankPageReqVO pageReqVO) {
// 分页查询
PageResult<AppBrokerageUserRankByPriceRespVO> pageResult = brokerageRecordService.getBrokerageUserChildSummaryPageByPrice(pageReqVO);
// 拼接数据
Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(convertSet(pageResult.getList(), AppBrokerageUserRankByPriceRespVO::getId));
return success(BrokerageRecordConvert.INSTANCE.convertPage03(pageResult, userMap));
}
@GetMapping("/child-summary-page")
@Operation(summary = "获得下级分销统计分页")
public CommonResult<PageResult<AppBrokerageUserChildSummaryRespVO>> getBrokerageUserChildSummaryPage(
AppBrokerageUserChildSummaryPageReqVO pageReqVO) {
PageResult<AppBrokerageUserChildSummaryRespVO> pageResult = brokerageUserService.getBrokerageUserChildSummaryPage(pageReqVO, getLoginUserId());
return success(pageResult);
}
@GetMapping("/get-rank-by-price")
@Operation(summary = "获得分销用户排行(基于佣金)")
@Parameter(name = "times", description = "时间段", required = true)
public CommonResult<Integer> getRankByPrice(
@RequestParam("times") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) LocalDateTime[] times) {
return success(brokerageRecordService.getUserRankByPrice(getLoginUserId(), times));
}
}

View File

@@ -1,47 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawCreateReqVO;
import com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawPageReqVO;
import com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawRespVO;
import com.tashow.cloud.trade.convert.brokerage.BrokerageWithdrawConvert;
import com.tashow.cloud.trade.dal.dataobject.brokerage.BrokerageWithdrawDO;
import com.tashow.cloud.trade.service.brokerage.BrokerageWithdrawService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
@Tag(name = "用户 APP - 分销提现")
@RestController
@RequestMapping("/trade/brokerage-withdraw")
@Validated
@Slf4j
public class AppBrokerageWithdrawController {
@Resource
private BrokerageWithdrawService brokerageWithdrawService;
@GetMapping("/page")
@Operation(summary = "获得分销提现分页")
public CommonResult<PageResult<AppBrokerageWithdrawRespVO>> getBrokerageWithdrawPage(AppBrokerageWithdrawPageReqVO pageReqVO) {
PageResult<BrokerageWithdrawDO> pageResult = brokerageWithdrawService.getBrokerageWithdrawPage(
BrokerageWithdrawConvert.INSTANCE.convert(pageReqVO, getLoginUserId()));
return success(BrokerageWithdrawConvert.INSTANCE.convertPage03(pageResult));
}
@PostMapping("/create")
@Operation(summary = "创建分销提现")
public CommonResult<Long> createBrokerageWithdraw(@RequestBody @Valid AppBrokerageWithdrawCreateReqVO createReqVO) {
return success(brokerageWithdrawService.createBrokerageWithdraw(getLoginUserId(), createReqVO));
}
}

View File

@@ -1,19 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.record;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "用户 App - 商品的分销金额 Response VO")
@Data
public class AppBrokerageProductPriceRespVO {
@Schema(description = "是否开启", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Boolean enabled;
@Schema(description = "分销最小金额,单位:分", example = "100")
private Integer brokerageMinPrice;
@Schema(description = "分销最大金额,单位:分", example = "100")
private Integer brokerageMaxPrice;
}

View File

@@ -1,31 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.record;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
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 = "应用 App - 分销记录分页 Request VO")
@Data
public class AppBrokerageRecordPageReqVO extends PageParam {
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(value = BrokerageRecordBizTypeEnum.class, message = "业务类型必须是 {value}")
private Integer bizType;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(value = BrokerageRecordStatusEnum.class, message = "状态必须是 {value}")
private Integer status;
}

View File

@@ -1,33 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.record;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "用户 App - 分销记录 Response VO")
@Data
public class AppBrokerageRecordRespVO {
@Schema(description = "记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long id;
@Schema(description = "业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private String bizId;
@Schema(description = "分销标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "用户下单")
private String title;
@Schema(description = "分销金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
private Integer price;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "完成时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime finishTime;
}

View File

@@ -1,16 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Schema(description = "应用 App - 绑定推广员 Request VO")
@Data
public class AppBrokerageUserBindReqVO {
@Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "推广员编号不能为空")
private Long bindUserId;
}

View File

@@ -1,30 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.SortingField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import jakarta.validation.constraints.NotNull;
@Schema(description = "用户 App - 下级分销统计分页 Request VO")
@Data
public class AppBrokerageUserChildSummaryPageReqVO extends PageParam {
public static final String SORT_FIELD_USER_COUNT = "userCount";
public static final String SORT_FIELD_ORDER_COUNT = "orderCount";
public static final String SORT_FIELD_PRICE = "price";
@Schema(description = "用户昵称", example = "") // 模糊匹配
private String nickname;
@Schema(description = "排序字段", example = "userCount")
private SortingField sortingField;
@Schema(description = "下级的级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") // 1 - 直接下级2 - 间接下级
@NotNull(message = "下级的级别不能为空")
@Range(min = 1, max = 2, message = "下级的级别只能是 {min} 或者 {max}")
private Integer level;
}

View File

@@ -1,33 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "用户 App - 下级分销统计 Response VO")
@Data
public class AppBrokerageUserChildSummaryRespVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小王")
private String nickname;
@Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.jpg")
private String avatar;
@Schema(description = "佣金金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer brokeragePrice;
@Schema(description = "分销订单数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
private Integer brokerageOrderCount;
@Schema(description = "分销用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "30")
private Integer brokerageUserCount;
@Schema(description = "绑定推广员的时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime brokerageTime;
}

View File

@@ -1,28 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "用户 App - 个人分销统计 Response VO")
@Data
public class AppBrokerageUserMySummaryRespVO {
@Schema(description = "昨天的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer yesterdayPrice;
@Schema(description = "提现的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Integer withdrawPrice;
@Schema(description = "可用的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "2408")
private Integer brokeragePrice;
@Schema(description = "冻结的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "234")
private Integer frozenPrice;
@Schema(description = "分销用户数量(一级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long firstBrokerageUserCount;
@Schema(description = "分销用户数量(二级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long secondBrokerageUserCount;
}

View File

@@ -1,22 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "用户 App - 分销排行用户(基于用户量) Response VO")
@Data
public class AppBrokerageUserRankByPriceRespVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小王")
private String nickname;
@Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.jpg")
private String avatar;
@Schema(description = "佣金金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer brokeragePrice;
}

View File

@@ -1,22 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "用户 App - 分销排行用户(基于用户量) Response VO")
@Data
public class AppBrokerageUserRankByUserCountRespVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小王")
private String nickname;
@Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.jpg")
private String avatar;
@Schema(description = "邀请用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer brokerageUserCount;
}

View File

@@ -1,22 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import jakarta.validation.constraints.NotEmpty;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "应用 App - 分销用户排行 Request VO")
@Data
public class AppBrokerageUserRankPageReqVO extends PageParam {
@Schema(description = "开始 + 结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@NotEmpty(message = "时间不能为空")
private LocalDateTime[] times;
}

View File

@@ -1,19 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "用户 App - 分销用户信息 Response VO")
@Data
public class AppBrokerageUserRespVO {
@Schema(description = "是否有分销资格", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
private Boolean brokerageEnabled;
@Schema(description = "可用的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "2408")
private Integer brokeragePrice;
@Schema(description = "冻结的佣金,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "234")
private Integer frozenPrice;
}

View File

@@ -1,75 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw;
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.URL;
import jakarta.validation.Validator;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PositiveOrZero;
@Schema(description = "用户 App - 分销提现创建 Request VO")
@Data
public class AppBrokerageWithdrawCreateReqVO {
@Schema(description = "提现方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(value = BrokerageWithdrawTypeEnum.class, message = "提现方式必须是 {value}")
private Integer type;
@Schema(description = "提现金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
@PositiveOrZero(message = "提现金额不能小于 0")
@NotNull(message = "提现金额不能为空")
private Integer price;
// ========== 银行卡、微信、支付宝 提现相关字段 ==========
@Schema(description = "提现账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456789")
@NotBlank(message = "提现账号不能为空", groups = {Bank.class, Wechat.class, Alipay.class})
private String accountNo;
// ========== 微信、支付宝 提现相关字段 ==========
@Schema(description = "收款码的图片", example = "https://www.iocoder.cn/1.png")
@URL(message = "收款码的图片,必须是一个 URL")
private String accountQrCodeUrl;
// ========== 银行卡 提现相关字段 ==========
@Schema(description = "持卡人姓名", example = "张三")
@NotBlank(message = "持卡人姓名不能为空", groups = {Bank.class})
private String name;
@Schema(description = "提现银行", example = "1")
@NotNull(message = "提现银行不能为空", groups = {Bank.class})
private String bankName;
@Schema(description = "开户地址", example = "海淀支行")
private String bankAddress;
public interface Wallet {
}
public interface Bank {
}
public interface Wechat {
}
public interface Alipay {
}
public void validate(Validator validator) {
if (BrokerageWithdrawTypeEnum.WALLET.getType().equals(type)) {
ValidationUtils.validate(validator, this, Wallet.class);
} else if (BrokerageWithdrawTypeEnum.BANK.getType().equals(type)) {
ValidationUtils.validate(validator, this, Bank.class);
} else if (BrokerageWithdrawTypeEnum.WECHAT.getType().equals(type)) {
ValidationUtils.validate(validator, this, Wechat.class);
} else if (BrokerageWithdrawTypeEnum.ALIPAY.getType().equals(type)) {
ValidationUtils.validate(validator, this, Alipay.class);
}
}
}

View File

@@ -1,22 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;
import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "应用 App - 分销提现分页 Request VO")
@Data
public class AppBrokerageWithdrawPageReqVO extends PageParam {
@Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(value = BrokerageWithdrawTypeEnum.class, message = "类型必须是 {value}")
private Integer type;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(value = BrokerageWithdrawStatusEnum.class, message = "状态必须是 {value}")
private Integer status;
}

View File

@@ -1,27 +0,0 @@
package com.tashow.cloud.trade.controller.app.brokerage.vo.withdraw;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "用户 App - 分销提现 Response VO")
@Data
public class AppBrokerageWithdrawRespVO {
@Schema(description = "提现编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Long id;
@Schema(description = "提现状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
private Integer status;
@Schema(description = "提现状态名", requiredMode = Schema.RequiredMode.REQUIRED, example = "审核中")
private String statusName;
@Schema(description = "提现金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
private Integer price;
@Schema(description = "提现时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}

View File

@@ -1,42 +0,0 @@
### 请求 /trade/cart/add 接口 => 成功
POST {{appApi}}/trade/cart/add
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}
Content-Type: application/json
{
"skuId": 1,
"count": 10,
"addStatus": true
}
### 请求 /trade/cart/update 接口 => 成功
PUT {{appApi}}/trade/cart/update
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}
Content-Type: application/json
{
"id": 35,
"count": 5
}
### 请求 /trade/cart/delete 接口 => 成功
DELETE {{appApi}}/trade/cart/delete?ids=1
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}
### 请求 /trade/cart/get-count 接口 => 成功
GET {{appApi}}/trade/cart/get-count
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}
### 请求 /trade/cart/get-count-map 接口 => 成功
GET {{appApi}}/trade/cart/get-count-map
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}
### 请求 /trade/cart/list 接口 => 成功
GET {{appApi}}/trade/cart/list
tenant-id: {{appTenantId}}
Authorization: Bearer {{appToken}}

View File

@@ -1,80 +0,0 @@
package com.tashow.cloud.trade.controller.app.cart;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.trade.controller.app.cart.vo.*;
import com.tashow.cloud.trade.controller.app.cart.vo.*;
import com.tashow.cloud.trade.service.cart.CartService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "用户 App - 购物车")
@RestController
@RequestMapping("/trade/cart")
@RequiredArgsConstructor
@Validated
@Slf4j
public class AppCartController {
@Resource
private CartService cartService;
@PostMapping("/add")
@Operation(summary = "添加购物车商品")
public CommonResult<Long> addCart(@Valid @RequestBody AppCartAddReqVO addCountReqVO) {
return success(cartService.addCart(getLoginUserId(), addCountReqVO));
}
@PutMapping("/update-count")
@Operation(summary = "更新购物车商品数量")
public CommonResult<Boolean> updateCartCount(@Valid @RequestBody AppCartUpdateCountReqVO updateReqVO) {
cartService.updateCartCount(getLoginUserId(), updateReqVO);
return success(true);
}
@PutMapping("/update-selected")
@Operation(summary = "更新购物车商品选中")
public CommonResult<Boolean> updateCartSelected(@Valid @RequestBody AppCartUpdateSelectedReqVO updateReqVO) {
cartService.updateCartSelected(getLoginUserId(), updateReqVO);
return success(true);
}
@PutMapping("/reset")
@Operation(summary = "重置购物车商品")
public CommonResult<Boolean> resetCart(@Valid @RequestBody AppCartResetReqVO updateReqVO) {
cartService.resetCart(getLoginUserId(), updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除购物车商品")
@Parameter(name = "ids", description = "购物车商品编号", required = true, example = "1024,2048")
public CommonResult<Boolean> deleteCart(@RequestParam("ids") List<Long> ids) {
cartService.deleteCart(getLoginUserId(), ids);
return success(true);
}
@GetMapping("get-count")
@Operation(summary = "查询用户在购物车中的商品数量")
public CommonResult<Integer> getCartCount() {
return success(cartService.getCartCount(getLoginUserId()));
}
@GetMapping("/list")
@Operation(summary = "查询用户的购物车列表")
public CommonResult<AppCartListRespVO> getCartList() {
return success(cartService.getCartList(getLoginUserId()));
}
}

Some files were not shown because too many files have changed in this diff Show More