From f6eb0c40d0dc666cccc572129d346b146a601cd6 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 17:44:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8E=92=E9=98=9F=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=92=E9=98=9F=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StoreCombinationController.java | 14 +- .../java/com/yzt/admin/model/ScheduleJob.java | 2 +- .../com/yzt/admin/model/ScheduleJobLog.java | 2 +- .../common/model/combination/StorePink.java | 6 + .../AdminGenerateQueueCodeRequest.java | 32 +++ .../yzt/service/service/StorePinkService.java | 9 + .../service/impl/StorePinkServiceImpl.java | 185 ++++++++++++++++++ 7 files changed, 245 insertions(+), 5 deletions(-) create mode 100644 fightwine-common/src/main/java/com/yzt/common/request/AdminGenerateQueueCodeRequest.java diff --git a/fightwine-admin/src/main/java/com/yzt/admin/controller/StoreCombinationController.java b/fightwine-admin/src/main/java/com/yzt/admin/controller/StoreCombinationController.java index ce8b56a..c5fb26d 100644 --- a/fightwine-admin/src/main/java/com/yzt/admin/controller/StoreCombinationController.java +++ b/fightwine-admin/src/main/java/com/yzt/admin/controller/StoreCombinationController.java @@ -1,6 +1,7 @@ package com.yzt.admin.controller; import com.yzt.common.page.CommonPage; +import com.yzt.common.request.AdminGenerateQueueCodeRequest; import com.yzt.common.request.PageParamRequest; import com.yzt.common.request.StoreCombinationRequest; import com.yzt.common.request.StoreCombinationSearchRequest; @@ -166,7 +167,14 @@ public class StoreCombinationController { storePinkService.adminCancelQueueAndRecalculate(pinkId); return CommonResult.success(); } + + /** + * 后台管理员新增排队码 + */ + @ApiOperation(value = "后台管理员新增排队码") + @RequestMapping(value = "/admin/generate/queue", method = RequestMethod.POST) + public CommonResult adminGenerateQueueCodes(@RequestBody @Validated AdminGenerateQueueCodeRequest request) { + storePinkService.adminGenerateQueueCodes(request.getUid(), request.getProductId(), request.getCount(), request.getRemark()); + return CommonResult.success("排队码生成成功"); + } } - - - diff --git a/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJob.java b/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJob.java index a350ab0..f725d41 100644 --- a/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJob.java +++ b/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJob.java @@ -21,7 +21,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName("fw_schedule_job") +@TableName("zp_schedule_job") @ApiModel(value="ScheduleJob对象", description="定时任务") public class ScheduleJob implements Serializable { diff --git a/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJobLog.java b/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJobLog.java index 2bd0a71..58cc3d5 100644 --- a/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJobLog.java +++ b/fightwine-admin/src/main/java/com/yzt/admin/model/ScheduleJobLog.java @@ -21,7 +21,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@TableName("fw_schedule_job_log") +@TableName("zp_schedule_job_log") @ApiModel(value="ScheduleJobLog对象", description="定时任务日志") public class ScheduleJobLog implements Serializable { 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 633a9ec..d1b92f2 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 @@ -95,4 +95,10 @@ public class StorePink implements Serializable { @ApiModelProperty(value = "排队码编号(年月日时分秒+六位随机数)") private String queueCode; + @ApiModelProperty(value = "操作的管理员ID") + private Integer adminId; + + @ApiModelProperty(value = "备注") + private String remark; + } diff --git a/fightwine-common/src/main/java/com/yzt/common/request/AdminGenerateQueueCodeRequest.java b/fightwine-common/src/main/java/com/yzt/common/request/AdminGenerateQueueCodeRequest.java new file mode 100644 index 0000000..7ecf0f6 --- /dev/null +++ b/fightwine-common/src/main/java/com/yzt/common/request/AdminGenerateQueueCodeRequest.java @@ -0,0 +1,32 @@ +package com.yzt.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * 后台管理员新增排队码请求参数 + */ +@Data +@ApiModel(value = "AdminGenerateQueueCodeRequest", description = "后台管理员新增排队码请求参数") +public class AdminGenerateQueueCodeRequest { + + @ApiModelProperty(value = "用户uid", required = true) + @NotNull(message = "用户uid不能为空") + private Integer uid; + + @ApiModelProperty(value = "商品product_id", required = true) + @NotNull(message = "商品product_id不能为空") + private Integer productId; + + @ApiModelProperty(value = "生成码数量", required = true) + @NotNull(message = "生成码数量不能为空") + @Min(value = 1, message = "生成码数量至少为1") + private Integer count; + + @ApiModelProperty(value = "备注") + private String remark; +} 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 c1028b7..b16dd5f 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 @@ -109,4 +109,13 @@ public interface StorePinkService extends IService { * @param pinkId 拼团(排队)记录ID */ void adminCancelQueueAndRecalculate(Integer pinkId); + + /** + * 后台管理员新增排队码 + * @param uid 用户ID + * @param productId 商品ID + * @param count 生成码数量 + * @param remark 备注 + */ + void adminGenerateQueueCodes(Integer uid, Integer productId, Integer count, String remark); } 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 46d3657..303fdc5 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,6 +16,7 @@ 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.product.StoreProductAttr; import com.yzt.common.model.system.SystemNotification; import com.yzt.common.model.user.User; import com.yzt.common.model.user.UserBrokerageRecord; @@ -88,6 +89,9 @@ public class StorePinkServiceImpl extends ServiceImpl attrWrapper = new LambdaQueryWrapper<>(); + attrWrapper.eq(StoreProductAttr::getProductId, productId); + attrWrapper.eq(StoreProductAttr::getIsDel, false); + List attrList = storeProductAttrService.list(attrWrapper); + + if (CollUtil.isEmpty(attrList)) { + throw new YztException("商品属性不存在"); + } + + // 获取第一个属性的attrValues + String attrValues = attrList.get(0).getAttrValues(); + if (StrUtil.isBlank(attrValues)) { + throw new YztException("商品属性值为空"); + } + + //判断队列类型 + Integer queueType; + String redisKey; + if ("1".equals(attrValues)) { + queueType = 1; + redisKey = "queue:counter:member"; + } else if ("2".equals(attrValues)) { + queueType = 2; + redisKey = "queue:counter:hall"; + } else { + throw new YztException("商品属性值异常:" + attrValues + ",仅支持1(黔行)或2(茅香)"); + } + + List queueList = new ArrayList<>(); + long currentTimeSeconds = System.currentTimeMillis() / 1000; + String orderId = String.valueOf(currentTimeSeconds); + + for (int i = 0; i < count; i++) { + // 使用Redis递增获取排队号 + long currentQueueNo = redisUtil.incr(redisKey, 1); + + StorePink queueItem = new StorePink(); + + // 用户信息 + queueItem.setUid(user.getUid()); + queueItem.setNickname(user.getNickname()); + queueItem.setAvatar(user.getAvatar()); + + queueItem.setOrderId(orderId); + queueItem.setOrderIdKey(0); + + queueItem.setPid(productId); + queueItem.setCid(productId); + queueItem.setTotalNum(count); + queueItem.setPrice(BigDecimal.ZERO); + queueItem.setTotalPrice(BigDecimal.ZERO); + + queueItem.setPeople(1); + queueItem.setKId(0); + queueItem.setStatus(1); + queueItem.setAddTime(currentTimeSeconds); + queueItem.setStopTime(0L); + + queueItem.setIsTpl(false); + queueItem.setIsRefund(false); + queueItem.setIs_virtual(false); + + queueItem.setQueueType(queueType); + queueItem.setQueueNo((int) currentQueueNo); + queueItem.setQueueProgress(BigDecimal.ZERO); // 初始为0,后续重算 + + // 生成排队码编号:年月日时分秒+六位随机数 + String queueCode = generateQueueCode(currentTimeSeconds); + queueItem.setQueueCode(queueCode); + + // 设置备注 + queueItem.setRemark(remark); + + try { + Integer adminId = com.yzt.common.utils.SecurityUtil.getCurrentUserId(); + queueItem.setAdminId(adminId); + } catch (Exception e) { + // 如果获取不到管理员ID,不影响主流程,只记录日志 + logger.warn("无法获取当前管理员ID: {}", e.getMessage()); + } + + queueList.add(queueItem); + } + + if (!queueList.isEmpty()) { + this.saveBatch(queueList); + logger.info("管理员生成排队码成功: uid={}, productId={}, count={}, queueType={}, remark={}", + uid, productId, count, queueType, remark); + } + + //重新计算队列进度(查询该队列中所有is_refund=0且status=1的记录) + LambdaQueryWrapper waitingWrapper = new LambdaQueryWrapper<>(); + waitingWrapper.eq(StorePink::getQueueType, queueType) + .eq(StorePink::getStatus, 1) + .eq(StorePink::getIsRefund, false) + .orderByAsc(StorePink::getQueueNo); + List waitingList = this.list(waitingWrapper); + + if (CollUtil.isEmpty(waitingList)) { + return; + } + + // 使用Redis中的计数器值作为Y(队列当前排到的位置) + long redisVal = redisUtil.get(redisKey) == null ? 0 : Long.parseLong(redisUtil.get(redisKey).toString()); + int currentY = (int) redisVal; + if (currentY <= 0) { + currentY = waitingList.size(); + } + + // 重新计算进度:公式 (Y-X) / (5X) + List updates = new ArrayList<>(); + for (StorePink xUser : waitingList) { + Integer xNo = xUser.getQueueNo(); + if (xNo == null || xNo <= 0) { + continue; + } + int x = xNo; + if (x >= currentY) { + continue; + } + + BigDecimal numerator = new BigDecimal(currentY - x); // 分子 = Y - X + BigDecimal denominator = new BigDecimal(5 * x); // 分母 = 5X + if (denominator.compareTo(BigDecimal.ZERO) <= 0) { + // 分母异常时跳过,避免除零错误 + continue; + } + + // 判断是否免单成功 + if (numerator.compareTo(denominator) >= 0) { + // (Y-X) >= (5X),即 progress >= 1 + xUser.setQueueProgress(BigDecimal.ONE); + xUser.setStatus(2); + } else { + // 计算进度值,保留6位小数 + BigDecimal progress = numerator.divide(denominator, 6, BigDecimal.ROUND_DOWN); + xUser.setQueueProgress(progress); + } + updates.add(xUser); + } + if (CollUtil.isNotEmpty(updates)) { + this.updateBatchById(updates); + logger.info("重新计算队列进度完成: queueType={}, 更新记录数={}", queueType, updates.size()); + } + } + + /** + * 生成排队码编号:年月日时分秒+六位随机数 + * @param addTime Unix时间戳(秒) + * @return 排队码编号 + */ + private String generateQueueCode(Long addTime) { + // 将Unix时间戳转换为日期时间格式 + cn.hutool.core.date.DateTime dateTime = cn.hutool.core.date.DateUtil.date(addTime * 1000); + String timeStr = cn.hutool.core.date.DateUtil.format(dateTime, "yyMMddHHmmss"); + + // 生成六位随机数 + int randomNum = (int)(Math.random() * 1000000); + String randomStr = String.format("%06d", randomNum); + + return timeStr + randomStr; + } } 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 2/4] =?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; + } } From ab90c26311bedb788b50e2f95d2ffba572704093 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 20:01:30 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=8B=BC=E5=9B=A2ID?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=95=86=E5=93=81=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CombinationController.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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 5073946..acc477a 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 @@ -2,6 +2,8 @@ package com.yzt.front.controller; import com.github.pagehelper.PageInfo; import com.yzt.common.model.combination.StoreCombination; +import com.yzt.common.model.combination.StorePink; +import com.yzt.common.model.product.StoreProduct; import com.yzt.common.page.CommonPage; import com.yzt.common.request.ClaimProductRequest; import com.yzt.common.request.PageParamRequest; @@ -10,6 +12,7 @@ import com.yzt.common.response.*; import com.yzt.common.result.CommonResult; import com.yzt.service.service.StoreCombinationService; import com.yzt.service.service.StorePinkService; +import com.yzt.service.service.StoreProductService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -33,6 +36,9 @@ public class CombinationController { @Autowired private StorePinkService storePinkService; + @Autowired + private StoreProductService storeProductService; + /** * 拼团首页 */ @@ -119,4 +125,30 @@ public class CombinationController { } } + /** + * 根据拼团ID查询商品详情 + */ + @ApiOperation(value = "根据拼团ID查询商品详情") + @RequestMapping(value = "/product/{pinkId}", method = RequestMethod.GET) + public CommonResult getProductByPinkId(@PathVariable(value = "pinkId") Integer pinkId) { + try { + // 根据拼团ID查询拼团信息 + StorePink storePink = storePinkService.getById(pinkId); + if (storePink == null) { + return CommonResult.failed("拼团信息不存在"); + } + + // 根据商品ID查询商品基本信息 + StoreProduct storeProduct = storeProductService.getById(storePink.getPid()); + if (storeProduct == null) { + return CommonResult.failed("商品信息不存在"); + } + + return CommonResult.success(storeProduct); + } catch (Exception e) { + log.error("根据拼团ID查询商品详情失败: {}", e.getMessage(), e); + return CommonResult.failed(e.getMessage()); + } + } + } From be676baa8c19b73a0c2a646f9c34e19bf597d1cd 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 20:23:54 +0800 Subject: [PATCH 4/4] =?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 --- .../controller/StoreOrderController.java | 7 ++++-- .../com/yzt/service/service/OrderService.java | 3 ++- .../service/service/StoreOrderService.java | 2 +- .../service/impl/OrderServiceImpl.java | 5 ++-- .../service/impl/StoreOrderServiceImpl.java | 4 +++- .../mapper/store/StoreOrderMapper.xml | 23 +++++++++++-------- 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/fightwine-front/src/main/java/com/yzt/front/controller/StoreOrderController.java b/fightwine-front/src/main/java/com/yzt/front/controller/StoreOrderController.java index 7bc6d9c..69650ac 100644 --- a/fightwine-front/src/main/java/com/yzt/front/controller/StoreOrderController.java +++ b/fightwine-front/src/main/java/com/yzt/front/controller/StoreOrderController.java @@ -82,19 +82,22 @@ public class StoreOrderController { /** * 订单列表 * @param type 类型 + * @param payType 支付方式 * @param pageRequest 分页 * @return 订单列表 */ @ApiOperation(value = "订单列表") @RequestMapping(value = "/list", method = RequestMethod.GET) @ApiImplicitParams ({ - @ApiImplicitParam(name = "type", value = "评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成,-3=售后/退款,-4=已取消", required = false) + @ApiImplicitParam(name = "type", value = "评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成,-3=售后/退款,-4=已取消", required = false), + @ApiImplicitParam(name = "payType", value = "支付方式,free表示免费订单", required = false) }) public CommonResult> orderList( @RequestParam(name = "keywords", required = false) String keywords, @RequestParam(name = "type", required = false) Integer type, + @RequestParam(name = "payType", required = false) String payType, @ModelAttribute PageParamRequest pageRequest) { - return CommonResult.success(CommonPage.restPage(orderService.list(keywords, type, pageRequest))); + return CommonResult.success(CommonPage.restPage(orderService.list(keywords, type, payType, pageRequest))); } /** diff --git a/fightwine-service/src/main/java/com/yzt/service/service/OrderService.java b/fightwine-service/src/main/java/com/yzt/service/service/OrderService.java index b4f70e0..bc7d64e 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/OrderService.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/OrderService.java @@ -16,10 +16,11 @@ public interface OrderService { /** * 订单列表 * @param type 类型 + * @param payType 支付方式 * @param pageRequest 分页 * @return 订单集合 */ - PageInfo list(String keywords,Integer type, PageParamRequest pageRequest); + PageInfo list(String keywords,Integer type, String payType, PageParamRequest pageRequest); /** * 订单详情 diff --git a/fightwine-service/src/main/java/com/yzt/service/service/StoreOrderService.java b/fightwine-service/src/main/java/com/yzt/service/service/StoreOrderService.java index 1bc820f..a0e0858 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/StoreOrderService.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/StoreOrderService.java @@ -53,7 +53,7 @@ public interface StoreOrderService extends IService { * @return 订单结果列表 */ List getUserOrderList(Integer uid, Integer status, PageParamRequest pageParamRequest); - PageInfo getUserOrderList_2_3(String keywords, Integer uid, Integer status, PageParamRequest pageParamRequest); + PageInfo getUserOrderList_2_3(String keywords, Integer uid, Integer status, String payType, PageParamRequest pageParamRequest); /** * 创建订单 * @param storeOrder 订单参数 diff --git a/fightwine-service/src/main/java/com/yzt/service/service/impl/OrderServiceImpl.java b/fightwine-service/src/main/java/com/yzt/service/service/impl/OrderServiceImpl.java index d049cc2..d306b8c 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/impl/OrderServiceImpl.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/impl/OrderServiceImpl.java @@ -448,14 +448,15 @@ public class OrderServiceImpl implements OrderService { * 订单列表 * * @param status 类型 + * @param payType 支付方式 * @param pageRequest 分页 * @return CommonPage */ @Override - public PageInfo list(String keywords, Integer status, PageParamRequest pageRequest) { + public PageInfo list(String keywords, Integer status, String payType, PageParamRequest pageRequest) { Integer userId = userService.getUserIdException(); - PageInfo orderPageInfo = storeOrderService.getUserOrderList_2_3(keywords,userId, status, pageRequest); + PageInfo orderPageInfo = storeOrderService.getUserOrderList_2_3(keywords,userId, status, payType, pageRequest); List orderList = orderPageInfo.getList(); if (CollUtil.isEmpty(orderList)) { return CommonPage.copyPageInfo(orderPageInfo, CollUtil.newArrayList()); diff --git a/fightwine-service/src/main/java/com/yzt/service/service/impl/StoreOrderServiceImpl.java b/fightwine-service/src/main/java/com/yzt/service/service/impl/StoreOrderServiceImpl.java index 32735f8..7fbef9f 100644 --- a/fightwine-service/src/main/java/com/yzt/service/service/impl/StoreOrderServiceImpl.java +++ b/fightwine-service/src/main/java/com/yzt/service/service/impl/StoreOrderServiceImpl.java @@ -198,17 +198,19 @@ public class StoreOrderServiceImpl extends ServiceImpl getUserOrderList_2_3(String keywords, - Integer uid, Integer status, PageParamRequest pageParamRequest) { + Integer uid, Integer status, String payType, PageParamRequest pageParamRequest) { Page page = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit()); Map searchMap = new HashMap<>(); String searchKey = URLUtil.decode(keywords); searchMap.put("keywords", searchKey); searchMap.put("status", status); searchMap.put("uid", uid); + searchMap.put("payType", payType); List orderList = mapper.findFrontList(searchMap); return CommonPage.copyPageInfo(page, orderList); diff --git a/fightwine-service/src/main/resources/mapper/store/StoreOrderMapper.xml b/fightwine-service/src/main/resources/mapper/store/StoreOrderMapper.xml index e77b479..d8f8166 100644 --- a/fightwine-service/src/main/resources/mapper/store/StoreOrderMapper.xml +++ b/fightwine-service/src/main/resources/mapper/store/StoreOrderMapper.xml @@ -3,16 +3,16 @@ select sum(o.pay_price) as num,date_format(o.create_time, '%Y-%m-%d') as time - from fw_store_order o + from zp_store_order o where o.is_del >= 0 and o.paid >= 1 and o.refund_status >= 0 and o.create_time >= #{ startTime } and o.create_time < #{ endTime } @@ -102,7 +105,7 @@ select count(*) as num, sum(o.pay_price) as price - from fw_store_order as o - right join fw_user_brokerage_record as br on br.link_id = o.order_id and br.status = 3 and br.uid = #{spreadId} + from zp_store_order as o + right join zp_user_brokerage_record as br on br.link_id = o.order_id and br.status = 3 and br.uid = #{spreadId} where o.uid = #{uid} and o.status > 1;