1.优化分销员计算一级、二级分销佣金业务

2.优化送水订单获取用户收货地址业务
3.优化收益明细订单号、用户ID查询业务
4.提现业务增加订单号,避免使用订单ID传入会与生产ID重复,导致都是已使用订单号
This commit is contained in:
2026-05-13 09:55:49 +08:00
parent 92ca45a5c1
commit f3d6bbef63
10 changed files with 73 additions and 27 deletions

View File

@@ -329,16 +329,14 @@ public class GltTicketOrderController extends BaseController {
if (addr == null) {
return null;
}
if (StrUtil.isNotBlank(addr.getFullAddress())) {
return addr.getFullAddress();
}
// 兼容旧数据fullAddress 为空时,拼接省市区 + 详细地址
return StrUtil.blankToDefault(
StrUtil.join("",
StrUtil.nullToEmpty(addr.getProvince()),
StrUtil.nullToEmpty(addr.getCity()),
StrUtil.nullToEmpty(addr.getRegion()),
StrUtil.nullToEmpty(addr.getAddress())
StrUtil.nullToEmpty(addr.getAddress()),
StrUtil.nullToEmpty(addr.getFullAddress())
),
addr.getAddress()
);

View File

@@ -16,6 +16,7 @@ import com.gxwebsoft.shop.mapper.ShopDealerRefereeMapper;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.service.*;
import com.gxwebsoft.shop.util.UpstreamUserFinder;
import com.gxwebsoft.shop.vo.ShopDealerRefereeVO;
import com.gxwebsoft.shop.vo.ShopOrderGoodsVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -484,16 +485,23 @@ public class DealerOrderSettlement10584Task {
AtomicReference<BigDecimal> simpleMoney = new AtomicReference<>(BigDecimal.ZERO);
if (dealerLevel >= 1) {
Integer dealerId = shopDealerRefereeMapper.getDealerIdByUserId(order.getUserId());
if(dealerId != null){
directDealerId = dealerId;
ShopDealerRefereeVO dealerRefereeVO = shopDealerRefereeMapper.getDealerIdByUserId(order.getUserId());
if (dealerLevel == 1) {
Integer directUserId = dealerRefereeVO.getDirectUserId();
Integer directUserType = dealerRefereeVO.getDirectUserType();
if(directUserId != null && directUserType != null && directUserType == 0){
directDealerId = dealerRefereeVO.getDirectUserId();
}
}
if (dealerLevel >= 2 && directDealerId != null) {
Integer dealerId = shopDealerRefereeMapper.getDealerIdByUserId(directDealerId);
if(dealerId != null){
simpleDealerId = dealerId;
}else {
Integer directUserId = dealerRefereeVO.getDirectUserId();
Integer directUserType = dealerRefereeVO.getDirectUserType();
Integer simpleUserId = dealerRefereeVO.getSimpleUserId();
Integer simpleUserType = dealerRefereeVO.getSimpleUserType();
if(directUserId != null && directUserType != null && directUserType == 0){
directDealerId = directUserId;
}
if(simpleUserId != null && simpleUserType != null && simpleUserType == 0){
simpleDealerId = simpleUserId;
}
}

View File

@@ -1,17 +1,17 @@
package com.gxwebsoft.shop.controller;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.shop.service.ShopDealerCapitalService;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.entity.ShopDealerCapital;
import com.gxwebsoft.shop.param.ShopDealerCapitalParam;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.service.ShopDealerCapitalService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -34,7 +34,7 @@ public class ShopDealerCapitalController extends BaseController {
@PreAuthorize("hasAuthority('shop:shopDealerCapital:list')")
@Operation(summary = "分页查询分销商资金明细表")
@GetMapping("/page")
public ApiResult<PageResult<ShopDealerCapital>> page(ShopDealerCapitalParam param) {
public ApiResult<PageResult<ShopDealerCapital>> page(@ParameterObject ShopDealerCapitalParam param) {
// 使用关联查询
return success(shopDealerCapitalService.pageRel(param));
}

View File

@@ -2,6 +2,7 @@ package com.gxwebsoft.shop.controller;
import cn.hutool.core.util.StrUtil;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.system.redis.OrderNoUtils;
import com.gxwebsoft.shop.entity.ShopDealerUser;
import com.gxwebsoft.shop.service.ShopDealerUserService;
import com.gxwebsoft.shop.service.ShopDealerWithdrawService;
@@ -43,6 +44,8 @@ public class ShopDealerWithdrawController extends BaseController {
private ShopDealerUserService shopDealerUserService;
@Resource
private WxTransferService wxTransferService;
@Resource
private OrderNoUtils orderNoUtils;
@PreAuthorize("hasAuthority('shop:shopDealerWithdraw:list')")
@Operation(summary = "分页查询分销商提现明细表")
@@ -89,6 +92,8 @@ public class ShopDealerWithdrawController extends BaseController {
return fail("tenantId为空无法发起提现");
}
String orderNo = orderNoUtils.generate("WD");
shopDealerWithdraw.setOrderNo(orderNo);
shopDealerWithdraw.setTenantId(tenantId);
shopDealerWithdraw.setUserId(loginUser.getUserId());

View File

@@ -27,6 +27,9 @@ public class ShopDealerWithdraw implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@Schema(description = "订单号")
private String orderNo;
@Schema(description = "分销商用户ID")
private Integer userId;

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.shop.entity.ShopDealerReferee;
import com.gxwebsoft.shop.param.ShopDealerRefereeParam;
import com.gxwebsoft.shop.vo.ShopDealerRefereeVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -39,6 +40,6 @@ public interface ShopDealerRefereeMapper extends BaseMapper<ShopDealerReferee> {
* @param userId 用户ID
* @return
*/
Integer getDealerIdByUserId(@Param("userId") Integer userId);
ShopDealerRefereeVO getDealerIdByUserId(@Param("userId") Integer userId);
}

View File

@@ -40,7 +40,6 @@
</if>
<if test="param.keywords != null">
AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%')
OR a.user_id = #{param.keywords}
OR a.order_no = #{param.keywords}
)
</if>

View File

@@ -57,15 +57,20 @@
<select id="selectListRel" resultType="com.gxwebsoft.shop.entity.ShopDealerReferee">
<include refid="selectSql"></include>
</select>
<select id="getDealerIdByUserId" resultType="java.lang.Integer">
<select id="getDealerIdByUserId" resultType="com.gxwebsoft.shop.vo.ShopDealerRefereeVO">
SELECT
a.dealer_id
b.user_id directUserId,
b.type directUserType,
d.user_id simpleUserId,
d.type simpleUserType
FROM
shop_dealer_referee a
LEFT JOIN shop_dealer_user b ON a.dealer_id = b.user_id
LEFT JOIN shop_dealer_referee c ON b.user_id = c.user_id
LEFT JOIN shop_dealer_user d ON d.user_id = c.dealer_id
WHERE
b.is_delete = 0
AND b.type = 0
and d.is_delete = 0
AND a.user_id = #{userId}
</select>

View File

@@ -166,7 +166,7 @@ public class ShopDealerCommissionRollbackServiceImpl implements ShopDealerCommis
if (refundAmount.compareTo(orderBaseAmount) >= 0) {
return BigDecimal.ONE;
}
return refundAmount.divide(orderBaseAmount, 10, RoundingMode.HALF_UP);
return refundAmount.divide(orderBaseAmount, 3, RoundingMode.HALF_UP);
}
private void markDealerOrderInvalid(Integer tenantId, String orderNo) {

View File

@@ -0,0 +1,27 @@
package com.gxwebsoft.shop.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
*
* @author xm
* @since 2026-05-13
*/
@Data
@Schema(description = "两级推荐人数据")
public class ShopDealerRefereeVO {
@Schema(description = "一级推荐人")
private Integer directUserId;
@Schema(description = "一级推荐人类型 0-分销商 1-门店/服务商 2-集团分红")
private Integer directUserType;
@Schema(description = "二级推荐人")
private Integer simpleUserId;
@Schema(description = "二级推荐人类型 0-分销商 1-门店/服务商 2-集团分红")
private Integer simpleUserType;
}