feat: 调整知识库模块

This commit is contained in:
ageerle
2025-04-09 17:41:29 +08:00
parent be6d027cad
commit 3be9005f95
424 changed files with 1584 additions and 10005 deletions

View File

@@ -1,16 +0,0 @@
package org.ruoyi.system.builder;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public abstract class AbstractBuilder {
protected final Logger logger = LoggerFactory.getLogger(getClass());
public abstract WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage, WxCpService service);
}

View File

@@ -1,25 +0,0 @@
package org.ruoyi.system.builder;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutImageMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public class ImageBuilder extends AbstractBuilder {
@Override
public WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage,
WxCpService service) {
WxCpXmlOutImageMessage m = WxCpXmlOutMessage.IMAGE().mediaId(content)
.fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.build();
return m;
}
}

View File

@@ -1,22 +0,0 @@
package org.ruoyi.system.builder;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTextMessage;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public class TextBuilder extends AbstractBuilder {
@Override
public WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage,
WxCpService service) {
WxCpXmlOutTextMessage m = WxCpXmlOutMessage.TEXT().content(content)
.fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.build();
return m;
}
}

View File

@@ -1,31 +0,0 @@
package org.ruoyi.system.cofing;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* gpt配置
*
* @author ashinnotfound
* @date 2023/03/04
*/
@Data
@Component
@ConfigurationProperties("gpt")
public class GptConfig {
private String baseUrl;
private String model;
private Integer maxToken;
private Double temperature;
private List<String> basicPrompt;
private List<String> apiKey;
private Long ofSeconds;
private String imageQuality;
private String imageStyle;
private String audioModel;
private String audioVoice;
private Double audioSpeed;
}

View File

@@ -1,49 +0,0 @@
package org.ruoyi.system.cofing;
import jakarta.annotation.PostConstruct;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.utils.OkHttpUtil;
import org.ruoyi.system.domain.bo.SysModelBo;
import org.ruoyi.system.domain.vo.SysModelVo;
import org.ruoyi.system.service.ISysModelService;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@RequiredArgsConstructor
public class OkHttpConfig {
private final ISysModelService sysModelService;
private final Map<String, OkHttpUtil> okHttpUtilMap = new HashMap<>();
@Getter
private String generate;
@PostConstruct
public void init() {
initializeOkHttpUtil("suno");
initializeOkHttpUtil("luma");
initializeOkHttpUtil("ppt");
}
private void initializeOkHttpUtil(String modelName) {
SysModelBo sysModelBo = new SysModelBo();
sysModelBo.setModelName(modelName);
List<SysModelVo> sysModelList = sysModelService.queryList(sysModelBo);
if (!sysModelList.isEmpty()) {
SysModelVo model = sysModelList.get(0);
OkHttpUtil okHttpUtil = new OkHttpUtil();
okHttpUtil.setApiHost(model.getApiHost());
okHttpUtil.setApiKey(model.getApiKey());
generate = String.valueOf(model.getModelPrice());
okHttpUtilMap.put(modelName, okHttpUtil);
}
}
public OkHttpUtil getOkHttpUtil(String modelName) {
return okHttpUtilMap.get(modelName);
}
}

View File

@@ -1,21 +0,0 @@
package org.ruoyi.system.cofing;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* qq配置
*
* @author ashinnotfound
* @date 2023/03/04
*/
@Data
@Component
@ConfigurationProperties("qq")
public class QqConfig {
private Boolean enable;
private Long account;
private Boolean acceptNewFriend;
private Boolean acceptNewGroup;
}

View File

@@ -1,130 +0,0 @@
package org.ruoyi.system.cofing;
import com.google.common.collect.Maps;
import jakarta.annotation.PostConstruct;
import lombok.val;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import me.chanjar.weixin.cp.constant.WxCpConsts;
import me.chanjar.weixin.cp.message.WxCpMessageRouter;
import org.ruoyi.system.handler.wxcp.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import me.chanjar.weixin.cp.api.WxCpService;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 单实例配置
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Configuration
@EnableConfigurationProperties(WxCpProperties.class)
public class WxCpConfiguration {
private LogHandler logHandler;
private NullHandler nullHandler;
private LocationHandler locationHandler;
private MenuHandler menuHandler;
private MsgHandler msgHandler;
private UnsubscribeHandler unsubscribeHandler;
private SubscribeHandler subscribeHandler;
private WxCpProperties properties;
private static Map<Integer, WxCpMessageRouter> routers = Maps.newHashMap();
private static Map<Integer, WxCpService> cpServices = Maps.newHashMap();
@Autowired
public WxCpConfiguration(LogHandler logHandler, NullHandler nullHandler, LocationHandler locationHandler,
MenuHandler menuHandler, MsgHandler msgHandler, UnsubscribeHandler unsubscribeHandler,
SubscribeHandler subscribeHandler, WxCpProperties properties) {
this.logHandler = logHandler;
this.nullHandler = nullHandler;
this.locationHandler = locationHandler;
this.menuHandler = menuHandler;
this.msgHandler = msgHandler;
this.unsubscribeHandler = unsubscribeHandler;
this.subscribeHandler = subscribeHandler;
this.properties = properties;
}
public static Map<Integer, WxCpMessageRouter> getRouters() {
return routers;
}
public static WxCpService getCpService(Integer agentId) {
return cpServices.get(agentId);
}
@PostConstruct
public void initServices() {
cpServices = this.properties.getAppConfigs().stream().map(a -> {
val configStorage = new WxCpDefaultConfigImpl();
configStorage.setCorpId(this.properties.getCorpId());
configStorage.setAgentId(a.getAgentId());
configStorage.setCorpSecret(a.getSecret());
configStorage.setToken(a.getToken());
configStorage.setAesKey(a.getAesKey());
val service = new WxCpServiceImpl();
service.setWxCpConfigStorage(configStorage);
routers.put(a.getAgentId(), this.newRouter(service));
return service;
}).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentId(), a -> a));
}
private WxCpMessageRouter newRouter(WxCpService wxCpService) {
final val newRouter = new WxCpMessageRouter(wxCpService);
// 记录所有事件的日志 (异步执行)
newRouter.rule().handler(this.logHandler).next();
// 自定义菜单事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.CLICK).handler(this.menuHandler).end();
// 点击菜单链接事件(这里使用了一个空的处理器,可以根据自己需要进行扩展)
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.VIEW).handler(this.nullHandler).end();
// 关注事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE).handler(this.subscribeHandler)
.end();
// 取消关注事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(this.unsubscribeHandler).end();
// 上报地理位置事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.LOCATION).handler(this.locationHandler)
.end();
// 接收地理位置消息
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION)
.handler(this.locationHandler).end();
// 扫码事件(这里使用了一个空的处理器,可以根据自己需要进行扩展)
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SCAN).handler(this.nullHandler).end();
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxCpConsts.EventType.CHANGE_CONTACT).handler(new ContactChangeHandler()).end();
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxCpConsts.EventType.ENTER_AGENT).handler(new EnterAgentHandler()).end();
// 默认
newRouter.rule().async(false).handler(this.msgHandler).end();
return newRouter;
}
}

View File

@@ -1,48 +0,0 @@
package org.ruoyi.system.cofing;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Data
@ConfigurationProperties(prefix = "wechat.cp")
public class WxCpProperties {
/**
* 设置企业微信的corpId
*/
private String corpId;
private List<AppConfig> appConfigs;
@Getter
@Setter
public static class AppConfig {
/**
* 设置企业微信应用的AgentId
*/
private Integer agentId;
/**
* 设置企业微信应用的Secret
*/
private String secret;
/**
* 设置企业微信应用的token
*/
private String token;
/**
* 设置企业微信应用的EncodingAESKey
*/
private String aesKey;
}
}

View File

