分销后台相关接口 现金充值 记录明细

This commit is contained in:
张松
2025-10-27 10:31:09 +08:00
parent 6c3f5e22d7
commit ac002cb1dd
27 changed files with 1406 additions and 582 deletions

View File

@@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.MkDistributionAmountFlow;
/**
* 分销运营余额扣减记录 映射层。
*
* @author ww
* @since 2025-10-27
*/
public interface MkDistributionAmountFlowMapper extends BaseMapper<MkDistributionAmountFlow> {
}

View File

@@ -0,0 +1,78 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.account.entity.ShopUser;
import com.czg.account.entity.UserInfo;
import com.czg.constant.TableValueConstant;
import com.czg.market.vo.MkDistributionAmountFlowVO;
import com.czg.order.entity.OrderInfo;
import com.czg.utils.MyQueryWrapper;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.MkDistributionAmountFlow;
import com.czg.market.service.MkDistributionAmountFlowService;
import com.czg.service.market.mapper.MkDistributionAmountFlowMapper;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* 分销运营余额扣减记录 服务层实现。
*
* @author ww
* @since 2025-10-27
*/
@Service
public class MkDistributionAmountFlowServiceImpl extends ServiceImpl<MkDistributionAmountFlowMapper, MkDistributionAmountFlow> implements MkDistributionAmountFlowService{
@Override
public Map<String, Object> pageInfo(Long shopId, String type, String key) {
QueryWrapper queryWrapper = new MyQueryWrapper()
.selectAll(MkDistributionAmountFlow.class)
.leftJoin(OrderInfo.class).on(OrderInfo::getId, MkDistributionAmountFlow::getSourceId)
.leftJoin(ShopUser.class).on(ShopUser::getId, OrderInfo::getUserId)
.eq(MkDistributionAmountFlow::getShopId, shopId)
.select(OrderInfo::getOrderNo);
if (StrUtil.isNotBlank(type)) {
queryWrapper.eq(MkDistributionAmountFlow::getType, type);
}
if (StrUtil.isNotBlank(key)) {
queryWrapper.and(and -> {
and.or(or -> {
or.like(OrderInfo::getOrderNo, key);
});
and.or(or -> {
or.like(ShopUser::getNickName, key);
});
and.or(or -> {
or.like(ShopUser::getPhone, key);
});
});
}
Page<MkDistributionAmountFlowVO> pageInfo = pageAs(PageUtil.buildPage(), queryWrapper, MkDistributionAmountFlowVO.class);
Map<String, Object> map = BeanUtil.beanToMap(pageInfo);
map.put("totalRecharge", getOne(new QueryWrapper().eq(MkDistributionAmountFlow::getShopId, shopId)
.in(MkDistributionAmountFlow::getType, TableValueConstant.DistributionAmountFlow.Type.MANUAL_RECHARGE.getCode(), TableValueConstant.DistributionAmountFlow.Type.SELF_RECHARGE.getCode())
.select("sum(change_amount)")));
map.put("totalSub", getOne(new QueryWrapper().eq(MkDistributionAmountFlow::getShopId, shopId)
.in(MkDistributionAmountFlow::getType, TableValueConstant.DistributionAmountFlow.Type.SUB.getCode(), TableValueConstant.DistributionAmountFlow.Type.MANUAL_SUB.getCode())
.select("sum(change_amount)")));
return map;
}
public static void main(String[] args) {
QueryWrapper queryWrapper = new MyQueryWrapper()
.selectAll(MkDistributionAmountFlow.class)
.leftJoin(OrderInfo.class).on(OrderInfo::getId, MkDistributionAmountFlow::getSourceId)
.leftJoin(ShopUser.class).on(ShopUser::getId, OrderInfo::getUserId)
.select(OrderInfo::getOrderNo);
queryWrapper.and(and -> {
});
System.out.println(queryWrapper.toSQL());
}
}

View File

