From bfd534dc7baf66fce04c6e17839444067f7d90e9 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Thu, 18 Dec 2025 16:17:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/PpPackageController.java | 20 +++--- .../com/czg/market/dto/PpPackageOrderDTO.java | 40 ++++++++++-- .../com/czg/market/entity/PpHelpRecord.java | 2 + .../com/czg/market/entity/PpPackageOrder.java | 7 +++ .../market/service/PpHelpRecordService.java | 3 + .../market/service/PpPackageOrderService.java | 11 ++++ .../java/com/czg/market/vo/PpPackageVO.java | 6 +- .../service/impl/PpHelpRecordServiceImpl.java | 33 +++++++++- .../impl/PpPackageOrderServiceImpl.java | 61 ++++++++++++++++++- .../service/impl/PpPackageServiceImpl.java | 18 +++--- 10 files changed, 177 insertions(+), 24 deletions(-) diff --git a/cash-api/market-server/src/main/java/com/czg/controller/admin/PpPackageController.java b/cash-api/market-server/src/main/java/com/czg/controller/admin/PpPackageController.java index 423311d84..707e6024c 100644 --- a/cash-api/market-server/src/main/java/com/czg/controller/admin/PpPackageController.java +++ b/cash-api/market-server/src/main/java/com/czg/controller/admin/PpPackageController.java @@ -7,6 +7,8 @@ import com.czg.market.vo.PpPackagePageReqVo; import com.czg.market.vo.PpPackageVO; import com.czg.resp.CzgResult; import com.czg.utils.AssertUtil; +import com.czg.validator.group.InsertGroup; +import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -29,8 +31,8 @@ public class PpPackageController { * 添加套餐 */ @PostMapping - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:add", name = "添加套餐") - public CzgResult addPackage(@RequestBody @Validated PpPackageVO packageVO) { + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:add", name = "添加套餐") + public CzgResult addPackage(@RequestBody @Validated({InsertGroup.class}) PpPackageVO packageVO) { ppPackageService.insertPackage(packageVO); return CzgResult.success(); } @@ -39,8 +41,8 @@ public class PpPackageController { * 修改套餐 */ @PutMapping - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:update", name = "修改套餐") - public CzgResult updatePackage(@RequestBody @Validated PpPackageVO packageVO) { + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:update", name = "修改套餐") + public CzgResult updatePackage(@RequestBody @Validated({UpdateGroup.class}) PpPackageVO packageVO) { ppPackageService.updatePackage(packageVO); return CzgResult.success(); } @@ -50,7 +52,7 @@ public class PpPackageController { * 如果返回值大于0则删除失败,存在进行中的订单,请继续调用确认删除套餐接口 */ @DeleteMapping("/{id}") - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:delete", name = "删除套餐") + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:delete", name = "删除套餐") public CzgResult deletePackage(@PathVariable Long id) { return CzgResult.success(ppPackageService.deletePackage(id)); } @@ -59,7 +61,7 @@ public class PpPackageController { * 确认删除套餐 */ @DeleteMapping("/sure/{id}") - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:sureDelete", name = "确认删除套餐") + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:sureDelete", name = "确认删除套餐") public CzgResult sureDeletePackage(@PathVariable Long id) { ppPackageService.sureDeletePackage(id); return CzgResult.success(); @@ -78,7 +80,7 @@ public class PpPackageController { * 0: 关闭 1: 开启 */ @GetMapping("/switch") - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:getSwitch", name = "获取套餐推广开关") + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:getSwitch", name = "获取套餐推广开关") public CzgResult getPackagePromotionSwitch() { return CzgResult.success(ppPackageService.getPackagePromotionSwitch()); } @@ -86,10 +88,10 @@ public class PpPackageController { /** * 修改套餐推广开关 * 0: 关闭 1: 开启 - * 参数 key = "status" + * {"status": 1} */ @PutMapping("/switch") - @SaAdminCheckPermission(parentName = "套餐推广", value = "points:package:updateSwitch", name = "修改套餐推广开关") + @SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:updateSwitch", name = "修改套餐推广开关") public CzgResult updatePackagePromotionSwitch(@RequestBody JSONObject param) { AssertUtil.isNull(param, "参数错误"); Integer status = param.getInteger("status"); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/PpPackageOrderDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/PpPackageOrderDTO.java index 73d3ad9b8..2832c898d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/PpPackageOrderDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/PpPackageOrderDTO.java @@ -1,15 +1,18 @@ package com.czg.market.dto; -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; import com.alibaba.fastjson2.annotation.JSONField; -import lombok.experimental.Accessors; -import java.io.Serial; +import com.czg.market.vo.PpPackageVO; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; /** * 套餐推广订单 实体类。 @@ -63,6 +66,7 @@ public class PpPackageOrderDTO implements Serializable { /** * 订单状态:ing进行中, wait_verify 待核销,finish 已核销,refunding 退款中,refund 已退款,cancel 已取消,timeout 超时 + * {@link com.czg.constants.PpPackageConstants.OrderStatus} */ private String status; @@ -111,4 +115,30 @@ public class PpPackageOrderDTO implements Serializable { @JSONField(format = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; + /** + * 过期时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime expireTime; + + /** + * 是否可以助力:0: 不可以 1: 可以 + */ + private Integer canHelp; + + /** + * 是否是自己订单 0: 不是 1: 是 + */ + private Integer isMyself; + + /** + * 阶梯优惠 + */ + private List tieredDiscount; + + /** + * 分享期限(小时) + */ + private Integer expireHours; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpHelpRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpHelpRecord.java index 6c0fd3c51..c1dfe53c4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpHelpRecord.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpHelpRecord.java @@ -11,6 +11,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; /** * 套餐推广助力记录 实体类。 @@ -20,6 +21,7 @@ import lombok.NoArgsConstructor; */ @Data @Builder +@Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor @Table("pp_help_record") diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpPackageOrder.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpPackageOrder.java index ff1c05918..973048d5f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpPackageOrder.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/PpPackageOrder.java @@ -1,5 +1,6 @@ package com.czg.market.entity; +import com.alibaba.fastjson2.annotation.JSONField; import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; @@ -117,4 +118,10 @@ public class PpPackageOrder implements Serializable { @Column(onInsertValue = "now()", onUpdateValue = "now()") private LocalDateTime updateTime; + /** + * 过期时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime expireTime; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpHelpRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpHelpRecordService.java index 0e66d43cc..8fd0cf5d0 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpHelpRecordService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpHelpRecordService.java @@ -11,4 +11,7 @@ import com.czg.market.entity.PpHelpRecord; */ public interface PpHelpRecordService extends IService { + boolean canHelp(Long userId, Long orderId); + + boolean help(Long userId, Long orderId); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java index f87510df8..e97567478 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/PpPackageOrderService.java @@ -1,5 +1,6 @@ package com.czg.market.service; +import com.czg.market.dto.PpPackageOrderDTO; import com.mybatisflex.core.service.IService; import com.czg.market.entity.PpPackageOrder; @@ -16,6 +17,16 @@ public interface PpPackageOrderService extends IService { */ Long createPackageOrder(Long packageId); + /** + * 根据订单 Id 查询推广订单详情 + */ + PpPackageOrderDTO getOrderDetailById(Long orderId); + + /** + * 助力订单 + */ + boolean helpOrder(Long orderId); + /** * 获取进行中的套餐推广订单数量 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/vo/PpPackageVO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/vo/PpPackageVO.java index d71db84ec..1f575cdff 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/vo/PpPackageVO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/vo/PpPackageVO.java @@ -3,6 +3,8 @@ package com.czg.market.vo; import com.alibaba.fastjson2.annotation.JSONField; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -150,6 +152,8 @@ public class PpPackageVO { /** * 分享期限(小时) */ + @Max(value = 72, message = "分享期限不能大于72小时", groups = {UpdateGroup.class, InsertGroup.class}) + @Min(value = 1, message = "分享期限不能小于1小时", groups = {UpdateGroup.class, InsertGroup.class}) private Integer expireHours; /** @@ -160,7 +164,7 @@ public class PpPackageVO { /** * 商品详情图片 */ - private String detailImages; + private List detailImages; /** * 创建时间 diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpHelpRecordServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpHelpRecordServiceImpl.java index 3190da1e5..612741ff8 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpHelpRecordServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpHelpRecordServiceImpl.java @@ -1,9 +1,16 @@ package com.czg.service.market.service.impl; +import com.czg.account.dto.user.userinfo.UserInfoDTO; +import com.czg.account.service.SysUserService; +import com.czg.account.service.UserInfoService; +import com.czg.exception.CzgException; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.market.entity.PpHelpRecord; import com.czg.market.service.PpHelpRecordService; import com.czg.service.market.mapper.PpHelpRecordMapper; +import jakarta.annotation.Resource; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; /** @@ -13,6 +20,30 @@ import org.springframework.stereotype.Service; * @since 2025-12-18 */ @Service -public class PpHelpRecordServiceImpl extends ServiceImpl implements PpHelpRecordService{ +public class PpHelpRecordServiceImpl extends ServiceImpl implements PpHelpRecordService { + @DubboReference + private UserInfoService userInfoService; + + @Override + public boolean canHelp(Long userId, Long orderId) { + return !exists(QueryWrapper.create().eq(PpHelpRecord::getUserId, userId).eq(PpHelpRecord::getOrderId, orderId)); + } + + @Override + public boolean help(Long userId, Long orderId) { + if (!canHelp(userId, orderId)) { + return false; + } + UserInfoDTO info = userInfoService.getInfo(userId); + if (info == null) { + throw new CzgException("用户不存在"); + } + PpHelpRecord helpRecord = new PpHelpRecord() + .setOrderId(orderId) + .setUserId(userId) + .setUserName(info.getNickName()) + .setUserAvator(info.getHeadImg()); + return save(helpRecord); + } } diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java index edec1cc5b..b735cd45e 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/PpPackageOrderServiceImpl.java @@ -1,11 +1,14 @@ package com.czg.service.market.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.czg.constants.PpPackageConstants; import com.czg.constants.SystemConstants; import com.czg.enums.OrderNoPrefixEnum; import com.czg.exception.CzgException; +import com.czg.market.dto.PpPackageOrderDTO; import com.czg.market.entity.PpPackage; import com.czg.market.entity.PpPackageOrder; +import com.czg.market.service.PpHelpRecordService; import com.czg.market.service.PpPackageOrderService; import com.czg.sa.StpKit; import com.czg.service.market.mapper.PpPackageMapper; @@ -16,6 +19,7 @@ import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @@ -31,6 +35,9 @@ public class PpPackageOrderServiceImpl extends ServiceImpl