@@ -1,132 +0,0 @@
package org.ruoyi.system.cofing;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.error.WxRuntimeException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Admin
*/
@Slf4j
@Configuration
@EnableConfigurationProperties(WxMaProperties.class)
public class WxMaConfiguration {
private final WxMaProperties properties;
@Autowired
public WxMaConfiguration(WxMaProperties properties) {
this.properties = properties;
}
@Bean
public WxMaService wxMaService() {
List<WxMaProperties.Config> configs = this.properties.getConfigs();
if (configs == null) {
throw new WxRuntimeException("大哥拜托先看下项目首页的说明readme文件添加下相关配置注意别配错了");
}
WxMaService maService = new WxMaServiceImpl();
maService.setMultiConfigs(
configs.stream()
.map(a -> {
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
// WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool());
// 使用上面的配置时需要同时引入jedis-lock的依赖否则会报类无法找到的异常
config.setAppid(a.getAppid());
config.setSecret(a.getSecret());
config.setToken(a.getToken());
config.setAesKey(a.getAesKey());
config.setMsgDataFormat(a.getMsgDataFormat());
return config;
}).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o)));
return maService;
}
@Bean
public WxMaMessageRouter wxMaMessageRouter(WxMaService wxMaService) {
final WxMaMessageRouter router = new WxMaMessageRouter(wxMaService);
router
.rule().handler(logHandler).next()
.rule().async(false).content("订阅消息").handler(subscribeMsgHandler).end()
.rule().async(false).content("文本").handler(textHandler).end()
.rule().async(false).content("图片").handler(picHandler).end()
.rule().async(false).content("二维码").handler(qrcodeHandler).end();
return router;
}
private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> {
service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder()
.templateId("此处更换为自己的模板id")
.data(Lists.newArrayList(
new WxMaSubscribeMessage.MsgData("keyword1", "339208499")))
.toUser(wxMessage.getFromUser())
.build());
return null;
};
private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到消息:" + wxMessage.toString());
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> {
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
try {
WxMediaUploadResult uploadResult = service.getMediaService()
.uploadMedia("image", "png",
ClassLoader.getSystemResourceAsStream("tmp.png"));
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
try {
final File file = service.getQrcodeService().createQrcode("123", 430);
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
}

View File

@@ -1,52 +0,0 @@
package org.ruoyi.system.cofing;
/**
* 微信小程序属性配置类
*
* @author: wangle
* @date: 2023/5/18
*/
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Data
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMaProperties {
private List<Config> configs;
@Data
public static class Config {
/**
* 设置微信小程序的appid
*/
private String appid;
/**
* 设置微信小程序的Secret
*/
private String secret;
/**
* 设置微信小程序消息服务器配置的token
*/
private String token;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式XML或者JSON
*/
private String msgDataFormat;
}
}

View File

@@ -1,129 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.service.ConfigService;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 对话配置信息
*
* @author Lion Li
* @date 2024-04-13
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/chat/config")
public class ChatConfigController extends BaseController {
private final IChatConfigService chatConfigService;
private final ConfigService configService;
/**
* 查询配置信息列表
*/
@GetMapping("/list")
@SaCheckPermission("system:config:list")
public R<List<ChatConfigVo>> list(ChatConfigBo bo) {
return R.ok(chatConfigService.queryList(bo));
}
/**
* 获取对话配置信详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:config:list")
@GetMapping("/{id}")
public R<ChatConfigVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatConfigService.queryById(id));
}
/**
* 根据参数键名查询系统参数值
*
* @param configKey 参数Key
*/
@SaCheckPermission("system:config:list")
@GetMapping(value = "/configKey/{configKey}")
public R<String> getConfigKey(@PathVariable String configKey) {
return R.ok(configService.getConfigValue("sys",configKey));
}
/**
* 查询版权信息
*
*/
@GetMapping(value = "/configKey/copyright")
public R<String> getConfigKeyCopyright() {
return R.ok(configService.getConfigValue("sys","copyright"));
}
/**
* 查询logoImage
*
*/
@GetMapping(value = "/configKey/logoImage")
public R<String> getConfigKeyLogoImage() {
return R.ok(configService.getConfigValue("sys","logoImage"));
}
/**
* 查询系统参数
*
*/
@SaCheckPermission("system:config:list")
@GetMapping(value = "/sysConfigKey")
public R<List<ChatConfigVo>> getSysConfigKey() {
return R.ok(chatConfigService.getSysConfigValue("sys"));
}
/**
* 新增对话配置信息
*/
@SaCheckPermission("system:config:add")
@PostMapping("/add")
public R<Void> add(@RequestBody List<ChatConfigBo> boList) {
for (ChatConfigBo chatConfigBo : boList) {
if(chatConfigBo.getId() == null){
chatConfigService.insertByBo(chatConfigBo);
}else {
chatConfigService.updateByBo(chatConfigBo);
}
}
return toAjax(true);
}
/**
* 修改对话配置信息
*/
@SaCheckPermission("system:config:edit")
@PutMapping("/edit")
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatConfigBo bo) {
return toAjax(chatConfigService.updateByBo(bo));
}
/**
* 删除对话配置信息
*
* @param ids 主键串
*/
@SaCheckPermission("system:config:edit")
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatConfigService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,102 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* gpts管理
*
* @author Lion Li
* @date 2024-07-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/gpts")
public class ChatGptsController extends BaseController {
private final IChatGptsService chatGptsService;
/**
* 查询gpts管理列表
*/
@GetMapping("/list")
public TableDataInfo<ChatGptsVo> list(ChatGptsBo bo, PageQuery pageQuery) {
return chatGptsService.queryPageList(bo, pageQuery);
}
/**
* 导出gpts管理列表
*/
@SaCheckPermission("system:gpts:export")
@Log(title = "gpts管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ChatGptsBo bo, HttpServletResponse response) {
List<ChatGptsVo> list = chatGptsService.queryList(bo);
ExcelUtil.exportExcel(list, "gpts管理", ChatGptsVo.class, response);
}
/**
* 获取gpts管理详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:gpts:query")
@GetMapping("/{id}")
public R<ChatGptsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatGptsService.queryById(id));
}
/**
* 新增gpts管理
*/
@SaCheckPermission("system:gpts:add")
@Log(title = "gpts管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatGptsBo bo) {
return toAjax(chatGptsService.insertByBo(bo));
}
/**
* 修改gpts管理
*/
@SaCheckPermission("system:gpts:edit")
@Log(title = "gpts管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatGptsBo bo) {
return toAjax(chatGptsService.updateByBo(bo));
}
/**
* 删除gpts管理
*
* @param ids 主键串
*/
@SaCheckPermission("system:gpts:remove")
@Log(title = "gpts管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatGptsService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,117 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 聊天消息
*
* @author Lion Li
* @date 2024-04-16
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/message")
public class ChatMessageController extends BaseController {
private final IChatMessageService chatMessageService;
/**
* 查询聊天消息列表
*/
@SaCheckPermission("system:message:list")
@GetMapping("/list")
public TableDataInfo<ChatMessageVo> list(ChatMessageBo bo, PageQuery pageQuery) {
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
return chatMessageService.queryPageList(bo, pageQuery);
}
/**
* 查询我的聊天消息列表
*/
@GetMapping("/listByUser")
public R<TableDataInfo<ChatMessageVo>> listByUser(ChatMessageBo bo, PageQuery pageQuery) {
bo.setUserId(LoginHelper.getUserId());
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
return R.ok(chatMessageService.queryPageList(bo, pageQuery));
}
/**
* 导出聊天消息列表
*/
@SaCheckPermission("system:message:export")
@Log(title = "聊天消息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ChatMessageBo bo, HttpServletResponse response) {
List<ChatMessageVo> list = chatMessageService.queryList(bo);
ExcelUtil.exportExcel(list, "聊天消息", ChatMessageVo.class, response);
}
/**
* 获取聊天消息详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:message:query")
@GetMapping("/{id}")
public R<ChatMessageVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatMessageService.queryById(id));
}
/**
* 新增聊天消息
*/
@SaCheckPermission("system:message:add")
@Log(title = "聊天消息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatMessageBo bo) {
return toAjax(chatMessageService.insertByBo(bo));
}
/**
* 修改聊天消息
*/
@SaCheckPermission("system:message:edit")
@Log(title = "聊天消息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatMessageBo bo) {
return toAjax(chatMessageService.updateByBo(bo));
}
/**
* 删除聊天消息
*
* @param ids 主键串
*/
@SaCheckPermission("system:message:remove")
@Log(title = "聊天消息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatMessageService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,102 +0,0 @@
package org.ruoyi.system.controller.system;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
/**
* 插件管理
*
* @author ageerle
* @date 2025-03-30
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/plugin")
public class ChatPluginController extends BaseController {
private final IChatPluginService chatPluginService;
/**
* 查询插件管理列表
*/
@SaCheckPermission("system:plugin:list")
@GetMapping("/list")
public TableDataInfo<ChatPluginVo> list(ChatPluginBo bo, PageQuery pageQuery) {
return chatPluginService.queryPageList(bo, pageQuery);
}
/**
* 导出插件管理列表
*/
@SaCheckPermission("system:plugin:export")
@Log(title = "插件管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ChatPluginBo bo, HttpServletResponse response) {
List<ChatPluginVo> list = chatPluginService.queryList(bo);
ExcelUtil.exportExcel(list, "插件管理", ChatPluginVo.class, response);
}
/**
* 获取插件管理详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:plugin:query")
@GetMapping("/{id}")
public R<ChatPluginVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatPluginService.queryById(id));
}
/**
* 新增插件管理
*/
@SaCheckPermission("system:plugin:add")
@Log(title = "插件管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatPluginBo bo) {
return toAjax(chatPluginService.insertByBo(bo));
}
/**
* 修改插件管理
*/
@SaCheckPermission("system:plugin:edit")
@Log(title = "插件管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatPluginBo bo) {
return toAjax(chatPluginService.updateByBo(bo));
}
/**
* 删除插件管理
*
* @param ids 主键串
*/
@SaCheckPermission("system:plugin:remove")
@Log(title = "插件管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatPluginService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,38 +0,0 @@
package org.ruoyi.system.controller.system;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 应用商店
*
* @author Lion Li
* @date 2024-03-19
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/store")
public class ChatStoreController extends BaseController {
private final IChatAppStoreService appStoreService;
/**
* 应用商店
*/
@GetMapping("/appList")
public R<List<ChatAppStoreVo>> appList(ChatAppStoreBo bo) {
return R.ok(appStoreService.queryList(bo));
}
/**
* 收藏应用
*/
@PostMapping("/copyApp")
public R<String> copyApp() {
return R.ok();
}
}

View File

@@ -1,103 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 访客管理
*
* @author Lion Li
* @date 2024-07-14
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/visitorUsage")
public class ChatVisitorUsageController extends BaseController {
private final IChatVisitorUsageService chatVisitorUsageService;
/**
* 查询访客管理列表
*/
@SaCheckPermission("system:visitorUsage:list")
@GetMapping("/list")
public TableDataInfo<ChatVisitorUsageVo> list(ChatVisitorUsageBo bo, PageQuery pageQuery) {
return chatVisitorUsageService.queryPageList(bo, pageQuery);
}
/**
* 导出访客管理列表
*/
@SaCheckPermission("system:visitorUsage:export")
@Log(title = "访客管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ChatVisitorUsageBo bo, HttpServletResponse response) {
List<ChatVisitorUsageVo> list = chatVisitorUsageService.queryList(bo);
ExcelUtil.exportExcel(list, "访客管理", ChatVisitorUsageVo.class, response);
}
/**
* 获取访客管理详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:visitorUsage:query")
@GetMapping("/{id}")
public R<ChatVisitorUsageVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatVisitorUsageService.queryById(id));
}
/**
* 新增访客管理
*/
@SaCheckPermission("system:visitorUsage:add")
@Log(title = "访客管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatVisitorUsageBo bo) {
return toAjax(chatVisitorUsageService.insertByBo(bo));
}
/**
* 修改访客管理
*/
@SaCheckPermission("system:visitorUsage:edit")
@Log(title = "访客管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatVisitorUsageBo bo) {
return toAjax(chatVisitorUsageService.updateByBo(bo));
}
/**
* 删除访客管理
*
* @param ids 主键串
*/
@SaCheckPermission("system:visitorUsage:remove")
@Log(title = "访客管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatVisitorUsageService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,120 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.common.wechat.web.utils.UUIDShortUtil;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户兑换记录
*
* @author Lion Li
* @date 2024-05-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/voucher")
public class ChatVoucherController extends BaseController {
private final IChatVoucherService chatVoucherService;
/**
* 查询用户兑换记录列表
*/
@SaCheckPermission("system:voucher:list")
@GetMapping("/list")
public TableDataInfo<ChatVoucherVo> list(ChatVoucherBo bo, PageQuery pageQuery) {
return chatVoucherService.queryPageList(bo, pageQuery);
}
/**
* 导出用户兑换记录列表
*/
@SaCheckPermission("system:voucher:export")
@Log(title = "用户兑换记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ChatVoucherBo bo, HttpServletResponse response) {
List<ChatVoucherVo> list = chatVoucherService.queryList(bo);
ExcelUtil.exportExcel(list, "用户兑换记录", ChatVoucherVo.class, response);
}
/**
* 获取用户兑换记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:voucher:query")
@GetMapping("/{id}")
public R<ChatVoucherVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(chatVoucherService.queryById(id));
}
/**
* 新增用户兑换记录
*/
@SaCheckPermission("system:voucher:add")
@Log(title = "用户兑换记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatVoucherBo bo) {
bo.setCode(UUIDShortUtil.generateShortUuid());
return toAjax(chatVoucherService.insertByBo(bo));
}
/**
* 兑换卡密
*
* @param bo 卡密信息
* @return 是否兑换成功
*/
@PostMapping("/redeem")
public R<String> redeem(@RequestBody ChatVoucherBo bo) {
if(chatVoucherService.redeem(bo)){
return R.ok("兑换成功!");
}else {
return R.fail("兑换失败,请联系管理员!");
}
}
/**
* 修改用户兑换记录
*/
@SaCheckPermission("system:voucher:edit")
@Log(title = "用户兑换记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatVoucherBo bo) {
return toAjax(chatVoucherService.updateByBo(bo));
}
/**
* 删除用户兑换记录
*
* @param ids 主键串
*/
@SaCheckPermission("system:voucher:remove")
@Log(title = "用户兑换记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(chatVoucherService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,184 +0,0 @@
//package org.ruoyi.system.controller.system;
//
//import cn.dev33.satoken.stp.StpUtil;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import jakarta.validation.Valid;
//import jakarta.validation.constraints.NotEmpty;
//import jakarta.validation.constraints.NotNull;
//import lombok.RequiredArgsConstructor;
//import org.ruoyi.common.chat.domain.request.ChatRequest;
//import org.ruoyi.common.chat.entity.chat.Message;
//import org.ruoyi.common.core.domain.R;
//import org.ruoyi.common.core.validate.AddGroup;
//import org.ruoyi.common.excel.utils.ExcelUtil;
//import org.ruoyi.common.log.annotation.Log;
//import org.ruoyi.common.log.enums.BusinessType;
//import org.ruoyi.common.mybatis.core.page.PageQuery;
//import org.ruoyi.common.mybatis.core.page.TableDataInfo;
//import org.ruoyi.common.satoken.utils.LoginHelper;
//import org.ruoyi.common.web.core.BaseController;
//import org.ruoyi.knowledge.chain.vectorstore.VectorStore;
//import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo;
//import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo;
//import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo;
//import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest;
//import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo;
//import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo;
//import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo;
//import org.ruoyi.knowledge.service.EmbeddingService;
//import org.ruoyi.knowledge.service.IKnowledgeAttachService;
//import org.ruoyi.knowledge.service.IKnowledgeFragmentService;
//import org.ruoyi.knowledge.service.IKnowledgeInfoService;
//import org.ruoyi.system.service.ISseService;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
//
//import java.util.List;
//
//
///**
// * 知识库
// *
// * @author Lion Li
// * @date 2024-10-21
// */
//@Validated
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/knowledge")
//public class KnowledgeController extends BaseController {
//
// private final IKnowledgeInfoService knowledgeInfoService;
//
// private final VectorStore vectorStore;
//
// private final IKnowledgeAttachService attachService;
//
// private final IKnowledgeFragmentService fragmentService;
//
// private final EmbeddingService embeddingService;
//
// private final ISseService sseService;
//
// /**
// * 知识库对话
// */
// @PostMapping("/send")
// public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) {
// List<Message> messages = chatRequest.getMessages();
// // 获取知识库信息
// Message message = messages.get(messages.size() - 1);
// StringBuilder sb = new StringBuilder(message.getContent().toString());
// List<String> nearestList;
// List<Double> queryVector = embeddingService.getQueryVector(message.getContent().toString(), chatRequest.getKid());
// nearestList = vectorStore.nearest(queryVector, chatRequest.getKid());
// for (String prompt : nearestList) {
// sb.append("\n####").append(prompt);
// }
// sb.append( (nearestList.size() > 0 ? "\n\n注意回答问题时须严格根据我给你的系统上下文内容原文进行回答请不要自己发挥,回答时保持原来文本的段落层级" : ""));
// message.setContent(sb.toString());
// return sseService.sseChat(chatRequest, request);
// }
//
// /**
// * 根据用户信息查询本地知识库
// */
// @GetMapping("/list")
// public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) {
// if(!StpUtil.isLogin()){
// return null;
// }
// bo.setUid(LoginHelper.getUserId());
// return knowledgeInfoService.queryPageList(bo, pageQuery);
// }
//
// /**
// * 新增知识库
// */
// @Log(title = "知识库", businessType = BusinessType.INSERT)
// @PostMapping("/save")
// public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) {
// knowledgeInfoService.saveOne(bo);
// return R.ok();
// }
//
// /**
// * 删除知识库
// */
// @PostMapping("/remove/{id}")
// public R<String> remove(@PathVariable String id){
// knowledgeInfoService.removeKnowledge(id);
// return R.ok("删除知识库成功!");
// }
//
// /**
// * 修改知识库
// */
// @Log(title = "知识库", businessType = BusinessType.UPDATE)
// @PostMapping("/edit")
// public R<Void> edit( @RequestBody KnowledgeInfoBo bo) {
// return toAjax(knowledgeInfoService.updateByBo(bo));
// }
//
// /**
// * 导出知识库列表
// */
// @Log(title = "知识库", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(KnowledgeInfoBo bo, HttpServletResponse response) {
// List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo);
// ExcelUtil.exportExcel(list, "知识库", KnowledgeInfoVo.class, response);
// }
//
// /**
// * 查询知识附件信息
// */
// @GetMapping("/detail/{kid}")
// public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery,@PathVariable String kid){
// bo.setKid(kid);
// return attachService.queryPageList(bo, pageQuery);
// }
//
// /**
// * 上传知识库附件
// */
// @PostMapping(value = "/attach/upload")
// public R<String> upload(KnowledgeInfoUploadRequest request){
// knowledgeInfoService.upload(request);
// return R.ok("上传知识库附件成功!");
// }
//
// /**
// * 获取知识库附件详细信息
// *
// * @param id 主键
// */
// @GetMapping("attach/info/{id}")
// public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(attachService.queryById(id));
// }
//
// /**
// * 删除知识库附件
// *
// */
// @PostMapping("attach/remove/{docId}")
// public R<Void> removeAttach(@NotEmpty(message = "主键不能为空") @PathVariable String docId) {
// attachService.removeKnowledgeAttach(docId);
// return R.ok();
// }
//
//
// /**
// * 查询知识片段
// */
// @GetMapping("/fragment/list/{docId}")
// public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, PageQuery pageQuery, @PathVariable String docId) {
// bo.setDocId(docId);
// return fragmentService.queryPageList(bo, pageQuery);
// }
//
//}

View File

@@ -1,333 +0,0 @@
//package org.ruoyi.system.controller.system;
//
//import cn.hutool.core.bean.BeanUtil;
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.extra.qrcode.QrCodeUtil;
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
//import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
//import com.github.binarywang.wxpay.exception.WxPayException;
//import com.github.binarywang.wxpay.service.WxPayService;
//import com.stripe.Stripe;
//import com.stripe.exception.StripeException;
//import com.stripe.model.Event;
//import com.stripe.model.Price;
//import com.stripe.model.Product;
//import com.stripe.model.checkout.Session;
//import com.stripe.net.Webhook;
//import com.stripe.param.checkout.SessionCreateParams;
//import jakarta.servlet.http.HttpServletRequest;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.ruoyi.common.config.PayConfig;
//import org.ruoyi.common.core.domain.R;
//import org.ruoyi.common.core.exception.base.BaseException;
//import org.ruoyi.common.core.service.ConfigService;
//import org.ruoyi.common.core.utils.StringUtils;
//import org.ruoyi.common.oss.core.OssClient;
//import org.ruoyi.common.oss.entity.UploadResult;
//import org.ruoyi.common.oss.factory.OssFactory;
//import org.ruoyi.common.response.PayResponse;
//import org.ruoyi.common.service.PayService;
//import org.ruoyi.common.utils.MD5Util;
//import org.ruoyi.system.domain.bo.PaymentOrdersBo;
//import org.ruoyi.system.domain.bo.SysUserBo;
//import org.ruoyi.system.domain.request.OrderRequest;
//import org.ruoyi.system.domain.vo.PaymentOrdersVo;
//import org.ruoyi.system.domain.vo.SysUserVo;
//import org.ruoyi.system.service.IPaymentOrdersService;
//import org.ruoyi.system.service.ISysUserService;
//import org.springframework.web.bind.annotation.*;
//
//import java.io.ByteArrayOutputStream;
//import java.io.InputStream;
//import java.math.BigDecimal;
//import java.math.RoundingMode;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/pay")
//@Slf4j
//public class PayController {
//
// private final PayService payService;
//
// private final ISysUserService userService;
//
// private final IPaymentOrdersService paymentOrdersService;
//
// private final PayConfig payConfig;
//
// private final WxPayService wxService;
//
// private final ConfigService configService;
//
// /**
// * 获取支付二维码
// *
// * @Date 2023/7/3
// * @return void
// **/
// @PostMapping("/payUrl")
// public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) {
// PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
// PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo();
// if(!Boolean.parseBoolean(getKey("enabled"))){
// String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6");
// byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300);
// OssClient storage = OssFactory.instance();
// UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
// BeanUtil.copyProperties(payOrder,paymentOrdersVo);
// paymentOrdersVo.setUrl(upload.getUrl());
// }else {
// WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
// request.setTradeType("NATIVE");
// request.setBody(orderRequest.getName());
// request.setOutTradeNo(payOrder.getOrderNo());
// request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney()));
// request.setSpbillCreateIp("127.0.0.1");
// request.setNotifyUrl(getKey("notifyUrl"));
// request.setProductId(payOrder.getId().toString());
// try {
// WxPayNativeOrderResult order = wxService.createOrder(request);
// byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300);
// OssClient storage = OssFactory.instance();
// UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png");
// BeanUtil.copyProperties(payOrder,paymentOrdersVo);
// paymentOrdersVo.setUrl(upload.getUrl());
// } catch (WxPayException e) {
// throw new BaseException("获取微信支付二维码发生错误:{}"+e.getMessage());
// }
// }
// return R.ok(paymentOrdersVo);
// }
//
// /**
// * 回调通知地址
// *
// * @Date 2023/7/3
// * @param
// * @return void
// **/
// @GetMapping("/notifyUrl")
// public String notifyUrl(PayResponse payResponse) {
// // 校验签名
// String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() +
// "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() +
// "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() +
// "&type=" + payResponse.getType() + payConfig.getKey();
// String sign = MD5Util.GetMD5Code(mdString);
// if(!sign.equals(payResponse.getSign())){
// throw new BaseException("校验签名失败!");
// }
// double money = Double.parseDouble(payResponse.getMoney());
// log.info("支付订单号{}",payResponse);
// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
// paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no());
// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
// if (CollectionUtil.isEmpty(paymentOrdersList)){
// throw new BaseException("订单不存在!");
// }
// // 订单状态修改为已支付
// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
// paymentOrdersVo.setPaymentStatus("2");
// paymentOrdersVo.setPaymentMethod(payResponse.getType());
// BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
// paymentOrdersService.updateByBo(paymentOrdersBo);
//
// SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
// sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money);
// SysUserBo sysUserBo = new SysUserBo();
// BeanUtil.copyProperties(sysUserVo,sysUserBo);
// // 设置为付费用户
// sysUserBo.setUserGrade("1");
// userService.updateUser(sysUserBo);
// return "success";
// }
//
// /**
// * 跳转通知地址
// *
// * @Date 2023/7/3
// * @param
// * @return void
// **/
// @GetMapping("/return_url")
// public void returnUrl() {
// log.info("return_url===========");
// }
//
//
// @PostMapping("/notify/wxOrder")
// public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
// WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
// // TODO 根据自己业务场景需要构造返回对象
// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
// paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo());
// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
// paymentOrdersVo.setPaymentStatus("2");
// paymentOrdersVo.setPaymentMethod("wx");
// BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo);
// paymentOrdersService.updateByBo(paymentOrdersBo);
// SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId());
// sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee()));
// SysUserBo sysUserBo = new SysUserBo();
// BeanUtil.copyProperties(sysUserVo,sysUserBo);
// // 设置为付费用户
// sysUserBo.setUserGrade("1");
// userService.updateUser(sysUserBo);
// return WxPayNotifyResponse.success("success");
// }
//
// /**
// * 将分转换为元,并保留精度。
// *
// * @param cents 分的金额类型为Integer
// * @return 转换后的元金额类型为double
// */
// public static double convertCentsToYuan(Integer cents) {
// // 处理空输入
// if (cents == null) {
// throw new IllegalArgumentException("输入的分金额不能为空");
// }
//
// // 100分 = 1元
// BigDecimal centsBigDecimal = new BigDecimal(cents);
// BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
// // 转换为double并返回
// return yuan.doubleValue();
// }
//
// /**
// * 获取订单信息
// *
// */
// @PostMapping("/orderInfo")
// public R<PaymentOrdersVo> orderInfo(@RequestBody OrderRequest orderRequest) {
// if(StringUtils.isEmpty(orderRequest.getOrderNo())){
// throw new BaseException("订单号不能为空!");
// }
// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo();
// paymentOrdersBo.setOrderNo(orderRequest.getOrderNo());
// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo);
// if (CollectionUtil.isEmpty(paymentOrdersList)){
// throw new BaseException("订单不存在!");
// }
// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0);
// return R.ok(paymentOrdersVo);
// }
//
// // 获取支付链接
//// static {
//// Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb";
//// }
//
// /**
// * 去支付
// * 1、创建产品
// * 2、设置价格
// * 3、创建支付信息 得到url
// * @return
// */
// @PostMapping("/stripePay")
// public String pay(@RequestBody OrderRequest orderRequest) throws StripeException {
//
// String enabled = configService.getConfigValue("stripe", "enabled");
// if(!Boolean.parseBoolean(enabled)){
// String prompt = configService.getConfigValue("stripe", "prompt");
// throw new BaseException(prompt);
// }
//
// // 获取支付链接
// Stripe.apiKey = configService.getConfigValue("stripe", "key");
//
// // 获取金额字符串并解析为 double
// double moneyDouble = Double.parseDouble(orderRequest.getMoney());
//
// // 将金额转换为以分为单位的整数
// int randMoney = (int) (moneyDouble * 100);
//
// Map<String, Object> params = new HashMap<>();
// params.put("name", orderRequest.getName());
// Product product = Product.create(params);
//
// Map<String, Object> recurring = new HashMap<>();
// recurring.put("interval", "month");
// Map<String, Object> params2 = new HashMap<>();
// params2.put("unit_amount", randMoney);
// params2.put("currency", "usd");
// params2.put("recurring", recurring);
// params2.put("product", product.getId());
// Price price = Price.create(params2);
//
// // 创建支付订单
// PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest);
//
// //创建支付信息 得到url
// SessionCreateParams params3 = SessionCreateParams.builder()
// .setMode(SessionCreateParams.Mode.SUBSCRIPTION)
// .setSuccessUrl(configService.getConfigValue("stripe", "success"))
// .setCancelUrl(configService.getConfigValue("stripe", "cancel"))
// .addLineItem(
// SessionCreateParams.LineItem.builder()
// .setQuantity(1L)
// .setPrice(price.getId())
// .build()).putMetadata("orderId", payOrder.getOrderNo())
// .build();
// Session session = Session.create(params3);
// return session.getUrl();
// }
//
// /**
// * 支付回调
// *
// */
// @PostMapping("/stripe_events")
// public R<String> stripeEvent(HttpServletRequest request) {
// try {
// String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook秘钥签名
// InputStream inputStream = request.getInputStream();
// ByteArrayOutputStream output = new ByteArrayOutputStream();
// byte[] buffer = new byte[1024*4];
// int n = 0;
// while (-1 != (n = inputStream.read(buffer))) {
// output.write(buffer, 0, n);
// }
// byte[] bytes = output.toByteArray();
// String payload = new String(bytes, "UTF-8");
// String sigHeader = request.getHeader("Stripe-Signature");
// Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//验签,并获取事件
// if("checkout.session.completed".equals(event.getType())){
// // 解析 JSON 字符串为 JSONObject
// JSONObject jsonObject = JSONUtil.parseObj(event);
// // 获取 metadata 对象
// JSONObject metadata = jsonObject.getJSONObject("data")
// .getJSONObject("object")
// .getJSONObject("metadata");
//
// OrderRequest orderRequest = new OrderRequest();
// orderRequest.setPayType("stripe");
// orderRequest.setOrderNo(metadata.getStr("orderId"));
// paymentOrdersService.updatePayOrder(orderRequest);
// }
// } catch (Exception e) {
// System.out.println("stripe异步通知webhook事件"+e);
// }
// return R.ok();
// }
//
// public String getKey(String key) {
// return configService.getConfigValue("weixin", key);
// }
//
//}
//

View File

@@ -1,108 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.system.domain.bo.PaymentOrdersBo;
import org.ruoyi.system.domain.vo.PaymentOrdersVo;
import org.ruoyi.system.service.IPaymentOrdersService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 支付订单
*
* @author Lion Li
* @date 2024-04-16
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/payOrder")
public class PaymentOrdersController extends BaseController {
private final IPaymentOrdersService paymentOrdersService;
/**
* 查询支付订单列表
*/
@SaCheckPermission("system:order:list")
@GetMapping("/list")
public TableDataInfo<PaymentOrdersVo> list(PaymentOrdersBo bo, PageQuery pageQuery) {
pageQuery.setOrderByColumn("createTime");
pageQuery.setIsAsc("desc");
return paymentOrdersService.queryPageList(bo, pageQuery);
}
/**
* 导出支付订单列表
*/
@SaCheckPermission("system:order:export")
@Log(title = "支付订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(PaymentOrdersBo bo, HttpServletResponse response) {
List<PaymentOrdersVo> list = paymentOrdersService.queryList(bo);
ExcelUtil.exportExcel(list, "支付订单", PaymentOrdersVo.class, response);
}
/**
* 获取支付订单详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:order:query")
@GetMapping("/{id}")
public R<PaymentOrdersVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(paymentOrdersService.queryById(id));
}
/**
* 新增支付订单
*/
@SaCheckPermission("system:order:add")
@Log(title = "支付订单", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PaymentOrdersBo bo) {
return toAjax(paymentOrdersService.insertByBo(bo));
}
/**
* 修改支付订单
*/
@SaCheckPermission("system:order:edit")
@Log(title = "支付订单", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PaymentOrdersBo bo) {
return toAjax(paymentOrdersService.updateByBo(bo));
}
/**
* 删除支付订单
*
* @param ids 主键串
*/
@SaCheckPermission("system:order:remove")
@Log(title = "支付订单", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(paymentOrdersService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,153 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.system.domain.bo.SysModelBo;
import org.ruoyi.system.domain.bo.SysPackagePlanBo;
import org.ruoyi.system.domain.vo.SysModelVo;
import org.ruoyi.system.domain.vo.SysPackagePlanVo;
import org.ruoyi.system.domain.vo.SysUserVo;
import org.ruoyi.system.service.ISysModelService;
import org.ruoyi.system.service.ISysPackagePlanService;
import org.ruoyi.system.service.ISysUserService;
import org.ruoyi.system.util.DesensitizationUtil;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 系统模型
*
* @author Lion Li
* @date 2024-04-04
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/model")
public class SysModelController extends BaseController {
private final ISysModelService sysModelService;
private final ISysPackagePlanService sysPackagePlanService;
private final ISysUserService userService;
/**
* 查询系统模型列表 - 全部
*/
@GetMapping("/list")
public TableDataInfo<SysModelVo> list(SysModelBo bo, PageQuery pageQuery) {
return sysModelService.queryPageList(bo, pageQuery);
}
/**
* 查询系统模型列表
*/
@GetMapping("/modelList")
public R<List<SysModelVo>> modelList(SysModelBo bo) {
bo.setModelShow("0");
List<SysModelVo> sysModelVos = sysModelService.queryList(bo);
SysPackagePlanBo sysPackagePlanBo = new SysPackagePlanBo();
if (StpUtil.isLogin()) {
Long userId = LoginHelper.getLoginUser().getUserId();
SysUserVo sysUserVo = userService.selectUserById(userId);
if ("0".equals(sysUserVo.getUserGrade())){
sysPackagePlanBo.setName("Free");
SysPackagePlanVo sysPackagePlanVo = sysPackagePlanService.queryList(sysPackagePlanBo).get(0);
List<String> array = new ArrayList<>(Arrays.asList(sysPackagePlanVo.getPlanDetail().split(",")));
sysModelVos.removeIf(model -> !array.contains(model.getModelName()));
}
}else {
sysPackagePlanBo.setName("Visitor");
SysPackagePlanVo sysPackagePlanVo = sysPackagePlanService.queryList(sysPackagePlanBo).get(0);
List<String> array = new ArrayList<>(Arrays.asList(sysPackagePlanVo.getPlanDetail().split(",")));
sysModelVos.removeIf(model -> !array.contains(model.getModelName()));
}
sysModelVos.stream().map(vo -> {
String maskedApiHost = DesensitizationUtil.maskData(vo.getApiHost());
String maskedApiKey = DesensitizationUtil.maskData(vo.getApiKey());
vo.setApiHost(maskedApiHost);
vo.setApiKey(maskedApiKey);
return vo;
})
.collect(Collectors.toList());
return R.ok(sysModelVos);
}
/**
* 导出系统模型列表
*/
@SaCheckPermission("system:model:export")
@Log(title = "系统模型", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysModelBo bo, HttpServletResponse response) {
List<SysModelVo> list = sysModelService.queryList(bo);
ExcelUtil.exportExcel(list, "系统模型", SysModelVo.class, response);
}
/**
* 获取系统模型详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:model:query")
@GetMapping("/{id}")
public R<SysModelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysModelService.queryById(id));
}
/**
* 新增系统模型
*/
@SaCheckPermission("system:model:add")
@Log(title = "系统模型", businessType = BusinessType.INSERT)
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysModelBo bo) {
return toAjax(sysModelService.insertByBo(bo));
}
/**
* 修改系统模型
*/
@SaCheckPermission("system:model:edit")
@Log(title = "系统模型", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysModelBo bo) {
return toAjax(sysModelService.updateByBo(bo));
}
/**
* 删除系统模型
*
* @param ids 主键串
*/
@SaCheckPermission("system:model:remove")
@Log(title = "系统模型", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysModelService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -16,7 +16,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 公告 信息操作处理
* 公告信息操作处理
*
* @author Lion Li
*/

View File

@@ -1,114 +0,0 @@
package org.ruoyi.system.controller.system;
import java.util.List;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.system.domain.vo.SysPackagePlanVo;
import org.ruoyi.system.domain.bo.SysPackagePlanBo;
import org.ruoyi.system.service.ISysPackagePlanService;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
/**
* 套餐管理
*
* @author Lion Li
* @date 2024-05-05
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/packagePlan")
public class SysPackagePlanController extends BaseController {
private final ISysPackagePlanService sysPackagePlanService;
/**
* 查询套餐管理列表
*/
@GetMapping("/list")
public TableDataInfo<SysPackagePlanVo> list(SysPackagePlanBo bo, PageQuery pageQuery) {
return sysPackagePlanService.queryPageList(bo, pageQuery);
}
@GetMapping("/listPlan")
public R<List<SysPackagePlanVo>> listPlan() {
return R.ok(sysPackagePlanService.queryList(new SysPackagePlanBo()));
}
/**
* 导出套餐管理列表
*/
@SaCheckPermission("system:packagePlan:export")
@Log(title = "套餐管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysPackagePlanBo bo, HttpServletResponse response) {
List<SysPackagePlanVo> list = sysPackagePlanService.queryList(bo);
ExcelUtil.exportExcel(list, "套餐管理", SysPackagePlanVo.class, response);
}
/**
* 获取套餐管理详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:packagePlan:query")
@GetMapping("/{id}")
public R<SysPackagePlanVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysPackagePlanService.queryById(id));
}
/**
* 新增套餐管理
*/
@SaCheckPermission("system:packagePlan:add")
@Log(title = "套餐管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysPackagePlanBo bo) {
return toAjax(sysPackagePlanService.insertByBo(bo));
}
/**
* 修改套餐管理
*/
@SaCheckPermission("system:packagePlan:edit")
@Log(title = "套餐管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysPackagePlanBo bo) {
return toAjax(sysPackagePlanService.updateByBo(bo));
}
/**
* 删除套餐管理
*
* @param ids 主键串
*/
@SaCheckPermission("system:packagePlan:remove")
@Log(title = "套餐管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysPackagePlanService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,106 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.system.domain.bo.SysUserGroupBo;
import org.ruoyi.system.domain.vo.SysUserGroupVo;
import org.ruoyi.system.service.ISysUserGroupService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 【请填写功能名称】
*
* @author Lion Li
* @date 2024-08-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userGroup")
public class SysUserGroupController extends BaseController {
private final ISysUserGroupService sysUserGroupService;
/**
* 查询【请填写功能名称】列表
*/
@SaCheckPermission("system:userGroup:list")
@GetMapping("/list")
public TableDataInfo<SysUserGroupVo> list(SysUserGroupBo bo, PageQuery pageQuery) {
return sysUserGroupService.queryPageList(bo, pageQuery);
}
/**
* 导出【请填写功能名称】列表
*/
@SaCheckPermission("system:userGroup:export")
@Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysUserGroupBo bo, HttpServletResponse response) {
List<SysUserGroupVo> list = sysUserGroupService.queryList(bo);
ExcelUtil.exportExcel(list, "【请填写功能名称】", SysUserGroupVo.class, response);
}
/**
* 获取【请填写功能名称】详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:userGroup:query")
@GetMapping("/{id}")
public R<SysUserGroupVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysUserGroupService.queryById(id));
}
/**
* 新增【请填写功能名称】
*/
@SaCheckPermission("system:userGroup:add")
@Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserGroupBo bo) {
return toAjax(sysUserGroupService.insertByBo(bo));
}
/**
* 修改【请填写功能名称】
*/
@SaCheckPermission("system:userGroup:edit")
@Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysUserGroupBo bo) {
return toAjax(sysUserGroupService.updateByBo(bo));
}
/**
* 删除【请填写功能名称】
*
* @param ids 主键串
*/
@SaCheckPermission("system:userGroup:remove")
@Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysUserGroupService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,105 +0,0 @@
package org.ruoyi.system.controller.system;
import java.util.List;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.system.domain.vo.SysUserModelVo;
import org.ruoyi.system.domain.bo.SysUserModelBo;
import org.ruoyi.system.service.ISysUserModelService;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
/**
* 【请填写功能名称】
*
* @author Lion Li
* @date 2024-08-03
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/userModel")
public class SysUserModelController extends BaseController {
private final ISysUserModelService sysUserModelService;
/**
* 查询【请填写功能名称】列表
*/
@SaCheckPermission("system:userModel:list")
@GetMapping("/list")
public TableDataInfo<SysUserModelVo> list(SysUserModelBo bo, PageQuery pageQuery) {
return sysUserModelService.queryPageList(bo, pageQuery);
}
/**
* 导出【请填写功能名称】列表
*/
@SaCheckPermission("system:userModel:export")
@Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysUserModelBo bo, HttpServletResponse response) {
List<SysUserModelVo> list = sysUserModelService.queryList(bo);
ExcelUtil.exportExcel(list, "【请填写功能名称】", SysUserModelVo.class, response);
}
/**
* 获取【请填写功能名称】详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:userModel:query")
@GetMapping("/{id}")
public R<SysUserModelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(sysUserModelService.queryById(id));
}
/**
* 新增【请填写功能名称】
*/
@SaCheckPermission("system:userModel:add")
@Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserModelBo bo) {
return toAjax(sysUserModelService.insertByBo(bo));
}
/**
* 修改【请填写功能名称】
*/
@SaCheckPermission("system:userModel:edit")
@Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysUserModelBo bo) {
return toAjax(sysUserModelService.updateByBo(bo));
}
/**
* 删除【请填写功能名称】
*
* @param ids 主键串
*/
@SaCheckPermission("system:userModel:remove")
@Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(sysUserModelService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,81 +0,0 @@
//package org.ruoyi.system.controller.system;
//
//import cn.dev33.satoken.annotation.SaIgnore;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.ruoyi.common.core.exception.ServiceException;
//import org.ruoyi.common.wechat.itchat4j.api.WechatTools;
//import org.ruoyi.common.wechat.itchat4j.controller.LoginController;
//import org.ruoyi.common.wechat.itchat4j.core.MsgCenter;
//import org.ruoyi.common.wechat.itchat4j.face.IMsgHandlerFace;
//import org.ruoyi.common.wechat.web.base.BaseException;
//import org.ruoyi.system.domain.bo.WxRobConfigBo;
//import org.ruoyi.system.domain.vo.WxRobConfigVo;
//import org.ruoyi.system.handler.MyMsgHandler;
//import org.ruoyi.system.service.ISseService;
//import org.ruoyi.system.service.IWxRobConfigService;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.List;
//
///**
// * 个人微信扩展控制器
// *
// * @author WangLe
// */
//@SaIgnore
//@Slf4j
//@Validated
//@RequiredArgsConstructor
//@RestController
//public class WeChatController {
//
// private final ISseService sseService;
//
// private final IWxRobConfigService wxRobConfigService;
//
// /**
// * 登录第一步,获取二维码链接
// * @throws BaseException
// */
// @PostMapping("/getQr")
// public String getQr(@RequestParam String uniqueKey) {
// LoginController login = new LoginController(uniqueKey);
// try {
// return login.login_1();
// } catch (BaseException e) {
// throw new ServiceException("获取二维码失败:"+ e.getMessage());
// }
// }
//
// @PostMapping("/wxLogin")
// public Boolean wxLogin(@RequestParam String uniqueKey) {
// LoginController login = new LoginController(uniqueKey);
// return login.login_2();
// }
//
// @PostMapping("/wxInit")
// public Boolean wxInit(@RequestParam String uniqueKey) {
// LoginController login = new LoginController(uniqueKey);
// // 开启消息处理线程
// WxRobConfigBo wxRobConfigBo = new WxRobConfigBo();
// wxRobConfigBo.setUniqueKey(uniqueKey);
// List<WxRobConfigVo> wxRobConfigVos = wxRobConfigService.queryList(wxRobConfigBo);
// //查询机器人对应的用户
// start(uniqueKey,new MyMsgHandler(uniqueKey,sseService,wxRobConfigVos.get(0)));
// return login.login_3();
// }
//
// @PostMapping("/wxLogout")
// public void wxLogout(@RequestParam String uniqueKey) {
// WechatTools.logout(uniqueKey);
// }
//
// public void start(String uniqueKey,IMsgHandlerFace msgHandler) {
// log.info("7.+++开启消息处理线程["+uniqueKey+"]+++");
// new Thread(() -> MsgCenter.handleMsg(uniqueKey,msgHandler)).start();
// }
//}

View File

@@ -1,48 +0,0 @@
package org.ruoyi.system.controller.system;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.ruoyi.system.service.WeixinUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author https://www.wdbyte.com
*/
@Slf4j
@RestController
public class WeixinServerController {
@Autowired
private WeixinUserService weixinUserService;
@GetMapping(value = "/weixin/check")
public String weixinCheck(HttpServletRequest request) {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (StringUtils.isEmpty(signature) || StringUtils.isEmpty(timestamp) || StringUtils.isEmpty(nonce)) {
return "";
}
weixinUserService.checkSignature(signature, timestamp, nonce);
return echostr;
}
@PostMapping(value = "/weixin/check")
public String weixinMsg(@RequestBody String requestBody, @RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce) {
log.debug("requestBody:{}", requestBody);
log.debug("signature:{}", signature);
log.debug("timestamp:{}", timestamp);
log.debug("nonce:{}", nonce);
weixinUserService.checkSignature(signature, timestamp, nonce);
return weixinUserService.handleWeixinMsg(requestBody);
}
}

View File

@@ -1,55 +0,0 @@
package org.ruoyi.system.controller.system;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.system.domain.model.WeixinQrCode;
import org.ruoyi.system.domain.vo.LoginVo;
import org.ruoyi.system.service.SysLoginService;
import org.ruoyi.system.util.WeixinApiUtil;
import org.ruoyi.system.util.WeixinQrCodeCacheUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author https://www.wdbyte.com
*/
@Slf4j
@RestController
public class WeixinUserController {
@Autowired
private WeixinApiUtil weixinApiUtil;
@Autowired
private SysLoginService loginService;
@GetMapping(value = "/user/qrcode")
public R<WeixinQrCode> getQrCode() {
WeixinQrCode qrCode = weixinApiUtil.getQrCode();
qrCode.setUrl(null);
qrCode.setExpireSeconds(null);
return R.ok(qrCode);
}
/**
* 校验是否扫描完成
* 完成,返回 JWT
* 未完成,返回 check faild
*
* @param ticket
* @return
*/
@GetMapping(value = "/user/login/qrcode")
public R<LoginVo> userLogin(String ticket) {
String openId = WeixinQrCodeCacheUtil.get(ticket);
if (StringUtils.isNotEmpty(openId)) {
log.info("login success,open id:{}", openId);
LoginVo loginVo = loginService.mpLogin(openId);
return R.ok(loginVo);
}
log.info("login error,ticket:{}", ticket);
return R.fail("check faild");
}
}

View File

@@ -1,114 +0,0 @@
package org.ruoyi.system.controller.system;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.common.wechat.web.utils.UUIDShortUtil;
import org.ruoyi.system.domain.bo.WxRobConfigBo;
import org.ruoyi.system.domain.vo.WxRobConfigVo;
import org.ruoyi.system.service.IWxRobConfigService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 机器人
*
* @author Lion Li
* @date 2024-05-01
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/robConfig")
public class WxRobConfigController extends BaseController {
private final IWxRobConfigService wxRobConfigService;
/**
* 查询机器人列表
*/
@GetMapping("/list")
public TableDataInfo<WxRobConfigVo> list(WxRobConfigBo bo, PageQuery pageQuery) {
return wxRobConfigService.queryPageList(bo, pageQuery);
}
/**
* 查询当前用户绑定的机器人信息
* @param bo 查询参数
* @return 机器人信息
*/
@GetMapping("/getRobConfig")
public R<List<WxRobConfigVo>> botList(WxRobConfigBo bo) {
bo.setUserId(LoginHelper.getUserId());
return R.ok(wxRobConfigService.queryList(bo));
}
/**
* 导出机器人列表
*/
@Log(title = "机器人", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WxRobConfigBo bo, HttpServletResponse response) {
List<WxRobConfigVo> list = wxRobConfigService.queryList(bo);
ExcelUtil.exportExcel(list, "机器人", WxRobConfigVo.class, response);
}
/**
* 获取机器人详细信息
*
* @param id 主键
*/
@GetMapping("/{id}")
public R<WxRobConfigVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(wxRobConfigService.queryById(id));
}
/**
* 新增机器人
*/
@Log(title = "机器人", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WxRobConfigBo bo) {
String uniKey = UUIDShortUtil.generateShortUuid();
bo.setUniqueKey(uniKey);
return toAjax(wxRobConfigService.insertByBo(bo));
}
/**
* 修改机器人
*/
@Log(title = "机器人", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WxRobConfigBo bo) {
return toAjax(wxRobConfigService.updateByBo(bo));
}
/**
* 删除机器人
*
* @param ids 主键串
*/
@Log(title = "删除机器人", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(wxRobConfigService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,106 +0,0 @@
package org.ruoyi.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.excel.utils.ExcelUtil;
import org.ruoyi.common.idempotent.annotation.RepeatSubmit;
import org.ruoyi.common.log.annotation.Log;
import org.ruoyi.common.log.enums.BusinessType;
import org.ruoyi.common.mybatis.core.page.PageQuery;
import org.ruoyi.common.mybatis.core.page.TableDataInfo;
import org.ruoyi.common.web.core.BaseController;
import org.ruoyi.system.domain.bo.WxRobKeywordBo;
import org.ruoyi.system.domain.vo.WxRobKeywordVo;
import org.ruoyi.system.service.IWxRobKeywordService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 【请填写功能名称】
*
* @author Lion Li
* @date 2024-05-01
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/robKeyword")
public class WxRobKeywordController extends BaseController {
private final IWxRobKeywordService wxRobKeywordService;
/**
* 查询【请填写功能名称】列表
*/
@SaCheckPermission("system:robKeyword:list")
@GetMapping("/list")
public TableDataInfo<WxRobKeywordVo> list(WxRobKeywordBo bo, PageQuery pageQuery) {
return wxRobKeywordService.queryPageList(bo, pageQuery);
}
/**
* 导出【请填写功能名称】列表
*/
@SaCheckPermission("system:robKeyword:export")
@Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WxRobKeywordBo bo, HttpServletResponse response) {
List<WxRobKeywordVo> list = wxRobKeywordService.queryList(bo);
ExcelUtil.exportExcel(list, "【请填写功能名称】", WxRobKeywordVo.class, response);
}
/**
* 获取【请填写功能名称】详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:robKeyword:query")
@GetMapping("/{id}")
public R<WxRobKeywordVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(wxRobKeywordService.queryById(id));
}
/**
* 新增【请填写功能名称】
*/
@SaCheckPermission("system:robKeyword:add")
@Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WxRobKeywordBo bo) {
return toAjax(wxRobKeywordService.insertByBo(bo));
}
/**
* 修改【请填写功能名称】
*/
@SaCheckPermission("system:robKeyword:edit")
@Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WxRobKeywordBo bo) {
return toAjax(wxRobKeywordService.updateByBo(bo));
}
/**
* 删除【请填写功能名称】
*
* @param ids 主键串
*/
@SaCheckPermission("system:robKeyword:remove")
@Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(wxRobKeywordService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@@ -1,62 +0,0 @@
package org.ruoyi.system.controller.wxsingle;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpService;
import org.ruoyi.system.cofing.WxCpConfiguration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import java.nio.charset.StandardCharsets;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
/**
* @author <a href="https://github.com/0katekate0">Wang_Wong</a>
*/
//@RestController
//@RequiredArgsConstructor
//@RequestMapping("/wx/cp/js/{corpId}/{agentId}/getJsConf")
public class WxJsController {
@PostMapping("/getJsConf")
public Map getJsConf(
@PathVariable String corpId,
@PathVariable Integer agentId,
String uri) throws WxErrorException {
final WxCpService wxCpService = WxCpConfiguration.getCpService(agentId);
if (wxCpService == null) {
throw new IllegalArgumentException(String.format("未找到对应agentId=[%d]的配置,请核实!", agentId));
}
WxJsapiSignature wxJsapiSignature = wxCpService.createJsapiSignature(uri);
String signature = wxJsapiSignature.getSignature();
String nonceStr = wxJsapiSignature.getNonceStr();
long timestamp = wxJsapiSignature.getTimestamp();
Map res = new HashMap<String, String>();
res.put("appId", corpId); // 必填企业微信的corpID
res.put("timestamp", timestamp); // 必填,生成签名的时间戳
res.put("nonceStr", nonceStr); // 必填,生成签名的随机串
res.put("signature", signature); // 必填,签名,见 附录-JS-SDK使用权限签名算法
return res;
}
public static String genNonce() {
return bytesToHex(Long.toString(System.nanoTime()).getBytes(StandardCharsets.UTF_8));
}
public static String bytesToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
}

View File

@@ -1,85 +0,0 @@
package org.ruoyi.system.controller.wxsingle;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
import org.apache.commons.lang3.StringUtils;
import org.ruoyi.common.core.utils.JsonUtils;
import org.ruoyi.system.cofing.WxCpConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@RestController
@RequestMapping("/wx/cp")
@Slf4j
public class WxPortalController {
@Value("${wechat.cp.appConfigs[0].agentId}")
private Integer agentId;
@GetMapping(produces = "text/plain;charset=utf-8")
public String authGet(
@RequestParam(name = "msg_signature", required = false) String signature,
@RequestParam(name = "timestamp", required = false) String timestamp,
@RequestParam(name = "nonce", required = false) String nonce,
@RequestParam(name = "echostr", required = false) String echostr) {
log.info("\n接收到来自微信服务器的认证消息signature = [{}], timestamp = [{}], nonce = [{}], echostr = [{}]",
signature, timestamp, nonce, echostr);
if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
throw new IllegalArgumentException("请求参数非法,请核实!");
}
final WxCpService wxCpService = WxCpConfiguration.getCpService(agentId);
if (wxCpService == null) {
throw new IllegalArgumentException(String.format("未找到对应agentId=[%d]的配置,请核实!", agentId));
}
if (wxCpService.checkSignature(signature, timestamp, nonce, echostr)) {
return new WxCpCryptUtil(wxCpService.getWxCpConfigStorage()).decrypt(echostr);
}
return "非法请求";
}
@PostMapping(produces = "application/xml; charset=UTF-8")
public String post(
@RequestBody String requestBody,
@RequestParam("msg_signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce) {
log.info("\n接收微信请求[signature=[{}], timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
signature, timestamp, nonce, requestBody);
final WxCpService wxCpService = WxCpConfiguration.getCpService(1000002);
WxCpXmlMessage inMessage = WxCpXmlMessage.fromEncryptedXml(requestBody, wxCpService.getWxCpConfigStorage(),
timestamp, nonce, signature);
log.debug("\n消息解密后内容为\n{} ", JsonUtils.toJson(inMessage));
WxCpXmlOutMessage outMessage = this.route(1000002, inMessage);
if (outMessage == null) {
return "";
}
String out = outMessage.toEncryptedXml(wxCpService.getWxCpConfigStorage());
log.debug("\n组装回复信息{}", out);
return out;
}
private WxCpXmlOutMessage route(Integer agentId, WxCpXmlMessage message) {
try {
return WxCpConfiguration.getRouters().get(agentId).route(message);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return null;
}
}

View File

@@ -1,58 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 翻唱对象
*
* @author NSL
* @date 2024-12-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_cover")
public class Cover extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@TableId(value = "id")
private Long id;
/**
* 歌曲名称
*/
private String coverMusicName;
/**
* 歌曲地址
*/
private String coverMusicUrl;
/**
* 歌手性别 枚举 FEMALE 女性 MALE 男性
*/
private String coverSingerGender;
/**
* 歌手姓名
*/
private String coverSingerName;
/**
* 用户性别 FEMALE MALE
*/
private String userGender;
/**
* 用户id
*/
private Long userId;
/**
* 本次消费金额
*/
private String cost;
/**
* 翻唱后的URL
*/
private String coverUrl;
}

View File

@@ -1,38 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 翻唱用户参考音频对象
*
* @author NSL
* @since 2024-12-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_cover_prompt_audio")
public class CoverPromptAudio extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@TableId(value = "id")
private Long id;
/**
* 翻唱主表id
*/
private Long coverId;
/**
* 用户id
*/
private Long userId;
/**
* 参考音频
*/
private String promptAudioUrl;
}

View File

@@ -1,22 +0,0 @@
package org.ruoyi.system.domain;
import lombok.Data;
/**
* 描述:文生视频请求对象
*
* @author ageerle@163.com
* date 2024/6/27
*/
@Data
public class GenerateLuma {
private String aspect_ratio;
private boolean expand_prompt;
private String image_url;
private String user_prompt;
}

View File

@@ -1,23 +0,0 @@
package org.ruoyi.system.domain;
import lombok.Data;
/**
* 描述:生成歌词
*
* @author ageerle@163.com
* date 2024/6/27
*/
@Data
public class GenerateLyric {
/**
* 歌词提示词
*/
private String prompt;
/**
* 回调地址
*/
private String notify_hook;
}

View File

@@ -1,64 +0,0 @@
package org.ruoyi.system.domain;
import lombok.Data;
import java.io.Serializable;
/**
* @author WangLe
*/
@Data
public class GenerateSuno implements Serializable {
/**
* 歌词 (自定义模式专用)
*/
private String prompt;
/**
* mv模型chirp-v3-0、chirp-v3-5。不写默认 chirp-v3-0
*/
private String mv;
/**
* 标题(自定义模式专用)
*/
private String title;
/**
* 风格标签(自定义模式专用)
*/
private String tags;
/**
* 是否生成纯音乐true 为生成纯音乐
*/
private boolean make_instrumental;
/**
* 任务id用于对之前的任务再操作
*/
private String task_id;
/**
* float歌曲延长时间单位秒
*/
private int continue_at;
/**
* 歌曲id需要续写哪首歌
*/
private String continue_clip_id;
/**
* 灵感模式提示词(灵感模式专用)
*/
private String gpt_description_prompt;
/**
* 回调地址
*/
private String notify_hook;
}

View File

@@ -1,67 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 支付订单对象 payment_orders
*
* @author Lion Li
* @date 2024-04-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_pay_order")
public class PaymentOrder extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 订单编号
*/
private String orderNo;
/**
* 订单名称
*/
private String orderName;
/**
* 金额
*/
private BigDecimal amount;
/**
* 支付状态
*/
private String paymentStatus;
/**
* 支付方式
*/
private String paymentMethod;
/**
* 用户ID
*/
private Long userId;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,47 +0,0 @@
package org.ruoyi.system.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.ruoyi.common.core.utils.StringUtils;
/**
* 缓存信息
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class SysCache {
/**
* 缓存名称
*/
private String cacheName = "";
/**
* 缓存键名
*/
private String cacheKey = "";
/**
* 缓存内容
*/
private String cacheValue = "";
/**
* 备注
*/
private String remark = "";
public SysCache(String cacheName, String remark) {
this.cacheName = cacheName;
this.remark = remark;
}
public SysCache(String cacheName, String cacheKey, String cacheValue) {
this.cacheName = StringUtils.replace(cacheName, ":", "");
this.cacheKey = StringUtils.replace(cacheKey, cacheName, "");
this.cacheValue = cacheValue;
}
}

View File

@@ -1,51 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 参数配置表 sys_config
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_config")
public class SysConfig extends TenantEntity {
/**
* 参数主键
*/
@TableId(value = "config_id")
private Long configId;
/**
* 参数名称
*/
private String configName;
/**
* 参数键名
*/
private String configKey;
/**
* 参数键值
*/
private String configValue;
/**
* 系统内置Y是 N否
*/
private String configType;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,78 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* 部门表 sys_dept
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dept")
public class SysDept extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门ID
*/
@TableId(value = "dept_id")
private Long deptId;
/**
* 父部门ID
*/
private Long parentId;
/**
* 部门名称
*/
private String deptName;
/**
* 显示顺序
*/
private Integer orderNum;
/**
* 负责人
*/
private String leader;
/**
* 联系电话
*/
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 部门状态:0正常,1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
@TableLogic
private String delFlag;
/**
* 祖级列表
*/
private String ancestors;
}

View File

@@ -1,76 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 字典数据表 sys_dict_data
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_data")
public class SysDictData extends TenantEntity {
/**
* 字典编码
*/
@TableId(value = "dict_code")
private Long dictCode;
/**
* 字典排序
*/
private Integer dictSort;
/**
* 字典标签
*/
private String dictLabel;
/**
* 字典键值
*/
private String dictValue;
/**
* 字典类型
*/
private String dictType;
/**
* 样式属性(其他样式扩展)
*/
private String cssClass;
/**
* 表格字典样式
*/
private String listClass;
/**
* 是否默认Y是 N否
*/
private String isDefault;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
public boolean getDefault() {
return UserConstants.YES.equals(this.isDefault);
}
}

View File

@@ -1,46 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 字典类型表 sys_dict_type
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_type")
public class SysDictType extends TenantEntity {
/**
* 字典主键
*/
@TableId(value = "dict_id")
private Long dictId;
/**
* 字典名称
*/
private String dictName;
/**
* 字典类型
*/
private String dictType;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,75 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 系统访问记录表 sys_logininfor
*
* @author Lion Li
*/
@Data
@TableName("sys_logininfor")
public class SysLogininfor implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "info_id")
private Long infoId;
/**
* 租户编号
*/
private String tenantId;
/**
* 用户账号
*/
private String userName;
/**
* 登录状态 0成功 1失败
*/
private String status;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 提示消息
*/
private String msg;
/**
* 访问时间
*/
private Date loginTime;
}

View File

@@ -1,191 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.ruoyi.common.core.constant.Constants;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.core.utils.StringUtils;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.List;
/**
* 菜单权限表 sys_menu
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_menu")
public class SysMenu extends BaseEntity {
/**
* 菜单ID
*/
@TableId(value = "menu_id")
private Long menuId;
/**
* 父菜单ID
*/
private Long parentId;
/**
* 菜单名称
*/
private String menuName;
/**
* 显示顺序
*/
private Integer orderNum;
/**
* 路由地址
*/
private String path;
/**
* 组件路径
*/
private String component;
/**
* 路由参数
*/
private String queryParam;
/**
* 是否为外链0是 1否
*/
private String isFrame;
/**
* 是否缓存0缓存 1不缓存
*/
private String isCache;
/**
* 类型M目录 C菜单 F按钮
*/
private String menuType;
/**
* 显示状态0显示 1隐藏
*/
private String visible;
/**
* 菜单状态0正常 1停用
*/
private String status;
/**
* 权限字符串
*/
private String perms;
/**
* 菜单图标
*/
private String icon;
/**
* 备注
*/
private String remark;
/**
* 父菜单名称
*/
@TableField(exist = false)
private String parentName;
/**
* 子菜单
*/
@TableField(exist = false)
private List<SysMenu> children = new ArrayList<>();
/**
* 获取路由名称
*/
public String getRouteName() {
String routerName = StringUtils.capitalize(path);
// 非外链并且是一级目录(类型为目录)
if (isMenuFrame()) {
routerName = StringUtils.EMPTY;
}
return routerName;
}
/**
* 获取路由地址
*/
public String getRouterPath() {
String routerPath = this.path;
// 内链打开外网方式
if (getParentId() != 0L && isInnerLink()) {
routerPath = innerLinkReplaceEach(routerPath);
}
// 非外链并且是一级目录(类型为目录)
if (0L == getParentId() && UserConstants.TYPE_DIR.equals(getMenuType())
&& UserConstants.NO_FRAME.equals(getIsFrame())) {
routerPath = "/" + this.path;
}
// 非外链并且是一级目录(类型为菜单)
else if (isMenuFrame()) {
routerPath = "/";
}
return routerPath;
}
/**
* 获取组件信息
*/
public String getComponentInfo() {
String component = UserConstants.LAYOUT;
if (StringUtils.isNotEmpty(this.component) && !isMenuFrame()) {
component = this.component;
} else if (StringUtils.isEmpty(this.component) && getParentId() != 0L && isInnerLink()) {
component = UserConstants.INNER_LINK;
} else if (StringUtils.isEmpty(this.component) && isParentView()) {
component = UserConstants.PARENT_VIEW;
}
return component;
}
/**
* 是否为菜单内部跳转
*/
public boolean isMenuFrame() {
return getParentId() == 0L && UserConstants.TYPE_MENU.equals(menuType) && isFrame.equals(UserConstants.NO_FRAME);
}
/**
* 是否为内链组件
*/
public boolean isInnerLink() {
return isFrame.equals(UserConstants.NO_FRAME) && StringUtils.ishttp(path);
}
/**
* 是否为parent_view组件
*/
public boolean isParentView() {
return getParentId() != 0L && UserConstants.TYPE_DIR.equals(menuType);
}
/**
* 内链域名特殊字符替换
*/
public static String innerLinkReplaceEach(String path) {
return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, "."},
new String[]{"", "", "", "/"});
}
}

View File

@@ -1,84 +0,0 @@
package org.ruoyi.system.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 系统模型对象 sys_model
*
* @author Lion Li
* @date 2024-04-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_model")
public class SysModel extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 模型分类
*/
@ExcelProperty(value = "模型分类")
private String category;
/**
* 模型名称
*/
private String modelName;
/**
* 模型描述
*/
private String modelDescribe;
/**
* 模型价格
*/
private double modelPrice;
/**
* 计费类型
*/
private String modelType;
/**
* 是否显示
*/
private String modelShow;
/**
* 系统提示词
*/
private String systemPrompt;
/**
* 请求地址
*/
private String apiHost;
/**
* 密钥
*/
private String apiKey;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,51 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 通知公告表 sys_notice
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_notice")
public class SysNotice extends TenantEntity {
/**
* 公告ID
*/
@TableId(value = "notice_id")
private Long noticeId;
/**
* 公告标题
*/
private String noticeTitle;
/**
* 公告类型1通知 2公告
*/
private String noticeType;
/**
* 公告内容
*/
private String noticeContent;
/**
* 公告状态0正常 1关闭
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,52 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 用户阅读状态对象 sys_notice_state
*
* @author Lion Li
* @date 2024-05-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_notice_state")
public class SysNoticeState extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id")
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 公告ID
*/
private Long noticeId;
/**
* 阅读状态0未读 1已读
*/
private String readStatus;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,115 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 操作日志记录表 oper_log
*
* @author Lion Li
*/
@Data
@TableName("sys_oper_log")
public class SysOperLog implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 日志主键
*/
@TableId(value = "oper_id")
private Long operId;
/**
* 租户编号
*/
private String tenantId;
/**
* 操作模块
*/
private String title;
/**
* 业务类型0其它 1新增 2修改 3删除
*/
private Integer businessType;
/**
* 请求方法
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作类别0其它 1后台用户 2手机端用户
*/
private Integer operatorType;
/**
* 操作人员
*/
private String operName;
/**
* 部门名称
*/
private String deptName;
/**
* 请求url
*/
private String operUrl;
/**
* 操作地址
*/
private String operIp;
/**
* 操作地点
*/
private String operLocation;
/**
* 请求参数
*/
private String operParam;
/**
* 返回参数
*/
private String jsonResult;
/**
* 操作状态0正常 1异常
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
private Date operTime;
/**
* 消耗时间
*/
private Long costTime;
}

View File

@@ -1,50 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.ruoyi.common.tenant.core.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* OSS对象存储对象
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_oss")
public class SysOss extends TenantEntity {
/**
* 对象存储主键
*/
@TableId(value = "oss_id")
private Long ossId;
/**
* 文件名
*/
private String fileName;
/**
* 原名
*/
private String originalName;
/**
* 文件后缀名
*/
private String fileSuffix;
/**
* URL地址
*/
private String url;
/**
* 服务商
*/
private String service;
}

View File

@@ -1,89 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.ruoyi.common.tenant.core.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 对象存储配置对象 sys_oss_config
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_oss_config")
public class SysOssConfig extends TenantEntity {
/**
* 主建
*/
@TableId(value = "oss_config_id")
private Long ossConfigId;
/**
* 配置key
*/
private String configKey;
/**
* accessKey
*/
private String accessKey;
/**
* 秘钥
*/
private String secretKey;
/**
* 桶名称
*/
private String bucketName;
/**
* 前缀
*/
private String prefix;
/**
* 访问站点
*/
private String endpoint;
/**
* 自定义域名
*/
private String domain;
/**
* 是否https0否 1是
*/
private String isHttps;
/**
* 域
*/
private String region;
/**
* 是否默认0=是,1=否)
*/
private String status;
/**
* 扩展字段
*/
private String ext1;
/**
* 备注
*/
private String remark;
/**
* 桶权限类型(0private 1public 2custom)
*/
private String accessPolicy;
}

View File

@@ -1,58 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
/**
* 套餐管理对象 sys_package_plan
*
* @author Lion Li
* @date 2024-05-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_package_plan")
public class SysPackagePlan extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 套餐名称
*/
private String name;
/**
* 套餐价格
*/
private BigDecimal price;
/**
* 有效时间
*/
private Long duration;
/**
* 计划详情
*/
private String planDetail;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,51 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 岗位表 sys_post
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_post")
public class SysPost extends TenantEntity {
/**
* 岗位序号
*/
@TableId(value = "post_id")
private Long postId;
/**
* 岗位编码
*/
private String postCode;
/**
* 岗位名称
*/
private String postName;
/**
* 岗位排序
*/
private Integer postSort;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,79 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.ruoyi.common.tenant.core.TenantEntity;
/**
* 角色表 sys_role
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("sys_role")
public class SysRole extends TenantEntity {
/**
* 角色ID
*/
@TableId(value = "role_id")
private Long roleId;
/**
* 角色名称
*/
private String roleName;
/**
* 角色权限
*/
private String roleKey;
/**
* 角色排序
*/
private Integer roleSort;
/**
* 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5仅本人数据权限
*/
private String dataScope;
/**
* 菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示
*/
private Boolean menuCheckStrictly;
/**
* 部门树选择项是否关联显示0父子不互相关联显示 1父子互相关联显示
*/
private Boolean deptCheckStrictly;
/**
* 角色状态0正常 1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
@TableLogic
private String delFlag;
/**
* 备注
*/
private String remark;
public SysRole(Long roleId) {
this.roleId = roleId;
}
}

View File

@@ -1,29 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 角色和部门关联 sys_role_dept
*
* @author Lion Li
*/
@Data
@TableName("sys_role_dept")
public class SysRoleDept {
/**
* 角色ID
*/
@TableId(type = IdType.INPUT)
private Long roleId;
/**
* 部门ID
*/
private Long deptId;
}

View File

@@ -1,29 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 角色和菜单关联 sys_role_menu
*
* @author Lion Li
*/
@Data
@TableName("sys_role_menu")
public class SysRoleMenu {
/**
* 角色ID
*/
@TableId(type = IdType.INPUT)
private Long roleId;
/**
* 菜单ID
*/
private Long menuId;
}

View File

@@ -1,103 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* 租户对象 sys_tenant
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_tenant")
public class SysTenant extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 租户编号
*/
private String tenantId;
/**
* 联系人
*/
private String contactUserName;
/**
* 联系电话
*/
private String contactPhone;
/**
* 企业名称
*/
private String companyName;
/**
* 统一社会信用代码
*/
private String licenseNumber;
/**
* 地址
*/
private String address;
/**
* 域名
*/
private String domain;
/**
* 企业简介
*/
private String intro;
/**
* 备注
*/
private String remark;
/**
* 租户套餐编号
*/
private Long packageId;
/**
* 过期时间
*/
private Date expireTime;
/**
* 用户数量(-1不限制
*/
private Long accountCount;
/**
* 租户状态0正常 1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
@TableLogic
private String delFlag;
}

View File

@@ -1,56 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 租户套餐对象 sys_tenant_package
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_tenant_package")
public class SysTenantPackage extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 租户套餐id
*/
@TableId(value = "package_id")
private Long packageId;
/**
* 套餐名称
*/
private String packageName;
/**
* 关联菜单id
*/
private String menuIds;
/**
* 备注
*/
private String remark;
/**
* 菜单树选择项是否关联显示( 0父子不互相关联显示 1父子互相关联显示
*/
private Boolean menuCheckStrictly;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
@TableLogic
private String delFlag;
}

View File

@@ -1,134 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.tenant.core.TenantEntity;
import java.util.Date;
/**
* 用户对象 sys_user
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user")
public class SysUser extends TenantEntity {
/**
* 用户ID
*/
@TableId(value = "user_id")
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
private String userName;
/**
* 用户套餐
*/
private String userPlan;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户类型sys_user系统用户
*/
private String userType;
/**
* 用户邮箱
*/
private String email;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户性别
*/
private String sex;
/**
* 用户头像
*/
private String avatar;
/**
* 密码
*/
@TableField(
insertStrategy = FieldStrategy.NOT_EMPTY,
updateStrategy = FieldStrategy.NOT_EMPTY,
whereStrategy = FieldStrategy.NOT_EMPTY
)
private String password;
/**
* 帐号状态0正常 1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
@TableLogic
private String delFlag;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 注册域名
*/
private String domainName;
/**
* 最后登录时间
*/
private Date loginDate;
/**
* 备注
*/
private String remark;
/** 普通用户的标识,对当前开发者帐号唯一。一个openid对应一个公众号或小程序 */
private String openId;
/** 用户余额 */
private Double userBalance;
/** 用户等级 */
private String userGrade;
public SysUser(Long userId) {
this.userId = userId;
}
public boolean isSuperAdmin() {
return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
}
}

View File

@@ -1,58 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import org.ruoyi.common.tenant.core.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 【请填写功能名称】对象 sys_user_group
*
* @author Lion Li
* @date 2024-08-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user_group")
public class SysUserGroup extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 用户组名称
*/
private String groupName;
/**
* 备注
*/
private String remark;
/**
* 版本
*/
@Version
private Long version;
/**
* 删除标志0代表存在 1代表删除
*/
@TableLogic
private String delFlag;
/**
* 更新IP
*/
private String updateIp;
}

View File

@@ -1,42 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 【请填写功能名称】对象 sys_user_model
*
* @author Lion Li
* @date 2024-08-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user_model")
public class SysUserModel extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 模型id
*/
private Long mid;
/**
* 用户组id
*/
private Long gid;
}

View File

@@ -1,54 +0,0 @@
package org.ruoyi.system.domain;
import lombok.Data;
/**
* 当前在线会话
*
* @author Lion Li
*/
@Data
public class SysUserOnline {
/**
* 会话编号
*/
private String tokenId;
/**
* 部门名称
*/
private String deptName;
/**
* 用户名称
*/
private String userName;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地址
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 登录时间
*/
private Long loginTime;
}

View File

@@ -1,29 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 用户和岗位关联 sys_user_post
*
* @author Lion Li
*/
@Data
@TableName("sys_user_post")
public class SysUserPost {
/**
* 用户ID
*/
@TableId(type = IdType.INPUT)
private Long userId;
/**
* 岗位ID
*/
private Long postId;
}

View File

@@ -1,29 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 用户和角色关联 sys_user_role
*
* @author Lion Li
*/
@Data
@TableName("sys_user_role")
public class SysUserRole {
/**
* 用户ID
*/
@TableId(type = IdType.INPUT)
private Long userId;
/**
* 角色ID
*/
private Long roleId;
}

View File

@@ -1,66 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 微信机器人对象 wx_rob_config
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_rob_config")
public class WxRobConfig extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 机器人名称
*/
private String botName;
/**
* 机器唯一码
*/
private String uniqueKey;
/**
* 备注(微信号)
*/
private String remark;
/**
* 默认好友回复开关
*/
private String defaultFriend;
/**
* 默认群回复开关
*/
private String defaultGroup;
/**
* 机器启用1禁用0
*/
private String enable;
}

View File

@@ -1,67 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 【请填写功能名称】对象 wx_rob_keyword
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wx_rob_keyword")
public class WxRobKeyword extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 机器唯一码
*/
private String uniqueKey;
/**
* 关键词
*/
private String keyData;
/**
* 回复内容
*/
private String valueData;
/**
* 回复类型
*/
private String typeData;
/**
* 目标昵称
*/
private String nickName;
/**
* 群1好友0
*/
private Integer toGroup;
/**
* 启用1禁用0
*/
private Integer enable;
}

View File

@@ -1,62 +0,0 @@
package org.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
/**
* 【请填写功能名称】对象 wx_rob_relation
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wx_rob_relation")
public class WxRobRelation extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 外接唯一码
*/
private String outKey;
/**
* 机器唯一码
*/
private String uniqueKey;
/**
* 目标昵称
*/
private String nickName;
/**
* 群1好友0
*/
private Integer toGroup;
/**
* 启用1禁用0
*/
private Integer enable;
/**
* IP白名单
*/
private String whiteList;
}

