增加门店、服务商佣金定时结算功能,默认每天凌晨一点执行

This commit is contained in:
2026-05-16 15:10:14 +08:00
parent 7de53327d6
commit 2fbcf16a48
14 changed files with 381 additions and 21 deletions

View File

@@ -60,7 +60,7 @@ public class ConfigProperties {
/** /**
* token过期时间, 单位秒 * token过期时间, 单位秒
*/ */
private Long tokenExpireTime = 60 * 60 * 365 * 24L; private Long tokenExpireTime = 60 * 60 * 30 * 24L;
/** /**
* token快要过期自动刷新时间, 单位分钟 * token快要过期自动刷新时间, 单位分钟

View File

@@ -194,9 +194,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
gltTicketOrder.setCreateTime(now); gltTicketOrder.setCreateTime(now);
} }
// “立刻送水”下单场景不再需要前端选择配送时间;若未传则默认当前时间,便于排序与派单。 // “立刻送水”下单场景不再需要前端选择配送时间;若未传则默认当前时间,便于排序与派单。
if (!StringUtils.hasText(gltTicketOrder.getSendTime())) { gltTicketOrder.setSendTime(now.format(SEND_TIME_FMT));
gltTicketOrder.setSendTime(now.format(SEND_TIME_FMT));
}
gltTicketOrder.setUpdateTime(now); gltTicketOrder.setUpdateTime(now);
if (!this.save(gltTicketOrder)) { if (!this.save(gltTicketOrder)) {
throw new BusinessException("创建订单失败"); throw new BusinessException("创建订单失败");

View File

@@ -180,7 +180,7 @@ public class WxPayConfigService {
* 获取证书文件路径 * 获取证书文件路径
*/ */
private String getCertificatePath(Integer tenantId, Payment payment) throws PaymentException { private String getCertificatePath(Integer tenantId, Payment payment) throws PaymentException {
if ("dev".equals(activeProfile)) { if ("local".equals(activeProfile)) {
return getDevCertificatePath(tenantId); return getDevCertificatePath(tenantId);
} else { } else {
return getProdCertificatePath(payment); return getProdCertificatePath(payment);

View File

@@ -3,19 +3,18 @@ package com.gxwebsoft.shop.controller;
import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.common.core.annotation.OperationLog;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.shop.service.ShopDealerOrderService;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.shop.param.ShopDealerOrderImportParam;
import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.common.core.utils.JSONUtil;
import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.param.ShopDealerOrderImportParam;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.shop.service.ShopDealerOrderService;
import com.gxwebsoft.shop.task.OrderSettlementTask;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@@ -40,6 +39,9 @@ public class ShopDealerOrderController extends BaseController {
@Resource @Resource
private ShopDealerOrderService shopDealerOrderService; private ShopDealerOrderService shopDealerOrderService;
@Resource
private OrderSettlementTask orderSettlementTask;
@PreAuthorize("hasAuthority('shop:shopDealerOrder:list')") @PreAuthorize("hasAuthority('shop:shopDealerOrder:list')")
@Operation(summary = "分页查询分销商订单记录表") @Operation(summary = "分页查询分销商订单记录表")
@GetMapping("/page") @GetMapping("/page")
@@ -187,4 +189,11 @@ public class ShopDealerOrderController extends BaseController {
return fail(e.getMessage(),null); return fail(e.getMessage(),null);
} }
} }
@Operation(summary = "店、服务商结算任务每天一点每10分钟执行一次结算任务")
@PutMapping("/teamSettlement")
public ApiResult<?> teamSettlement() {
orderSettlementTask.teamSettlement();
return success("success");
}
} }

View File

@@ -0,0 +1,31 @@
package com.gxwebsoft.shop.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 分销订单结算
* @author xm
* @since 2026-05-13
*/
@Data
@Schema(name = "ShopDealerSettlementDto", description = "分销订单结算")
public class ShopDealerSettlementDto {
@Schema(description = "变动类型 1-操作冻结账户余额 2-操作提现账户余额【直接结算】 3-解冻 4-退款")
private Integer type;
@Schema(description = "资金流动类型 (10分销收入 11团队管理津贴收入 12分红收入 13现场推广收入 20提现支出 30转账支出 40转账收入 50佣金解冻 60配送奖励 70佣金退回【退单】)")
private Integer flowType;
@Schema(description = "描述")
private String comments;
@Schema(description = "商城ID")
private Integer tenantId;
@Schema(description = "明细列表")
private List<ShopDealerSettlementItemDto> itemList;
}

View File

@@ -0,0 +1,26 @@
package com.gxwebsoft.shop.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 分销订单退款
* @author xm
* @since 2026-05-13
*/
@Data
@Schema(name = "ShopDealerSettlementItemDto", description = "分销订单退款")
public class ShopDealerSettlementItemDto {
@Schema(description = "订单号")
private String no;
@Schema(description = "分销商用户ID")
private Integer userId;
@Schema(description = "变更金额")
private BigDecimal money;
}

View File

@@ -334,6 +334,12 @@ public class ShopOrder implements Serializable {
@Schema(description = "推广核销佣金") @Schema(description = "推广核销佣金")
private BigDecimal verifyMoney; private BigDecimal verifyMoney;
@Schema(description = "门店、服务商结算标识 0-未结算 1-已结算")
private Integer teamSettlementFlag;
@Schema(description = "分红结算标识 0-未结算 1-已结算")
private Integer dividendSettlementFlag;
@Schema(description = "修改时间") @Schema(description = "修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime; private LocalDateTime updateTime;

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.shop.entity.ShopDealerOrder; import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.param.ShopDealerOrderParam; import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.shop.vo.ShopDealerOrderTaskVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@@ -34,4 +35,11 @@ public interface ShopDealerOrderMapper extends BaseMapper<ShopDealerOrder> {
*/ */
List<ShopDealerOrder> selectListRel(@Param("param") ShopDealerOrderParam param); List<ShopDealerOrder> selectListRel(@Param("param") ShopDealerOrderParam param);
/**
* 获取订单门店/分销商待结算数据
* @param tenantId 租户ID
* @return
*/
List<ShopDealerOrderTaskVO> getDealerOrderList(@Param("tenantId") Integer tenantId);
} }

View File

@@ -89,5 +89,27 @@
<select id="selectListRel" resultType="com.gxwebsoft.shop.entity.ShopDealerOrder"> <select id="selectListRel" resultType="com.gxwebsoft.shop.entity.ShopDealerOrder">
<include refid="selectSql"></include> <include refid="selectSql"></include>
</select> </select>
<select id="getDealerOrderList" resultType="com.gxwebsoft.shop.vo.ShopDealerOrderTaskVO">
SELECT
a.order_id,
b.id as shopDealerOrderId,
b.order_no,
first_dividend_user,
b.first_dividend,
b.first_dividend_flag,
second_dividend_user,
b.second_dividend,
b.second_dividend_flag
FROM
shop_order a
LEFT JOIN shop_dealer_order b ON a.order_no = b.order_no
WHERE
DATE(a.create_time) >= '2026-05-14'
AND a.team_settlement_flag = 0
AND a.pay_status = 1
AND a.order_status = 1
AND a.deleted = 0
AND ((b.first_dividend > 0 AND first_dividend_flag = 0) OR (b.second_dividend > 0 AND second_dividend_flag = 0))
</select>
</mapper> </mapper>

View File

@@ -3,6 +3,7 @@ package com.gxwebsoft.shop.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.dto.ShopDealerRefundDto; import com.gxwebsoft.shop.dto.ShopDealerRefundDto;
import com.gxwebsoft.shop.dto.ShopDealerSettlementDto;
import com.gxwebsoft.shop.dto.ShopDealerUserReduceDto; import com.gxwebsoft.shop.dto.ShopDealerUserReduceDto;
import com.gxwebsoft.shop.entity.ShopDealerUser; import com.gxwebsoft.shop.entity.ShopDealerUser;
import com.gxwebsoft.shop.param.ShopDealerUserParam; import com.gxwebsoft.shop.param.ShopDealerUserParam;
@@ -58,4 +59,12 @@ public interface ShopDealerUserService extends IService<ShopDealerUser> {
* @return * @return
*/ */
Boolean refundOrder(ShopDealerRefundDto refundDto); Boolean refundOrder(ShopDealerRefundDto refundDto);
/**
* 用户资金结算
* @param dto
* @return
*/
Boolean settlementBatch(ShopDealerSettlementDto dto);
} }

View File

@@ -1,5 +1,6 @@
package com.gxwebsoft.shop.service.impl; package com.gxwebsoft.shop.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.common.core.enums.ShopDealerCapitalUpdateEnum; import com.gxwebsoft.common.core.enums.ShopDealerCapitalUpdateEnum;
@@ -11,6 +12,8 @@ import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.mapper.UserMapper; import com.gxwebsoft.common.system.mapper.UserMapper;
import com.gxwebsoft.common.system.redis.OrderNoUtils; import com.gxwebsoft.common.system.redis.OrderNoUtils;
import com.gxwebsoft.shop.dto.ShopDealerRefundDto; import com.gxwebsoft.shop.dto.ShopDealerRefundDto;
import com.gxwebsoft.shop.dto.ShopDealerSettlementDto;
import com.gxwebsoft.shop.dto.ShopDealerSettlementItemDto;
import com.gxwebsoft.shop.dto.ShopDealerUserReduceDto; import com.gxwebsoft.shop.dto.ShopDealerUserReduceDto;
import com.gxwebsoft.shop.entity.ShopDealerCapital; import com.gxwebsoft.shop.entity.ShopDealerCapital;
import com.gxwebsoft.shop.entity.ShopDealerUser; import com.gxwebsoft.shop.entity.ShopDealerUser;
@@ -364,6 +367,50 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
} }
} }
@Override
@Transactional
public Boolean settlementBatch(ShopDealerSettlementDto entity) {
if(entity != null && CollectionUtils.isNotEmpty(entity.getItemList())){
LocalDateTime now = LocalDateTime.now();
List<ShopDealerSettlementItemDto> itemList = entity.getItemList();
List<Integer> userIdList = itemList.stream().map(ShopDealerSettlementItemDto::getUserId).distinct().collect(Collectors.toList());
List<ShopDealerUser> shopDealerUserList = baseMapper.selectList(new LambdaQueryWrapper<ShopDealerUser>().select(ShopDealerUser::getId, ShopDealerUser::getUserId,
ShopDealerUser::getMoney, ShopDealerUser::getTotalMoney, ShopDealerUser::getFreezeMoney).in(ShopDealerUser::getUserId, userIdList));
List<ShopDealerUser> updateDealerUserList = new ArrayList<>();
List<ShopDealerCapital> capitalList = new ArrayList<>();
itemList.forEach(item ->{
ShopDealerUser dealerUser = shopDealerUserList.stream().filter(shopDealerUser -> item.getUserId().equals(shopDealerUser.getUserId())).findFirst().orElse(null);
if(dealerUser != null){
dealerUser.setMoney(dealerUser.getMoney().add(item.getMoney()));
dealerUser.setTotalMoney(dealerUser.getTotalMoney().add(item.getMoney()));
dealerUser.setUpdateTime(now);
updateDealerUserList.add(dealerUser);
ShopDealerCapital capital = BeanUtil.toBean(entity, ShopDealerCapital.class);
capital.setNo(item.getNo());
capital.setUserId(item.getUserId());
capital.setMoney(item.getMoney());
capital.setMoneyAfter(dealerUser.getMoney());
capital.setFreezeMoneyAfter(dealerUser.getFreezeMoney());
capital.setCreateTime(now);
capitalList.add(capital);
}
});
if(CollectionUtils.isNotEmpty(updateDealerUserList)){
updateBatchById(updateDealerUserList);
}
if(CollectionUtils.isNotEmpty(capitalList)){
shopDealerCapitalService.saveBatch(capitalList);
}
}
return Boolean.TRUE;
}
public ShopDealerUser getDealerUser(Integer userId){ public ShopDealerUser getDealerUser(Integer userId){
ShopDealerUser shopDealerUser = baseMapper.selectOne(new LambdaQueryWrapper<ShopDealerUser>().eq(ShopDealerUser::getUserId, userId)); ShopDealerUser shopDealerUser = baseMapper.selectOne(new LambdaQueryWrapper<ShopDealerUser>().eq(ShopDealerUser::getUserId, userId));
if(shopDealerUser == null){ if(shopDealerUser == null){

View File

@@ -851,13 +851,6 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
} }
} }
// 测试环境使用1分钱快照优先
if ("dev".equals(active)) {
amount.setTotal(1);
request.setAmount(amount);
snapshot.setTotal(1);
}
Exception last = null; Exception last = null;
String notifyUrlUsed = null; String notifyUrlUsed = null;
for (String notifyUrl : buildNotifyUrlCandidates(order, payment, snapshot)) { for (String notifyUrl : buildNotifyUrlCandidates(order, payment, snapshot)) {

View File

@@ -0,0 +1,166 @@
package com.gxwebsoft.shop.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gxwebsoft.common.core.enums.ShopDealerCapitalUpdateEnum;
import com.gxwebsoft.common.core.enums.ShopDealerTypeEnum;
import com.gxwebsoft.common.system.redis.OrderNoUtils;
import com.gxwebsoft.shop.dto.ShopDealerSettlementDto;
import com.gxwebsoft.shop.dto.ShopDealerSettlementItemDto;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.mapper.ShopDealerOrderMapper;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.service.ShopDealerOrderService;
import com.gxwebsoft.shop.service.ShopDealerUserService;
import com.gxwebsoft.shop.service.ShopOrderService;
import com.gxwebsoft.shop.vo.ShopDealerOrderTaskVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 订单结算任务【门店/服务商结算、总分红结算等】
* @author xm
* @since 2026-05-15
*/
@Slf4j
@Component
@AllArgsConstructor
public class OrderSettlementTask {
private ShopDealerOrderMapper shopDealerOrderMapper;
private ShopDealerOrderService shopDealerOrderService;
private ShopOrderMapper shopOrderMapper;
private ShopOrderService shopOrderService;
private ShopDealerUserService shopDealerUserService;
private OrderNoUtils orderNoUtils;
/**
* 门店、服务商结算任务每天一点每10分钟执行一次结算任务
*/
@Scheduled(cron = "0 0/10 1 * * ?")
@Transactional
public void teamSettlement(){
//1.查询待结算订单信息
List<ShopDealerOrderTaskVO> orderTaskVOList = shopDealerOrderMapper.getDealerOrderList(10584);
if(CollectionUtils.isNotEmpty(orderTaskVOList)){
LocalDateTime now = LocalDateTime.now();
List<Integer> orderIdList = orderTaskVOList.stream().map(ShopDealerOrderTaskVO::getOrderId).distinct().collect(Collectors.toList());
List<Integer> shopDealerIdList = orderTaskVOList.stream().map(ShopDealerOrderTaskVO::getShopDealerOrderId).distinct().collect(Collectors.toList());
//2.查询商品订单信息
List<ShopOrder> shopOrderList = shopOrderMapper.selectList(new LambdaQueryWrapper<ShopOrder>().select(ShopOrder::getOrderId, ShopOrder::getTeamSettlementFlag)
.in(ShopOrder::getOrderId, orderIdList));
//3.查询商品订单分销信息
List<ShopDealerOrder> shopDealerOrderList = shopDealerOrderMapper.selectList(new LambdaQueryWrapper<ShopDealerOrder>().select(ShopDealerOrder::getId, ShopDealerOrder::getOrderNo)
.in(ShopDealerOrder::getId, shopDealerIdList));
//4.结算一级服务商佣金
Map<Integer, List<ShopDealerOrderTaskVO>> firstDealerMap = orderTaskVOList.stream().collect(Collectors.groupingBy(ShopDealerOrderTaskVO::getFirstDividendUser));
List<ShopDealerSettlementItemDto> firstSettlementItemDtoList = new ArrayList<>();
firstDealerMap.forEach((k, value) ->{
List<Integer> orderIds = value.stream().map(ShopDealerOrderTaskVO::getOrderId).distinct().collect(Collectors.toList());
List<Integer> shopDealerOrderIds = value.stream().map(ShopDealerOrderTaskVO::getShopDealerOrderId).distinct().collect(Collectors.toList());
//4.1 标记商品订单为已结算状态
List<ShopOrder> shopOrders = shopOrderList.stream().filter(shopOrder -> orderIds.contains(shopOrder.getOrderId())).collect(Collectors.toList());
shopOrders.forEach(shopOrder -> shopOrder.setTeamSettlementFlag(1));
//4.2 生成分销记录【增加钱包金额】
BigDecimal firstDividendSum = value.stream().map(ShopDealerOrderTaskVO::getFirstDividend).reduce(BigDecimal.ZERO, BigDecimal::add);
ShopDealerSettlementItemDto itemDto = new ShopDealerSettlementItemDto();
String no = orderNoUtils.generate("C");
itemDto.setNo(no);
itemDto.setUserId(k);
itemDto.setMoney(firstDividendSum);
firstSettlementItemDtoList.add(itemDto);
//4.3更新商品分销记录对应的一级服务商佣金为已结算状态
List<ShopDealerOrder> shopDealerOrders = shopDealerOrderList.stream().filter(shopDealerOrder -> shopDealerOrderIds.contains(shopDealerOrder.getId())).collect(Collectors.toList());
shopDealerOrders.forEach(shopDealerOrder -> {
shopDealerOrder.setFirstDividendFlag(1);
shopDealerOrder.setFirstDividendNo(no);
shopDealerOrder.setFirstDividendTime(now);
});
});
//4.4 一级结算【增加钱包金额】
if(CollectionUtils.isNotEmpty(firstSettlementItemDtoList)){
ShopDealerSettlementDto firstSettlementDto = new ShopDealerSettlementDto();
firstSettlementDto.setType(ShopDealerTypeEnum.WITHDRAW_ACCOUNT.getCode());
firstSettlementDto.setFlowType(ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType());
firstSettlementDto.setComments("团队管理津贴(1)");
firstSettlementDto.setTenantId(10584);
firstSettlementDto.setItemList(firstSettlementItemDtoList);
shopDealerUserService.settlementBatch(firstSettlementDto);
}
//5.结算二级服务商佣金
Map<Integer, List<ShopDealerOrderTaskVO>> secondDealerMap = orderTaskVOList.stream().collect(Collectors.groupingBy(ShopDealerOrderTaskVO::getSecondDividendUser));
List<ShopDealerSettlementItemDto> secondSettlementItemDtoList = new ArrayList<>();
secondDealerMap.forEach((k, value) ->{
List<Integer> orderIds = value.stream().map(ShopDealerOrderTaskVO::getOrderId).distinct().collect(Collectors.toList());
List<Integer> shopDealerOrderIds = value.stream().map(ShopDealerOrderTaskVO::getShopDealerOrderId).distinct().collect(Collectors.toList());
//5.1 标记商品订单为已结算状态
List<ShopOrder> shopOrders = shopOrderList.stream().filter(shopOrder -> orderIds.contains(shopOrder.getOrderId())).collect(Collectors.toList());
shopOrders.forEach(shopOrder -> shopOrder.setTeamSettlementFlag(1));
//5.2 生成分销记录【增加钱包金额】
BigDecimal secondDividendSum = value.stream().map(ShopDealerOrderTaskVO::getSecondDividend).reduce(BigDecimal.ZERO, BigDecimal::add);
ShopDealerSettlementItemDto itemDto = new ShopDealerSettlementItemDto();
String no = orderNoUtils.generate("C");
itemDto.setNo(no);
itemDto.setUserId(k);
itemDto.setMoney(secondDividendSum);
secondSettlementItemDtoList.add(itemDto);
//5.3 更新商品分销记录对应的一级服务商佣金为已结算状态
List<ShopDealerOrder> shopDealerOrders = shopDealerOrderList.stream().filter(shopDealerOrder -> shopDealerOrderIds.contains(shopDealerOrder.getId())).collect(Collectors.toList());
shopDealerOrders.forEach(shopDealerOrder -> {
shopDealerOrder.setSecondDividendFlag(1);
shopDealerOrder.setSecondDividendNo(no);
shopDealerOrder.setSecondDividendTime(now);
});
});
//5.4 二级结算【增加钱包金额】
if(CollectionUtils.isNotEmpty(secondSettlementItemDtoList)){
ShopDealerSettlementDto secondSettlementDto = new ShopDealerSettlementDto();
secondSettlementDto.setType(ShopDealerTypeEnum.WITHDRAW_ACCOUNT.getCode());
secondSettlementDto.setFlowType(ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType());
secondSettlementDto.setComments("团队管理津贴(2)");
secondSettlementDto.setTenantId(10584);
secondSettlementDto.setItemList(secondSettlementItemDtoList);
shopDealerUserService.settlementBatch(secondSettlementDto);
}
//6.批量修改订单为已结算状态
if(CollectionUtils.isNotEmpty(shopOrderList)){
shopOrderService.updateBatchById(shopOrderList);
}
//7.批量修改订单分销数据为已结算状态
if(CollectionUtils.isNotEmpty(shopDealerOrderList)){
shopDealerOrderService.updateBatchById(shopDealerOrderList);
}
}
}
}

View File

@@ -0,0 +1,45 @@
package com.gxwebsoft.shop.vo;
import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 订单分销门店/服务商分佣记录
* @author xm
* @since 2026-05-15
*/
@Data
@Schema(description = "订单分销门店/服务商分佣记录")
public class ShopDealerOrderTaskVO {
@Schema(description = "商品订单ID")
private Integer orderId;
@Schema(description = "主键ID")
private Integer shopDealerOrderId;
@Excel(name = "订单编号")
private String orderNo;
@Schema(description = "一级服务商/门店")
private Integer firstDividendUser;
@Schema(description = "一级服务商/门店管理津贴")
private BigDecimal firstDividend;
@Schema(description = "一级服务商/门店结算标识 0-否 1-是")
private Integer firstDividendFlag;
@Schema(description = "二级服务商/门店")
private Integer secondDividendUser;
@Schema(description = "二级服务商/门店管理津贴")
private BigDecimal secondDividend;
@Schema(description = "二级服务商/门店结算标识 0-否 1-是")
private Integer secondDividendFlag;
}