diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbActivateInRecordMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbActivateInRecordMapper.java index 2a2bd96..853fbf2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbActivateInRecordMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbActivateInRecordMapper.java @@ -21,6 +21,7 @@ public interface TbActivateInRecordMapper { * @return 实例对象 */ TbActivateInRecord queryById(Integer id); + Integer isUseCoupon(@Param("vipUserId") Integer vipUserId, @Param("couponId") Integer couponId,@Param("sourceFlowId") Integer sourceFlowId); /** * 查询数据 diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopCouponMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopCouponMapper.java index 0ce36a0..5ca727b 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopCouponMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopCouponMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; import org.springframework.data.domain.Pageable; import java.util.List; +import java.util.Set; /** * 优惠券(TbShopCoupon)表数据库访问层 @@ -40,6 +41,8 @@ public interface TbShopCouponMapper { */ int insert(TbShopCoupon tbShopCoupon); + int upUseNumber(@Param("ids") Set ids); + /** * 批量新增数据(MyBatis原生foreach方法) * diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 3b881a4..3503f67 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1545,6 +1545,7 @@ public class PayService { record.setSourceFlowId(flowId); record.setUseStartTime(start); record.setUseEndTime(end); + record.setSource("activate"); record.setCouponJson(activateInRecordService.getCouponJson(activate, tbShopCoupon, null)); actGiveRecords.add(record); } else if (tbShopCoupon.getType() == 2) { @@ -1564,6 +1565,7 @@ public class PayService { record.setSourceFlowId(flowId); record.setUseStartTime(start); record.setUseEndTime(end); + record.setSource("activate"); record.setCouponJson(activateInRecordService.getCouponJson(activate, tbShopCoupon, actPro)); actGiveRecords.add(record); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopCouponServiceImpl.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopCouponServiceImpl.java index efbbc9a..444d2d9 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopCouponServiceImpl.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopCouponServiceImpl.java @@ -173,8 +173,15 @@ public class TbShopCouponServiceImpl implements TbShopCouponService { */ @Override public boolean use(Integer shopId, Integer orderId, Integer vipUserId, List param) { + Set couponIds = new HashSet<>(); for (TbActivateOutRecord outRecord : param) { TbActivateInRecord inRecord = inRecordMapper.queryById(outRecord.getGiveId()); + if (!couponIds.contains(inRecord.getCouponId())) { + Integer useCoupon = inRecordMapper.isUseCoupon(inRecord.getVipUserId(), inRecord.getCouponId(), inRecord.getSourceFlowId()); + if (useCoupon == null || useCoupon == 0) { + couponIds.add(inRecord.getCouponId()); + } + } if (inRecord.getSource().equals("invited")) { TbShopShareRecord shareRecord = shareRecordMapper.queryById(inRecord.getSourceActId()); if (shareRecord.getMethod().equals("use")) { @@ -194,6 +201,9 @@ public class TbShopCouponServiceImpl implements TbShopCouponService { outRecord.setCreateTime(new Date()); } outRecordMapper.insertBatch(param); + if (CollectionUtil.isNotEmpty(couponIds)) { + couponMapper.upUseNumber(couponIds); + } return true; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopShareRecordServiceImpl.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopShareRecordServiceImpl.java index e76cf83..9defde2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopShareRecordServiceImpl.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopShareRecordServiceImpl.java @@ -222,13 +222,13 @@ public class TbShopShareRecordServiceImpl implements TbShopShareRecordService { TbShopShare shopShare = tbShopShareMapper.queryById(shareRecord.getShareId()); TbShopUser tbShopUser = getShopUserInfo(userId, shareRecord.getShopId()); if (userId.equals(shareRecord.getInvitedId())) { - giveCoupon(shopShare, tbShopUser, shopShare.getRewardCoupons()); + giveCoupon(shopShare, tbShopUser, shopShare.getRewardCoupons(),shareRecord.getId(), true); } else if (userId.equals(shareRecord.getBeInvitedId())) { - giveCoupon(shopShare, tbShopUser, shopShare.getNewCoupons()); + giveCoupon(shopShare, tbShopUser, shopShare.getNewCoupons(),shareRecord.getId(),false); } } - public void giveCoupon(TbShopShare shopShare, TbShopUser tbShopUser, List coupons) { + public void giveCoupon(TbShopShare shopShare, TbShopUser tbShopUser, List coupons ,Integer flowId, boolean isReward) { for (TbShopShare.ShareCoupons newCoupon : coupons) { TbShopCoupon tbShopCoupon = couponMapper.queryById(newCoupon.getCouponId()); Date start = new Date(); @@ -257,9 +257,14 @@ public class TbShopShareRecordServiceImpl implements TbShopShareRecordService { record.setShopId(Integer.valueOf(tbShopUser.getShopId())); record.setCreateTime(new Date()); record.setSourceActId(shopShare.getId()); + record.setSourceFlowId(flowId); record.setUseStartTime(start); record.setUseEndTime(end); - record.setSource("invited"); + if(isReward){ + record.setSource("invited-reward"); + }else { + record.setSource("invited"); + } actGiveRecords.add(record); } else if (tbShopCoupon.getType() == 2) { //商品券 @@ -275,16 +280,23 @@ public class TbShopShareRecordServiceImpl implements TbShopShareRecordService { record.setOverNum(actPro.getNum() * tbShopCoupon.getNumber()); record.setShopId(Integer.valueOf(tbShopUser.getShopId())); record.setSourceActId(shopShare.getId()); + record.setSourceFlowId(flowId); record.setUseStartTime(start); record.setUseEndTime(end); record.setCreateTime(new Date()); - record.setSource("invited"); + if(isReward){ + record.setSource("invited-reward"); + }else { + record.setSource("invited"); + } actGiveRecords.add(record); } } activateInRecordMapper.insertBatch(actGiveRecords); - tbShopCoupon.setLeftNumber(tbShopCoupon.getLeftNumber()-newCoupon.getCouponNum()); - couponMapper.update(tbShopCoupon); + if(!isReward){ + tbShopCoupon.setLeftNumber(tbShopCoupon.getLeftNumber()-newCoupon.getCouponNum()); + couponMapper.update(tbShopCoupon); + } } } diff --git a/src/main/resources/mapper/TbActivateInRecordMapper.xml b/src/main/resources/mapper/TbActivateInRecordMapper.xml index d7f9b81..26123bf 100644 --- a/src/main/resources/mapper/TbActivateInRecordMapper.xml +++ b/src/main/resources/mapper/TbActivateInRecordMapper.xml @@ -36,6 +36,22 @@ id, vip_user_id, coupon_id, name, type, pro_id, full_amount, discount_amount, nu where id = #{id} + + +