Merge remote-tracking branch 'origin/test' into test

This commit is contained in:
wangw 2025-10-27 09:24:07 +08:00
commit d685d437aa
15 changed files with 588 additions and 1 deletions

View File

@ -0,0 +1,61 @@
package com.czg.controller.admin;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaCheckMainShop;
import com.czg.constant.TableValueConstant;
import com.czg.market.dto.MkDistributionConfigDTO;
import com.czg.market.dto.MkEnableConfigDTO;
import com.czg.market.dto.MkRedemptionConfigDTO;
import com.czg.market.service.MkDistributionConfigService;
import com.czg.market.service.MkEnableConfigService;
import com.czg.market.service.MkRedemptionConfigService;
import com.czg.market.vo.MkDistributionConfigVO;
import com.czg.market.vo.MkEnableConfigVO;
import com.czg.market.vo.MkRedemptionCodeVO;
import com.czg.market.vo.MkRedemptionConfigVO;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.validator.group.UpdateGroup;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.groups.Default;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* 分销相关
* @author Administrator
*/
@RestController
@RequestMapping("/admin/distribution")
public class DistributionController {
@Resource
private MkDistributionConfigService configService;
/**
* 配置信息详情
*/
@SaAdminCheckPermission(value = "distribution:detail", name = "分销配置")
@GetMapping
public CzgResult<MkDistributionConfigVO> detail() {
return CzgResult.success(configService.detail(StpKit.USER.getMainShopId()));
}
/**
* 配置信息修改
*
* @return 是否成功
*/
@SaAdminCheckPermission(value = "distribution:edit", name = "分销修改")
@SaCheckMainShop
@PutMapping
public CzgResult<Boolean> edit(@Validated({UpdateGroup.class, Default.class}) @RequestBody MkDistributionConfigDTO dto) {
return CzgResult.success(configService.edit(StpKit.USER.getShopId(), dto));
}
}

View File

@ -0,0 +1,91 @@
package com.czg.market.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.alibaba.fastjson2.annotation.JSONField;
import jakarta.validation.Valid;
import jakarta.validation.constraints.*;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 分销配置 实体类
*
* @author ww
* @since 2025-10-25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class MkDistributionConfigDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 是否开启
*/
// @NotNull(message = "是否开启不能为空")
private Integer isEnable;
/**
* pay购买开通 auto自动开通 manual手动开通
*/
// @NotBlank(message = "开通方式不能为空")
private String openType;
/**
* 邀请条件人数
*/
@Min(value = 1, message = "邀请人数不能小于1")
private Integer inviteCount;
/**
* 被邀请人消费有效 0 1
*/
private Integer inviteConsume;
/**
* 购买开通金额
*/
@DecimalMin(value = "0.01", message = "购买开通金额不能小于0.01")
private BigDecimal payAmount;
/**
* 每人奖励次数
*/
// @NotNull(message = "每人奖励次数不能为空")
@Min(value = 1, message = "每人奖励次数不能小于1")
private Integer rewardCount;
/**
* n天结算
*/
// @NotNull(message = "结算天数不能为空")
@Min(value = 0, message = "结算天数不能小于0")
private Integer settlementDay;
/**
* not_upgrade不自动升级 invite邀请有效人数 cost消费金额
*/
// @NotBlank(message = "升级条件不能为空")
private String upgradeType;
/**
* 未开通页面富文本
*/
private String notActivatedPage;
@Valid
private List<MkDistributionLevelConfigDTO> levelConfigList;
}

View File

@ -0,0 +1,61 @@
package com.czg.market.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.alibaba.fastjson2.annotation.JSONField;
import jakarta.validation.constraints.*;
import lombok.experimental.Accessors;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 分销员等级配置 实体类
*
* @author ww
* @since 2025-10-25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class MkDistributionLevelConfigDTO implements Serializable {
private Long id;
/**
* 名称
*/
@NotBlank(message = "名称不能为空")
private String name;
/**
* 有效人数
*/
@Min(value = 1, message = "有效人数不能小于1")
private Integer inviteCount;
/**
* 消费金额
*/
@DecimalMin(value = "0.01", message = "消费金额不能小于0.01")
private BigDecimal costAmount;
/**
* 一级分销比例
*/
@NotNull(message = "一级分销比例不为空")
private BigDecimal levelOneCommission;
/**
* 二级分销比例
*/
private BigDecimal levelTwoCommission;
}

