src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
@@ -136,5 +136,17 @@ return iApiMallTeamLeaderService.leaderProfit(); } /** * 团长查看已提成收益 */ @ApiOperation(value = "团长查看已提成收益", notes = "团长查看已提成收益") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiOrderProfitVo.class) }) @PostMapping(value = "/leaderProfitList") public FebsResponse leaderProfitList(@RequestBody ApiOrderProfitDto apiOrderProfitDto) { return new FebsResponse().success().data(iApiMallTeamLeaderService.findLeaderProfitListInPage(apiOrderProfitDto)); } } src/main/java/cc/mrbird/febs/mall/conversion/MallLeaderAchieveConversion.java
New file @@ -0,0 +1,17 @@ package cc.mrbird.febs.mall.conversion; import cc.mrbird.febs.mall.entity.MallLeaderAchieve; import cc.mrbird.febs.mall.vo.ApiOrderProfitVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; @Mapper public abstract class MallLeaderAchieveConversion { public static final MallLeaderAchieveConversion INSTANCE = Mappers.getMapper(MallLeaderAchieveConversion.class); public abstract List<ApiOrderProfitVo> entitysToVos(List<MallLeaderAchieve> mallLeaderAchieves); } src/main/java/cc/mrbird/febs/mall/dto/ApiOrderProfitDto.java
New file @@ -0,0 +1,25 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data @ApiModel(value = "ApiOrderProfitDto", description = "商品评论接收类") public class ApiOrderProfitDto { @ApiModelProperty(value = "第几页", example = "1") private Integer pageNum; @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(value = "创建时间", example = "10") private Date createdTime; @ApiModelProperty(hidden = true) private String invitedId; } src/main/java/cc/mrbird/febs/mall/entity/MallLeaderAchieve.java
@@ -1,6 +1,7 @@ package cc.mrbird.febs.mall.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -13,10 +14,14 @@ //订单所属的用户ID private Long memberId; //订单详情ID private Long orderItemId; //订单编号 private String orderNo; //订单金额 private BigDecimal amount; //收益 private BigDecimal profitAmount; //团长特征码 private String uniqueCode; //1:未提成 2:已提成 @@ -24,4 +29,7 @@ public static final Integer STATE_ONE = 1; public static final Integer STATE_TWO = 2; @TableField(exist = false) private String goodsName; } src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderAchieveMapper.java
@@ -1,8 +1,10 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.dto.ApiOrderProfitDto; import cc.mrbird.febs.mall.entity.MallLeaderAchieve; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -17,4 +19,6 @@ int updateByUniqueCodeStateAndTime(@Param("updateTime")DateTime updateTime,@Param("uniqueCode")String uniqueCode, @Param("state")Integer stateOne, @Param("offsetDay")DateTime dateTime); BigDecimal selectProfitByStateAndDateTimeAndUniqueCode(@Param("state")Integer state, @Param("date") Date DateTime, @Param("uniqueCode")String uniqueCode); IPage<MallLeaderAchieve> selectApiLeaderProfitListInPage(IPage<MallLeaderAchieve> page, @Param("record")ApiOrderProfitDto apiOrderProfitDto); } src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java
@@ -110,6 +110,8 @@ List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderByStatusAndPayTime(3,DateUtil.offsetDay(new Date(), -value)); if(CollUtil.isNotEmpty(orderInfos)){ for(MallOrderInfo orderInfo : orderInfos){ DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN); //生成一条团长提成记录 Long id = orderInfo.getId(); List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id); @@ -120,9 +122,11 @@ MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); mallLeaderAchieve.setOrderItemId(mallOrderItem.getId()); BigDecimal itemAmount = mallOrderItem.getAmount(); // BigDecimal subtract = orderInfo.getAmount().subtract(orderInfo.getCarriage() == null ? BigDecimal.ZERO : orderInfo.getCarriage()); mallLeaderAchieve.setAmount(itemAmount); BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN); mallLeaderAchieve.setProfitAmount(bigDecimal); mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); mallLeaderAchieveMapper.insert(mallLeaderAchieve); @@ -146,8 +150,8 @@ DataDictionaryCustom dicBonusSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_SWITCH.getType(), DataDictionaryEnum.BONUS_SWITCH.getCode()); String bonusSwitch = dicBonusSwitch.getValue(); if("1".equals(bonusSwitch)){ DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN);; // DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); // BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN); //获取每日提成总数 /** * a.unique_code uniqueCode 团长特征码 @@ -159,10 +163,9 @@ if (CollUtil.isNotEmpty(allLeaderAchieve)) { for (Map<String, String> map : allLeaderAchieve) { String uniqueCode = map.get("uniqueCode"); Object amountOrder = map.get("amount"); Object profitAmount = map.get("profitAmount"); //直接舍弃小数点的第三位 BigDecimal amount = new BigDecimal(String.valueOf(amountOrder)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal achieveMoney = amount.multiply(bonusPercent).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal achieveMoney = new BigDecimal(String.valueOf(profitAmount)).setScale(2,BigDecimal.ROUND_DOWN); MallMember mallMember = mallMemberMapper.selectInfoByInviteId(uniqueCode); memberWalletService.addBalance(achieveMoney,mallMember.getId()); String achieveNo = "TC."+ MallUtils.getOrderNum(); src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
@@ -4,6 +4,7 @@ import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallTeamLeader; import cc.mrbird.febs.mall.vo.ApiLeaderListVo; import cc.mrbird.febs.mall.vo.ApiOrderProfitVo; import cc.mrbird.febs.mall.vo.OrderListVo; import com.baomidou.mybatisplus.extension.service.IService; @@ -32,4 +33,6 @@ FebsResponse refundOrderInfo(ApiRefundOrderInfoDto apiRefundOrderInfoDto); FebsResponse leaderProfit(); List<ApiOrderProfitVo> findLeaderProfitListInPage(ApiOrderProfitDto apiOrderProfitDto); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -513,15 +513,19 @@ Long orderInfoId = orderInfo.getId(); List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfoId); if(CollUtil.isNotEmpty(mallOrderItemList)){ DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode()); BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN); for(MallOrderItem mallOrderItem : mallOrderItemList){ Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState(); if(1 == state){ MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve(); mallLeaderAchieve.setMemberId(orderInfo.getMemberId()); mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo()); mallLeaderAchieve.setOrderItemId(mallOrderItem.getId()); BigDecimal itemAmount = mallOrderItem.getAmount(); // BigDecimal subtract = orderInfo.getAmount().subtract(orderInfo.getCarriage() == null ? BigDecimal.ZERO : orderInfo.getCarriage()); mallLeaderAchieve.setAmount(itemAmount); BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN); mallLeaderAchieve.setProfitAmount(bigDecimal); mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode()); mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE); mallLeaderAchieveMapper.insert(mallLeaderAchieve); src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -6,6 +6,7 @@ import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.mall.conversion.MallLeaderAchieveConversion; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; import cc.mrbird.febs.mall.dto.*; @@ -416,4 +417,13 @@ return new FebsResponse().success().data(apiLeaderProfitVo); } @Override public List<ApiOrderProfitVo> findLeaderProfitListInPage(ApiOrderProfitDto apiOrderProfitDto) { MallMember member = LoginUserUtil.getLoginUser(); IPage<MallLeaderAchieve> page = new Page<>(apiOrderProfitDto.getPageNum(), apiOrderProfitDto.getPageSize()); apiOrderProfitDto.setInvitedId(member.getInviteId()); IPage<MallLeaderAchieve> mallLeaderAchieves = mallLeaderAchieveMapper.selectApiLeaderProfitListInPage(page, apiOrderProfitDto); return MallLeaderAchieveConversion.INSTANCE.entitysToVos(mallLeaderAchieves.getRecords()); } } src/main/java/cc/mrbird/febs/mall/vo/ApiOrderProfitVo.java
New file @@ -0,0 +1,36 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @Data @ApiModel(value = "ApiOrderProfitVo", description = "信息返回类") public class ApiOrderProfitVo { //订单编号 @ApiModelProperty(value = "订单编号") private String orderNo; //订单金额 @ApiModelProperty(value = "订单金额") private BigDecimal amount; //收益 @ApiModelProperty(value = "收益") private BigDecimal profitAmount; //团长特征码 @ApiModelProperty(value = "团长特征码") private String uniqueCode; // @ApiModelProperty(value = "1:未提成 2:已提成") private Integer state; @ApiModelProperty(value = "创建时间") private Date createdTime; @ApiModelProperty(value = "产品名称") private String goodsName;; } src/main/resources/mapper/modules/MallLeaderAchieveMapper.xml
@@ -5,7 +5,7 @@ <select id="selectListByStateAndCreateTimeAndUniqueCode" resultType="java.util.Map"> select a.unique_code uniqueCode, IFNULL(sum(a.amount),0) amount IFNULL(sum(a.profit_amount),0) profitAmount from mall_leader_achieve a where a.state = #{state} and date_format(a.CREATED_TIME, '%Y-%m-%d') = date_format(#{offsetDay}, '%Y-%m-%d') @@ -38,4 +38,23 @@ </where> </select> <select id="selectApiLeaderProfitListInPage" resultType="cc.mrbird.febs.mall.entity.MallLeaderAchieve"> select a.*, c.goods_name goodsName from mall_leader_achieve a inner join mall_order_item c on a.order_item_id = c.id <where> a.state = 2 <if test="record != null"> <if test="record.invitedId != null and record.invitedId != ''"> and a.unique_code = #{record.invitedId} </if> <if test="record.createdTime!=null"> and date_format(a.CREATED_TIME, '%Y-%m-%d') = date_format(#{record.createdTime}, '%Y-%m-%d') </if> </if> </where> GROUP BY a.id order by a.created_time desc </select> </mapper>