ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java
@@ -39,9 +39,9 @@ @TableField("shop_id") private Integer shopId; @ApiModelProperty(value = "变动类型(1=门店分佣,2=下级门店分佣,3=门店服务费)") @ApiModelProperty(value = "变动类型(1=门店分佣,2=下级门店分佣,3=门店服务费, 4=提现)") @TableField("type") @Excel(name = "变更类型",readConverterExp = "1=门店分佣,2=下级门店分佣,3=门店服务费") @Excel(name = "变更类型",readConverterExp = "1=门店分佣,2=下级门店分佣,3=门店服务费,4=提现") private Integer type; @ApiModelProperty(value = "历史余额") ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopBalanceStatementClientFallbackFactory.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.other.api.factory; import com.ruoyi.other.api.feignClient.ShopBalanceStatementClient; import org.springframework.cloud.openfeign.FallbackFactory; public class ShopBalanceStatementClientFallbackFactory implements FallbackFactory<ShopBalanceStatementClient> { @Override public ShopBalanceStatementClient create(Throwable cause) { return null; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopBalanceStatementClient.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.other.api.feignClient; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.api.factory.ShopBalanceStatementClientFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import java.util.List; @FeignClient(contextId = "ShopBalanceStatementClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = ShopBalanceStatementClientFallbackFactory.class) public interface ShopBalanceStatementClient { @PostMapping() R<List<ShopBalanceStatement>> getList(ShopBalanceStatement shopBalanceStatement); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java
@@ -1,9 +1,11 @@ package com.ruoyi.other.controller; 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.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.service.ShopBalanceStatementService; @@ -11,13 +13,11 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> @@ -45,14 +45,6 @@ ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(pageNum, pageSize), shopBalanceStatement); return R.ok(shopCommissionStatisticsVO); } @GetMapping("/commissionStatistics/list") @ApiOperation(value = "门店余额明细", notes = "门店余额明细", tags = {"门店后台"}) public R<ShopCommissionStatisticsVO> shopCommissionStatisticslist(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, ShopBalanceStatement shopBalanceStatement){ ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(pageNum, pageSize), shopBalanceStatement); return R.ok(shopCommissionStatisticsVO); } /** * 导出门店分佣统计 @@ -66,5 +58,12 @@ util.exportExcel(response, statementIPage.getRecords(), "用户积分统计"); } @PostMapping("/getList") public R<List<ShopBalanceStatement>> getList(@RequestBody ShopBalanceStatement shopBalanceStatement){ return R.ok(); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java
@@ -16,8 +16,11 @@ * @since 2024-11-20 */ public interface ShopBalanceStatementMapper extends BaseMapper<ShopBalanceStatement> { List<ShopBalanceStatement> findLatestChangeByType(ShopBalanceStatement shopBalanceStatement); IPage<ShopBalanceStatement> queryShopBalanceStatementPage(@Param("page") IPage<ShopBalanceStatement> page, @Param("bs") ShopBalanceStatement shopBalanceStatement); List<ShopBalanceStatement> selectShopBalanceStatementList(@Param("bs") ShopBalanceStatement shopBalanceStatement); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java
@@ -1,19 +1,17 @@ package com.ruoyi.other.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.mapper.ShopBalanceStatementMapper; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.api.domain.ShopPoint; import com.ruoyi.other.mapper.ShopBalanceStatementMapper; import com.ruoyi.other.service.ShopBalanceStatementService; import com.ruoyi.other.service.ShopService; import com.ruoyi.other.vo.ShopCommissionStatisticsVO; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -26,32 +24,29 @@ */ @Service public class ShopBalanceStatementServiceImpl extends ServiceImpl<ShopBalanceStatementMapper, ShopBalanceStatement> implements ShopBalanceStatementService { @Resource private ShopBalanceStatementMapper shopBalanceStatementMapper; @Resource private ShopService shopService; @Override public ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement) { List<ShopBalanceStatement> latestChangeByType = shopBalanceStatementMapper.findLatestChangeByType(shopBalanceStatement); ShopCommissionStatisticsVO shopCommissionStatisticsVO = new ShopCommissionStatisticsVO(); for (ShopBalanceStatement sp : latestChangeByType) { switch (sp.getType()) { case 1: shopCommissionStatisticsVO.setTotalCommission(sp.getBalance()); break; case 2: shopCommissionStatisticsVO.setTotalSubordinateCommission(sp.getBalance()); break; case 3: shopCommissionStatisticsVO.setTotalServiceCharge(sp.getBalance()); break; } } shopCommissionStatisticsVO.setTotalAmount(shopCommissionStatisticsVO.getTotalCommission() .add(shopCommissionStatisticsVO.getTotalSubordinateCommission()) .add(shopCommissionStatisticsVO.getTotalServiceCharge())); List<ShopBalanceStatement> shopBalanceStatements = this.baseMapper.selectShopBalanceStatementList(shopBalanceStatement); Map<Integer, BigDecimal> shopCommissionMap = shopBalanceStatements.stream() .collect(Collectors.groupingBy( ShopBalanceStatement::getType, Collectors.reducing( BigDecimal.ZERO, ShopBalanceStatement::getVariableAmount, BigDecimal::add ) )); BigDecimal totalCommission = shopCommissionMap.get(1); BigDecimal totalSubordinateCommission = shopCommissionMap.get(2); BigDecimal totalServiceCharge = shopCommissionMap.get(3); BigDecimal totalAmount = totalCommission.add(totalSubordinateCommission).add(totalServiceCharge); shopCommissionStatisticsVO.setTotalAmount(totalAmount); IPage<ShopBalanceStatement> statementIPage = this.baseMapper.queryShopBalanceStatementPage(page, shopBalanceStatement); shopCommissionStatisticsVO.setStatementIPage(statementIPage); ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml
@@ -2,37 +2,7 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.other.mapper.ShopBalanceStatementMapper"> <select id="findLatestChangeByType" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement"> SELECT id, shop_id, type, historical_balance, variable_amount, balance, create_time, create_user_id, object_id FROM ( SELECT id, shop_id, type, historical_balance, variable_amount, balance, create_time, create_user_id, object_id, ROW_NUMBER() OVER ( PARTITION BY type, create_user_id ORDER BY create_time DESC ) AS rn FROM t_shop_balance_statement ) AS subquery WHERE rn = 1 </select> <select id="queryShopBalanceStatementPage" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement"> <sql id="shopBalanceStatementList"> SELECT tsbs.*, ts.`name` shopName, @@ -58,5 +28,12 @@ AND tsbs.create_time BETWEEN #{bs.startTime} AND #{bs.endTime} </if> </where> </sql> <select id="queryShopBalanceStatementPage" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement"> <include refid="shopBalanceStatementList"/> </select> <select id="selectShopBalanceStatementList" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement"> <include refid="shopBalanceStatementList"/> </select> </mapper>