From 5929b6021c56f523b0b960dac5caa765e6a14e7e Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Tue, 10 May 2022 19:14:37 +0800 Subject: [PATCH] add static profit --- src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java | 3 + src/main/resources/mapper/modules/MallGoodsMapper.xml | 13 ++++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java | 8 ++ src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java | 3 + src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 78 ++++++++++++++++++++++++++ src/main/resources/mapper/modules/MallOrderInfoMapper.xml | 11 +++ src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java | 3 + src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java | 13 ++++ 9 files changed, 134 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java index c582ae4..2427361 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java @@ -97,4 +97,7 @@ @TableField(exist = false) private List<String> images; + + @TableField(exist = false) + private String orderNo; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java index 19fc964..825d50b 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; @@ -37,4 +38,6 @@ AdminMailGoodsUpdateVo getMallGoodsUpdateInfoById(@Param("id")long id); List<AdminMallGoodsTreeVo> getAllGoodsTree(); + + List<MallGoods> selectOrderGoodsList(@Param("memberId") Long memberId, @Param("date") Date date); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java index cb64ee0..8f437dd 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java @@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; @@ -45,4 +46,6 @@ Integer selectCntDirect(@Param("inviteId") String inviteId); BigDecimal selectTotalAmount(@Param("memberId") Long memberId); + + BigDecimal selectTotalAmountForDate(@Param("date") Date date, @Param("member") Long memberId); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java index c9cebea..5be6491 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberWalletService.java @@ -18,6 +18,8 @@ void add(BigDecimal amount, Long memberId, String field); + void add(BigDecimal amount, Long memberId, String... field); + void reduce(BigDecimal amount, Long memberId, String field); void commissionChange(CommissionChangeDto commissionChange); diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java new file mode 100644 index 0000000..9bd3e0d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java @@ -0,0 +1,13 @@ +package cc.mrbird.febs.mall.service; + +/** + * @author wzy + * @date 2022-05-10 + **/ +public interface IMemberProfitService { + + /** + * 静态分红 + */ + void staticProfit(); +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java index 7dca4fb..96f94e6 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java @@ -169,6 +169,14 @@ } @Override + public void add(BigDecimal amount, Long memberId, String... field) { + String[] fields = field.clone(); + for (String s : fields) { + add(amount, memberId, s); + } + } + + @Override public void reduce(BigDecimal amount, Long memberId, String field) { int i = 0; boolean flag = true; diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java new file mode 100644 index 0000000..38a5453 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java @@ -0,0 +1,78 @@ +package cc.mrbird.febs.mall.service.impl; + +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import cc.mrbird.febs.mall.entity.MallGoods; +import cc.mrbird.febs.mall.entity.MallMember; +import cc.mrbird.febs.mall.mapper.MallGoodsMapper; +import cc.mrbird.febs.mall.mapper.MallMemberMapper; +import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; +import cc.mrbird.febs.mall.mapper.MallOrderItemMapper; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; +import cc.mrbird.febs.mall.service.IMemberProfitService; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.List; + +/** + * @author wzy + * @date 2022-05-10 + **/ +@Slf4j +@Service +@RequiredArgsConstructor +public class MemberProfitServiceImpl implements IMemberProfitService { + + private final MallMemberMapper mallMemberMapper; + private final MallOrderInfoMapper mallOrderInfoMapper; + private final MallOrderItemMapper mallOrderItemMapper; + private final MallGoodsMapper mallGoodsMapper; + private final IApiMallMemberWalletService walletService; + private final IMallMoneyFlowService moneyFlowService; + + @Override + @Transactional(rollbackFor = Exception.class) + public void staticProfit() { + log.info("#####静态分红开始运行:{}#####", new Date()); + List<MallMember> members = mallMemberMapper.selectList(null); + if (CollUtil.isEmpty(members)) { + return; + } + + Date profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1); + BigDecimal totalIncome = mallOrderInfoMapper.selectTotalAmountForDate(profitDate, null); + if (totalIncome.compareTo(BigDecimal.ZERO) == 0) { + return; + } + BigDecimal perProfit = totalIncome.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + + for (MallMember member : members) { + List<MallGoods> goodsList = mallGoodsMapper.selectOrderGoodsList(member.getId(), profitDate); + + if (CollUtil.isEmpty(goodsList)) { + continue; + } + + for (MallGoods goods : goodsList) { + BigDecimal goodsProfit = goods.getStaticProp().multiply(perProfit); + + walletService.add(goodsProfit, member.getId(), "score", "total_score"); + moneyFlowService.addMoneyFlow(member.getId(), goodsProfit, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), goods.getOrderNo(), FlowTypeEnum.SCORE.getValue()); + } + } + } + + public static void main(String[] args) { + System.out.println(DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1)); + } +} diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml index afd7b80..ac3fde8 100644 --- a/src/main/resources/mapper/modules/MallGoodsMapper.xml +++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml @@ -193,4 +193,17 @@ a.goods_name goodsName from mall_goods a </select> + + <select id="selectOrderGoodsList" resultType="cc.mrbird.febs.mall.entity.MallGoods"> + select a.*,c.order_no from mall_goods a + inner join mall_order_item b on a.id=b.goods_id + inner join mall_order_info c on b.order_id=c.ID + where c.status=4 + <if test="memberId != null"> + and c.member_id=#{memberId} + </if> + <if test="date != null"> + and date_format(c.receving_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d') + </if> + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml index 7675a74..2cc1e51 100644 --- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml +++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml @@ -178,4 +178,15 @@ select IFNULL(sum(IFNULL(amount,0)),0) from mall_order_info where member_id=#{memberId} and status = 4 </select> + + <select id="selectTotalAmountForDate" resultType="java.math.BigDecimal"> + select IFNULL(sum(IFNULL(amount,0)),0) from mall_order_info + where status = 4 + <if test="member != null"> + and member_id=#{memberId} + </if> + <if test="date != null"> + and date_format(a.receving_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d') + </if> + </select> </mapper> \ No newline at end of file -- Gitblit v1.9.1