Commit f0671e22 authored by 夏韬's avatar 夏韬

修改

parent 09025ad9
## 平台简介
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
性别男,若依是给女儿取的名字(寓意:你若不离不弃,我必生死相依)
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
* 前后端分离版本,请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 感谢 [hplus](https://gitee.com/hplus_admin/hplus) 后台主题 UI 框架。
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)  
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)  
## 内置功能 ## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
...@@ -31,61 +18,3 @@ ...@@ -31,61 +18,3 @@
16. 缓存监控:对系统的缓存查询,删除、清空等操作。 16. 缓存监控:对系统的缓存查询,删除、清空等操作。
17. 在线构建器:拖动表单元素生成相应的HTML代码。 17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://ruoyi.vip
文档地址:http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-42e518aa72a24d228427a1261cb3679f395.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-7f20dd0edba25e5187c5c4dd3ec7d3d9797.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-2dae3d87f6a8ca05057db059cd9a411d51d.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-ea4d98423471e55fba784694e45d12bd4bb.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-7f6c6e9f5873efca09bd2870ee8468b8fce.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c708b65f2c382a03f69fe1efa8d341e6cff.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-9ab586c47dd5c7b92bca0d727962c90e3b8.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-ef954122a2080e02013112db21754b955c6.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-088edb4d531e122415a1e2342bccb1a9691.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-f886fe19bd820c0efae82f680223cac196c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-c7a2eb71fa65d6e660294b4bccca613d638.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-e60137fb0787defe613bd83331dc4755a70.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-7c51c1b5758f0a0f92ed3c60469b7526f9f.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-15181aed45bb2461aa97b594cbf2f86ea5f.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-83326ad52ea63f67233d126226738054d98.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-3bd6d31e913b70df00107db51d64ef81df7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-70a2225836bc82042a6785edf6299e2586a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-0184d6ab01fdc6667a14327fcaf8b46345d.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-64d8086dc2c02c8f71170290482f7640098.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
## 若依交流群
QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [![加入QQ群](https://img.shields.io/badge/已满-1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [![加入QQ群](https://img.shields.io/badge/已满-1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz) [![加入QQ群](https://img.shields.io/badge/已满-86752435-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) [![加入QQ群](https://img.shields.io/badge/已满-134072510-blue.svg)](https://jq.qq.com/?_wv=1027&k=5ZIjaeP) [![加入QQ群](https://img.shields.io/badge/已满-210336300-blue.svg)](https://jq.qq.com/?_wv=1027&k=5CJw1jY) [![加入QQ群](https://img.shields.io/badge/已满-339522636-blue.svg)](https://jq.qq.com/?_wv=1027&k=5omzbKc) [![加入QQ群](https://img.shields.io/badge/已满-130035985-blue.svg)](https://jq.qq.com/?_wv=1027&k=qPIKBb7s) [![加入QQ群](https://img.shields.io/badge/已满-143151071-blue.svg)](https://jq.qq.com/?_wv=1027&k=4NsjKbtU) [![加入QQ群](https://img.shields.io/badge/已满-158781320-blue.svg)](https://jq.qq.com/?_wv=1027&k=VD2pkz2G) [![加入QQ群](https://img.shields.io/badge/已满-201531282-blue.svg)](https://jq.qq.com/?_wv=1027&k=HlshFwkJ) [![加入QQ群](https://img.shields.io/badge/已满-101526938-blue.svg)](https://jq.qq.com/?_wv=1027&k=0ARRrO9V) [![加入QQ群](https://img.shields.io/badge/264355400-blue.svg)](https://jq.qq.com/?_wv=1027&k=up9k3ZXJ)
\ No newline at end of file
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
</dependencyManagement> </dependencyManagement>
<modules> <modules>
<module>ruoyi-admin</module> <module>qly-admin</module>
<module>ruoyi-framework</module> <module>ruoyi-framework</module>
<module>ruoyi-system</module> <module>ruoyi-system</module>
<module>ruoyi-quartz</module> <module>ruoyi-quartz</module>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId> <artifactId>qly-admin</artifactId>
<description> <description>
web服务入口 web服务入口
...@@ -74,6 +74,18 @@ ...@@ -74,6 +74,18 @@
<version>7.4.2</version> <version>7.4.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.4.2</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.ruoyi.web.controller.business;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.Industry;
import com.ruoyi.business.service.IIndustryService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.domain.Ztree;
/**
* 行业Controller
*
* @author xiatao
* @date 2022-02-08
*/
@Controller
@RequestMapping("/business/industry")
public class IndustryController extends BaseController
{
private String prefix = "business/industry";
@Autowired
private IIndustryService industryService;
@RequiresPermissions("business:industry:view")
@GetMapping()
public String industry()
{
return prefix + "/industry";
}
/**
* 查询行业树列表
*/
@RequiresPermissions("business:industry:list")
@PostMapping("/list")
@ResponseBody
public List<Industry> list(Industry industry)
{
List<Industry> list = industryService.selectIndustryList(industry);
return list;
}
/**
* 导出行业列表
*/
@RequiresPermissions("business:industry:export")
@Log(title = "行业", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(Industry industry)
{
List<Industry> list = industryService.selectIndustryList(industry);
ExcelUtil<Industry> util = new ExcelUtil<Industry>(Industry.class);
return util.exportExcel(list, "行业数据");
}
/**
* 新增行业
*/
@GetMapping(value = { "/add/{id}", "/add/" })
public String add(@PathVariable(value = "id", required = false) Long id, ModelMap mmap)
{
if (StringUtils.isNotNull(id))
{
mmap.put("industry", industryService.selectIndustryById(id));
}
return prefix + "/add";
}
/**
* 新增保存行业
*/
@RequiresPermissions("business:industry:add")
@Log(title = "行业", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(Industry industry)
{
if(industry.getStatus() == null){
industry.setStatus(0);
}
return toAjax(industryService.insertIndustry(industry));
}
/**
* 修改行业
*/
@RequiresPermissions("business:industry:edit")
@GetMapping("/edit/{id}")
public String edit(@PathVariable("id") Long id, ModelMap mmap)
{
Industry industry = industryService.selectIndustryById(id);
mmap.put("industry", industry);
return prefix + "/edit";
}
/**
* 修改保存行业
*/
@RequiresPermissions("business:industry:edit")
@Log(title = "行业", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(Industry industry)
{
if(industry.getStatus() == null){
industry.setStatus(0);
}
return toAjax(industryService.updateIndustry(industry));
}
/**
* 删除
*/
@RequiresPermissions("business:industry:remove")
@Log(title = "行业", businessType = BusinessType.DELETE)
@GetMapping("/remove/{id}")
@ResponseBody
public AjaxResult remove(@PathVariable("id") Long id)
{
return toAjax(industryService.deleteIndustryById(id));
}
/**
* 选择行业树
*/
@GetMapping(value = { "/selectIndustryTree/{id}", "/selectIndustryTree/" })
public String selectIndustryTree(@PathVariable(value = "id", required = false) Long id, ModelMap mmap)
{
if (StringUtils.isNotNull(id))
{
mmap.put("industry", industryService.selectIndustryById(id));
}
return prefix + "/tree";
}
/**
* 加载行业树列表
*/
@GetMapping("/treeData")
@ResponseBody
public List<Ztree> treeData()
{
List<Ztree> ztrees = industryService.selectIndustryTree();
return ztrees;
}
}
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.business.service.*; import com.ruoyi.business.service.IReRewardService;
import com.ruoyi.business.service.impl.TbUserServiceImpl; import com.ruoyi.business.service.ITbPaymentService;
import com.ruoyi.business.service.ITbUserMemberService;
import com.ruoyi.business.service.ITbUserService;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.ShiroConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.CookieUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.web.util.EsUtil; import com.ruoyi.web.util.EsUtil;
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest; import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse; import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -29,20 +37,13 @@ import org.springframework.web.bind.annotation.GetMapping; ...@@ -29,20 +37,13 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.ShiroConstants; import javax.servlet.http.Cookie;
import com.ruoyi.common.core.controller.BaseController; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.AjaxResult; import java.io.IOException;
import com.ruoyi.common.core.domain.entity.SysMenu; import java.util.Date;
import com.ruoyi.common.core.domain.entity.SysUser; import java.util.HashMap;
import com.ruoyi.common.core.text.Convert; import java.util.List;
import com.ruoyi.common.utils.CookieUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysMenuService;
/** /**
* 首页 业务处理 * 首页 业务处理
...@@ -165,18 +166,25 @@ public class SysIndexController extends BaseController ...@@ -165,18 +166,25 @@ public class SysIndexController extends BaseController
private IReRewardService reRewardService; private IReRewardService reRewardService;
@Autowired @Autowired
private RestHighLevelClient esRestClient; private RestHighLevelClient restHighLevelClient;
// 系统介绍 // 系统介绍
@GetMapping("/system/main") @GetMapping("/system/main")
public String main(ModelMap mmap) throws IOException { public String main(ModelMap mmap) throws IOException {
mmap.put("version", RuoYiConfig.getVersion()); mmap.put("version", RuoYiConfig.getVersion());
return "main_v1";
}
@GetMapping("/system/main/info")
@ResponseBody
public AjaxResult mainInfo() throws IOException {
DateTime endTime = DateUtil.beginOfDay(DateUtil.date()); DateTime endTime = DateUtil.beginOfDay(DateUtil.date());
DateTime startTime = endTime.offsetNew(DateField.DAY_OF_YEAR,-1); DateTime startTime = endTime.offsetNew(DateField.DAY_OF_YEAR,-1);
int userTotal = tbUserService.selectCount(null , null); int userTotal = tbUserService.selectCount(null , null);
int userYesTodayTotal = tbUserService.selectCount(startTime, endTime); int userYesTodayTotal = tbUserService.selectCount(startTime, endTime);
//
int vipTotal = memberService.selectCount(null, null); int vipTotal = memberService.selectCount(null, null);
int vipYesTodayTotal = memberService.selectCount(startTime, endTime); int vipYesTodayTotal = memberService.selectCount(startTime, endTime);
...@@ -215,26 +223,26 @@ public class SysIndexController extends BaseController ...@@ -215,26 +223,26 @@ public class SysIndexController extends BaseController
// 招标项目数 // 招标项目数
searchSourceBuilder.query(new BoolQueryBuilder().filter(QueryBuilders.termQuery("bidState", 0))); searchSourceBuilder.query(new BoolQueryBuilder().filter(QueryBuilders.termQuery("bidState", 0)));
CountResponse count = esRestClient.count(countRequest, RequestOptions.DEFAULT); CountResponse count = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
long bidCount = count.getCount(); long bidCount = count.getCount();
// 中标项目数 // 中标项目数
searchSourceBuilder.query(new BoolQueryBuilder().filter(QueryBuilders.termQuery("bidState", 1))); searchSourceBuilder.query(new BoolQueryBuilder().filter(QueryBuilders.termQuery("bidState", 1)));
CountResponse winBidCountResponse = esRestClient.count(countRequest, RequestOptions.DEFAULT); CountResponse winBidCountResponse = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
long winBidCount = winBidCountResponse.getCount(); long winBidCount = winBidCountResponse.getCount();
BoolQueryBuilder bidState = new BoolQueryBuilder() BoolQueryBuilder bidState = new BoolQueryBuilder()
.filter(QueryBuilders.termQuery("bidState", 0)) .filter(QueryBuilders.termQuery("bidState", 0))
.filter(QueryBuilders.rangeQuery("creatTime").gte(startTime.getTime() / 1000L).lt(endTime.getTime() / 1000L)); .filter(QueryBuilders.rangeQuery("createTime").gte(startTime.getTime() / 1000L).lt(endTime.getTime() / 1000L));
searchSourceBuilder.query(bidState); searchSourceBuilder.query(bidState);
CountResponse yesTodayBidCountResponse = esRestClient.count(countRequest, RequestOptions.DEFAULT); CountResponse yesTodayBidCountResponse = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
long yesTodayBidCount = yesTodayBidCountResponse.getCount(); long yesTodayBidCount = yesTodayBidCountResponse.getCount();
BoolQueryBuilder winBidState = new BoolQueryBuilder() BoolQueryBuilder winBidState = new BoolQueryBuilder()
.filter(QueryBuilders.termQuery("bidState", 1)) .filter(QueryBuilders.termQuery("bidState", 1))
.filter(QueryBuilders.rangeQuery("creatTime").gte(startTime.getTime() / 1000L).lt(endTime.getTime() / 1000L)); .filter(QueryBuilders.rangeQuery("createTime").gte(startTime.getTime() / 1000L).lt(endTime.getTime() / 1000L));
searchSourceBuilder.query(winBidState); searchSourceBuilder.query(winBidState);
CountResponse yesTodayWinBidCountResponse = esRestClient.count(countRequest, RequestOptions.DEFAULT); CountResponse yesTodayWinBidCountResponse = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
long yesTodayWinBidCount = yesTodayWinBidCountResponse.getCount(); long yesTodayWinBidCount = yesTodayWinBidCountResponse.getCount();
map.put("bidCount", bidCount); map.put("bidCount", bidCount);
...@@ -243,14 +251,12 @@ public class SysIndexController extends BaseController ...@@ -243,14 +251,12 @@ public class SysIndexController extends BaseController
map.put("winBidCount", winBidCount); map.put("winBidCount", winBidCount);
map.put("yesTodayWinBidCount", yesTodayWinBidCount); map.put("yesTodayWinBidCount", yesTodayWinBidCount);
mmap.put("statisMap", map);
System.out.println(JSONObject.toJSONString(map)); System.out.println(JSONObject.toJSONString(map));
return "main_v1"; return AjaxResult.success(map);
} }
// content-main class // content-main class
public String contentMainClass(Boolean footer, Boolean tagsView) public String contentMainClass(Boolean footer, Boolean tagsView)
{ {
......
package com.ruoyi.web.core.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
* @Deacription ElasticSearch 配置
* @Author xiatao
* @Date 2022年1月19日11:52:56
* @Version 1.0
**/
@Configuration
public class ElasticSearchConfiguration {
/** 协议 */
@Value("${elasticsearch.schema:http}")
private String schema;
/** 集群地址,如果有多个用“,”隔开 */
@Value("${elasticsearch.address}")
private String address;
/** 连接超时时间 */
@Value("${elasticsearch.connectTimeout}")
private int connectTimeout;
/** Socket 连接超时时间 */
@Value("${elasticsearch.socketTimeout}")
private int socketTimeout;
/** 获取连接的超时时间 */
@Value("${elasticsearch.connectionRequestTimeout}")
private int connectionRequestTimeout;
/** 最大连接数 */
@Value("${elasticsearch.maxConnectNum}")
private int maxConnectNum;
/** 最大路由连接数 */
@Value("${elasticsearch.maxConnectPerRoute}")
private int maxConnectPerRoute;
@Bean(name = "restHighLevelClient")
public RestHighLevelClient restHighLevelClient() {
// 拆分地址
List<HttpHost> hostLists = new ArrayList<>();
String[] hostList = address.split(",");
for (String addr : hostList) {
String host = addr.split(":")[0];
String port = addr.split(":")[1];
hostLists.add(new HttpHost(host, Integer.parseInt(port), schema));
}
// 转换成 HttpHost 数组
HttpHost[] httpHost = hostLists.toArray(new HttpHost[]{});
// 构建连接对象
RestClientBuilder builder = RestClient.builder(httpHost);
// 异步连接延时配置
builder.setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder.setConnectTimeout(connectTimeout);
requestConfigBuilder.setSocketTimeout(socketTimeout);
requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeout);
return requestConfigBuilder;
});
// 异步连接数配置
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(maxConnectNum);
httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
return httpClientBuilder;
});
return new RestHighLevelClient(builder);
}
}
\ No newline at end of file
...@@ -140,3 +140,13 @@ xss: ...@@ -140,3 +140,13 @@ xss:
swagger: swagger:
# 是否开启swagger # 是否开启swagger
enabled: true enabled: true
elasticsearch:
schema: http
address: 47.116.24.235:9200
connectTimeout: 5000
socketTimeout: 5000
connectionRequestTimeout: 5000
maxConnectNum: 100
maxConnectPerRoute: 100
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!-- 日志存放路径 --> <!-- 日志存放路径 -->
<property name="log.path" value="/home/ruoyi/logs" /> <property name="log.path" value="/home/admin/logs" />
<!-- 日志输出格式 --> <!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增行业')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-industry-add">
<div class="form-group">
<label class="col-sm-3 control-label is-required">行业名称:</label>
<div class="col-sm-8">
<input name="name" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">等级:</label>
<div class="col-sm-8">
<input name="level" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">父节点id:</label>
<div class="col-sm-8">
<div class="input-group">
<input id="treeId" name="pId" type="hidden" th:value="${industry?.id}"/>
<input class="form-control" type="text" onclick="selectIndustryTree()" id="treeName" readonly="true" th:value="${industry?.name}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">状态:</label>
<div class="col-sm-9">
<label class="toggle-switch switch-solid">
<input type="checkbox" id="status" name="status" value="1" checked=""> <span></span>
</label>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">行业发散:</label>
<div class="col-sm-8">
<input name="tags" class="form-control" type="text" required>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "business/industry"
$("#form-industry-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-industry-add').serialize());
}
}
/*行业-新增-选择父行业树*/
function selectIndustryTree() {
var options = {
title: '行业选择',
width: "380",
url: prefix + "/selectIndustryTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = $.modal.getChildFrame(index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
$.modal.close(index);
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改行业')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-industry-edit" th:object="${industry}">
<input name="id" th:field="*{id}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label is-required">行业名称:</label>
<div class="col-sm-8">
<input name="name" th:field="*{name}" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">等级:</label>
<div class="col-sm-8">
<input name="level" th:field="*{level}" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">父节点id:</label>
<div class="col-sm-8">
<div class="input-group">
<input id="treeId" name="pId" type="hidden" th:field="*{pId}" />
<input class="form-control" type="text" onclick="selectIndustryTree()" id="treeName" readonly="true" th:field="*{parentName}">
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">状态:</label>
<div class="col-sm-9">
<label class="toggle-switch switch-solid">
<input type="checkbox" id="status" name="status" value="1" checked="" th:field="*{status}"> <span></span>
</label>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">行业发散:</label>
<div class="col-sm-8">
<input name="tags" th:field="*{tags}" class="form-control" type="text" required>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "business/industry";
$("#form-industry-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-industry-edit').serialize());
}
}
/*行业-编辑-选择父行业树*/
function selectIndustryTree() {
var options = {
title: '行业选择',
width: "380",
url: prefix + "/selectIndustryTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = $.modal.getChildFrame(index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
$.modal.close(index);
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('行业列表')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>行业名称:</label>
<input type="text" name="name"/>
</li>
<li>
<label>等级:</label>
<input type="text" name="level"/>
</li>
<li>
<label>父节点id:</label>
<input type="text" name="pId"/>
</li>
<li>
<label>行业发散:</label>
<input type="text" name="tags"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="business:industry:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="business:industry:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-info" id="expandAllBtn">
<i class="fa fa-exchange"></i> 展开/折叠
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-tree-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('business:industry:add')}]];
var editFlag = [[${@permission.hasPermi('business:industry:edit')}]];
var removeFlag = [[${@permission.hasPermi('business:industry:remove')}]];
var prefix = ctx + "business/industry";
var datas = [[${@dict.getType('status_open')}]];
$(function() {
var options = {
code: "id",
parentCode: "pId",
expandColumn: "1",
uniqueId: "id",
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove/{id}",
exportUrl: prefix + "/export",
modalName: "行业",
columns: [{
field: 'selectItem',
radio: true
},
{
field: 'name',
title: '行业名称',
align: 'left'
},
{
field: 'level',
title: '等级',
align: 'left'
},
{
field: 'pId',
title: '父节点id',
align: 'left'
},
{
field: 'tags',
title: '行业发散',
align: 'left'
},
{
field: 'status',
title: '状态',
align: 'left',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
title: '操作',
align: 'center',
align: 'left',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="$.operate.add(\'' + row.id + '\')"><i class="fa fa-plus"></i>新增</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.treeTable.init(options);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('行业树选择')" />
<th:block th:include="include :: ztree-css" />
</head>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
<input id="treeId" name="treeId" type="hidden" th:value="${industry?.id}"/>
<input id="treeName" name="treeName" type="hidden" th:value="${industry?.name}"/>
<div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
<label id="btnShow" title="显示搜索" style="display:none;"></label>
<label id="btnHide" title="隐藏搜索"></label>
</div>
<div class="treeSearchInput" id="search">
<label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
<button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button>
</div>
<div class="treeExpandCollapse">
<a href="#" onclick="$.tree.expand()">展开</a> /
<a href="#" onclick="$.tree.collapse()">折叠</a>
</div>
<div id="tree" class="ztree treeselect"></div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: ztree-js" />
<script th:inline="javascript">
$(function() {
var url = ctx + "business/industry/treeData";
var options = {
url: url,
expandLevel: 2,
onClick : zOnClick
};
$.tree.init(options);
});
function zOnClick(event, treeId, treeNode) {
var treeId = treeNode.id;
var treeName = treeNode.name;
$("#treeId").val(treeId);
$("#treeName").val(treeName);
}
</script>
</body>
</html>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>若依系统首页</title> <title>招标密探系统首页</title>
<!-- 避免IE使用兼容模式 --> <!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link th:href="@{favicon.ico}" rel="shortcut icon"/> <link th:href="@{favicon.ico}" rel="shortcut icon"/>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>若依系统首页</title> <title>招标密探系统首页</title>
<!-- 避免IE使用兼容模式 --> <!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link th:href="@{favicon.ico}" rel="shortcut icon"/> <link th:href="@{favicon.ico}" rel="shortcut icon"/>
......
...@@ -12,17 +12,18 @@ ...@@ -12,17 +12,18 @@
</head> </head>
<body class="gray-bg"> <body class="gray-bg">
<div class="wrapper wrapper-content" th:object="${statisMap}"> <div class="wrapper wrapper-content">
<div class="row"> <div class="row">
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h1>40,886,200</h1></span>
<span class="pull-right"><h2 id="userTotal"></h2></span>
<h2>用户总数</h2> <h2>用户总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="userYesTodayTotal"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -30,11 +31,11 @@ ...@@ -30,11 +31,11 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>40,886,200</h2></span> <span class="pull-right"><h2 id="vipTotal"></h2></span>
<h2>会员总数</h2> <h2>会员总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="vipYesTodayTotal"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -42,11 +43,11 @@ ...@@ -42,11 +43,11 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>40,886,200</h2></span> <span class="pull-right"><h2 id="paymentTotal"></h2></span>
<h2>订单总数</h2> <h2>订单总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="paymentYesTodayTotal"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -54,12 +55,12 @@ ...@@ -54,12 +55,12 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>40,886,200元</h2></span> <span class="pull-right"><h2 id="paymentSumAmt"></h2></span>
<h2>订单总金额</h2> <h2>订单总金额(元)</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="paymentYesTodaySumAmt"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增(元)</h2>
</div> </div>
</div> </div>
</div> </div>
...@@ -70,11 +71,11 @@ ...@@ -70,11 +71,11 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>1,200</h2></span> <span class="pull-right"><h2 id="bidCount"></h2></span>
<h2>招标项目总数</h2> <h2>招标项目总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="yesTodayBidCount"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -83,11 +84,11 @@ ...@@ -83,11 +84,11 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>4,000</h2></span> <span class="pull-right"><h2 id="winBidCount"></h2></span>
<h2>中标项目总数</h2> <h2>中标项目总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="yesTodayWinBidCount"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -95,11 +96,11 @@ ...@@ -95,11 +96,11 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>4000</h2></span> <span class="pull-right"><h2 id="reRewardTotal"></h2></span>
<h2>悬赏总数</h2> <h2>悬赏总数</h2>
</div> </div>
<div class="ibox-content"> <div class="ibox-content">
<span class="pull-right"><h2>200<i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span> <span class="pull-right"><h2 id="reRewardYesTodayTotal"><i class="glyphicon glyphicon-arrow-up text-navy"></i></h2></span>
<h2>昨日新增</h2> <h2>昨日新增</h2>
</div> </div>
</div> </div>
...@@ -218,10 +219,26 @@ ...@@ -218,10 +219,26 @@
var $lable = $("#flot-dashboard-chart > div.tickLabels > div.xAxis.x1Axis > div:nth-child(" + i + ")"); var $lable = $("#flot-dashboard-chart > div.tickLabels > div.xAxis.x1Axis > div:nth-child(" + i + ")");
let css = $lable.css("left"); let css = $lable.css("left");
let splitElement = css.split("px")[0] - 34; let splitElement = css.split("px")[0] - 34;
console.log(css.split(",")[0] + "原来:"+ css +",现在"+ splitElement)
$lable.css("left", splitElement + "px"); $lable.css("left", splitElement + "px");
} }
$.ajax({
url : "/system/main/info",
type : "get",
success :function(response){
let data = response["data"];
for(var key in data){
$("#" + key).html(data[key]);
console.log(data[key]);
}
}
})
}); });
</script> </script>
</body> </body>
</html> </html>
package com.ruoyi.web.core.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class EsConfig {
@Bean
public RestHighLevelClient esRestClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("47.116.24.235",9200,"http")
)
);
return client;
}
}
package com.ruoyi.business.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.TreeEntity;
/**
* 行业对象 tb_industry
*
* @author xiatao
* @date 2022-02-08
*/
public class Industry extends TreeEntity
{
private static final long serialVersionUID = 1L;
/** */
private Long id;
/** 行业名称 */
@Excel(name = "行业名称")
private String name;
/** 等级 */
@Excel(name = "等级")
private Integer level;
/** 父节点id */
@Excel(name = "父节点id")
private Long pId;
/** 行业发散(比如酒,白酒,红酒)用做匹配 */
@Excel(name = "行业发散", readConverterExp = "比=如酒,白酒,红酒")
private String tags;
/** 是否启动1是0否 */
@Excel(name = "状态")
private Integer status;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setLevel(Integer level)
{
this.level = level;
}
public Integer getLevel()
{
return level;
}
public void setpId(Long pId)
{
this.pId = pId;
}
public Long getpId()
{
return pId;
}
public void setTags(String tags)
{
this.tags = tags;
}
public String getTags()
{
return tags;
}
public void setStatus(Integer status)
{
this.status = status;
}
public Integer getStatus()
{
return status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("level", getLevel())
.append("pId", getpId())
.append("tags", getTags())
.append("createTime", getCreateTime())
.append("status", getStatus())
.append("updateTime", getUpdateTime())
.toString();
}
}
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.Industry;
/**
* 行业Mapper接口
*
* @author xiatao
* @date 2022-02-08
*/
public interface IndustryMapper
{
/**
* 查询行业
*
* @param id 行业主键
* @return 行业
*/
public Industry selectIndustryById(Long id);
/**
* 查询行业列表
*
* @param industry 行业
* @return 行业集合
*/
public List<Industry> selectIndustryList(Industry industry);
/**
* 新增行业
*
* @param industry 行业
* @return 结果
*/
public int insertIndustry(Industry industry);
/**
* 修改行业
*
* @param industry 行业
* @return 结果
*/
public int updateIndustry(Industry industry);
/**
* 删除行业
*
* @param id 行业主键
* @return 结果
*/
public int deleteIndustryById(Long id);
/**
* 批量删除行业
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteIndustryByIds(String[] ids);
}
package com.ruoyi.business.mapper; package com.ruoyi.business.mapper;
import java.util.Date;
import java.util.List; import java.util.List;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.ruoyi.business.domain.ReReward; import com.ruoyi.business.domain.ReReward;
import org.apache.ibatis.annotations.Param;
/** /**
* 我的悬赏Mapper接口 * 我的悬赏Mapper接口
...@@ -61,5 +63,5 @@ public interface ReRewardMapper ...@@ -61,5 +63,5 @@ public interface ReRewardMapper
*/ */
public int deleteReRewardByRewardIds(String[] rewardIds); public int deleteReRewardByRewardIds(String[] rewardIds);
int selectCount(DateTime startTime, DateTime endTime); int selectCount(@Param("startTime") Date startTime, @Param("endTime")Date endTime);
} }
package com.ruoyi.business.mapper; package com.ruoyi.business.mapper;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.ruoyi.business.domain.TbPayment; import com.ruoyi.business.domain.TbPayment;
import org.apache.ibatis.annotations.Param;
/** /**
* 支付Mapper接口 * 支付Mapper接口
...@@ -62,7 +64,7 @@ public interface TbPaymentMapper ...@@ -62,7 +64,7 @@ public interface TbPaymentMapper
*/ */
public int deleteTbPaymentByIds(String[] ids); public int deleteTbPaymentByIds(String[] ids);
int selectCount(DateTime startTime, DateTime endTime); int selectCount(@Param("startTime") Date startTime, @Param("endTime")Date endTime);
Double selectSumAmt(DateTime startTime, DateTime endTime); Double selectSumAmt(@Param("startTime") Date startTime, @Param("endTime")Date endTime);
} }
package com.ruoyi.business.mapper; package com.ruoyi.business.mapper;
import java.util.Date;
import java.util.List; import java.util.List;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.ruoyi.business.domain.TbUserMember; import com.ruoyi.business.domain.TbUserMember;
import org.apache.ibatis.annotations.Param;
/** /**
* 我的套餐 * 我的套餐
...@@ -75,5 +77,5 @@ public interface TbUserMemberMapper ...@@ -75,5 +77,5 @@ public interface TbUserMemberMapper
*/ */
public int deleteTbUserMemberByUserMemIds(String[] userMemIds); public int deleteTbUserMemberByUserMemIds(String[] userMemIds);
int selectCount(DateTime startTime, DateTime endTime); int selectCount(@Param("startTime") Date startTime, @Param("endTime")Date endTime);
} }
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.Industry;
import com.ruoyi.common.core.domain.Ztree;
/**
* 行业Service接口
*
* @author xiatao
* @date 2022-02-08
*/
public interface IIndustryService
{
/**
* 查询行业
*
* @param id 行业主键
* @return 行业
*/
public Industry selectIndustryById(Long id);
/**
* 查询行业列表
*
* @param industry 行业
* @return 行业集合
*/
public List<Industry> selectIndustryList(Industry industry);
/**
* 新增行业
*
* @param industry 行业
* @return 结果
*/
public int insertIndustry(Industry industry);
/**
* 修改行业
*
* @param industry 行业
* @return 结果
*/
public int updateIndustry(Industry industry);
/**
* 批量删除行业
*
* @param ids 需要删除的行业主键集合
* @return 结果
*/
public int deleteIndustryByIds(String ids);
/**
* 删除行业信息
*
* @param id 行业主键
* @return 结果
*/
public int deleteIndustryById(Long id);
/**
* 查询行业树列表
*
* @return 所有行业信息
*/
public List<Ztree> selectIndustryTree();
}
package com.ruoyi.business.service.impl;
import java.util.List;
import java.util.ArrayList;
import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.mapper.IndustryMapper;
import com.ruoyi.business.domain.Industry;
import com.ruoyi.business.service.IIndustryService;
import com.ruoyi.common.core.text.Convert;
/**
* 行业Service业务层处理
*
* @author xiatao
* @date 2022-02-08
*/
@Service
public class IndustryServiceImpl implements IIndustryService
{
@Autowired
private IndustryMapper industryMapper;
/**
* 查询行业
*
* @param id 行业主键
* @return 行业
*/
@Override
public Industry selectIndustryById(Long id)
{
return industryMapper.selectIndustryById(id);
}
/**
* 查询行业列表
*
* @param industry 行业
* @return 行业
*/
@Override
public List<Industry> selectIndustryList(Industry industry)
{
return industryMapper.selectIndustryList(industry);
}
/**
* 新增行业
*
* @param industry 行业
* @return 结果
*/
@Override
public int insertIndustry(Industry industry)
{
industry.setCreateTime(DateUtils.getNowDate());
return industryMapper.insertIndustry(industry);
}
/**
* 修改行业
*
* @param industry 行业
* @return 结果
*/
@Override
public int updateIndustry(Industry industry)
{
industry.setUpdateTime(DateUtils.getNowDate());
return industryMapper.updateIndustry(industry);
}
/**
* 批量删除行业
*
* @param ids 需要删除的行业主键
* @return 结果
*/
@Override
public int deleteIndustryByIds(String ids)
{
return industryMapper.deleteIndustryByIds(Convert.toStrArray(ids));
}
/**
* 删除行业信息
*
* @param id 行业主键
* @return 结果
*/
@Override
public int deleteIndustryById(Long id)
{
return industryMapper.deleteIndustryById(id);
}
/**
* 查询行业树列表
*
* @return 所有行业信息
*/
@Override
public List<Ztree> selectIndustryTree()
{
List<Industry> industryList = industryMapper.selectIndustryList(new Industry());
List<Ztree> ztrees = new ArrayList<Ztree>();
for (Industry industry : industryList)
{
Ztree ztree = new Ztree();
ztree.setId(industry.getId());
ztree.setpId(industry.getpId());
ztree.setName(industry.getName());
ztree.setTitle(industry.getName());
ztrees.add(ztree);
}
return ztrees;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.business.mapper.IndustryMapper">
<resultMap type="com.ruoyi.business.domain.Industry" id="IndustryResult">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="level" column="level" />
<result property="pId" column="p_id" />
<result property="tags" column="tags" />
<result property="createTime" column="create_time" />
<result property="status" column="status" />
<result property="updateTime" column="update_time" />
<result property="parentName" column="parent_name" />
</resultMap>
<sql id="selectIndustryVo">
select id, name, level, p_id, tags, create_time, status, update_time from tb_industry
</sql>
<select id="selectIndustryList" parameterType="com.ruoyi.business.domain.Industry" resultMap="IndustryResult">
<include refid="selectIndustryVo"/>
<where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="level != null "> and level = #{level}</if>
<if test="pId != null "> and p_id = #{pId}</if>
<if test="tags != null and tags != ''"> and tags like concat('%', #{tags}, '%')</if>
<if test="status != null "> and status = #{status}</if>
</where>
order by p_id
</select>
<select id="selectIndustryById" parameterType="Long" resultMap="IndustryResult">
select t.id, t.name, t.level, t.p_id, t.tags, t.create_time, t.status, t.update_time, p.name as parent_name
from tb_industry t
left join tb_industry p on p.id = t.p_id
where t.id = #{id}
</select>
<insert id="insertIndustry" parameterType="com.ruoyi.business.domain.Industry">
insert into tb_industry
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="name != null and name != ''">name,</if>
<if test="level != null">level,</if>
<if test="pId != null">p_id,</if>
<if test="tags != null and tags != ''">tags,</if>
<if test="createTime != null">create_time,</if>
<if test="status != null">status,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="name != null and name != ''">#{name},</if>
<if test="level != null">#{level},</if>
<if test="pId != null">#{pId},</if>
<if test="tags != null and tags != ''">#{tags},</if>
<if test="createTime != null">#{createTime},</if>
<if test="status != null">#{status},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateIndustry" parameterType="com.ruoyi.business.domain.Industry">
update tb_industry
<trim prefix="SET" suffixOverrides=",">
<if test="name != null and name != ''">name = #{name},</if>
<if test="level != null">level = #{level},</if>
<if test="pId != null">p_id = #{pId},</if>
<if test="tags != null and tags != ''">tags = #{tags},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="status != null">status = #{status},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteIndustryById" parameterType="Long">
delete from tb_industry where id = #{id}
</delete>
<delete id="deleteIndustryByIds" parameterType="String">
delete from tb_industry where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>
\ No newline at end of file
...@@ -96,7 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -96,7 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
</select> </select>
<select id="selectSumAmt" resultType="java.lang.Double"> <select id="selectSumAmt" resultType="java.lang.Double">
select sum(total_fee) from tb_payment select sum(total_fee / 100) from tb_payment
<where> <where>
<if test="startTime != null "> and create_time >= #{startTime}</if> <if test="startTime != null "> and create_time >= #{startTime}</if>
<if test="endTime != null "> and create_time &lt; #{endTime}</if> <if test="endTime != null "> and create_time &lt; #{endTime}</if>
......
#!/bin/sh #!/bin/sh
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态 # ./ry.sh start 启动 stop 停止 restart 重启 status 状态
AppName=ruoyi-admin.jar AppName=qly-admin.jar
# JVM参数 # JVM参数
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd` APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log LOG_PATH=$APP_HOME/logs/$AppName.log
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment