1、优化送水订单同步记录水票订单号业务

2、分销用户分销明细增加结算标识业务
3、增加分销用户个人当日收益数据统计
This commit is contained in:
2026-05-19 16:47:42 +08:00
parent b5d4274d97
commit 52af00170a
11 changed files with 152 additions and 19 deletions

View File

@@ -33,7 +33,6 @@ public class GltTicketOrder implements Serializable {
private Integer userTicketId;
@Schema(description = "关联订单编号")
@TableField(exist = false)
private String orderNo;
@Schema(description = "订单状态")

View File

@@ -177,6 +177,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
}
// 4) 插入 glt_ticket_orderstoreId/addressId/totalNum/buyerRemarks…
gltTicketOrder.setOrderNo(userTicket.getOrderNo());
gltTicketOrder.setUserId(userId);
// 订单基础字段由后端兜底,避免前端误传/恶意传参
gltTicketOrder.setStatus(0);

View File

@@ -486,6 +486,9 @@ public class DealerOrderSettlement10584Task {
ShopDealerRefereeVO dealerRefereeVO = shopDealerRefereeMapper.getDealerIdByUserId(order.getUserId());
if(dealerRefereeVO == null){
return null;
}
if (dealerLevel == 1) {
Integer directUserId = dealerRefereeVO.getDirectUserId();
Integer directUserType = dealerRefereeVO.getDirectUserType();

View File

@@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@@ -66,6 +67,13 @@ public class ShopDealerOrderController extends BaseController {
return success(shopDealerOrderService.getByIdRel(id));
}
@PreAuthorize("hasAuthority('shop:shopDealerOrder:list')")
@Operation(summary = "查询个人今日收益")
@GetMapping("/todayRevenue")
public ApiResult<BigDecimal> todayRevenue() {
return success(shopDealerOrderService.todayRevenue());
}
@PreAuthorize("hasAuthority('shop:shopDealerOrder:save')")
@OperationLog
@Operation(summary = "添加分销商订单记录表")

View File

@@ -77,6 +77,9 @@ public class ShopDealerCapital implements Serializable {
@Schema(description = "结算月份")
private String month;
@Schema(description = "结算标识 0-未结算 1-已结算")
private Integer paymentFlag;
@Schema(description = "商城ID")
private Integer tenantId;

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.shop.vo.ShopDealerOrderTaskVO;
import com.gxwebsoft.shop.vo.ShopDealerOrderTodayRevenueVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -42,4 +43,11 @@ public interface ShopDealerOrderMapper extends BaseMapper<ShopDealerOrder> {
*/
List<ShopDealerOrderTaskVO> getDealerOrderList(@Param("tenantId") Integer tenantId);
/**
* 获取用户当日分佣数据
* @param userId
* @return
*/
List<ShopDealerOrderTodayRevenueVO> getTodayRevenue(@Param("userId") Integer userId);
}

View File

@@ -111,5 +111,24 @@
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>
<select id="getTodayRevenue" resultType="com.gxwebsoft.shop.vo.ShopDealerOrderTodayRevenueVO">
SELECT
a.order_no,
b.order_status,
a.first_user_id,
a.first_money,
a.second_user_id,
a.second_money,
a.first_dividend_user,
a.first_dividend,
a.second_dividend_user,
a.second_dividend
FROM
shop_dealer_order a
LEFT JOIN shop_order b ON a.order_no = b.order_no
WHERE
DATE(a.create_time) = CURRENT_DATE
AND (a.first_user_id = #{userId} OR a.second_user_id = #{userId} OR a.first_dividend_user = #{userId} OR a.second_dividend_user = #{userId})
</select>
</mapper>

View File

@@ -5,6 +5,7 @@ import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -39,6 +40,12 @@ public interface ShopDealerOrderService extends IService<ShopDealerOrder> {
*/
ShopDealerOrder getByIdRel(Integer id);
/**
* 查询门店/服务商本人今日收益
* @return
*/
BigDecimal todayRevenue();
/**
* 手动触发单条订单的佣金解冻(保留与定时任务相同的前置条件检查)
*

View File

@@ -4,25 +4,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.common.core.utils.LoginUserUtil;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.glt.entity.GltTicketOrder;
import com.gxwebsoft.glt.entity.GltTicketTemplate;
import com.gxwebsoft.glt.entity.GltUserTicket;
import com.gxwebsoft.glt.service.GltTicketOrderService;
import com.gxwebsoft.glt.service.GltTicketTemplateService;
import com.gxwebsoft.glt.service.GltUserTicketService;
import com.gxwebsoft.shop.entity.ShopDealerCapital;
import com.gxwebsoft.shop.entity.ShopDealerOrder;
import com.gxwebsoft.shop.entity.ShopDealerUser;
import com.gxwebsoft.shop.entity.ShopGoods;
import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.entity.ShopOrderGoods;
import com.gxwebsoft.shop.entity.*;
import com.gxwebsoft.shop.mapper.ShopDealerOrderMapper;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.shop.service.ShopDealerCapitalService;
import com.gxwebsoft.shop.service.ShopDealerOrderService;
import com.gxwebsoft.shop.param.ShopDealerOrderParam;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.vo.ShopDealerOrderTodayRevenueVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
@@ -32,11 +32,7 @@ import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -105,6 +101,38 @@ public class ShopDealerOrderServiceImpl extends ServiceImpl<ShopDealerOrderMappe
return param.getOne(baseMapper.selectListRel(param));
}
@Override
public BigDecimal todayRevenue() {
BigDecimal todayRevenue = BigDecimal.ZERO;
User loginUser = LoginUserUtil.getLoginUser();
if(loginUser != null){
Integer userId = loginUser.getUserId();
List<ShopDealerOrderTodayRevenueVO> revenueVOList = baseMapper.getTodayRevenue(userId);
if(CollectionUtils.isNotEmpty(revenueVOList)){
for(ShopDealerOrderTodayRevenueVO revenueVO : revenueVOList){
//已取消订单不统计
if(Arrays.asList(2, 6).contains(revenueVO.getOrderStatus())){
continue;
}
if(userId.equals(revenueVO.getFirstUserId()) && revenueVO.getFirstMoney().compareTo(BigDecimal.ZERO) > 0){
todayRevenue = todayRevenue.add(revenueVO.getFirstMoney());
}
if(userId.equals(revenueVO.getSecondUserId()) && revenueVO.getSecondMoney().compareTo(BigDecimal.ZERO) > 0){
todayRevenue = todayRevenue.add(revenueVO.getSecondMoney());
}
if(userId.equals(revenueVO.getFirstDividendUser()) && revenueVO.getFirstDividend().compareTo(BigDecimal.ZERO) > 0){
todayRevenue = todayRevenue.add(revenueVO.getFirstDividend());
}
if(userId.equals(revenueVO.getSecondDividendUser()) && revenueVO.getSecondDividend().compareTo(BigDecimal.ZERO) > 0){
todayRevenue = todayRevenue.add(revenueVO.getSecondDividend());
}
}
}
}
return todayRevenue;
}
// ==================== 手动解冻 ====================
@Override

View File

@@ -104,6 +104,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
log.error("分销账户资金变更明细:" + entity);
ShopDealerTypeEnum typeEnum = entity.getTypeEnum();
ShopDealerCapitalUpdateEnum updateEnum = entity.getUpdateEnum();
LocalDateTime now = LocalDateTime.now();
//2.变动类型为 1-操作冻结账户余额 2-操作提现账户余额【直接结算】是需判断金额值问题
if(ShopDealerTypeEnum.FREEZE_ACCOUNT.equals(typeEnum) || ShopDealerTypeEnum.WITHDRAW_ACCOUNT.equals(typeEnum)){
@@ -152,7 +153,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
dealerCapital.setComments(updateEnum.getDescription());
dealerCapital.setToUserId(entity.getOrderUserId());
dealerCapital.setTenantId(TENANT_ID);
dealerCapital.setCreateTime(LocalDateTime.now());
dealerCapital.setCreateTime(now);
User loginUser = LoginUserUtil.getLoginUser();
if(loginUser != null){
dealerCapital.setCreator(loginUser.getUserId());
@@ -179,8 +180,9 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
dealerCapital.setFreezeMoneyAfter(dealerUser.getFreezeMoney());
dealerCapital.setComments(updateEnum.getDescription());
dealerCapital.setToUserId(entity.getOrderUserId());
dealerCapital.setPaymentFlag(1);
dealerCapital.setTenantId(TENANT_ID);
dealerCapital.setCreateTime(LocalDateTime.now());
dealerCapital.setCreateTime(now);
User loginUser = LoginUserUtil.getLoginUser();
if(loginUser != null){
dealerCapital.setCreator(loginUser.getUserId());
@@ -209,7 +211,8 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
userCapitalMap.forEach((k, value) ->{
//5.4 查询是否存在待解冻订单数据
ShopDealerCapital userCapital = value.stream().filter(capital -> ShopDealerTypeEnum.FREEZE_ACCOUNT.getCode().equals(capital.getType())).findFirst().orElse(null);
ShopDealerCapital userCapital = value.stream().filter(capital -> ShopDealerTypeEnum.FREEZE_ACCOUNT.getCode().equals(capital.getType()) && capital.getPaymentFlag() != null
&& capital.getPaymentFlag() == 0).findFirst().orElse(null);
if(userCapital != null){
//5.5 查询此订单是否已结算
@@ -239,15 +242,21 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
dealerCapital.setMoneyAfter(dealerUser.getMoney());
dealerCapital.setComments(updateEnum.getDescription());
dealerCapital.setToUserId(entity.getOrderUserId());
dealerCapital.setPaymentFlag(1);
dealerCapital.setTenantId(TENANT_ID);
dealerCapital.setCreateTime(LocalDateTime.now());
dealerCapital.setCreateTime(now);
User loginUser = LoginUserUtil.getLoginUser();
if (loginUser != null) {
dealerCapital.setCreator(loginUser.getUserId());
}
shopDealerCapitalMapper.insert(dealerCapital);
userCapital.setPaymentFlag(1);
}
}
//5.6 更新冻结流水为已结算状态
userCapital.setUpdateTime(now);
shopDealerCapitalMapper.updateById(userCapital);
}
});
}else {

View File

@@ -0,0 +1,48 @@
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-19
*/
@Data
@Schema(description = "两级推荐人数据")
public class ShopDealerOrderTodayRevenueVO {
@Schema(name = "订单编号")
private String orderNo;
@Schema(description = "分销商用户id(一级)")
private Integer firstUserId;
@Schema(description = "分销佣金(一级)")
private BigDecimal firstMoney;
@Schema(description = "分销商用户id(二级)")
private Integer secondUserId;
@Schema(description = "分销佣金(二级)")
private BigDecimal secondMoney;
@Schema(description = "一级服务商/门店")
private Integer firstDividendUser;
@Schema(description = "一级服务商/门店管理津贴")
private BigDecimal firstDividend;
@Schema(description = "二级服务商/门店")
private Integer secondDividendUser;
@Schema(description = "二级服务商/门店管理津贴")
private BigDecimal secondDividend;
@Excel(name = "0未使用1已完成2已取消3取消中4退款申请中5退款被拒绝6退款成功7客户端申请退款")
private Integer orderStatus;
}