21 changed files with 1082 additions and 26 deletions
@ -0,0 +1,81 @@ |
|||
package org.dromara.system.domain; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.fhs.core.trans.vo.TransPojo; |
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 套餐对象 im_chat_package |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
@Data |
|||
@TableName("im_chat_package") |
|||
public class ImChatPackageAdmin implements TransPojo { |
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
@TableId(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 套餐名称 |
|||
*/ |
|||
private String packageName; |
|||
|
|||
/** |
|||
* 套餐内容描述 |
|||
*/ |
|||
private String packageContent; |
|||
|
|||
/** |
|||
* 客服数量 |
|||
*/ |
|||
private Long customerServiceNumber; |
|||
|
|||
/** |
|||
* 套餐持续时间(天) |
|||
*/ |
|||
private Long durationDays; |
|||
|
|||
/** |
|||
* 状态:0-禁用 1-启用 |
|||
*/ |
|||
private Long status; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
private Long sortOrder; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
/** |
|||
* 创建者ID |
|||
*/ |
|||
private Long creatorId; |
|||
|
|||
/** |
|||
* 更新者ID |
|||
*/ |
|||
private Long updaterId; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,117 @@ |
|||
package org.dromara.system.domain; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.fhs.core.trans.vo.TransPojo; |
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 用户对象 im_user |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
@Data |
|||
@TableName("im_user") |
|||
public class ImUserAdmin implements TransPojo { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@TableId |
|||
private Long id; |
|||
|
|||
/** |
|||
* 用户名 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 用户昵称 |
|||
*/ |
|||
private String nickName; |
|||
|
|||
/** |
|||
* 用户头像 |
|||
*/ |
|||
private String headImage; |
|||
|
|||
/** |
|||
* 用户头像缩略图 |
|||
*/ |
|||
private String headImageThumb; |
|||
|
|||
/** |
|||
* 密码(明文) |
|||
*/ |
|||
private String password; |
|||
|
|||
/** |
|||
* 性别 0:男 1::女 |
|||
*/ |
|||
private Long sex; |
|||
|
|||
/** |
|||
* 个性签名 |
|||
*/ |
|||
private String signature; |
|||
|
|||
/** |
|||
* 最后登录时间 |
|||
*/ |
|||
private Date lastLoginTime; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long type; |
|||
|
|||
/** |
|||
* 是否被封禁 0:否 1:是 |
|||
*/ |
|||
private Boolean isBanned; |
|||
|
|||
/** |
|||
* 被封禁原因 |
|||
*/ |
|||
private String reason; |
|||
|
|||
/** |
|||
* uuid |
|||
*/ |
|||
private String uuid; |
|||
|
|||
/** |
|||
* 用户类型 1:普通用户 2:客服 |
|||
*/ |
|||
private Integer isCustomer; |
|||
|
|||
private String labelIds; |
|||
|
|||
private String groupIds; |
|||
|
|||
/** |
|||
* 唯一token |
|||
*/ |
|||
private String uniqueToken; |
|||
|
|||
/** |
|||
* 来源地址 |
|||
*/ |
|||
private String sourceUrl; |
|||
|
|||
/** |
|||
* 欢迎语 |
|||
*/ |
|||
private String welcomeMsg; |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,72 @@ |
|||
package org.dromara.system.domain.bo; |
|||
|
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import jakarta.validation.constraints.NotNull; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import org.dromara.common.core.validate.AddGroup; |
|||
import org.dromara.common.core.validate.EditGroup; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
import org.dromara.system.domain.ImChatPackageAdmin; |
|||
|
|||
/** |
|||
* 套餐业务对象 im_chat_package |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@AutoMapper(target = ImChatPackageAdmin.class, reverseConvertGenerate = false) |
|||
public class ImChatPackageAdminBo extends BaseEntity { |
|||
|
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) |
|||
private Long id; |
|||
|
|||
/** |
|||
* 套餐名称 |
|||
*/ |
|||
@NotBlank(message = "套餐名称不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String packageName; |
|||
|
|||
/** |
|||
* 套餐内容描述 |
|||
*/ |
|||
@NotBlank(message = "套餐内容描述不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String packageContent; |
|||
|
|||
/** |
|||
* 客服数量 |
|||
*/ |
|||
@NotNull(message = "客服数量不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long customerServiceNumber; |
|||
|
|||
/** |
|||
* 套餐持续时间(天) |
|||
*/ |
|||
@NotNull(message = "套餐持续时间(天)不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long durationDays; |
|||
|
|||
/** |
|||
* 状态:0-禁用 1-启用 |
|||
*/ |
|||
@NotNull(message = "状态:0-禁用 1-启用不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long status; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
@NotNull(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long sortOrder; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
package org.dromara.system.domain.bo; |
|||
|
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import org.dromara.system.domain.ImUserAdmin; |
|||
|
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 用户业务对象 im_user |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
@Data |
|||
@AutoMapper(target = ImUserAdmin.class, reverseConvertGenerate = false) |
|||
public class ImUserAdminBo { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
private Long id; |
|||
|
|||
/** |
|||
* 用户名 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 用户昵称 |
|||
*/ |
|||
private String nickName; |
|||
|
|||
/** |
|||
* 用户头像 |
|||
*/ |
|||
private String headImage; |
|||
|
|||
/** |
|||
* 用户头像缩略图 |
|||
*/ |
|||
private String headImageThumb; |
|||
|
|||
/** |
|||
* 密码(明文) |
|||
*/ |
|||
private String password; |
|||
|
|||
/** |
|||
* 性别 0:男 1::女 |
|||
*/ |
|||
private Long sex; |
|||
|
|||
/** |
|||
* 个性签名 |
|||
*/ |
|||
private String signature; |
|||
|
|||
/** |
|||
* 最后登录时间 |
|||
*/ |
|||
private Date lastLoginTime; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long type; |
|||
|
|||
/** |
|||
* 是否被封禁 |
|||
*/ |
|||
private Boolean isBanned; |
|||
|
|||
/** |
|||
* 被封禁原因 |
|||
*/ |
|||
private String reason; |
|||
|
|||
/** |
|||
* 用户类型 1:普通用户 2:客服 |
|||
*/ |
|||
private Integer isCustomer; |
|||
|
|||
/** |
|||
* 标签 ID 列表 (逗号分隔) |
|||
*/ |
|||
private String labelIds; |
|||
|
|||
/** |
|||
* 群组 ID 列表 (逗号分隔) |
|||
*/ |
|||
private String groupIds; |
|||
|
|||
/** |
|||
* 欢迎语 |
|||
*/ |
|||
private String welcomeMsg; |
|||
|
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
package org.dromara.system.domain.vo; |
|||
|
|||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import org.dromara.common.excel.annotation.ExcelDictFormat; |
|||
import org.dromara.common.excel.convert.ExcelDictConvert; |
|||
import org.dromara.system.domain.ImChatPackageAdmin; |
|||
|
|||
import java.io.Serial; |
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
|
|||
/** |
|||
* 套餐视图对象 im_chat_package |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
@Data |
|||
@ExcelIgnoreUnannotated |
|||
@AutoMapper(target = ImChatPackageAdmin.class) |
|||
public class ImChatPackageAdminVo implements Serializable { |
|||
|
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private Long id; |
|||
|
|||
/** |
|||
* 套餐名称 |
|||
*/ |
|||
@ExcelProperty(value = "套餐名称") |
|||
private String packageName; |
|||
|
|||
/** |
|||
* 套餐内容描述 |
|||
*/ |
|||
private String packageContent; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
private Long sortOrder; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
/** |
|||
* 客服数量 |
|||
*/ |
|||
@ExcelProperty(value = "客服数量") |
|||
private Long customerServiceNumber; |
|||
|
|||
/** |
|||
* 套餐持续时间(天) |
|||
*/ |
|||
@ExcelProperty(value = "套餐持续时间", converter = ExcelDictConvert.class) |
|||
@ExcelDictFormat(readConverterExp = "天=") |
|||
private Long durationDays; |
|||
|
|||
/** |
|||
* 状态:0-禁用 1-启用 |
|||
*/ |
|||
@ExcelProperty(value = "状态:0-禁用 1-启用", converter = ExcelDictConvert.class) |
|||
@ExcelDictFormat(dictType = "commom_status") |
|||
private Long status; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
@ExcelProperty(value = "创建时间") |
|||
private Date createdTime; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,120 @@ |
|||
package org.dromara.system.domain.vo; |
|||
|
|||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import org.dromara.common.excel.annotation.ExcelDictFormat; |
|||
import org.dromara.common.excel.convert.ExcelDictConvert; |
|||
import org.dromara.system.domain.ImUserAdmin; |
|||
|
|||
import java.util.Date; |
|||
|
|||
|
|||
/** |
|||
* 用户视图对象 im_user |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
@Data |
|||
@ExcelIgnoreUnannotated |
|||
@AutoMapper(target = ImUserAdmin.class) |
|||
public class ImUserAdminVo { |
|||
|
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@ExcelProperty(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 用户名 |
|||
*/ |
|||
@ExcelProperty(value = "用户名") |
|||
private String userName; |
|||
|
|||
/** |
|||
* 用户昵称 |
|||
*/ |
|||
@ExcelProperty(value = "用户昵称") |
|||
private String nickName; |
|||
|
|||
/** |
|||
* 用户头像 |
|||
*/ |
|||
@ExcelProperty(value = "用户头像") |
|||
private String headImage; |
|||
|
|||
|
|||
/** |
|||
* 用户头像缩略图 |
|||
*/ |
|||
private String headImageThumb; |
|||
|
|||
/** |
|||
* 密码(明文) |
|||
*/ |
|||
private String password; |
|||
|
|||
/** |
|||
* 性别 0:男 1::女 |
|||
*/ |
|||
@ExcelProperty(value = "性别", converter = ExcelDictConvert.class) |
|||
@ExcelDictFormat(readConverterExp = "0=男,1=女") |
|||
private Long sex; |
|||
|
|||
/** |
|||
* 个性签名 |
|||
*/ |
|||
private String signature; |
|||
|
|||
/** |
|||
* 最后登录时间 |
|||
*/ |
|||
@ExcelProperty(value = "最后登录时间") |
|||
private Date lastLoginTime; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
@ExcelProperty(value = "创建时间") |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 类型 |
|||
*/ |
|||
private Long type; |
|||
|
|||
/** |
|||
* 是否被封禁 0:否 1:是 |
|||
*/ |
|||
@ExcelProperty(value = "是否被封禁", converter = ExcelDictConvert.class) |
|||
@ExcelDictFormat(readConverterExp = "false=否,true=是") |
|||
private Boolean isBanned; |
|||
|
|||
/** |
|||
* 被封禁原因 |
|||
*/ |
|||
@ExcelProperty(value = "被封禁原因") |
|||
private String reason; |
|||
|
|||
private String labelIds; |
|||
|
|||
|
|||
private String groupIds; |
|||
|
|||
/** |
|||
* 来源地址 |
|||
*/ |
|||
private String sourceUrl; |
|||
|
|||
/** |
|||
* 欢迎语 |
|||
*/ |
|||
private String welcomeMsg; |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
package org.dromara.system.mapper; |
|||
|
|||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
|||
import org.dromara.system.domain.ImChatPackageAdmin; |
|||
import org.dromara.system.domain.vo.ImChatPackageAdminVo; |
|||
|
|||
/** |
|||
* 套餐Mapper接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
public interface ImChatPackageAdminMapper extends BaseMapperPlus<ImChatPackageAdmin, ImChatPackageAdminVo> { |
|||
|
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
package org.dromara.system.mapper; |
|||
|
|||
import org.apache.ibatis.annotations.Param; |
|||
import org.apache.ibatis.annotations.Select; |
|||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
|||
import org.dromara.system.domain.ImUserAdmin; |
|||
import org.dromara.system.domain.vo.ImUserAdminVo; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 用户Mapper接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
public interface ImUserAdminMapper extends BaseMapperPlus<ImUserAdmin, ImUserAdminVo> { |
|||
|
|||
/** |
|||
* 按天统计用户注册数量 |
|||
* @param days 统计天数 |
|||
* @return 统计结果 |
|||
*/ |
|||
@Select("SELECT DATE(created_time) as date, COUNT(*) as count " + |
|||
"FROM im_user " + |
|||
"WHERE created_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY) " + |
|||
"AND is_customer = 1 " + |
|||
"GROUP BY DATE(created_time) " + |
|||
"ORDER BY date ASC") |
|||
List<Map<String, Object>> getDailyRegistrationCount(@Param("days") Integer days); |
|||
|
|||
/** |
|||
* 按天统计用户注册数量(带uniqueToken条件) |
|||
* @param days 统计天数 |
|||
* @param unique_token 唯一标识 |
|||
* @return 统计结果 |
|||
*/ |
|||
@Select("SELECT DATE(created_time) as date, COUNT(*) as count " + |
|||
"FROM im_user " + |
|||
"WHERE is_customer = 1 AND unique_token = #{unique_token}" + |
|||
"AND created_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY)" + |
|||
"GROUP BY DATE(created_time) " + |
|||
"ORDER BY date ASC") |
|||
List<Map<String, Object>> getDailyRegistrationCountByToken(@Param("days") Integer days, @Param("unique_token") String unique_token); |
|||
|
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
package org.dromara.system.service; |
|||
|
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.system.domain.bo.ImChatPackageAdminBo; |
|||
import org.dromara.system.domain.vo.ImChatPackageAdminVo; |
|||
|
|||
|
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 套餐Service接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
public interface IImChatPackageAdminService { |
|||
|
|||
/** |
|||
* 查询套餐 |
|||
* |
|||
* @param id 主键 |
|||
* @return 套餐 |
|||
*/ |
|||
ImChatPackageAdminVo queryById(Long id); |
|||
|
|||
/** |
|||
* 分页查询套餐列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 套餐分页列表 |
|||
*/ |
|||
TableDataInfo<ImChatPackageAdminVo> queryPageList(ImChatPackageAdminBo bo, PageQuery pageQuery); |
|||
|
|||
/** |
|||
* 查询符合条件的套餐列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 套餐列表 |
|||
*/ |
|||
List<ImChatPackageAdminVo> queryList(ImChatPackageAdminBo bo); |
|||
|
|||
/** |
|||
* 新增套餐 |
|||
* |
|||
* @param bo 套餐 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
Boolean insertByBo(ImChatPackageAdminBo bo); |
|||
|
|||
/** |
|||
* 修改套餐 |
|||
* |
|||
* @param bo 套餐 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
Boolean updateByBo(ImChatPackageAdminBo bo); |
|||
|
|||
/** |
|||
* 校验并批量删除套餐信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); |
|||
|
|||
/** |
|||
* 分配套餐给代理 |
|||
* |
|||
* @param agentId 代理ID |
|||
* @param packageId 套餐ID |
|||
* @return 是否分配成功 |
|||
*/ |
|||
Boolean allocatePackages(Long agentId, Long packageId); |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
package org.dromara.system.service; |
|||
|
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
|
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 用户Service接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
public interface IImUserAdminService { |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,202 @@ |
|||
package org.dromara.system.service.impl; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import com.baomidou.dynamic.datasource.annotation.DS; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.dromara.common.core.utils.MapstructUtils; |
|||
import org.dromara.common.core.utils.StringUtils; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.common.satoken.utils.LoginHelper; |
|||
import org.dromara.system.domain.ImAgentAdmin; |
|||
import org.dromara.system.domain.ImChatPackageAdmin; |
|||
import org.dromara.system.domain.bo.ImChatPackageAdminBo; |
|||
import org.dromara.system.domain.vo.ImChatPackageAdminVo; |
|||
import org.dromara.system.mapper.ImAgentAdminMapper; |
|||
import org.dromara.system.mapper.ImChatPackageAdminMapper; |
|||
import org.dromara.system.service.IImChatPackageAdminService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import static org.dromara.system.controller.constant.ImConstant.DS_IM_PLATFORM; |
|||
|
|||
/** |
|||
* 套餐Service业务层处理 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-09 |
|||
*/ |
|||
@DS(DS_IM_PLATFORM) |
|||
@RequiredArgsConstructor |
|||
@Service |
|||
public class ImChatPackageAdminServiceImpl implements IImChatPackageAdminService { |
|||
|
|||
private final ImChatPackageAdminMapper baseMapper; |
|||
|
|||
private final ImAgentAdminMapper imAgentAdminMapper; |
|||
|
|||
/** |
|||
* 查询套餐 |
|||
* |
|||
* @param id 主键 |
|||
* @return 套餐 |
|||
*/ |
|||
@Override |
|||
public ImChatPackageAdminVo queryById(Long id){ |
|||
return baseMapper.selectVoById(id); |
|||
} |
|||
|
|||
/** |
|||
* 分页查询套餐列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 套餐分页列表 |
|||
*/ |
|||
@Override |
|||
public TableDataInfo<ImChatPackageAdminVo> queryPageList(ImChatPackageAdminBo bo, PageQuery pageQuery) { |
|||
LambdaQueryWrapper<ImChatPackageAdmin> lqw = buildQueryWrapper(bo); |
|||
Page<ImChatPackageAdminVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
|||
return TableDataInfo.build(result); |
|||
} |
|||
|
|||
/** |
|||
* 查询符合条件的套餐列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 套餐列表 |
|||
*/ |
|||
@Override |
|||
public List<ImChatPackageAdminVo> queryList(ImChatPackageAdminBo bo) { |
|||
LambdaQueryWrapper<ImChatPackageAdmin> lqw = buildQueryWrapper(bo); |
|||
return baseMapper.selectVoList(lqw); |
|||
} |
|||
|
|||
private LambdaQueryWrapper<ImChatPackageAdmin> buildQueryWrapper(ImChatPackageAdminBo bo) { |
|||
Map<String, Object> params = bo.getParams(); |
|||
LambdaQueryWrapper<ImChatPackageAdmin> lqw = Wrappers.lambdaQuery(); |
|||
lqw.like(StringUtils.isNotBlank(bo.getPackageName()), ImChatPackageAdmin::getPackageName, bo.getPackageName()); |
|||
lqw.eq(StringUtils.isNotBlank(bo.getPackageContent()), ImChatPackageAdmin::getPackageContent, bo.getPackageContent()); |
|||
lqw.eq(bo.getStatus() != null, ImChatPackageAdmin::getStatus, bo.getStatus()); |
|||
return lqw; |
|||
} |
|||
|
|||
/** |
|||
* 新增套餐 |
|||
* |
|||
* @param bo 套餐 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
@Override |
|||
public Boolean insertByBo(ImChatPackageAdminBo bo) { |
|||
ImChatPackageAdmin add = MapstructUtils.convert(bo, ImChatPackageAdmin.class); |
|||
validEntityBeforeSave(add); |
|||
|
|||
if (add != null) { |
|||
add.setCreatedTime(DateUtil.parse(DateUtil.now())); |
|||
add.setUpdatedTime(DateUtil.parse(DateUtil.now())); |
|||
add.setCreatorId(LoginHelper.getUserId()); |
|||
add.setUpdaterId(LoginHelper.getUserId()); |
|||
} |
|||
|
|||
return baseMapper.insert(add) > 0; |
|||
} |
|||
|
|||
/** |
|||
* 修改套餐 |
|||
* |
|||
* @param bo 套餐 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
@Override |
|||
public Boolean updateByBo(ImChatPackageAdminBo bo) { |
|||
ImChatPackageAdmin update = MapstructUtils.convert(bo, ImChatPackageAdmin.class); |
|||
validEntityBeforeSave(update); |
|||
if (update != null) { |
|||
update.setUpdatedTime(DateUtil.parse(DateUtil.now())); |
|||
update.setUpdaterId(LoginHelper.getUserId()); |
|||
} |
|||
return baseMapper.updateById(update) > 0; |
|||
} |
|||
|
|||
/** |
|||
* 保存前的数据校验 |
|||
*/ |
|||
private void validEntityBeforeSave(ImChatPackageAdmin entity){ |
|||
//TODO 做一些数据校验,如唯一约束
|
|||
} |
|||
|
|||
/** |
|||
* 校验并批量删除套餐信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
@Override |
|||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { |
|||
if(isValid){ |
|||
//TODO 做一些业务上的校验,判断是否需要校验
|
|||
} |
|||
return baseMapper.deleteByIds(ids) > 0; |
|||
} |
|||
|
|||
/** |
|||
* 分配套餐给代理 |
|||
* |
|||
* @param agentId 代理ID |
|||
* @param packageId 套餐ID |
|||
* @return 是否分配成功 |
|||
*/ |
|||
@Override |
|||
public Boolean allocatePackages(Long agentId, Long packageId) { |
|||
// 根据agentId查找ImAgent实体类
|
|||
ImAgentAdmin agent = imAgentAdminMapper.selectById(agentId); |
|||
if (agent == null) { |
|||
throw new RuntimeException("代理不存在"); |
|||
} |
|||
|
|||
// 获取packageExpireTime,如果为null或空则赋值为当前时间
|
|||
Date packageExpireTime = agent.getPackageExpireTime(); |
|||
if (packageExpireTime == null) { |
|||
packageExpireTime = DateUtil.date(); |
|||
} |
|||
|
|||
// 根据packageId查找ImChatPackageAdmin实体类
|
|||
ImChatPackageAdmin chatPackage = baseMapper.selectById(packageId); |
|||
if (chatPackage == null) { |
|||
throw new RuntimeException("套餐不存在"); |
|||
} |
|||
|
|||
// 获取durationDays
|
|||
Long durationDays = chatPackage.getDurationDays(); |
|||
if (durationDays == null) { |
|||
throw new RuntimeException("套餐天数不能为空"); |
|||
} |
|||
|
|||
//如果代理套餐已过期,先赋值为今天
|
|||
if(DateUtil.compare(packageExpireTime, DateUtil.date()) < 0){ |
|||
packageExpireTime = DateUtil.date(); |
|||
} |
|||
|
|||
// 将durationDays加到packageExpireTime上
|
|||
packageExpireTime = DateUtil.offsetDay(packageExpireTime, durationDays.intValue() + 1); |
|||
|
|||
// 格式化为该日期加上一天后的零点零分零秒
|
|||
packageExpireTime = DateUtil.beginOfDay(packageExpireTime); |
|||
|
|||
// 更新ImAgent的packageExpireTime
|
|||
agent.setPackageExpireTime(packageExpireTime); |
|||
agent.setPackageId(packageId); |
|||
agent.setMaxCustomer(chatPackage.getCustomerServiceNumber()); |
|||
|
|||
return imAgentAdminMapper.updateById(agent) > 0; |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
package org.dromara.system.service.impl; |
|||
|
|||
|
|||
import com.baomidou.dynamic.datasource.annotation.DS; |
|||
|
|||
import lombok.RequiredArgsConstructor; |
|||
|
|||
import org.dromara.system.controller.constant.ImConstant; |
|||
import org.dromara.system.mapper.ImUserAdminMapper; |
|||
import org.dromara.system.service.IImUserAdminService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
|
|||
|
|||
/** |
|||
* 用户Service业务层处理 |
|||
* |
|||
* @author Blue |
|||
* @date 2024-12-22 |
|||
*/ |
|||
@DS(ImConstant.DS_IM_PLATFORM) |
|||
@RequiredArgsConstructor |
|||
@Service |
|||
public class ImUserAdminServiceImpl implements IImUserAdminService { |
|||
|
|||
private final ImUserAdminMapper baseMapper; |
|||
|
|||
} |
|||
@ -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="org.dromara.system.mapper.ImChatPackageAdminMapper"> |
|||
|
|||
</mapper> |
|||
Loading…
Reference in new issue