@@ -1,18 +1,38 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import com.czg.account.entity.ShopInfo;
import com.czg.account.service.ShopInfoService;
import com.czg.constant.TableValueConstant;
import com.czg.exception.CzgException;
import com.czg.market.dto.MkDistributionConfigDTO;
import com.czg.market.entity.MkDistributionAmountFlow;
import com.czg.market.service.MkDistributionAmountFlowService;
import com.czg.order.dto.MkDistributionPayDTO;
import com.czg.market.entity.MkDistributionLevelConfig;
import com.czg.market.service.MkDistributionLevelConfigService;
import com.czg.market.vo.MkDistributionConfigVO;
import com.czg.order.entity.OrderPayment;
import com.czg.order.service.OrderPaymentService;
import com.czg.sa.StpKit;
import com.czg.system.service.WxService;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.MkDistributionConfig;
import com.czg.market.service.MkDistributionConfigService;
import com.czg.service.market.mapper.MkDistributionConfigMapper;
import jakarta.annotation.Resource;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Map;
/**
* 分销配置 服务层实现。
*
@@ -20,18 +40,30 @@ import org.springframework.stereotype.Service;
* @since 2025-10-25
*/
@Service
@CacheConfig(cacheNames = "distributionConfig")
public class MkDistributionConfigServiceImpl extends ServiceImpl<MkDistributionConfigMapper, MkDistributionConfig> implements MkDistributionConfigService{
@Resource
private MkDistributionLevelConfigService levelConfigService;
@Resource
private MkDistributionAmountFlowService distributionAmountFlowService;
@DubboReference
private OrderPaymentService orderPaymentService;
@DubboReference
private ShopInfoService shopInfoService;
@DubboReference
private WxService wxService;
@Override
public MkDistributionConfigVO detail(Long mainShopId) {
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, mainShopId));
@Cacheable(key = "#shopId")
public MkDistributionConfigVO detail(Long shopId) {
Long mainIdByShopId = shopInfoService.getMainIdByShopId(shopId);
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getShopId, shopId));
if (config == null) {
config = new MkDistributionConfig().setMainShopId(mainShopId);
config = new MkDistributionConfig().setMainShopId(shopId).setMainShopId(mainIdByShopId);
save(config);
config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, mainShopId));
config = getOne(new QueryWrapper().eq(MkDistributionConfig::getShopId, shopId));
}
MkDistributionConfigVO configVO = BeanUtil.copyProperties(config, MkDistributionConfigVO.class);
@@ -40,14 +72,46 @@ public class MkDistributionConfigServiceImpl extends ServiceImpl<MkDistributionC
}
@Override
@CacheEvict(key = "#shopId")
public Boolean edit(Long shopId, MkDistributionConfigDTO dto) {
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, shopId));
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getShopId, shopId));
BeanUtil.copyProperties(dto, config);
if (dto.getLevelConfigList() != null) {
levelConfigService.updateByShopId(dto.getLevelConfigList(), config.getMainShopId(), config.getId());
levelConfigService.updateByShopId(dto.getLevelConfigList(), config.getShopId(), config.getId());
}
return updateById(config);
}
@Override
public Map<String, Object> pay(long userId, MkDistributionPayDTO payDTO) {
MkDistributionConfigVO detail = detail(payDTO.getShopId());
AssertUtil.isTrue(detail.getIsEnable() != 1, "分销未开启");
if (!TableValueConstant.DistributionConfig.OpenType.PAY.getCode().equals(detail.getOpenType())) {
throw new CzgException("当前未开启购买分销配置");
}
OrderPayment orderPayment = new OrderPayment().setShopId(payDTO.getShopId()).setSourceId(userId)
.setPayType("distribution").setOrderNo(payDTO.getPlatformType() + IdUtil.getSnowflakeNextId()).setAmount(detail.getPayAmount());
orderPaymentService.save(orderPayment);
return Map.of();
}
@Override
public Boolean cashPayOrder(long adminId, MkDistributionPayDTO payParam) {
ShopInfo shopInfo = shopInfoService.getById(payParam.getShopId());
AssertUtil.isNull(shopInfo, "店铺不存在");
BigDecimal amount = shopInfoService.updateAmount(shopInfo.getId(), payParam.getAmount());
Long mainShopId = shopInfoService.getMainIdByShopId(shopInfo.getId());
shopInfoService.updateAmount(shopInfo.getId(), payParam.getAmount());
distributionAmountFlowService.save(new MkDistributionAmountFlow()
.setType(payParam.getAmount().compareTo(BigDecimal.ZERO) < 0 ? TableValueConstant.DistributionAmountFlow.Type.MANUAL_SUB.getCode() :
TableValueConstant.DistributionAmountFlow.Type.MANUAL_RECHARGE.getCode())
.setMainShopId(mainShopId).setShopId(shopInfo.getId()).setAmount(amount).setChangeAmount(payParam.getAmount())
.setRemark(payParam.getRemark()).setOpAccount(StpKit.USER.getAccount()));
return null;
}
}

View File

@@ -21,7 +21,7 @@ import java.util.List;
public class MkDistributionLevelConfigServiceImpl extends ServiceImpl<MkDistributionLevelConfigMapper, MkDistributionLevelConfig> implements MkDistributionLevelConfigService{
@Override
public void updateByShopId(List<MkDistributionLevelConfigDTO> levelConfigList, Long mainShopId, Long id) {
public void updateByShopId(List<MkDistributionLevelConfigDTO> levelConfigList, Long shopId, Long id) {
if (levelConfigList.isEmpty()) {
remove(new QueryWrapper().eq(MkDistributionLevelConfig::getDistributionConfigId, id));
return;
@@ -30,7 +30,7 @@ public class MkDistributionLevelConfigServiceImpl extends ServiceImpl<MkDistribu
levelConfigList.forEach(item -> {
MkDistributionLevelConfig config = BeanUtil.copyProperties(item, MkDistributionLevelConfig.class);
config.setDistributionConfigId(id);
config.setMainShopId(mainShopId);
config.setShopId(shopId);
saveOrUpdate(config);
});
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.MkDistributionAmountFlowMapper">
</mapper>