View File

@@ -1,76 +0,0 @@
package org.ruoyi.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.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.PaymentOrder;
import java.math.BigDecimal;
/**
* 支付订单业务对象 payment_orders
*
* @author Lion Li
* @date 2024-04-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PaymentOrder.class, reverseConvertGenerate = false)
public class PaymentOrdersBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 订单编号
*/
@NotBlank(message = "订单编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String orderNo;
/**
* 订单名称
*/
@NotBlank(message = "订单名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String orderName;
/**
* 金额
*/
@NotNull(message = "金额不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal amount;
/**
* 支付状态
*/
@NotBlank(message = "支付状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String paymentStatus;
/**
* 支付方式
*/
@NotBlank(message = "支付方式不能为空", groups = { AddGroup.class, EditGroup.class })
private String paymentMethod;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;
}

View File

@@ -1,63 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysConfig;
/**
* 参数配置业务对象 sys_config
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysConfig.class, reverseConvertGenerate = false)
public class SysConfigBo extends BaseEntity {
/**
* 参数主键
*/
@NotNull(message = "参数主键不能为空", groups = { EditGroup.class })
private Long configId;
/**
* 参数名称
*/
@NotBlank(message = "参数名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "参数名称不能超过{max}个字符")
private String configName;
/**
* 参数键名
*/
@NotBlank(message = "参数键名不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "参数键名长度不能超过{max}个字符")
private String configKey;
/**
* 参数键值
*/
@NotBlank(message = "参数键值不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 500, message = "参数键值长度不能超过{max}个字符")
private String configValue;
/**
* 系统内置Y是 N否
*/
private String configType;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,73 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysDept;
/**
* 部门业务对象 sys_dept
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysDept.class, reverseConvertGenerate = false)
public class SysDeptBo extends BaseEntity {
/**
* 部门id
*/
@NotNull(message = "部门id不能为空", groups = { EditGroup.class })
private Long deptId;
/**
* 父部门ID
*/
private Long parentId;
/**
* 部门名称
*/
@NotBlank(message = "部门名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 30, message = "部门名称长度不能超过{max}个字符")
private String deptName;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空")
private Integer orderNum;
/**
* 负责人
*/
private String leader;
/**
* 联系电话
*/
@Size(min = 0, max = 11, message = "联系电话长度不能超过{max}个字符")
private String phone;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
* 部门状态0正常 1停用
*/
private String status;
}

View File

@@ -1,88 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysDictData;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 字典数据业务对象 sys_dict_data
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysDictData.class, reverseConvertGenerate = false)
public class SysDictDataBo extends BaseEntity {
/**
* 字典编码
*/
@NotNull(message = "字典编码不能为空", groups = { EditGroup.class })
private Long dictCode;
/**
* 字典排序
*/
private Integer dictSort;
/**
* 字典标签
*/
@NotBlank(message = "字典标签不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "字典标签长度不能超过{max}个字符")
private String dictLabel;
/**
* 字典键值
*/
@NotBlank(message = "字典键值不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "字典键值长度不能超过{max}个字符")
private String dictValue;
/**
* 字典类型
*/
@NotBlank(message = "字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "字典类型长度不能超过{max}个字符")
private String dictType;
/**
* 样式属性(其他样式扩展)
*/
@Size(min = 0, max = 100, message = "样式属性长度不能超过{max}个字符")
private String cssClass;
/**
* 表格回显样式
*/
private String listClass;
/**
* 是否默认Y是 N否
*/
private String isDefault;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 创建部门
*/
private Long createDept;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,58 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysDictType;
/**
* 字典类型业务对象 sys_dict_type
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysDictType.class, reverseConvertGenerate = false)
public class SysDictTypeBo extends BaseEntity {
/**
* 字典主键
*/
@NotNull(message = "字典主键不能为空", groups = { EditGroup.class })
private Long dictId;
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "字典类型名称长度不能超过{max}个字符")
private String dictName;
/**
* 字典类型
*/
@NotBlank(message = "字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "字典类型类型长度不能超过{max}个字符")
@Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
private String dictType;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,77 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.ruoyi.system.domain.SysLogininfor;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 系统访问记录业务对象 sys_logininfor
*
* @author Michelle.Chung
*/
@Data
@AutoMapper(target = SysLogininfor.class, reverseConvertGenerate = false)
public class SysLogininforBo {
/**
* 访问ID
*/
private Long infoId;
/**
* 租户编号
*/
private String tenantId;
/**
* 用户账号
*/
private String userName;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 登录状态0成功 1失败
*/
private String status;
/**
* 提示消息
*/
private String msg;
/**
* 访问时间
*/
private Date loginTime;
/**
* 请求参数
*/
private Map<String, Object> params = new HashMap<>();
}

View File

@@ -1,111 +0,0 @@
package org.ruoyi.system.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysMenu;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 菜单权限业务对象 sys_menu
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysMenu.class, reverseConvertGenerate = false)
public class SysMenuBo extends BaseEntity {
/**
* 菜单ID
*/
@NotNull(message = "菜单ID不能为空", groups = { EditGroup.class })
private Long menuId;
/**
* 父菜单ID
*/
private Long parentId;
/**
* 菜单名称
*/
@NotBlank(message = "菜单名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 50, message = "菜单名称长度不能超过{max}个字符")
private String menuName;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer orderNum;
/**
* 路由地址
*/
@Size(min = 0, max = 200, message = "路由地址不能超过{max}个字符")
private String path;
/**
* 组件路径
*/
@Size(min = 0, max = 200, message = "组件路径不能超过{max}个字符")
private String component;
/**
* 路由参数
*/
private String queryParam;
/**
* 是否为外链0是 1否
*/
private String isFrame;
/**
* 是否缓存0缓存 1不缓存
*/
private String isCache;
/**
* 菜单类型M目录 C菜单 F按钮
*/
@NotBlank(message = "菜单类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String menuType;
/**
* 显示状态0显示 1隐藏
*/
private String visible;
/**
* 菜单状态0正常 1停用
*/
private String status;
/**
* 权限标识
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@Size(min = 0, max = 100, message = "权限标识长度不能超过{max}个字符")
private String perms;
/**
* 菜单图标
*/
private String icon;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,89 +0,0 @@
package org.ruoyi.system.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysModel;
/**
* 系统模型业务对象 sys_model
*
* @author Lion Li
* @date 2024-04-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysModel.class, reverseConvertGenerate = false)
public class SysModelBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 模型分类
*/
@ExcelProperty(value = "模型分类")
private String category;
/**
* 模型名称
*/
@NotBlank(message = "模型名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String modelName;
/**
* 模型描述
*/
@NotBlank(message = "模型描述不能为空", groups = { AddGroup.class, EditGroup.class })
private String modelDescribe;
/**
* 模型价格
*/
@NotNull(message = "模型价格不能为空", groups = { AddGroup.class, EditGroup.class })
private double modelPrice;
/**
* 计费类型 (1 token扣费; 2 次数扣费 )
*/
@NotBlank(message = "计费类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String modelType;
/**
* 模型状态 (0 显示; 1 隐藏 )
*/
private String modelShow;
/**
* 系统提示词
*/
private String systemPrompt;
/**
* 请求地址
*/
private String apiHost;
/**
* 请求密钥
*/
private String apiKey;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;
}

View File

@@ -1,65 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.core.xss.Xss;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysNotice;
/**
* 通知公告业务对象 sys_notice
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysNotice.class, reverseConvertGenerate = false)
public class SysNoticeBo extends BaseEntity {
/**
* 公告ID
*/
@NotNull(message = "公告ID不能为空", groups = { EditGroup.class })
private Long noticeId;
/**
* 公告标题
*/
@Xss(message = "公告标题不能包含脚本字符")
@NotBlank(message = "公告标题不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 50, message = "公告标题不能超过{max}个字符")
private String noticeTitle;
/**
* 公告类型1通知 2公告
*/
private String noticeType;
/**
* 公告内容
*/
private String noticeContent;
/**
* 公告状态0正常 1关闭
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 创建人名称
*/
private String createByName;
}

View File

@@ -1,54 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.system.domain.SysNoticeState;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 用户阅读状态业务对象 sys_notice_state
*
* @author Lion Li
* @date 2024-05-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysNoticeState.class, reverseConvertGenerate = false)
public class SysNoticeStateBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long userId;
/**
* 公告ID
*/
@NotNull(message = "公告ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long noticeId;
/**
* 阅读状态0未读 1已读
*/
@NotBlank(message = "阅读状态0未读 1已读不能为空", groups = { AddGroup.class, EditGroup.class })
private String readStatus;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;
}

View File

@@ -1,127 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import lombok.Data;
import org.ruoyi.common.log.event.OperLogEvent;
import org.ruoyi.system.domain.SysOperLog;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 操作日志记录业务对象 sys_oper_log
*
* @author Michelle.Chung
* @date 2023-02-07
*/
@Data
@AutoMappers({
@AutoMapper(target = SysOperLog.class, reverseConvertGenerate = false),
@AutoMapper(target = OperLogEvent.class)
})
public class SysOperLogBo {
/**
* 日志主键
*/
private Long operId;
/**
* 租户编号
*/
private String tenantId;
/**
* 模块标题
*/
private String title;
/**
* 业务类型0其它 1新增 2修改 3删除
*/
private Integer businessType;
/**
* 业务类型数组
*/
private Integer[] businessTypes;
/**
* 方法名称
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作类别0其它 1后台用户 2手机端用户
*/
private Integer operatorType;
/**
* 操作人员
*/
private String operName;
/**
* 部门名称
*/
private String deptName;
/**
* 请求URL
*/
private String operUrl;
/**
* 主机地址
*/
private String operIp;
/**
* 操作地点
*/
private String operLocation;
/**
* 请求参数
*/
private String operParam;
/**
* 返回参数
*/
private String jsonResult;
/**
* 操作状态0正常 1异常
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
private Date operTime;
/**
* 消耗时间
*/
private Long costTime;
/**
* 请求参数
*/
private Map<String, Object> params = new HashMap<>();
}

View File

@@ -1,49 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysOss;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* OSS对象存储分页查询对象 sys_oss
*
* @author Lion Li
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysOss.class, reverseConvertGenerate = false)
public class SysOssBo extends BaseEntity {
/**
* ossId
*/
private Long ossId;
/**
* 文件名
*/
private String fileName;
/**
* 原名
*/
private String originalName;
/**
* 文件后缀名
*/
private String fileSuffix;
/**
* URL地址
*/
private String url;
/**
* 服务商
*/
private String service;
}

View File

@@ -1,109 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysOssConfig;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 对象存储配置业务对象 sys_oss_config
*
* @author Lion Li
* @author 孤舟烟雨
* @date 2021-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysOssConfig.class, reverseConvertGenerate = false)
public class SysOssConfigBo extends BaseEntity {
/**
* 主建
*/
@NotNull(message = "主建不能为空", groups = {EditGroup.class})
private Long ossConfigId;
/**
* 配置key
*/
@NotBlank(message = "配置key不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(min = 2, max = 100, message = "configKey长度必须介于{min}和{max} 之间")
private String configKey;
/**
* accessKey
*/
@NotBlank(message = "accessKey不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(min = 2, max = 100, message = "accessKey长度必须介于{min}和{max} 之间")
private String accessKey;
/**
* 秘钥
*/
@NotBlank(message = "secretKey不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(min = 2, max = 100, message = "secretKey长度必须介于{min}和{max} 之间")
private String secretKey;
/**
* 桶名称
*/
@NotBlank(message = "桶名称不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(min = 2, max = 100, message = "bucketName长度必须介于{min}和{max}之间")
private String bucketName;
/**
* 前缀
*/
private String prefix;
/**
* 访问站点
*/
@NotBlank(message = "访问站点不能为空", groups = {AddGroup.class, EditGroup.class})
@Size(min = 2, max = 100, message = "endpoint长度必须介于{min}和{max}之间")
private String endpoint;
/**
* 自定义域名
*/
private String domain;
/**
* 是否httpsY=是,N=否)
*/
private String isHttps;
/**
* 是否默认0=是,1=否)
*/
private String status;
/**
* 域
*/
private String region;
/**
* 扩展字段
*/
private String ext1;
/**
* 备注
*/
private String remark;
/**
* 桶权限类型(0private 1public 2custom)
*/
@NotBlank(message = "桶权限类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String accessPolicy;
}

View File

@@ -1,61 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.system.domain.SysPackagePlan;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 套餐管理业务对象 sys_package_plan
*
* @author Lion Li
* @date 2024-05-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysPackagePlan.class, reverseConvertGenerate = false)
public class SysPackagePlanBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 套餐名称
*/
@NotBlank(message = "套餐名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 套餐价格
*/
@NotNull(message = "套餐价格不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal price;
/**
* 有效时间
*/
@NotNull(message = "有效时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Long duration;
/**
* 计划详情
*/
@NotBlank(message = "计划详情不能为空", groups = { AddGroup.class, EditGroup.class })
private String planDetail;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;
}

View File

@@ -1,62 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysPost;
/**
* 岗位信息业务对象 sys_post
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysPost.class, reverseConvertGenerate = false)
public class SysPostBo extends BaseEntity {
/**
* 岗位ID
*/
@NotNull(message = "岗位ID不能为空", groups = { EditGroup.class })
private Long postId;
/**
* 岗位编码
*/
@NotBlank(message = "岗位编码不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 64, message = "岗位编码长度不能超过{max}个字符")
private String postCode;
/**
* 岗位名称
*/
@NotBlank(message = "岗位名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 50, message = "岗位名称长度不能超过{max}个字符")
private String postName;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer postSort;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,97 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysRole;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 角色信息业务对象 sys_role
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysRole.class, reverseConvertGenerate = false)
public class SysRoleBo extends BaseEntity {
/**
* 角色ID
*/
@NotNull(message = "角色ID不能为空", groups = { EditGroup.class })
private Long roleId;
/**
* 角色名称
*/
@NotBlank(message = "角色名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 30, message = "角色名称长度不能超过{max}个字符")
private String roleName;
/**
* 角色权限字符串
*/
@NotBlank(message = "角色权限字符串不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "权限字符长度不能超过{max}个字符")
private String roleKey;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer roleSort;
/**
* 数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限
*/
private String dataScope;
/**
* 菜单树选择项是否关联显示
*/
private Boolean menuCheckStrictly;
/**
* 部门树选择项是否关联显示
*/
private Boolean deptCheckStrictly;
/**
* 角色状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 菜单组
*/
private Long[] menuIds;
/**
* 部门组(数据权限)
*/
private Long[] deptIds;
public SysRoleBo(Long roleId) {
this.roleId = roleId;
}
public boolean isSuperAdmin() {
return UserConstants.SUPER_ADMIN_ID.equals(this.roleId);
}
}

View File

@@ -1,114 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysTenant;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 租户业务对象 sys_tenant
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysTenant.class, reverseConvertGenerate = false)
public class SysTenantBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 租户编号
*/
private String tenantId;
/**
* 联系人
*/
@NotBlank(message = "联系人不能为空", groups = { AddGroup.class, EditGroup.class })
private String contactUserName;
/**
* 联系电话
*/
@NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
private String contactPhone;
/**
* 企业名称
*/
@NotBlank(message = "企业名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String companyName;
/**
* 用户名(创建系统用户)
*/
@NotBlank(message = "用户名不能为空", groups = { AddGroup.class })
private String username;
/**
* 密码(创建系统用户)
*/
@NotBlank(message = "密码不能为空", groups = { AddGroup.class })
private String password;
/**
* 统一社会信用代码
*/
private String licenseNumber;
/**
* 地址
*/
private String address;
/**
* 域名
*/
private String domain;
/**
* 企业简介
*/
private String intro;
/**
* 备注
*/
private String remark;
/**
* 租户套餐编号
*/
@NotNull(message = "租户套餐不能为空", groups = { AddGroup.class })
private Long packageId;
/**
* 过期时间
*/
private Date expireTime;
/**
* 用户数量(-1不限制
*/
private Long accountCount;
/**
* 租户状态0正常 1停用
*/
private String status;
}

View File

@@ -1,59 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysTenantPackage;
/**
* 租户套餐业务对象 sys_tenant_package
*
* @author Michelle.Chung
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysTenantPackage.class, reverseConvertGenerate = false)
public class SysTenantPackageBo extends BaseEntity {
/**
* 租户套餐id
*/
@NotNull(message = "租户套餐id不能为空", groups = { EditGroup.class })
private Long packageId;
/**
* 套餐名称
*/
@NotBlank(message = "套餐名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String packageName;
/**
* 关联菜单id
*/
@AutoMapping(target = "menuIds", expression = "java(org.ruoyi.common.core.utils.StringUtils.join(source.getMenuIds(), \",\"))")
private Long[] menuIds;
/**
* 备注
*/
private String remark;
/**
* 菜单树选择项是否关联显示
*/
private Boolean menuCheckStrictly;
/**
* 状态0正常 1停用
*/
private String status;
}

View File

@@ -1,140 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.ruoyi.common.core.constant.UserConstants;
import org.ruoyi.common.core.xss.Xss;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.common.sensitive.annotation.Sensitive;
import org.ruoyi.common.sensitive.core.SensitiveStrategy;
import org.ruoyi.system.domain.SysUser;
/**
* 用户信息业务对象 sys_user
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysUser.class, reverseConvertGenerate = false)
public class SysUserBo extends BaseEntity {
/**
* 用户ID
*/
private Long userId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
private String userName;
/**
* 用户昵称
*/
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName;
/**
* 用户类型sys_user系统用户
*/
private String userType;
/**
* 用户邮箱
*/
@Sensitive(strategy = SensitiveStrategy.EMAIL)
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
* 手机号码
*/
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String phonenumber;
/**
* 用户性别0男 1女 2未知
*/
private String sex;
/**
* 密码
*/
private String password;
/**
* 用户套餐
*/
private String userPlan;
/**
* 帐号状态0正常 1停用
*/
private String status;
/**
* 微信头像
*/
private String avatar;
/**
* 备注
*/
private String remark;
/**
* 注册域名
*/
private String domainName;
/**
* 角色组
*/
private Long[] roleIds;
/**
* 岗位组
*/
private Long[] postIds;
/**
* 数据权限 当前角色ID
*/
private Long roleId;
/** 普通用户的标识,对当前开发者帐号唯一。一个openid对应一个公众号或小程序 */
private String openId;
/** 用户等级 */
private String userGrade;
/** 用户余额 */
private Double userBalance;
public SysUserBo(Long userId) {
this.userId = userId;
}
public boolean isSuperAdmin() {
return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
}
}

View File

@@ -1,48 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.system.domain.SysUserGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 【请填写功能名称】业务对象 sys_user_group
*
* @author Lion Li
* @date 2024-08-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysUserGroup.class, reverseConvertGenerate = false)
public class SysUserGroupBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 用户组名称
*/
@NotBlank(message = "用户组名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String groupName;
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;
/**
* 更新IP
*/
@NotBlank(message = "更新IP不能为空", groups = { AddGroup.class, EditGroup.class })
private String updateIp;
}

View File

@@ -1,42 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.SysUserModel;
/**
* 【请填写功能名称】业务对象 sys_user_model
*
* @author Lion Li
* @date 2024-08-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysUserModel.class, reverseConvertGenerate = false)
public class SysUserModelBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 模型id
*/
@NotNull(message = "模型id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long mid;
/**
* 用户组id
*/
@NotNull(message = "用户组id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long gid;
}

View File

@@ -1,32 +0,0 @@
package org.ruoyi.system.domain.bo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 描述用户密码修改bo
*
* @author ageerle@163.com
* date 2025/3/9
*/
@Data
public class SysUserPasswordBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 旧密码
*/
@NotBlank(message = "旧密码不能为空")
private String oldPassword;
/**
* 新密码
*/
@NotBlank(message = "新密码不能为空")
private String newPassword;
}

View File

@@ -1,55 +0,0 @@
package org.ruoyi.system.domain.bo;
import org.ruoyi.common.core.xss.Xss;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.common.sensitive.annotation.Sensitive;
import org.ruoyi.common.sensitive.core.SensitiveStrategy;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 个人信息业务处理
*
* @author Michelle.Chung
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SysUserProfileBo extends BaseEntity {
/**
* 用户ID
*/
private Long userId;
/**
* 用户昵称
*/
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName;
/**
* 用户邮箱
*/
@Sensitive(strategy = SensitiveStrategy.EMAIL)
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
* 手机号码
*/
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String phonenumber;
/**
* 用户性别0男 1女 2未知
*/
private String sex;
}

View File

@@ -1,63 +0,0 @@
package org.ruoyi.system.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.WxRobConfig;
/**
* 微信机器人业务对象 wx_rob_config
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = WxRobConfig.class, reverseConvertGenerate = false)
public class WxRobConfigBo extends BaseEntity {
/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 用户id
*/
private Long userId;
/**
* 机器人名称
*/
private String botName;
/**
* 机器唯一码
*/
private String uniqueKey;
/**
* 默认好友回复开关
*/
private String defaultFriend;
/**
* 默认群回复开关
*/
private String defaultGroup;
/**
* 机器启用1禁用0
*/
private String enable;
/**
* 备注
*/
private String remark;
}

View File

@@ -1,73 +0,0 @@
package org.ruoyi.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.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.WxRobKeyword;
/**
* 【请填写功能名称】业务对象 wx_rob_keyword
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = WxRobKeyword.class, reverseConvertGenerate = false)
public class WxRobKeywordBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 机器唯一码
*/
@NotBlank(message = "机器唯一码不能为空", groups = { AddGroup.class, EditGroup.class })
private String uniqueKey;
/**
* 关键词
*/
@NotBlank(message = "关键词不能为空", groups = { AddGroup.class, EditGroup.class })
private String keyData;
/**
* 回复内容
*/
@NotBlank(message = "回复内容不能为空", groups = { AddGroup.class, EditGroup.class })
private String valueData;
/**
* 回复类型
*/
@NotBlank(message = "回复类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String typeData;
/**
* 目标昵称
*/
@NotBlank(message = "目标昵称不能为空", groups = { AddGroup.class, EditGroup.class })
private String nickName;
/**
* 群1好友0
*/
@NotNull(message = "群1好友0不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer toGroup;
/**
* 启用1禁用0
*/
@NotNull(message = "启用1禁用0不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer enable;
}

View File

@@ -1,67 +0,0 @@
package org.ruoyi.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.ruoyi.common.core.validate.AddGroup;
import org.ruoyi.common.core.validate.EditGroup;
import org.ruoyi.common.mybatis.core.domain.BaseEntity;
import org.ruoyi.system.domain.WxRobRelation;
/**
* 【请填写功能名称】业务对象 wx_rob_relation
*
* @author Lion Li
* @date 2024-05-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = WxRobRelation.class, reverseConvertGenerate = false)
public class WxRobRelationBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 外接唯一码
*/
@NotBlank(message = "外接唯一码不能为空", groups = { AddGroup.class, EditGroup.class })
private String outKey;
/**
* 机器唯一码
*/
@NotBlank(message = "机器唯一码不能为空", groups = { AddGroup.class, EditGroup.class })
private String uniqueKey;
/**
* 目标昵称
*/
@NotBlank(message = "目标昵称不能为空", groups = { AddGroup.class, EditGroup.class })
private String nickName;
/**
* 群1好友0
*/
@NotNull(message = "群1好友0不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer toGroup;
/**
* 启用1禁用0
*/
@NotNull(message = "启用1禁用0不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer enable;
/**
* IP白名单
*/
@NotBlank(message = "IP白名单不能为空", groups = { AddGroup.class, EditGroup.class })
private String whiteList;
}

View File

@@ -1,31 +0,0 @@
package org.ruoyi.system.domain.model;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
/**
* @author https://www.wdbyte.com
*/
@Slf4j
@Getter
@Setter
public class ApiResult {
private Integer code;
private String message;
private Object data;
public ApiResult() {
}
public ApiResult(Integer code, String message) {
this.code = code;
this.message = message;
}
public ApiResult(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
}

View File

@@ -1,58 +0,0 @@
package org.ruoyi.system.domain.model;
import lombok.Data;
@Data
public class ReceiveMessage {
/**
* 开发者微信号
*/
private String toUserName;
/**
* 发送方账号(一个openid
*/
private String fromUserName;
/**
* 消息创建时间(整形)
*/
private String createTime;
/**
* 消息类型
*/
private String msgType;
/**
* 文本消息内容
*/
private String content;
/**
* 消息ID 64位
*/
String msgId;
/**
* 消息的数据ID 消息来自文章才有
*/
private String msgDataId;
/**
* 多图文时第几篇文章从1开始 消息如果来自文章才有
*/
private String idx;
/**
* 订阅事件 subscribe 订阅 unsbscribe 取消订阅
*/
private String event;
/**
* 扫码 - ticket
*/
private String ticket;
public String getReplyTextMsg(String msg) {
String xml = "<xml>\n"
+ " <ToUserName><![CDATA[" + getFromUserName() + "]]></ToUserName>\n"
+ " <FromUserName><![CDATA[" + getToUserName() + "]]></FromUserName>\n"
+ " <CreateTime>" + System.currentTimeMillis() + "</CreateTime>\n"
+ " <MsgType><![CDATA[text]]></MsgType>\n"
+ " <Content><![CDATA[" + msg + "]]></Content>\n"
+ " </xml>";
return xml;
}
}

View File

@@ -1,15 +0,0 @@
package org.ruoyi.system.domain.model;
import lombok.Data;
/**
* @author https://www.wdbyte.com
*/
@Data
public class WeixinQrCode {
private String ticket;
private Long expireSeconds;
private String url;
private String qrCodeUrl;
}

View File

@@ -1,18 +0,0 @@
package org.ruoyi.system.domain.request;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 用户登录
*/
@Data
public class EmailRequest {
/**
* 账号
*/
@NotNull(message = "账号不能为空")
private String username;
}

View File

@@ -1,32 +0,0 @@
package org.ruoyi.system.domain.request;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class OrderRequest {
/**
* 商品金额
*/
@NotNull(message = "商品金额")
private String money;
/**
* 商品名称
*/
@NotNull(message = "商品名称")
private String name;
/**
* 订单编号
*/
@NotNull(message = "订单编号")
private String orderNo;
/**
* 支付方式
*/
@NotNull(message = "支付方式")
private String payType;
}

View File

@@ -1,18 +0,0 @@
package org.ruoyi.system.domain.request;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 编辑用户
*/
@Data
public class UserRequest {
/**
* 用户名称
*/
@NotNull(message = "用户名称不能为空")
private String nickName;
}

View File

@@ -1,29 +0,0 @@
package org.ruoyi.system.domain.request.translation;
import lombok.Data;
/**
* 描述:翻译请求对象
*
* @author ageerle@163.com
* date 2025/1/13
*/
@Data
public class TranslationRequest {
/**
* 提示词
*/
private String prompt;
/**
* 模型名称
*/
private String model;
/**
* 目标语言
*/
private String targetLanguage;
}

Some files were not shown because too many files have changed in this diff Show More