View File

@ -0,0 +1,101 @@
package com.czg.market.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* 分销配置 实体类
*
* @author ww
* @since 2025-10-25
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("mk_distribution_config")
@Accessors(chain = true)
public class MkDistributionConfig implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 是否开启
*/
private Integer isEnable;
/**
* pay购买开通 auto自动开通 manual手动开通
*/
private String openType;
/**
* 邀请条件人数
*/
private Integer inviteCount;
/**
* 被邀请人消费有效 0 1
*/
private Integer inviteConsume;
/**
* 购买开通金额
*/
private BigDecimal payAmount;
/**
* 每人奖励次数
*/
private Integer rewardCount;
/**
* n天结算
*/
private Integer settlementDay;
/**
* not_upgrade不自动升级 invite邀请有效人数 cost消费金额
*/
private String upgradeType;
/**
* 未开通页面富文本
*/
private String notActivatedPage;
/**
* 创建时间
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
/**
* 修改时间
*/
@Column(onInsertValue = "now()", onUpdateValue = "now()")
private LocalDateTime updateTime;
/**
* 主店id
*/
private Long mainShopId;
}

View File

@ -0,0 +1,84 @@
package com.czg.market.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 分销员等级配置 实体类
*
* @author ww
* @since 2025-10-25
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("mk_distribution_level_config")
public class MkDistributionLevelConfig implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 分销配置表id
*/
private Long distributionConfigId;
/**
* 主店id
*/
private Long mainShopId;
/**
* 名称
*/
private String name;
/**
* 有效人数
*/
private Integer inviteCount;
/**
* 消费金额
*/
private BigDecimal costAmount;
/**
* 一级分销比例
*/
private BigDecimal levelOneCommission;
/**
* 二级分销比例
*/
private BigDecimal levelTwoCommission;
/**
* 创建时间
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
/**
* 修改时间
*/
@Column(onInsertValue = "now()", onUpdateValue = "now()")
private LocalDateTime updateTime;
}

View File

@ -0,0 +1,19 @@
package com.czg.market.service;
import com.czg.market.dto.MkDistributionConfigDTO;
import com.czg.market.vo.MkDistributionConfigVO;
import com.czg.market.vo.MkRedemptionConfigVO;
import com.mybatisflex.core.service.IService;
import com.czg.market.entity.MkDistributionConfig;
/**
* 分销配置 服务层
*
* @author ww
* @since 2025-10-25
*/
public interface MkDistributionConfigService extends IService<MkDistributionConfig> {
MkDistributionConfigVO detail(Long mainShopId);
Boolean edit(Long shopId, MkDistributionConfigDTO dto);
}

View File

@ -0,0 +1,19 @@
package com.czg.market.service;
import com.czg.market.dto.MkDistributionLevelConfigDTO;
import com.mybatisflex.core.service.IService;
import com.czg.market.entity.MkDistributionLevelConfig;
import jakarta.validation.Valid;
import java.util.List;
/**
* 分销员等级配置 服务层
*
* @author ww
* @since 2025-10-25
*/
public interface MkDistributionLevelConfigService extends IService<MkDistributionLevelConfig> {
void updateByShopId(@Valid List<MkDistributionLevelConfigDTO> levelConfigList, Long mainShopId, Long id);
}

View File

@ -0,0 +1,19 @@
package com.czg.market.vo;
import com.czg.market.entity.MkDistributionConfig;
import com.czg.market.entity.MkDistributionLevelConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* @author Administrator
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class MkDistributionConfigVO extends MkDistributionConfig implements Serializable {
private List<MkDistributionLevelConfig> levelConfigList;
}

