diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCardRightsMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCardRightsMapper.java index 4afe7f7..2cb5dbd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCardRightsMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseCardRightsMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.base.mapper; import java.util.List; + import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.base.domain.BaseCardRights; @@ -11,24 +12,34 @@ import org.apache.ibatis.annotations.Mapper; /** * 会员卡权益Mapper接口 - * + * * @author vinjor-m * @date 2025-03-17 */ @Mapper -public interface BaseCardRightsMapper extends BaseMapper -{ +public interface BaseCardRightsMapper extends BaseMapper { IPage queryListPage(@Param("entity") BaseCardRights entity, Page page); /** * 查询会员卡权益 + * + * @param cardId 会员卡id + * @param userType 用户类型 + * @return java.util.List * @author vinjor-M * @date 15:24 2025/3/18 - * @param cardId 会员卡id - * @param userType 用户类型 - * @return java.util.List - **/ + **/ List getByIdAndType(@Param("cardId") String cardId, @Param("userType") String userType); int removeByCardId(@Param("cardId") String cardId); + + /** + * 通过会员卡id查询会员卡权益 + * + * @param cardId 会员卡id + * @return java.util.List + * @author PQZ + * @date 10:36 2025/3/27 + **/ + List queryByCardId(@Param("cardId") String cardId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardRightsService.java b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardRightsService.java index 7fcebd8..d09e4cd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardRightsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardRightsService.java @@ -34,4 +34,13 @@ public interface IBaseCardRightsService extends IService * @param cardRightsVOS TODO **/ void saveAndUpdate(List cardRightsVOS); + + /** + * 通过会员卡id查询权益 + * @author PQZ + * @date 16:31 2025/3/26 + * @param cardId 会员卡id + * @return java.util.List + **/ + List queryByCardId(String cardId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardService.java b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardService.java index 740cba1..81dacf8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseCardService.java @@ -1,18 +1,27 @@ package com.ruoyi.base.service; -import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.base.domain.BaseCard; +import com.ruoyi.base.vo.BaseCardVO; /** * 会员卡Service接口 - * + * * @author vinjor-m * @date 2025-03-17 */ -public interface IBaseCardService extends IService -{ +public interface IBaseCardService extends IService { IPage queryListPage(BaseCard pageReqVO, Page page); + + /** + * 通过会员卡id查询会员及权益 + * + * @param cardId 卡片id + * @return com.ruoyi.base.vo.BaseCardVO + * @author PQZ + * @date 16:25 2025/3/26 + **/ + BaseCardVO queryByCardId(String cardId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseRightsService.java b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseRightsService.java index d0bcf1d..4441316 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseRightsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseRightsService.java @@ -1,6 +1,5 @@ package com.ruoyi.base.service; -import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -8,11 +7,10 @@ import com.ruoyi.base.domain.BaseRights; /** * 会员权益Service接口 - * + * * @author vinjor-m * @date 2025-03-17 */ -public interface IBaseRightsService extends IService -{ +public interface IBaseRightsService extends IService { IPage queryListPage(BaseRights pageReqVO, Page page); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardRightsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardRightsServiceImpl.java index 845b43a..20c8ddb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardRightsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardRightsServiceImpl.java @@ -3,7 +3,9 @@ package com.ruoyi.base.service.impl; import java.util.ArrayList; import java.util.List; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.base.vo.CardRightsVO; +import com.ruoyi.common.core.domain.DlBaseEntity; import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -77,4 +79,17 @@ public class BaseCardRightsServiceImpl extends ServiceImpl + * @author PQZ + * @date 16:31 2025/3/26 + **/ + @Override + public List queryByCardId(String cardId) { + return baseCardRightsMapper.queryByCardId(cardId); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardServiceImpl.java index c4e6c41..16e3434 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseCardServiceImpl.java @@ -1,15 +1,22 @@ package com.ruoyi.base.service.impl; -import java.util.List; -import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mchange.v2.beans.BeansUtils; +import com.ruoyi.base.domain.BaseCard; +import com.ruoyi.base.domain.BaseCardRights; +import com.ruoyi.base.mapper.BaseCardMapper; +import com.ruoyi.base.service.IBaseCardRightsService; +import com.ruoyi.base.service.IBaseCardService; +import com.ruoyi.base.vo.BaseCardVO; +import com.ruoyi.base.vo.CardRightsVO; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.base.mapper.BaseCardMapper; -import com.ruoyi.base.domain.BaseCard; -import com.ruoyi.base.service.IBaseCardService; + +import javax.annotation.Resource; +import java.util.List; /** * 会员卡Service业务层处理 @@ -22,9 +29,29 @@ public class BaseCardServiceImpl extends ServiceImpl i { @Autowired private BaseCardMapper baseCardMapper; + @Resource + private IBaseCardRightsService cardRightsService; @Override public IPage queryListPage(BaseCard pageReqVO, Page page) { return baseCardMapper.queryListPage(pageReqVO, page); } + + /** + * 通过会员卡id查询会员及权益 + * + * @param cardId 卡片id + * @return com.ruoyi.base.vo.BaseCardVO + * @author PQZ + * @date 16:25 2025/3/26 + **/ + @Override + public BaseCardVO queryByCardId(String cardId) { + BaseCardVO cardVO = new BaseCardVO(); + BaseCard card = getById(cardId); + BeanUtils.copyProperties(card,cardVO); + List rights = cardRightsService.queryByCardId(cardId); + cardVO.setRights(rights); + return cardVO; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCardVO.java b/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCardVO.java new file mode 100644 index 0000000..e026c15 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/vo/BaseCardVO.java @@ -0,0 +1,13 @@ +package com.ruoyi.base.vo; + +import com.ruoyi.base.domain.BaseCard; +import com.ruoyi.base.domain.BaseCardRights; +import lombok.Data; + +import java.util.List; + +@Data +public class BaseCardVO extends BaseCard { + /**会员卡关联权益*/ + List rights; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/base/vo/CardRightsVO.java b/ruoyi-admin/src/main/java/com/ruoyi/base/vo/CardRightsVO.java index 1c7adda..376ecb9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/base/vo/CardRightsVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/base/vo/CardRightsVO.java @@ -1,8 +1,6 @@ package com.ruoyi.base.vo; -import com.ruoyi.base.domain.BaseCardRights; import com.ruoyi.base.domain.BaseRights; -import com.ruoyi.common.annotation.Excel; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/controller/MemberOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/member/controller/MemberOrderController.java index 3568ad2..ca9818b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/controller/MemberOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/controller/MemberOrderController.java @@ -53,6 +53,21 @@ public class MemberOrderController extends BaseController { return success(list); } + /** + * 订单支付回调 + * + * @param memberOrder {@link MemberOrder} + * @return com.ruoyi.common.core.domain.AjaxResult + * @author PQZ + * @date 14:01 2025/3/26 + **/ + @Log(title = "订单支付回调", businessType = BusinessType.INSERT) + @PostMapping("/payCallback") + public AjaxResult payCallback(@RequestBody MemberOrder memberOrder) { + memberOrderService.payCallback(memberOrder.getOrderNo()); + return toAjax(true); + } + /** * 导出订单列表 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberCoupon.java b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberCoupon.java index d5c2bee..f529965 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberCoupon.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberCoupon.java @@ -29,7 +29,7 @@ public class MemberCoupon extends DlBaseEntity private String id; /** 用户id */ - private String userId; + private Long userId; /** 类型(1-增加|2-扣减) */ @Excel(name = "类型", readConverterExp = "1=-增加|2-扣减") @@ -44,7 +44,7 @@ public class MemberCoupon extends DlBaseEntity /** 剩余 */ @Excel(name = "剩余") - private Long balance; + private Integer balance; /** 备注 */ @Excel(name = "备注") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberOrder.java b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberOrder.java index 3436b29..d45d924 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberOrder.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberOrder.java @@ -59,6 +59,10 @@ public class MemberOrder extends DlBaseEntity @Excel(name = "商品数量") private Integer goodsNum; + /** 商品服务周期 */ + @Excel(name = "商品服务周期") + private String goodsCycle; + /** 订单总价 */ @Excel(name = "订单总价") private BigDecimal goodsPrice; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberRights.java b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberRights.java index 80324cf..0efe890 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberRights.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/domain/MemberRights.java @@ -30,7 +30,7 @@ public class MemberRights extends DlBaseEntity /** 用户id */ @Excel(name = "用户id") - private String userId; + private Long userId; /** 用户类型(数据字典:dl_user_type) */ @Excel(name = "用户类型", readConverterExp = "数=据字典:dl_user_type") @@ -54,10 +54,10 @@ public class MemberRights extends DlBaseEntity /** 权益值(权益类型为是否时:0代表不支持,1代表支持;权益类型为数量限制时:0代表不限制,其他数字代表具体限制数量) */ @Excel(name = "权益值(权益类型为是否时:0代表不支持,1代表支持;权益类型为数量限制时:0代表不限制,其他数字代表具体限制数量)") - private Long rightsValue; + private Integer rightsValue; /** 剩余值 */ @Excel(name = "剩余值") - private Long remaining; + private Integer remaining; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java index 066382b..3a5d799 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java @@ -2,6 +2,7 @@ package com.ruoyi.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.MemberCard; +import com.ruoyi.member.domain.MemberOrder; import com.ruoyi.member.domain.MemberRights; import com.ruoyi.member.vo.MemberRightsVO; import com.ruoyi.member.vo.ViewRightsVO; @@ -25,7 +26,16 @@ public interface IMemberCardService extends IService { * @author PQZ * @date 14:24 2025/3/21 **/ - List listByUserId(Long userId,String userType); + List listByUserId(Long userId, String userType); + + /** + * 会员开卡处理 + * + * @param order 订单 + * @author PQZ + * @date 16:18 2025/3/26 + **/ + void dealMemberCard(MemberOrder order); /** * 查当前会员权益列表 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCouponService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCouponService.java index 04e2d47..59341cb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCouponService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCouponService.java @@ -1,16 +1,34 @@ package com.ruoyi.member.service; -import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.MemberCoupon; +import com.ruoyi.member.domain.MemberOrder; /** * 用户通告券变动记录Service接口 - * + * * @author vinjor-m * @date 2025-03-17 */ -public interface IMemberCouponService extends IService -{ +public interface IMemberCouponService extends IService { + + /** + * @param order 订单 + * @author PQZ + * @date 15:02 2025/3/28 + **/ + void dealMemberCoupon(MemberOrder order); + + /** + * 保存通告券变动记录 + * + * @param userId 用户id + * @param type 变动类型(1增加2减少) + * @param noticeId 通告id + * @param couponNum 变动数量 + * @author PQZ + * @date 15:19 2025/3/28 + **/ + void saveCoupon(Long userId, String type, String noticeId, Integer couponNum); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberOrderService.java index 97998ce..b528870 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberOrderService.java @@ -24,4 +24,13 @@ public interface IMemberOrderService extends IService { * @date 15:25 2025/3/25 **/ IPage queryListPage(MemberOrderVO memberOrder, Page page); + + /** + * 订单支付回调 + * + * @param orderNo 订单编号 + * @author PQZ + * @date 14:02 2025/3/26 + **/ + void payCallback(String orderNo); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberPointsService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberPointsService.java index f069217..fa4bc37 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberPointsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberPointsService.java @@ -1,16 +1,17 @@ package com.ruoyi.member.service; -import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.MemberPoints; +import java.util.List; + /** * 博主积分变动明细Service接口 - * + * * @author pqz * @date 2025-03-17 */ -public interface IMemberPointsService extends IService -{ +public interface IMemberPointsService extends IService { +// void dealMemberPoints(Long userId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java index dc3d629..462355f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java @@ -1,16 +1,27 @@ package com.ruoyi.member.service; -import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.base.vo.CardRightsVO; +import com.ruoyi.member.domain.MemberCard; import com.ruoyi.member.domain.MemberRights; +import java.util.List; + /** * 会员权益(定时任务重置剩余值),用户id、会员卡id、权益对应1Service接口 - * + * * @author pqz * @date 2025-03-17 */ -public interface IMemberRightsService extends IService -{ +public interface IMemberRightsService extends IService { + /** + * 处理会员权益 + * + * @param userId 用户表id + * @param rights 权益 + * @author PQZ + * @date 15:45 2025/3/27 + **/ + void dealRights(Long userId, String userType,List rights); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java index faf665e..f3b8e3f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java @@ -1,36 +1,49 @@ package com.ruoyi.member.service.impl; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.base.domain.BaseCard; +import com.ruoyi.base.service.IBaseCardService; +import com.ruoyi.base.vo.BaseCardVO; import com.ruoyi.common.core.domain.DlBaseEntity; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.constant.DictConstants; import com.ruoyi.member.domain.MemberCard; +import com.ruoyi.member.domain.MemberOrder; import com.ruoyi.member.domain.MemberRights; import com.ruoyi.member.mapper.MemberCardMapper; import com.ruoyi.member.mapper.MemberRightsMapper; import com.ruoyi.member.service.IMemberCardService; +import com.ruoyi.member.service.IMemberRightsService; import com.ruoyi.member.vo.MemberRightsVO; import com.ruoyi.member.vo.ViewRightsVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; import java.util.*; import java.util.stream.Collectors; /** * 会员开卡记录Service业务层处理 - * + * * @author pqz * @date 2025-03-17 */ @Service -public class MemberCardServiceImpl extends ServiceImpl implements IMemberCardService -{ +public class MemberCardServiceImpl extends ServiceImpl implements IMemberCardService { @Autowired private MemberCardMapper memberCardMapper; + @Resource + private IBaseCardService baseCardService; + @Autowired + private IMemberRightsService rightsService; @Autowired private MemberRightsMapper memberRightsMapper; @@ -44,17 +57,108 @@ public class MemberCardServiceImpl extends ServiceImpl listByUserId(Long userId,String userType) { + public List listByUserId(Long userId, String userType) { //查询列表 LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper - .eq(DlBaseEntity::getDelFlag,0) - .eq(MemberCard::getUserId,userId) - .eq(MemberCard::getUserType,userType) + .eq(DlBaseEntity::getDelFlag, 0) + .eq(MemberCard::getUserId, userId) + .eq(MemberCard::getUserType, userType) .orderByDesc(DlBaseEntity::getCreateTime); return list(lambdaUpdateWrapper); } + /** + * 会员开卡处理 + * + * @param order {@link MemberOrder} + * @author PQZ + * @date 16:19 2025/3/26 + **/ + @Override + public void dealMemberCard(MemberOrder order) { + /*1、数据初始化*/ + //查询会员卡 + BaseCardVO card = baseCardService.queryByCardId(order.getGoodsId()); + //查询当前时间是否存在有效会员卡 + List cardList = checkMemberCard(order.getGoodsId(), order.getUserId()); + + /*2、计算到期时间*/ + Date startTime; + Date endTime; + if (cardList.isEmpty()){ + //计算到期时间 + startTime = new Date(); + endTime = getEndTime(startTime, order.getGoodsCycle()); + //新增时需要处理会员权益 + rightsService.dealRights(order.getUserId(),order.getUserType(),card.getRights()); + } else { + startTime = cardList.get(0).getEndDate(); + endTime = getEndTime(startTime,order.getGoodsCycle()); + } + + /*3、保存会员开卡记录*/ + //初始化会员开通记录 + MemberCard memberCard = new MemberCard(); + memberCard.setUserId(order.getUserId()); + memberCard.setUserType(order.getUserType()); + memberCard.setCardId(order.getGoodsId()); + memberCard.setOrderId(order.getId()); + memberCard.setCardName(card.getCardName()); + memberCard.setStartDate(startTime); + memberCard.setEndDate(endTime); + save(memberCard); + } + + /** + * 查询会员卡开卡记录 + * + * @param cardId 卡id + * @param userId 用户id + * @return java.util.List + * @author PQZ + * @date 16:09 2025/3/27 + **/ + private List checkMemberCard(String cardId, Long userId) { + Date time = new Date(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(MemberCard::getCardId, cardId) + .eq(MemberCard::getUserId, userId) + .eq(DlBaseEntity::getDelFlag, 0) + .lt(MemberCard::getStartDate, time) + .ge(MemberCard::getEndDate, time); + return list(lambdaQueryWrapper); + } + + /** + * 获取会员结束时间 + * + * @param date 当前时间 + * @param type 类型(01:1个月;02:1季度;03:1年) + * @return java.util.Date + * @author PQZ + * @date 16:40 2025/3/26 + **/ + private Date getEndTime(Date date, String type) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + switch (type) { + case "01": + calendar.add(Calendar.MONTH, 1); + break; + case "02": + calendar.add(Calendar.MONTH, 3); + break; + case "03": + calendar.add(Calendar.YEAR, 1); + break; + default: + throw new IllegalArgumentException("无效的时间类型: " + type); + } + return calendar.getTime(); + } + /** * 查当前会员权益列表 * @@ -64,50 +168,49 @@ public class MemberCardServiceImpl extends ServiceImpl> selectMemberRights(Long userId, String userType) { - Map> rtnMap = new HashMap<>(); + public Map> selectMemberRights(Long userId, String userType) { + Map> rtnMap = new HashMap<>(); //当前时间 String nowDate = DateUtil.formatDate(new Date()); - if(null==userId){ + if (null == userId) { userId = SecurityUtils.getUserId(); } - List cardList = memberCardMapper.selectCardIdByUserId(userId,userType,nowDate); - if(cardList.isEmpty()){ + List cardList = memberCardMapper.selectCardIdByUserId(userId, userType, nowDate); + if (cardList.isEmpty()) { //未开通任何会员卡 - rtnMap.put("tgz",new HashMap<>()); - rtnMap.put("bz",new HashMap<>()); - }else{ + rtnMap.put("tgz", new HashMap<>()); + rtnMap.put("bz", new HashMap<>()); + } else { //开通会员卡了,根据会员卡id,查询出所有权益 List memberRightsList = memberRightsMapper.selectUserRightsByCardIds(cardList.stream().map(MemberCard::getCardId).collect(Collectors.toList()), userId); //通告主权益 - Map tgzRightsMap = new HashMap<>(); + Map tgzRightsMap = new HashMap<>(); //博主权益 - Map bzRightsMap = new HashMap<>(); + Map bzRightsMap = new HashMap<>(); memberRightsList.forEach(item -> { if (DictConstants.USER_TYPE_TGZ.equals(item.getUserType())) { //通告主 - this.checkRights(tgzRightsMap,item); + this.checkRights(tgzRightsMap, item); } else if (DictConstants.USER_TYPE_BZ.equals(item.getUserType())) { //博主 - this.checkRights(bzRightsMap,item); + this.checkRights(bzRightsMap, item); } }); - rtnMap.put("tgz",tgzRightsMap); - rtnMap.put("bz",bzRightsMap); + rtnMap.put("tgz", tgzRightsMap); + rtnMap.put("bz", bzRightsMap); } return rtnMap; } /** - * + * @param memberRightsMap 会员权益map + * @param item 这个权益 * @author vinjor-M * @date 14:19 2025/3/26 - * @param memberRightsMap 会员权益map - * @param item 这个权益 - **/ - private void checkRights(Map memberRightsMap, MemberRights item){ + **/ + private void checkRights(Map memberRightsMap, MemberRights item) { ViewRightsVO newRights = new ViewRightsVO(); - BeanUtils.copyProperties(item,newRights); + BeanUtils.copyProperties(item, newRights); if (memberRightsMap.containsKey(item.getRightsCode())) { //有这个权益了 ViewRightsVO oldRights = memberRightsMap.get(item.getRightsCode()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCouponServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCouponServiceImpl.java index ac90e28..971a4ee 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCouponServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCouponServiceImpl.java @@ -1,13 +1,18 @@ package com.ruoyi.member.service.impl; -import java.util.List; -import com.ruoyi.common.utils.DateUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.base.domain.BaseCoupon; +import com.ruoyi.base.service.IBaseCouponService; +import com.ruoyi.common.core.domain.DlBaseEntity; +import com.ruoyi.member.domain.MemberCoupon; +import com.ruoyi.member.domain.MemberOrder; +import com.ruoyi.member.mapper.MemberCouponMapper; +import com.ruoyi.member.service.IMemberCouponService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.member.mapper.MemberCouponMapper; -import com.ruoyi.member.domain.MemberCoupon; -import com.ruoyi.member.service.IMemberCouponService; + +import java.util.List; /** * 用户通告券变动记录Service业务层处理 @@ -20,6 +25,62 @@ public class MemberCouponServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper + .eq(MemberCoupon::getUserId,userId) + .eq(DlBaseEntity::getDelFlag,0) + .orderByDesc(DlBaseEntity::getCreateTime); + List list = list(lambdaQueryWrapper); + MemberCoupon memberCoupon = new MemberCoupon(); + memberCoupon.setUserId(userId); + memberCoupon.setType(type); + memberCoupon.setNoticeId(noticeId); + memberCoupon.setCouponNum(couponNum); + //如果无记录则为初始新增 + if (list.isEmpty()) { + memberCoupon.setBalance(couponNum); + } else { + //如果有记录则取最新记录中的剩余值进行计算后得出新值 + Integer oldBalance = list.get(0).getBalance(); + Integer newBalance; + if ("1".equals(type)) { + newBalance = oldBalance + couponNum; + } else { + newBalance = oldBalance - couponNum; + } + memberCoupon.setBalance(newBalance); + } + save(memberCoupon); + + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberOrderServiceImpl.java index 760ef80..ea7f000 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberOrderServiceImpl.java @@ -1,14 +1,24 @@ package com.ruoyi.member.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.DlBaseEntity; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.member.domain.MemberOrder; import com.ruoyi.member.mapper.MemberOrderMapper; +import com.ruoyi.member.service.IMemberCardService; +import com.ruoyi.member.service.IMemberCouponService; import com.ruoyi.member.service.IMemberOrderService; import com.ruoyi.member.vo.MemberOrderVO; +import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; /** * 订单Service业务层处理 @@ -21,6 +31,10 @@ public class MemberOrderServiceImpl extends ServiceImpl queryListPage(MemberOrderVO memberOrder, Page page) { return memberOrderMapper.queryListPage(memberOrder,page); } + + /** + * 订单支付回调 + * + * @param orderNo 订单编号 + * @author PQZ + * @date 14:02 2025/3/26 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + @SneakyThrows + public void payCallback(String orderNo) { + /*1、校验数据完整性*/ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0).eq(MemberOrder::getOrderNo,orderNo); + MemberOrder memberOrder = getOne(lambdaQueryWrapper); + /*2、处理不同类型订单*/ + if ("01".equals(memberOrder.getOrderType())) { + cardService.dealMemberCard(memberOrder); + } else { + couponService.dealMemberCoupon(memberOrder); + } + /*3、处理订单表数据*/ + memberOrder.setPayTime(new Date()); + memberOrder.setIsPay(1); + memberOrder.setPayWay("02"); + updateById(memberOrder); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java index 36e241b..a048e58 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java @@ -1,25 +1,52 @@ package com.ruoyi.member.service.impl; -import java.util.List; -import com.ruoyi.common.utils.DateUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.base.vo.CardRightsVO; +import com.ruoyi.member.domain.MemberCard; +import com.ruoyi.member.domain.MemberRights; +import com.ruoyi.member.mapper.MemberRightsMapper; +import com.ruoyi.member.service.IMemberRightsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.member.mapper.MemberRightsMapper; -import com.ruoyi.member.domain.MemberRights; -import com.ruoyi.member.service.IMemberRightsService; + +import java.util.ArrayList; +import java.util.List; /** * 会员权益(定时任务重置剩余值),用户id、会员卡id、权益对应1Service业务层处理 - * + * * @author pqz * @date 2025-03-17 */ @Service -public class MemberRightsServiceImpl extends ServiceImpl implements IMemberRightsService -{ +public class MemberRightsServiceImpl extends ServiceImpl implements IMemberRightsService { @Autowired private MemberRightsMapper memberRightsMapper; + /** + * 处理会员权益 + * + * @param userId 用户表id + * @param rights 权益 + * @author PQZ + * @date 15:45 2025/3/27 + **/ + @Override + public void dealRights(Long userId, String userType, List rights) { + List saveList = new ArrayList<>(); + rights.forEach(item -> { + MemberRights memberRights = new MemberRights(); + memberRights.setUserId(userId); + memberRights.setUserType(userType); + memberRights.setCardId(item.getCardId()); + memberRights.setRightsCode(item.getCode()); + memberRights.setRightsType(item.getRightsType()); + memberRights.setRightsCycle(item.getRightsCycle()); + memberRights.setRightsValue(item.getRightsValue()); + memberRights.setRemaining(item.getRightsValue()); + saveList.add(memberRights); + }); + saveBatch(saveList); + } } diff --git a/ruoyi-admin/src/main/resources/mapper/base/BaseCardRightsMapper.xml b/ruoyi-admin/src/main/resources/mapper/base/BaseCardRightsMapper.xml index 4569da1..1a2dd42 100644 --- a/ruoyi-admin/src/main/resources/mapper/base/BaseCardRightsMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/base/BaseCardRightsMapper.xml @@ -48,5 +48,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND dbr.id IS NOT NULL ORDER BY dbr.sort,dbr.create_time + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/member/MemberOrderMapper.xml b/ruoyi-admin/src/main/resources/mapper/member/MemberOrderMapper.xml index ca97f72..0e553a4 100644 --- a/ruoyi-admin/src/main/resources/mapper/member/MemberOrderMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/member/MemberOrderMapper.xml @@ -49,5 +49,6 @@ and is_pay = #{entity.isPay} and is_refund = #{entity.isRefund} + order by create_time desc \ No newline at end of file