From 1fe3cb369e91ab5b160801e620ab5916e9ba6483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E7=9D=A1=E8=A7=89=E7=9A=84=E6=9C=88=E4=BA=AE?= <97796069+Cookies-OvO@users.noreply.github.com> Date: Thu, 4 Dec 2025 19:48:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E5=8F=96=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/model/combination/StorePink.java | 4 +- .../common/request/ClaimProductRequest.java | 23 +++ .../yzt/common/request/PinkQueryRequest.java | 2 +- .../controller/CombinationController.java | 20 +++ .../yzt/service/service/StorePinkService.java | 8 + .../service/impl/StorePinkServiceImpl.java | 148 ++++++++++++++++++ 6 files changed, 202 insertions(+), 3 deletions(-) create mode 100644 fightwine-common/src/main/java/com/yzt/common/request/ClaimProductRequest.java diff --git a/fightwine-common/src/main/java/com/yzt/common/model/combination/StorePink.java b/fightwine-common/src/main/java/com/yzt/common/model/combination/StorePink.java index d1b92f2..ce84576 100644 --- a/fightwine-common/src/main/java/com/yzt/common/model/combination/StorePink.java +++ b/fightwine-common/src/main/java/com/yzt/common/model/combination/StorePink.java @@ -68,10 +68,10 @@ public class StorePink implements Serializable { @ApiModelProperty(value = "是否发送模板消息0未发送1已发送") private Boolean isTpl; - @ApiModelProperty(value = "是否退款 0未退款 1已退款") + @ApiModelProperty(value = "是否失效 0未失效 1已失效") private Boolean isRefund; - @ApiModelProperty(value = "状态1进行中2已完成3未完成") + @ApiModelProperty(value = "状态1排队中2已达成待领取3已领取") private Integer status; @ApiModelProperty(value = "用户昵称") diff --git a/fightwine-common/src/main/java/com/yzt/common/request/ClaimProductRequest.java b/fightwine-common/src/main/java/com/yzt/common/request/ClaimProductRequest.java new file mode 100644 index 0000000..cf55e08 --- /dev/null +++ b/fightwine-common/src/main/java/com/yzt/common/request/ClaimProductRequest.java @@ -0,0 +1,23 @@ +package com.yzt.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 领取商品请求对象 + */ +@Data +@ApiModel("领取商品请求") +public class ClaimProductRequest { + + @ApiModelProperty(value = "拼团ID(zp_store_pink表的主键id)", required = true) + @NotNull(message = "拼团ID不能为空") + private Integer pinkId; + + @ApiModelProperty(value = "收货地址ID(zp_user_address表的主键id)", required = true) + @NotNull(message = "收货地址ID不能为空") + private Integer addressId; +} diff --git a/fightwine-common/src/main/java/com/yzt/common/request/PinkQueryRequest.java b/fightwine-common/src/main/java/com/yzt/common/request/PinkQueryRequest.java index 72a006e..1c93481 100644 --- a/fightwine-common/src/main/java/com/yzt/common/request/PinkQueryRequest.java +++ b/fightwine-common/src/main/java/com/yzt/common/request/PinkQueryRequest.java @@ -19,6 +19,6 @@ public class PinkQueryRequest { @NotNull(message = "用户ID不能为空") private Integer uid; - @ApiModelProperty(value = "队列类型: 1-会员队列, 2-会馆队列") + @ApiModelProperty(value = "队列类型: 1-黔行, 2-茅香") private Integer queueType; } diff --git a/fightwine-front/src/main/java/com/yzt/front/controller/CombinationController.java b/fightwine-front/src/main/java/com/yzt/front/controller/CombinationController.java index ab4c422..5073946 100644 --- a/fightwine-front/src/main/java/com/yzt/front/controller/CombinationController.java +++ b/fightwine-front/src/main/java/com/yzt/front/controller/CombinationController.java @@ -3,11 +3,13 @@ package com.yzt.front.controller; import com.github.pagehelper.PageInfo; import com.yzt.common.model.combination.StoreCombination; import com.yzt.common.page.CommonPage; +import com.yzt.common.request.ClaimProductRequest; import com.yzt.common.request.PageParamRequest; import com.yzt.common.request.StorePinkRequest; import com.yzt.common.response.*; import com.yzt.common.result.CommonResult; import com.yzt.service.service.StoreCombinationService; +import com.yzt.service.service.StorePinkService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -28,6 +30,9 @@ public class CombinationController { @Autowired private StoreCombinationService storeCombinationService; + @Autowired + private StorePinkService storePinkService; + /** * 拼团首页 */ @@ -99,4 +104,19 @@ public class CombinationController { } } + /** + * 领取商品(拼团达成后免费送一份商品) + */ + @ApiOperation(value = "领取商品") + @RequestMapping(value = "/claim", method = RequestMethod.POST) + public CommonResult claimProduct(@RequestBody @Validated ClaimProductRequest request) { + try { + String orderNo = storePinkService.claimProduct(request.getPinkId(), request.getAddressId()); + return CommonResult.success(orderNo).setMessage("领取成功"); + } catch (Exception e) { + log.error("领取商品失败: {}", e.getMessage(), e); + return CommonResult.failed(e.getMessage()); + } + } + } diff --git a/fightwine-service/src/main/java/com/yzt/service/service/StorePinkService.java b/fightwine-service/src/main/java/com/yzt/service/service/StorePinkService.java index b16dd5f..274f5e3 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/StorePinkService.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/StorePinkService.java @@ -118,4 +118,12 @@ public interface StorePinkService extends IService { * @param remark 备注 */ void adminGenerateQueueCodes(Integer uid, Integer productId, Integer count, String remark); + + /** + * H5端用户领取商品(免费送一份商品) + * @param pinkId 拼团ID + * @param addressId 收货地址ID + * @return 订单编号 + */ + String claimProduct(Integer pinkId, Integer addressId); } diff --git a/fightwine-service/src/main/java/com/yzt/service/service/impl/StorePinkServiceImpl.java b/fightwine-service/src/main/java/com/yzt/service/service/impl/StorePinkServiceImpl.java index 303fdc5..169cc73 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/impl/StorePinkServiceImpl.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/impl/StorePinkServiceImpl.java @@ -16,9 +16,12 @@ import com.yzt.common.exception.YztException; import com.yzt.common.model.combination.StoreCombination; import com.yzt.common.model.combination.StorePink; import com.yzt.common.model.order.StoreOrder; +import com.yzt.common.model.order.StoreOrderInfo; +import com.yzt.common.model.product.StoreProduct; import com.yzt.common.model.product.StoreProductAttr; import com.yzt.common.model.system.SystemNotification; import com.yzt.common.model.user.User; +import com.yzt.common.model.user.UserAddress; import com.yzt.common.model.user.UserBrokerageRecord; import com.yzt.common.model.user.UserRechargeApplication; import com.yzt.common.model.user.UserToken; @@ -29,6 +32,7 @@ import com.yzt.common.request.StorePinkSearchRequest; import com.yzt.common.response.StorePinkAdminListResponse; import com.yzt.common.response.StorePinkDetailResponse; import com.yzt.common.utils.YztDateUtil; +import com.yzt.common.utils.YztUtil; import com.yzt.common.vo.DateLimitUtilVo; import com.yzt.common.vo.MyRecord; import com.yzt.service.mapper.StorePinkMapper; @@ -92,6 +96,18 @@ public class StorePinkServiceImpl extends ServiceImpl orderInfoList = new ArrayList<>(); + orderInfoList.add(orderInfo); + storeOrderInfoService.saveOrderInfos(orderInfoList); + + // 更新拼团状态为已领取 + storePink.setStatus(3); + updateById(storePink); + + // 创建订单日志 + storeOrderStatusService.createLog(claimOrder.getId(), Constants.ORDER_STATUS_CACHE_CREATE_ORDER, "拼团达成免费领取商品订单生成"); + storeOrderStatusService.createLog(claimOrder.getId(), Constants.ORDER_STATUS_CACHE_CREATE_ORDER, "免费领取,自动标记为已支付"); + + logger.info("用户 {} 领取拼团商品成功,拼团ID: {}, 订单号: {}", user.getUid(), pinkId, orderNo); + + return orderNo; + } }