View File

@ -188,7 +188,7 @@ public class UShopUserServiceImpl implements UShopUserService {
@Override
public ShopUserDetailDTO getInfo(Long shopId, long userId) {
Long mainId = shopInfoService.getMainIdByShopId(shopId);
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getMainShopId, mainId).eq(ShopUser::getUserId, userId));
ShopUser shopUser = shopUserService.getShopUserInfo(mainId, shopId);
UserInfo userInfo = userInfoService.getById(userId);
if (userInfo == null) {
throw new ApiNotPrintException("用户信息不存在");

View File

@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.MkDistributionConfig;
/**
* 分销配置 映射层
*
* @author ww
* @since 2025-10-25
*/
public interface MkDistributionConfigMapper extends BaseMapper<MkDistributionConfig> {
}

View File

@ -0,0 +1,14 @@
package com.czg.service.market.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.market.entity.MkDistributionLevelConfig;
/**
* 分销员等级配置 映射层
*
* @author ww
* @since 2025-10-25
*/
public interface MkDistributionLevelConfigMapper extends BaseMapper<MkDistributionLevelConfig> {
}

View File

@ -0,0 +1,53 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.czg.market.dto.MkDistributionConfigDTO;
import com.czg.market.entity.MkDistributionLevelConfig;
import com.czg.market.service.MkDistributionLevelConfigService;
import com.czg.market.vo.MkDistributionConfigVO;
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.springframework.stereotype.Service;
/**
* 分销配置 服务层实现
*
* @author ww
* @since 2025-10-25
*/
@Service
public class MkDistributionConfigServiceImpl extends ServiceImpl<MkDistributionConfigMapper, MkDistributionConfig> implements MkDistributionConfigService{
@Resource
private MkDistributionLevelConfigService levelConfigService;
@Override
public MkDistributionConfigVO detail(Long mainShopId) {
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, mainShopId));
if (config == null) {
config = new MkDistributionConfig().setMainShopId(mainShopId);
save(config);
config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, mainShopId));
}
MkDistributionConfigVO configVO = BeanUtil.copyProperties(config, MkDistributionConfigVO.class);
configVO.setLevelConfigList(levelConfigService.list(new QueryWrapper().eq(MkDistributionLevelConfig::getDistributionConfigId, config.getId())));
return configVO;
}
@Override
public Boolean edit(Long shopId, MkDistributionConfigDTO dto) {
MkDistributionConfig config = getOne(new QueryWrapper().eq(MkDistributionConfig::getMainShopId, shopId));
BeanUtil.copyProperties(dto, config);
if (dto.getLevelConfigList() != null) {
levelConfigService.updateByShopId(dto.getLevelConfigList(), config.getMainShopId(), config.getId());
}
return updateById(config);
}
}

View File

@ -0,0 +1,37 @@
package com.czg.service.market.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.czg.market.dto.MkDistributionLevelConfigDTO;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.market.entity.MkDistributionLevelConfig;
import com.czg.market.service.MkDistributionLevelConfigService;
import com.czg.service.market.mapper.MkDistributionLevelConfigMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 分销员等级配置 服务层实现
*
* @author ww
* @since 2025-10-25
*/
@Service
public class MkDistributionLevelConfigServiceImpl extends ServiceImpl<MkDistributionLevelConfigMapper, MkDistributionLevelConfig> implements MkDistributionLevelConfigService{
@Override
public void updateByShopId(List<MkDistributionLevelConfigDTO> levelConfigList, Long mainShopId, Long id) {
if (levelConfigList.isEmpty()) {
remove(new QueryWrapper().eq(MkDistributionLevelConfig::getDistributionConfigId, id));
return;
}
levelConfigList.forEach(item -> {
MkDistributionLevelConfig config = BeanUtil.copyProperties(item, MkDistributionLevelConfig.class);
config.setDistributionConfigId(id);
config.setMainShopId(mainShopId);
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.MkDistributionConfigMapper">
</mapper>

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.MkDistributionLevelConfigMapper">
</mapper>