From 7dc3183289cf02de52fab4a3ab560177341dea3e Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 27 Feb 2025 15:56:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=20?= =?UTF-8?q?=E5=88=86=E9=A1=B5=20=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/ShopCouponController.java | 4 +- .../user/UserShopCouponController.java | 21 ++++- .../admin/AdminOrderController.java | 4 +- .../controller/user/UserOrderController.java | 4 +- .../com/czg/account/dto/QueryReceiveDto.java | 1 - .../entity/ShopActivateCouponRecord.java | 2 + .../com/czg/account/entity/ShopCoupon.java | 6 +- .../ShopActivateCouponRecordService.java | 9 +- .../account/service/ShopCouponService.java | 5 +- .../java/com/czg/account/vo/UserCouponVo.java | 17 +--- .../ShopActivateCouponRecordMapper.java | 6 ++ .../ShopActivateCouponRecordServiceImpl.java | 15 ++- .../service/impl/ShopCouponServiceImpl.java | 94 ++++++++++++++++--- .../mapper/ShopActivateCouponRecordMapper.xml | 45 +++++++++ 14 files changed, 194 insertions(+), 39 deletions(-) diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java index 334453d2..0675e8c7 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopCouponController.java @@ -66,8 +66,8 @@ public class ShopCouponController { * 权限标识: coupon:delete */ @SaAdminCheckPermission("coupon:queryReceive") - @PostMapping("/queryReceive") - public CzgResult> queryReceive(@Validated @RequestBody QueryReceiveDto param) { + @GetMapping("/queryReceive") + public CzgResult> queryReceive(@Validated QueryReceiveDto param) { return CzgResult.success(couponService.queryReceive(param)); } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopCouponController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopCouponController.java index 9a4afabb..63126ef3 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopCouponController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserShopCouponController.java @@ -2,7 +2,9 @@ package com.czg.controller.user; import com.czg.account.entity.ShopActivateCouponRecord; import com.czg.account.service.ShopCouponService; +import com.czg.account.vo.UserCouponVo; import com.czg.resp.CzgResult; +import com.mybatisflex.core.paginate.Page; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -27,8 +29,21 @@ public class UserShopCouponController { * @param status 0 未使用 1已使用 2已过期 */ @GetMapping("/findByUserId") - public CzgResult> findByUserId( - @RequestParam Long shopUserId, @RequestParam(required = false) Integer status) { - return CzgResult.success(couponService.find(shopUserId, status)); + public CzgResult> findByUserId( + @RequestParam Long userId, + @RequestParam(required = false) Integer status, + @RequestParam(required = false) Long orderId) { + return CzgResult.success(couponService.find(userId, orderId, status)); + } + + /** + * 生成订单后使用 + * 通过用户Id 查找优惠券 + * + * @param shopUserId 店铺用户Id + */ + @GetMapping("/findCoupon") + public CzgResult> findCoupon(@RequestHeader String shopId, @RequestParam Long shopUserId) { + return CzgResult.success(couponService.findCoupon(Long.parseLong(shopId), shopUserId)); } } diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/AdminOrderController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/AdminOrderController.java index 8395816a..38d8c9cb 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/AdminOrderController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/AdminOrderController.java @@ -35,8 +35,8 @@ public class AdminOrderController { /** * 订单列表 */ - @PostMapping - public CzgResult> getOrderPage(@RequestBody OrderInfoQueryDTO queryDTO) { + @GetMapping + public CzgResult> getOrderPage(OrderInfoQueryDTO queryDTO) { queryDTO.setShopId(StpKit.USER.getShopId()); return CzgResult.success(orderInfoService.getOrderByPage(queryDTO)); } diff --git a/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java b/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java index b63da0f8..3111e884 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/user/UserOrderController.java @@ -31,8 +31,8 @@ public class UserOrderController { /** * 订单列表 */ - @PostMapping - public CzgResult> getOrderPage(@RequestBody OrderInfoQueryDTO queryDTO) { + @GetMapping + public CzgResult> getOrderPage(OrderInfoQueryDTO queryDTO) { queryDTO.setIsDel(0); queryDTO.setUserId(StpKit.USER.getLoginIdAsLong()); return CzgResult.success(orderInfoService.getOrderByPage(queryDTO)); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/QueryReceiveDto.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/QueryReceiveDto.java index f0a1962b..8257edcf 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/QueryReceiveDto.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/QueryReceiveDto.java @@ -1,6 +1,5 @@ package com.czg.account.dto; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateCouponRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateCouponRecord.java index b54fd64b..85c65ceb 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateCouponRecord.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopActivateCouponRecord.java @@ -74,6 +74,8 @@ public class ShopActivateCouponRecord implements Serializable { * 店铺id */ private Long shopId; + @Column(ignore = true) + private String shopName; /** * 来源活动id diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java index 2eae0bb2..19abf2a0 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopCoupon.java @@ -6,10 +6,10 @@ import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; import java.io.Serializable; import java.math.BigDecimal; -import java.sql.Time; import java.time.LocalDateTime; import java.io.Serial; +import java.time.LocalTime; import lombok.AllArgsConstructor; import lombok.Builder; @@ -108,12 +108,12 @@ public class ShopCoupon implements Serializable { /** * 可用开始时间 */ - private Time useStartTime; + private LocalTime useStartTime; /** * 可用结束时间 */ - private Time useEndTime; + private LocalTime useEndTime; /** * 满多少金额 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateCouponRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateCouponRecordService.java index 0c77a38b..1de590e5 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateCouponRecordService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopActivateCouponRecordService.java @@ -2,10 +2,13 @@ package com.czg.account.service; import com.czg.account.dto.QueryReceiveDto; import com.czg.account.vo.CouponReceiveVo; +import com.czg.account.vo.UserCouponVo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; import com.czg.account.entity.ShopActivateCouponRecord; +import java.util.List; + /** * 活动商品赠送记录表 服务层。 * @@ -15,5 +18,9 @@ import com.czg.account.entity.ShopActivateCouponRecord; public interface ShopActivateCouponRecordService extends IService { - Page queryReceive(Page page, QueryReceiveDto param); + Page queryReceive(Page page, QueryReceiveDto param); + + Page findByUser(Page page, List shopUserIds, Integer status); + + List queryByVipIdAndShopId(Long shopId, Long shopUserId); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java index aa660814..f5a5e2e3 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopCouponService.java @@ -5,6 +5,7 @@ import com.czg.account.dto.ShopCouponDTO; import com.czg.account.entity.ShopActivateCouponRecord; import com.czg.account.entity.ShopCoupon; import com.czg.account.vo.CouponReceiveVo; +import com.czg.account.vo.UserCouponVo; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; @@ -34,7 +35,9 @@ public interface ShopCouponService extends IService { Page queryReceive(QueryReceiveDto param); - List find(Long shopUserId, Integer status); + Page find(Long userId, Long orderId, Integer status); + + List findCoupon(Long shopId, Long shopUserId); Boolean use(List ids, Long shopUserId, Long orderId); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java index 22af88db..6889f94e 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/UserCouponVo.java @@ -5,9 +5,14 @@ import lombok.Data; import java.math.BigDecimal; import java.util.Date; +/** + * @author ww + */ @Data public class UserCouponVo { private Long id; + private Long shopId; + private String shopName; private BigDecimal fullAmount; private BigDecimal discountAmount; private Long couponId; @@ -24,20 +29,8 @@ public class UserCouponVo { private Integer num; //到期时间 private Date endTime; - private Long expireTime; private String useRestrictions; private boolean isUse = false; - //当前使用数量 - private BigDecimal currentUseNum; - private Integer finalUseNum; - private BigDecimal finalDiscountAmount = new BigDecimal(0); - public void setEndTime(Date endTime) { - this.endTime = endTime; - if(endTime!=null){ - expireTime=endTime.getTime(); - } - } - } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateCouponRecordMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateCouponRecordMapper.java index 80ceac23..2dbd73b1 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateCouponRecordMapper.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopActivateCouponRecordMapper.java @@ -2,10 +2,13 @@ package com.czg.service.account.mapper; import com.czg.account.dto.QueryReceiveDto; import com.czg.account.vo.CouponReceiveVo; +import com.czg.account.vo.UserCouponVo; import com.mybatisflex.core.BaseMapper; import com.czg.account.entity.ShopActivateCouponRecord; import com.mybatisflex.core.paginate.Page; +import java.util.List; + /** * 活动商品赠送记录表 映射层。 * @@ -15,4 +18,7 @@ import com.mybatisflex.core.paginate.Page; public interface ShopActivateCouponRecordMapper extends BaseMapper { Page queryReceive(Page page, QueryReceiveDto param); + + Page findByUser(Page page, List shopUserIds, Integer status); + List queryByVipIdAndShopId(Long shopId, Long shopUserId); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateCouponRecordServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateCouponRecordServiceImpl.java index 30fa6d6b..e426b0ff 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateCouponRecordServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopActivateCouponRecordServiceImpl.java @@ -4,11 +4,14 @@ import com.czg.account.dto.QueryReceiveDto; import com.czg.account.entity.ShopActivateCouponRecord; import com.czg.account.service.ShopActivateCouponRecordService; import com.czg.account.vo.CouponReceiveVo; +import com.czg.account.vo.UserCouponVo; import com.czg.service.account.mapper.ShopActivateCouponRecordMapper; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.apache.dubbo.config.annotation.DubboService; +import java.util.List; + /** * 活动商品赠送记录表 服务层实现。 * @@ -16,10 +19,20 @@ import org.apache.dubbo.config.annotation.DubboService; * @since 2025-02-20 */ @DubboService -public class ShopActivateCouponRecordServiceImpl extends ServiceImpl implements ShopActivateCouponRecordService{ +public class ShopActivateCouponRecordServiceImpl extends ServiceImpl implements ShopActivateCouponRecordService { @Override public Page queryReceive(Page page, QueryReceiveDto param) { return getMapper().queryReceive(page, param); } + + @Override + public Page findByUser(Page page, List shopUserIds, Integer status) { + return getMapper().findByUser(page, shopUserIds, status); + } + + @Override + public List queryByVipIdAndShopId(Long shopId, Long shopUserId) { + return getMapper().queryByVipIdAndShopId(shopId, shopUserId); + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java index bc98b642..9f2c8528 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopCouponServiceImpl.java @@ -1,25 +1,35 @@ package com.czg.service.account.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import com.czg.account.dto.QueryReceiveDto; import com.czg.account.dto.ShopCouponDTO; import com.czg.account.entity.ShopActivateCouponRecord; import com.czg.account.entity.ShopCoupon; +import com.czg.account.entity.ShopUser; import com.czg.account.service.ShopActivateCouponRecordService; import com.czg.account.service.ShopCouponService; +import com.czg.account.service.ShopInfoService; +import com.czg.account.service.ShopUserService; import com.czg.account.vo.CouponReceiveVo; +import com.czg.account.vo.UserCouponVo; import com.czg.product.entity.Product; import com.czg.product.service.ProductService; -import com.czg.sa.StpKit; import com.czg.service.account.mapper.ShopCouponMapper; import com.czg.utils.PageUtil; +import com.google.gson.JsonObject; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; -import java.util.List; +import java.math.BigDecimal; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.*; /** * 优惠券 服务层实现。 @@ -32,6 +42,10 @@ public class ShopCouponServiceImpl extends ServiceImpl find(Long shopUserId, Integer status) { - List list = couponRecordService.queryChain() - .eq(ShopActivateCouponRecord::getShopId, StpKit.USER.getShopId()) - .eq(ShopActivateCouponRecord::getShopUserId, shopUserId) - .eq(ShopActivateCouponRecord::getStatus, status) - .orderBy(ShopActivateCouponRecord::getStatus).asc() - .orderBy(ShopActivateCouponRecord::getCreateTime).desc() - .select().list(); - return list; + public Page find(Long userId, Long orderId, Integer status) { + List shopUserIds = shopUserService.queryChain().eq(ShopUser::getUserId, userId).select(ShopUser::getId).listAs(Long.class); + if (CollectionUtil.isNotEmpty(shopUserIds)) { + return couponRecordService.findByUser(PageUtil.buildPage(), shopUserIds, status); + } + return null; + } + + @Override + public List findCoupon(Long shopId, Long shopUserId) { + List tbUserCouponVos = couponRecordService.queryByVipIdAndShopId(shopId, shopUserId); + if (CollectionUtil.isNotEmpty(tbUserCouponVos)) { + String week = DateUtil.dayOfWeekEnum(new Date()).toChinese("周"); + LocalTime now = LocalTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + + //券id 券使用描述 + Map coupons = new HashMap<>(); + for (UserCouponVo tbUserCouponVo : tbUserCouponVos) { + if (!coupons.containsKey(tbUserCouponVo.getCouponId())) { + setCouponInfo(coupons, tbUserCouponVo, null, week, now, formatter); + } + JsonObject couponJson = coupons.get(tbUserCouponVo.getCouponId()); + tbUserCouponVo.setUseRestrictions(couponJson.get("useRestrictions").toString()); + tbUserCouponVo.setUse(couponJson.get("isUse").getAsBoolean()); + + } + tbUserCouponVos.sort(Comparator.comparing(UserCouponVo::isUse).reversed()); + return tbUserCouponVos; + } + return null; } @Override @@ -102,4 +138,40 @@ public class ShopCouponServiceImpl extends ServiceImpl coupons, UserCouponVo tbUserCouponVo, BigDecimal amount, String week, LocalTime now, DateTimeFormatter formatter) { + JsonObject json = new JsonObject(); + boolean isUse = true; + ShopCoupon tbShopCoupon = getById(tbUserCouponVo.getCouponId()); + StringBuilder useRestrictions = new StringBuilder("每天 "); + if (amount != null && tbShopCoupon.getType().equals(1)) { + if (amount.compareTo(tbShopCoupon.getFullAmount()) < 0) { + isUse = false; + } + } + if (StrUtil.isNotBlank(tbShopCoupon.getUserDays())) { + String[] split = tbShopCoupon.getUserDays().split(","); + if (split.length != 7) { + useRestrictions = new StringBuilder(STR."\{tbShopCoupon.getUserDays()} "); + } + if (!tbShopCoupon.getUserDays().contains(week)) { + isUse = false; + } + } + if ("custom".equals(tbShopCoupon.getUseTimeType())) { + if (now.isBefore(tbShopCoupon.getUseStartTime()) || now.isAfter(tbShopCoupon.getUseEndTime())) { + isUse = false; + } + useRestrictions.append( + STR."\{tbShopCoupon.getUseStartTime().format(formatter)}-\{tbShopCoupon.getUseEndTime().format(formatter)}"); + } else { + useRestrictions.append("全时段"); + } + useRestrictions.append(" 可用"); + json.addProperty("isUse", isUse); + json.addProperty("useRestrictions", useRestrictions.toString()); + + coupons.put(tbUserCouponVo.getCouponId(), json); + } + } diff --git a/cash-service/account-service/src/main/resources/mapper/ShopActivateCouponRecordMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopActivateCouponRecordMapper.xml index eecac3b3..145c4aaf 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopActivateCouponRecordMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopActivateCouponRecordMapper.xml @@ -34,4 +34,49 @@ order by record.create_time desc + + + +