diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImAgentController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImAgentController.java index 6652a1f..c78b859 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImAgentController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImAgentController.java @@ -1,6 +1,7 @@ package org.dromara.im.controller; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; @@ -102,4 +103,15 @@ public class ImAgentController extends BaseController { @PathVariable Long[] ids) { return toAjax(imAgentService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 获取所有代理的ID和名称列表 + * + * @return 代理ID和名称的Map列表 + */ + @SaCheckPermission("im:chatPackage:list") + @PostMapping("/getAllAgentNameList") + public R>> getAllAgentNameList() { + return R.ok(imAgentService.getAllAgentNameList()); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImChatPackageController.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImChatPackageController.java index a6d2d6e..c2f4507 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImChatPackageController.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/controller/ImChatPackageController.java @@ -2,10 +2,12 @@ package org.dromara.im.controller; import java.util.List; +import cn.hutool.json.JSONObject; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.im.domain.ImAgent; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -102,4 +104,22 @@ public class ImChatPackageController extends BaseController { @PathVariable Long[] ids) { return toAjax(imChatPackageService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 分配套餐 + */ + @SaCheckPermission("im:chatPackage:allocatePackages") + @Log(title = "套餐", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping() + public R allocatePackages(@RequestBody JSONObject data) { + Long packageId = data.getLong("packageId"); + Long agentId = data.getLong("agentId"); + + if(packageId == null || agentId == null) { + return R.fail("参数错误"); + } + + return toAjax(imChatPackageService.allocatePackages(agentId,packageId)); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImAgentService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImAgentService.java index 0fa1f3b..0ced1b4 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImAgentService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImAgentService.java @@ -7,6 +7,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 代理关联Service接口 @@ -72,4 +73,10 @@ public interface IImAgentService { * @return 唯一token */ String getTokenByUserId(); + + /** + * 获取所有代理的ID和名称列表 + * @return 代理ID和名称的Map列表 + */ + List> getAllAgentNameList(); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImChatPackageService.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImChatPackageService.java index aa9af72..cec521c 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImChatPackageService.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/IImChatPackageService.java @@ -65,4 +65,13 @@ public interface IImChatPackageService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 分配套餐给代理 + * + * @param agentId 代理ID + * @param packageId 套餐ID + * @return 是否分配成功 + */ + Boolean allocatePackages(Long agentId, Long packageId); } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImAgentServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImAgentServiceImpl.java index 4783df7..693cdff 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImAgentServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImAgentServiceImpl.java @@ -23,8 +23,11 @@ import org.dromara.im.mapper.ImAgentMapper; import org.dromara.im.service.IImAgentService; import java.time.Duration; +import java.util.HashMap; import java.util.List; import java.util.Collection; +import java.util.Map; +import java.util.stream.Collectors; import static org.dromara.im.constant.ImConstant.AGENT_TOKEN_KEY; @@ -177,5 +180,14 @@ public class ImAgentServiceImpl implements IImAgentService { return token; } - + @Override + public List> getAllAgentNameList() { + List agents = baseMapper.selectList(); + return agents.stream().map(agent -> { + Map map = new HashMap<>(); + map.put("id", agent.getId()); + map.put("agentName", agent.getAgentName()); + return map; + }).collect(Collectors.toList()); + } } diff --git a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImChatPackageServiceImpl.java b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImChatPackageServiceImpl.java index 4e3e733..b973436 100644 --- a/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImChatPackageServiceImpl.java +++ b/im-admin/ruoyi-im/src/main/java/org/dromara/im/service/impl/ImChatPackageServiceImpl.java @@ -16,9 +16,12 @@ import org.springframework.stereotype.Service; import org.dromara.im.domain.bo.ImChatPackageBo; import org.dromara.im.domain.vo.ImChatPackageVo; import org.dromara.im.domain.ImChatPackage; +import org.dromara.im.domain.ImAgent; import org.dromara.im.mapper.ImChatPackageMapper; +import org.dromara.im.mapper.ImAgentMapper; import org.dromara.im.service.IImChatPackageService; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -36,6 +39,8 @@ public class ImChatPackageServiceImpl implements IImChatPackageService { private final ImChatPackageMapper baseMapper; + private final ImAgentMapper imAgentMapper; + /** * 查询套餐 * @@ -141,4 +146,49 @@ public class ImChatPackageServiceImpl implements IImChatPackageService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 分配套餐给代理 + * + * @param agentId 代理ID + * @param packageId 套餐ID + * @return 是否分配成功 + */ + @Override + public Boolean allocatePackages(Long agentId, Long packageId) { + // 根据agentId查找ImAgent实体类 + ImAgent agent = imAgentMapper.selectById(agentId); + if (agent == null) { + throw new RuntimeException("代理不存在"); + } + + // 获取packageExpireTime,如果为null或空则赋值为当前时间 + Date packageExpireTime = agent.getPackageExpireTime(); + if (packageExpireTime == null) { + packageExpireTime = DateUtil.date(); + } + + // 根据packageId查找ImChatPackage实体类 + ImChatPackage chatPackage = baseMapper.selectById(packageId); + if (chatPackage == null) { + throw new RuntimeException("套餐不存在"); + } + + // 获取durationDays + Long durationDays = chatPackage.getDurationDays(); + if (durationDays == null) { + throw new RuntimeException("套餐天数不能为空"); + } + + // 将durationDays加到packageExpireTime上 + packageExpireTime = DateUtil.offsetDay(packageExpireTime, durationDays.intValue()); + + // 格式化为该日期的零点零分零秒 + packageExpireTime = DateUtil.beginOfDay(packageExpireTime); + + // 更新ImAgent的packageExpireTime + agent.setPackageExpireTime(packageExpireTime); + + return imAgentMapper.updateById(agent) > 0; + } }