修改参数类型

This commit is contained in:
gong
2025-12-18 16:17:45 +08:00
parent e08860c149
commit bfd534dc7b
10 changed files with 177 additions and 24 deletions

View File

@@ -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<Void> addPackage(@RequestBody @Validated PpPackageVO packageVO) {
@SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:add", name = "添加套餐")
public CzgResult<Void> 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<Void> updatePackage(@RequestBody @Validated PpPackageVO packageVO) {
@SaAdminCheckPermission(parentName = "套餐推广", value = "market:package:update", name = "修改套餐")
public CzgResult<Void> 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<Long> 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<Void> 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<Integer> 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<Boolean> updatePackagePromotionSwitch(@RequestBody JSONObject param) {
AssertUtil.isNull(param, "参数错误");
Integer status = param.getInteger("status");

View File

@@ -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<PpPackageVO.TieredDiscount> tieredDiscount;
/**
* 分享期限(小时)
*/
private Integer expireHours;
}

View File

@@ -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")

View File

@@ -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;
}

View File

@@ -11,4 +11,7 @@ import com.czg.market.entity.PpHelpRecord;
*/
public interface PpHelpRecordService extends IService<PpHelpRecord> {
boolean canHelp(Long userId, Long orderId);
boolean help(Long userId, Long orderId);
}

View File

@@ -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<PpPackageOrder> {
*/
Long createPackageOrder(Long packageId);
/**
* 根据订单 Id 查询推广订单详情
*/
PpPackageOrderDTO getOrderDetailById(Long orderId);
/**
* 助力订单
*/
boolean helpOrder(Long orderId);
/**
* 获取进行中的套餐推广订单数量
*/

View File

@@ -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<String> detailImages;
/**
* 创建时间

View File

@@ -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<PpHelpRecordMapper, PpHelpRecord> implements PpHelpRecordService{
public class PpHelpRecordServiceImpl extends ServiceImpl<PpHelpRecordMapper, PpHelpRecord> 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);
}
}

View File

@@ -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<PpPackageOrderMapper,
@Resource
private PpPackageMapper ppPackageMapper;
@Resource
private PpHelpRecordService ppHelpRecordService;
@Override
public Long createPackageOrder(Long packageId) {
PpPackage aPackage = ppPackageMapper.selectOneByQuery(QueryWrapper.create().eq(PpPackage::getId, packageId)
@@ -49,12 +56,64 @@ public class PpPackageOrderServiceImpl extends ServiceImpl<PpPackageOrderMapper,
.setUserId(StpKit.USER.getLoginIdAsLong())
.setShareNum(0)
.setOrderNo(CzgRandomUtils.randomNumber(OrderNoPrefixEnum.PPO, 12, false))
.setStatus(PpPackageConstants.OrderStatus.PROCESSING);
.setStatus(PpPackageConstants.OrderStatus.PROCESSING)
.setExpireTime(LocalDateTime.now().plusHours(aPackage.getExpireHours() == null ? 72 : aPackage.getExpireHours()));
save(order);
return order.getId();
}
@Override
public PpPackageOrderDTO getOrderDetailById(Long orderId) {
long loginUserId = StpKit.USER.getLoginIdAsLong();
PpPackageOrder order = getById(orderId);
if (order == null) {
throw new CzgException("订单不存在");
}
PpPackageOrderDTO orderDto = BeanUtil.copyProperties(order, PpPackageOrderDTO.class);
orderDto.setIsMyself(order.getUserId().equals(loginUserId) ? SystemConstants.OneZero.ONE : SystemConstants.OneZero.ZERO);
if (PpPackageConstants.OrderStatus.PROCESSING.equals(order.getStatus())) {
if (orderDto.getIsMyself().equals(SystemConstants.OneZero.ZERO)) {
boolean canHelp = ppHelpRecordService.canHelp(loginUserId, orderId);
orderDto.setCanHelp(canHelp ? SystemConstants.OneZero.ONE : SystemConstants.OneZero.ZERO);
} else {
orderDto.setCanHelp(SystemConstants.OneZero.ZERO);
}
} else {
orderDto.setCanHelp(0);
}
return orderDto;
}
@Override
@Transactional
public boolean helpOrder(Long orderId) {
PpPackageOrder order = getById(orderId);
if (order == null) {
throw new CzgException("订单不存在");
}
if (!PpPackageConstants.OrderStatus.PROCESSING.equals(order.getStatus())) {
throw new CzgException("订单已结束");
}
long loginUserId = StpKit.USER.getLoginIdAsLong();
if (order.getUserId().equals(loginUserId)) {
throw new CzgException("不能助力自己");
}
if (!ppHelpRecordService.help(loginUserId, orderId)) {
return false;
}
return UpdateChain.of(PpPackageOrder.class)
.set(PpPackageOrder::getShareNum, order.getShareNum() + 1)
.eq(PpPackageOrder::getId, orderId)
.update();
}
@Override
public long getProgressingPackageOrderCount(Long packageId) {
QueryWrapper wrapper = QueryWrapper.create().eq(PpPackageOrder::getPackageId, packageId)

View File

@@ -2,7 +2,6 @@ package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.czg.account.entity.ShopConfig;
import com.czg.account.service.ShopConfigService;
import com.czg.account.service.ShopInfoService;
@@ -86,9 +85,11 @@ public class PpPackageServiceImpl extends ServiceImpl<PpPackageMapper, PpPackage
ppPackage = BeanUtil.copyProperties(packageVO, PpPackage.class);
ppPackage.setShopId(shopId);
ppPackage.setPackageContent(JSONObject.toJSONString(packageVO.getPackageContent()));
ppPackage.setUseWeeks(JSONObject.toJSONString(packageVO.getUseWeeks()));
ppPackage.setTieredDiscount(JSONObject.toJSONString(packageVO.getTieredDiscount()));
ppPackage.setPackageContent(JSONArray.toJSONString(packageVO.getPackageContent()));
ppPackage.setUseWeeks(JSONArray.toJSONString(packageVO.getUseWeeks()));
ppPackage.setTieredDiscount(JSONArray.toJSONString(packageVO.getTieredDiscount()));
ppPackage.setImages(JSONArray.toJSONString(packageVO.getImages()));
ppPackage.setDetailImages(JSONArray.toJSONString(packageVO.getDetailImages()));
save(ppPackage);
}
@@ -108,9 +109,10 @@ public class PpPackageServiceImpl extends ServiceImpl<PpPackageMapper, PpPackage
}
ppPackage = BeanUtil.copyProperties(packageVO, PpPackage.class);
ppPackage.setPackageContent(JSONObject.toJSONString(packageVO.getPackageContent()));
ppPackage.setUseWeeks(JSONObject.toJSONString(packageVO.getUseWeeks()));
ppPackage.setTieredDiscount(JSONObject.toJSONString(packageVO.getTieredDiscount()));
ppPackage.setPackageContent(JSONArray.toJSONString(packageVO.getPackageContent()));
ppPackage.setUseWeeks(JSONArray.toJSONString(packageVO.getUseWeeks()));
ppPackage.setTieredDiscount(JSONArray.toJSONString(packageVO.getTieredDiscount()));
ppPackage.setImages(JSONArray.toJSONString(packageVO.getImages()));
updateById(ppPackage);
}
@@ -180,6 +182,8 @@ public class PpPackageServiceImpl extends ServiceImpl<PpPackageMapper, PpPackage
packageVO.setUseWeeks(JSONArray.parseArray(item.getUseWeeks(), String.class));
packageVO.setPackageContent(JSONArray.parseArray(item.getPackageContent(), PpPackageVO.PackageContent.class));
packageVO.setTieredDiscount(JSONArray.parseArray(item.getTieredDiscount(), PpPackageVO.TieredDiscount.class));
packageVO.setImages(JSONArray.parseArray(item.getImages(), String.class));
packageVO.setDetailImages(JSONArray.parseArray(item.getDetailImages(), String.class));
voList.add(packageVO);
});