修改参数类型
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* 获取进行中的套餐推广订单数量
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user