作者 钟来

模块整理

正在显示 91 个修改的文件 包含 1746 行增加1886 行删除

要显示太多修改。

为保证性能只显示 91 of 91+ 个文件。

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file
... ... @@ -46,39 +46,15 @@
<artifactId>lh-quartz</artifactId>
</dependency>
<!-- 文档 -->
<dependency >
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--https://mvnrepository.com/artifact/io.swagger/swagger-models-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger-models.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-swagger</artifactId>
</dependency>
<!--&lt;!&ndash; https://mvnrepository.com/artifact/com.github.xiaoymin/swagger-bootstrap-ui &ndash;&gt;-->
<!-- 防火墙 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-ui.version}</version>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-firewall</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
... ... @@ -101,6 +77,14 @@
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-public-dao</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-action</artifactId>
</dependency>
</dependencies>
<build>
... ...
... ... @@ -9,12 +9,15 @@ import org.springframework.context.annotation.ComponentScan;
"com.ruoyi.common",
"com.ruoyi.system",
"com.ruoyi.framework",
"com.ruoyi.generator",
"com.ruoyi.quartz",
"com.zhonglai.luhui.admin.config",
"com.zhonglai.luhui.admin.service",
"com.zhonglai.luhui.admin.task",
"com.zhonglai.luhui.admin.controller",
"com.ruoyi.generator",
"com.zhonglai.luhui.datasource",
"com.zhonglai.luhui.dao",
"com.zhonglai.luhui.sys",
"com.zhonglai.luhui.redis",
"com.zhonglai.luhui.security",
"com.zhonglai.luhui.firewall",
"com.zhonglai.luhui.admin",
"com.zhonglai.luhui.mqtt.comm.service.redis",
"com.zhonglai.luhui.mqtt.service.db.mode"
})
... ...
... ... @@ -4,10 +4,10 @@ import com.google.code.kaptcha.Producer;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.sign.Base64;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.zhonglai.luhui.redis.service.RedisCache;
import com.zhonglai.luhui.sys.service.ISysConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ...
... ... @@ -3,19 +3,17 @@ package com.zhonglai.luhui.admin.controller.iot;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.IotAlert;
import com.ruoyi.system.service.IIotAlertService;
import com.ruoyi.system.domain.iot.IotAlert;
import com.ruoyi.system.service.iot.IIotAlertService;
import com.zhonglai.luhui.admin.dto.AlarmActionConfig;
import com.zhonglai.luhui.admin.dto.AlarmTriggersConfig;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
... ...
package com.zhonglai.luhui.admin.controller.iot;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.IotAlertLog;
import com.ruoyi.system.service.IIotAlertLogService;
import com.ruoyi.system.domain.iot.IotAlertLog;
import com.ruoyi.system.service.iot.IIotAlertLogService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ...
... ... @@ -3,10 +3,10 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.IotProduct;
import com.ruoyi.system.service.IIotProductService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -20,12 +20,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotDevice;
import com.ruoyi.system.service.IIotDeviceService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotDevice;
import com.ruoyi.system.service.iot.IIotDeviceService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -88,7 +86,7 @@ public class IotDeviceController extends BaseController
@PostMapping("add")
public AjaxResult add(@RequestBody IotDevice iotDevice)
{
iotDevice.setCreate_by(getUsername());
iotDevice.setCreate_by(SecurityUtils.getUsername());
iotDevice.setUpdate_time(DateUtils.getNowTimeMilly());
return toAjax(iotDeviceService.insertIotDevice(iotDevice));
}
... ... @@ -102,7 +100,7 @@ public class IotDeviceController extends BaseController
@PutMapping("edit")
public AjaxResult edit(@RequestBody IotDevice iotDevice)
{
iotDevice.setUpdate_by(getUsername());
iotDevice.setUpdate_by(SecurityUtils.getUsername());
iotDevice.setUpdate_time(DateUtils.getNowTimeMilly());
return toAjax(iotDeviceService.updateIotDevice(iotDevice));
}
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -16,12 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotPermission;
import com.ruoyi.system.service.IIotPermissionService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotPermission;
import com.ruoyi.system.service.iot.IIotPermissionService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -16,12 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotProduct;
import com.ruoyi.system.service.IIotProductService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotProduct;
import com.ruoyi.system.service.iot.IIotProductService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,7 +3,8 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.redis.RedisCache;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
... ... @@ -18,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotProductTranslate;
import com.ruoyi.system.service.IIotProductTranslateService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotProductTranslate;
import com.ruoyi.system.service.iot.IIotProductTranslateService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
... ... @@ -17,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotRole;
import com.ruoyi.system.service.IIotRoleService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotRole;
import com.ruoyi.system.service.iot.IIotRoleService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,8 +3,9 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.service.IIotProductTranslateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -18,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotTerminal;
import com.ruoyi.system.service.IIotTerminalService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotTerminal;
import com.ruoyi.system.service.iot.IIotTerminalService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,11 +3,14 @@ package com.zhonglai.luhui.admin.controller.iot;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.system.domain.DistributionCurrencyModel;
import com.ruoyi.system.domain.IotProduct;
import com.ruoyi.system.service.IIotProductService;
import com.ruoyi.system.domain.iot.IotProduct;
import com.ruoyi.system.service.iot.IIotProductService;
import com.zhonglai.luhui.admin.dto.IotThingsModelAddApi;
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.ThingsModelItemBase;
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.specs.*;
... ... @@ -26,12 +29,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotThingsModel;
import com.ruoyi.system.service.IIotThingsModelService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotThingsModel;
import com.ruoyi.system.service.iot.IIotThingsModelService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -101,7 +102,7 @@ public class IotThingsModelController extends BaseController
public AjaxResult add(@RequestBody IotThingsModelAddApi iotThingsModelAddApi)
{
IotThingsModel iotThingsModel = iotThingsModelAddApi.getIotThingsModel();
iotThingsModel.setCreate_by(getUsername());
iotThingsModel.setCreate_by(SecurityUtils.getUsername());
ThingsModelItemBase thingsModelItemBase = null;
switch (iotThingsModel.getData_type())
{
... ... @@ -150,7 +151,7 @@ public class IotThingsModelController extends BaseController
public AjaxResult edit(@RequestBody IotThingsModelAddApi iotThingsModelAddApi)
{
IotThingsModel iotThingsModel = iotThingsModelAddApi.getIotThingsModel();
iotThingsModel.setCreate_by(getUsername());
iotThingsModel.setCreate_by(SecurityUtils.getUsername());
ThingsModelItemBase thingsModelItemBase = null;
switch (iotThingsModel.getData_type())
{
... ...
... ... @@ -4,11 +4,12 @@ import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.system.domain.IotProduct;
import com.ruoyi.system.domain.IotThingsModel;
import com.ruoyi.system.service.IIotProductService;
import com.ruoyi.system.service.iot.IIotProductService;
import com.zhonglai.luhui.admin.dto.IotThingsModelAddApi;
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.ThingsModelItemBase;
import com.zhonglai.luhui.mqtt.comm.dto.thingsmodels.specs.*;
... ... @@ -25,12 +26,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.IotThingsModelTemplate;
import com.ruoyi.system.service.IIotThingsModelTemplateService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.iot.IotThingsModelTemplate;
import com.ruoyi.system.service.iot.IIotThingsModelTemplateService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -98,7 +97,7 @@ public class IotThingsModelTemplateController extends BaseController
public AjaxResult add(@RequestBody IotThingsModelAddApi iotThingsModelAddApi)
{
IotThingsModelTemplate iotThingsModel = JSONObject.parseObject(JSONObject.toJSONString(iotThingsModelAddApi.getIotThingsModel()),IotThingsModelTemplate.class);
iotThingsModel.setCreate_by(getUsername());
iotThingsModel.setCreate_by(SecurityUtils.getUsername());
ThingsModelItemBase thingsModelItemBase = null;
switch (iotThingsModel.getData_type())
{
... ... @@ -144,7 +143,7 @@ public class IotThingsModelTemplateController extends BaseController
public AjaxResult edit(@RequestBody IotThingsModelAddApi iotThingsModelAddApi)
{
IotThingsModelTemplate iotThingsModel = JSONObject.parseObject(JSONObject.toJSONString(iotThingsModelAddApi.getIotThingsModel()),IotThingsModelTemplate.class);
iotThingsModel.setCreate_by(getUsername());
iotThingsModel.setCreate_by(SecurityUtils.getUsername());
ThingsModelItemBase thingsModelItemBase = null;
switch (iotThingsModel.getData_type())
{
... ...
package com.zhonglai.luhui.admin.controller.monitor; import com.ruoyi.common.annotation.Log;import com.ruoyi.common.core.controller.BaseController;import com.ruoyi.common.core.domain.AjaxResult;import com.ruoyi.common.core.page.TableDataInfo;import com.ruoyi.common.enums.BusinessType;import com.ruoyi.common.utils.poi.ExcelUtil;import com.ruoyi.system.domain.SysLogininfor;import com.ruoyi.system.service.ISysLogininforService;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.security.access.prepost.PreAuthorize;import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse;import java.util.List; /** * 系统访问记录 * * @author ruoyi */@Api(tags = "系统访问记录")@RestController@RequestMapping("/monitor/logininfor")public class SysLogininforController extends BaseController{ @Autowired private ISysLogininforService logininforService; @ApiOperation("列表") @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") @GetMapping("/list") public TableDataInfo list(SysLogininfor logininfor) { startPage(); List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); return getDataTable(list); } @ApiOperation("导入") @Log(title = "登录日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") @PostMapping("/export") public void export(HttpServletResponse response, SysLogininfor logininfor) { List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); util.exportExcel(response, list, "登录日志"); } @ApiOperation("删除") @ApiImplicitParam(name = "infoIds", value = "id集合", dataType = "Long[]", dataTypeClass = Long[].class) @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.DELETE) @DeleteMapping("/{infoIds}") public AjaxResult remove(@PathVariable Long[] infoIds) { return toAjax(logininforService.deleteLogininforByIds(infoIds)); } @ApiOperation("清除") @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.CLEAN) @DeleteMapping("/clean") public AjaxResult clean() { logininforService.cleanLogininfor(); return AjaxResult.success(); }}
\ No newline at end of file
package com.zhonglai.luhui.admin.controller.monitor; import com.zhonglai.luhui.action.BaseController;import com.zhonglai.luhui.sys.service.ISysLogininforService;import com.zhonglai.luhui.sys.utils.ExcelUtil;import com.ruoyi.common.annotation.Log;import com.ruoyi.common.core.domain.AjaxResult;import com.ruoyi.common.core.page.TableDataInfo;import com.ruoyi.common.enums.BusinessType;import com.ruoyi.system.domain.sys.SysLogininfor;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.security.access.prepost.PreAuthorize;import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse;import java.util.List; /** * 系统访问记录 * * @author ruoyi */@Api(tags = "系统访问记录")@RestController@RequestMapping("/monitor/logininfor")public class SysLogininforController extends BaseController{ @Autowired private ISysLogininforService logininforService; @ApiOperation("列表") @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") @GetMapping("/list") public TableDataInfo list(SysLogininfor logininfor) { startPage(); List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); return getDataTable(list); } @ApiOperation("导入") @Log(title = "登录日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") @PostMapping("/export") public void export(HttpServletResponse response, SysLogininfor logininfor) { List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); util.exportExcel(response, list, "登录日志"); } @ApiOperation("删除") @ApiImplicitParam(name = "infoIds", value = "id集合", dataType = "Long[]", dataTypeClass = Long[].class) @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.DELETE) @DeleteMapping("/{infoIds}") public AjaxResult remove(@PathVariable Long[] infoIds) { return toAjax(logininforService.deleteLogininforByIds(infoIds)); } @ApiOperation("清除") @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.CLEAN) @DeleteMapping("/clean") public AjaxResult clean() { logininforService.cleanLogininfor(); return AjaxResult.success(); }}
\ No newline at end of file
... ...
package com.zhonglai.luhui.admin.controller.monitor;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.service.ISysOperLogService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.service.ISysOperLogService;
import com.ruoyi.system.domain.sys.SysOperLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ...
... ... @@ -2,15 +2,15 @@ package com.zhonglai.luhui.admin.controller.monitor;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.framework.web.service.ISysUserOnlineService;
import com.ruoyi.system.domain.sys.SysUserOnline;
import com.zhonglai.luhui.security.service.ISysUserOnlineService;
import com.zhonglai.luhui.redis.service.RedisCache;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysConfigService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.domain.sys.SysConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ... @@ -98,7 +99,7 @@ public class SysConfigController extends BaseController
{
return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
config.setCreateBy(getUsername());
config.setCreateBy(SecurityUtils.getUsername());
return toAjax(configService.insertConfig(config));
}
... ... @@ -115,7 +116,7 @@ public class SysConfigController extends BaseController
{
return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
config.setUpdateBy(getUsername());
config.setUpdateBy(SecurityUtils.getUsername());
return toAjax(configService.updateConfig(config));
}
... ...
... ... @@ -2,12 +2,14 @@ package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysDept;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysDeptService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.service.SecurityService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ... @@ -34,6 +36,8 @@ public class SysDeptController extends BaseController
@Autowired
private ISysDeptService deptService;
@Autowired
private SecurityService securityService;
/**
* 获取部门列表
*/
... ... @@ -82,7 +86,7 @@ public class SysDeptController extends BaseController
@GetMapping(value = "/{deptId}")
public AjaxResult getInfo(@PathVariable Long deptId)
{
deptService.checkDeptDataScope(deptId);
securityService.checkDeptDataScope(deptId);
return AjaxResult.success(deptService.selectDeptById(deptId));
}
... ... @@ -94,7 +98,7 @@ public class SysDeptController extends BaseController
public AjaxResult treeselect(SysDept dept)
{
List<SysDept> depts = deptService.selectDeptList(dept);
return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
return AjaxResult.success(securityService.buildDeptTreeSelect(depts));
}
/**
... ... @@ -110,7 +114,7 @@ public class SysDeptController extends BaseController
List<SysDept> depts = deptService.selectDeptList(new SysDept());
AjaxResult ajax = AjaxResult.success();
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
ajax.put("depts", deptService.buildDeptTreeSelect(depts));
ajax.put("depts", securityService.buildDeptTreeSelect(depts));
return ajax;
}
... ... @@ -127,7 +131,7 @@ public class SysDeptController extends BaseController
{
return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
dept.setCreateBy(getUsername());
dept.setCreateBy(SecurityUtils.getUsername());
return toAjax(deptService.insertDept(dept));
}
... ... @@ -141,7 +145,7 @@ public class SysDeptController extends BaseController
public AjaxResult edit(@Validated @RequestBody SysDept dept)
{
Long deptId = dept.getDeptId();
deptService.checkDeptDataScope(deptId);
securityService.checkDeptDataScope(deptId);
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
{
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
... ... @@ -154,7 +158,7 @@ public class SysDeptController extends BaseController
{
return AjaxResult.error("该部门包含未停用的子部门!");
}
dept.setUpdateBy(getUsername());
dept.setUpdateBy(SecurityUtils.getUsername());
return toAjax(deptService.updateDept(dept));
}
... ... @@ -178,7 +182,7 @@ public class SysDeptController extends BaseController
{
return AjaxResult.error("部门存在用户,不允许删除");
}
deptService.checkDeptDataScope(deptId);
securityService.checkDeptDataScope(deptId);
return toAjax(deptService.deleteDeptById(deptId));
}
}
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysDictDataService;
import com.zhonglai.luhui.sys.service.ISysDictTypeService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysDictData;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ... @@ -101,7 +102,7 @@ public class SysDictDataController extends BaseController
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDictData dict)
{
dict.setCreateBy(getUsername());
dict.setCreateBy(SecurityUtils.getUsername());
return toAjax(dictDataService.insertDictData(dict));
}
... ... @@ -114,7 +115,7 @@ public class SysDictDataController extends BaseController
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysDictData dict)
{
dict.setUpdateBy(getUsername());
dict.setUpdateBy(SecurityUtils.getUsername());
return toAjax(dictDataService.updateDictData(dict));
}
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysDictTypeService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysDictType;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDictTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -77,7 +78,7 @@ public class SysDictTypeController extends BaseController
{
return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
dict.setCreateBy(getUsername());
dict.setCreateBy(SecurityUtils.getUsername());
return toAjax(dictTypeService.insertDictType(dict));
}
... ... @@ -94,7 +95,7 @@ public class SysDictTypeController extends BaseController
{
return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
dict.setUpdateBy(getUsername());
dict.setUpdateBy(SecurityUtils.getUsername());
return toAjax(dictTypeService.updateDictType(dict));
}
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysMenu;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.login.service.LoginService;
import com.zhonglai.luhui.admin.model.LoginBody;
import com.ruoyi.common.utils.SecurityUtils;
import com.zhonglai.luhui.admin.service.SysLoginService;
import com.zhonglai.luhui.admin.service.SysPermissionService;
import com.ruoyi.system.service.ISysMenuService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.service.LoginService;
import com.zhonglai.luhui.security.service.SecurityService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -40,6 +40,8 @@ public class SysLoginController extends BaseController
@Autowired
private SysPermissionService permissionService;
@Autowired
private SecurityService securityService;
@ApiOperation("登录方法")
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody)
... ... @@ -83,7 +85,7 @@ public class SysLoginController extends BaseController
public AjaxResult getRouters()
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
List<SysMenu> menus = securityService.selectMenuTreeByUserId(userId);
return AjaxResult.success(menuService.buildMenus(menus));
}
}
... ...
... ... @@ -2,12 +2,14 @@ package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysMenu;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysMenuService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.service.SecurityService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -30,6 +32,8 @@ public class SysMenuController extends BaseController
@Autowired
private ISysMenuService menuService;
@Autowired
private SecurityService securityService;
/**
* 获取菜单列表
*/
... ... @@ -38,7 +42,7 @@ public class SysMenuController extends BaseController
@GetMapping("/list")
public AjaxResult list(SysMenu menu)
{
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
List<SysMenu> menus = menuService.selectMenuList(menu, SecurityUtils.getUserId());
return AjaxResult.success(menus);
}
... ... @@ -60,8 +64,8 @@ public class SysMenuController extends BaseController
@GetMapping("/treeselect")
public AjaxResult treeselect(SysMenu menu)
{
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
List<SysMenu> menus = menuService.selectMenuList(menu, SecurityUtils.getUserId());
return AjaxResult.success(securityService.buildMenuTreeSelect(menus));
}
/**
... ... @@ -71,10 +75,10 @@ public class SysMenuController extends BaseController
@GetMapping(value = "/roleMenuTreeselect/{roleId}")
public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
{
List<SysMenu> menus = menuService.selectMenuList(getUserId());
List<SysMenu> menus = menuService.selectMenuList(SecurityUtils.getUserId());
AjaxResult ajax = AjaxResult.success();
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
ajax.put("menus", menuService.buildMenuTreeSelect(menus));
ajax.put("menus", securityService.buildMenuTreeSelect(menus));
return ajax;
}
... ... @@ -95,7 +99,7 @@ public class SysMenuController extends BaseController
{
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
}
menu.setCreateBy(getUsername());
menu.setCreateBy(SecurityUtils.getUsername());
return toAjax(menuService.insertMenu(menu));
}
... ... @@ -120,7 +124,7 @@ public class SysMenuController extends BaseController
{
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
}
menu.setUpdateBy(getUsername());
menu.setUpdateBy(SecurityUtils.getUsername());
return toAjax(menuService.updateMenu(menu));
}
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.zhonglai.luhui.action.BaseController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.service.ISysNoticeService;
import com.ruoyi.system.domain.sys.SysNotice;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysNoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -62,7 +63,7 @@ public class SysNoticeController extends BaseController
@PostMapping
public AjaxResult add(@Validated @RequestBody SysNotice notice)
{
notice.setCreateBy(getUsername());
notice.setCreateBy(SecurityUtils.getUsername());
return toAjax(noticeService.insertNotice(notice));
}
... ... @@ -75,7 +76,7 @@ public class SysNoticeController extends BaseController
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysNotice notice)
{
notice.setUpdateBy(getUsername());
notice.setUpdateBy(SecurityUtils.getUsername());
return toAjax(noticeService.updateNotice(notice));
}
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysPostService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.domain.sys.SysPost;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -84,7 +85,7 @@ public class SysPostController extends BaseController
{
return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
}
post.setCreateBy(getUsername());
post.setCreateBy(SecurityUtils.getUsername());
return toAjax(postService.insertPost(post));
}
... ... @@ -105,7 +106,7 @@ public class SysPostController extends BaseController
{
return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
}
post.setUpdateBy(getUsername());
post.setUpdateBy(SecurityUtils.getUsername());
return toAjax(postService.updatePost(post));
}
... ...
... ... @@ -3,16 +3,17 @@ package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.system.login.service.TokenService;
import com.ruoyi.system.service.ISysUserService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.controller.LoginBaseController;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import com.zhonglai.luhui.security.service.TokenService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -44,7 +45,7 @@ public class SysProfileController extends BaseController
@GetMapping
public AjaxResult profile()
{
SysLoginUser loginUser = (SysLoginUser) getLoginUser();
SysLoginUser loginUser = (SysLoginUser) LoginBaseController.getLoginUser();
SysUser user = loginUser.getUser();
AjaxResult ajax = AjaxResult.success(user);
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
... ... @@ -60,7 +61,7 @@ public class SysProfileController extends BaseController
@PutMapping
public AjaxResult updateProfile(@RequestBody SysUser user)
{
SysLoginUser loginUser = (SysLoginUser) getLoginUser();
SysLoginUser loginUser = (SysLoginUser) LoginBaseController.getLoginUser();
SysUser sysUser = loginUser.getUser();
user.setUserName(sysUser.getUserName());
if (StringUtils.isNotEmpty(user.getPhonenumber())
... ... @@ -96,7 +97,7 @@ public class SysProfileController extends BaseController
@PutMapping("/updatePwd")
public AjaxResult updatePwd(String oldPassword, String newPassword)
{
SysLoginUser loginUser = (SysLoginUser) getLoginUser();
SysLoginUser loginUser = (SysLoginUser) LoginBaseController.getLoginUser();
String userName = loginUser.getUsername();
String password = loginUser.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password))
... ... @@ -127,7 +128,7 @@ public class SysProfileController extends BaseController
{
if (!file.isEmpty())
{
SysLoginUser loginUser = (SysLoginUser) getLoginUser();
SysLoginUser loginUser = (SysLoginUser) LoginBaseController.getLoginUser();
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
{
... ...
package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.core.controller.BaseController;
import com.zhonglai.luhui.action.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.zhonglai.luhui.admin.model.RegisterBody;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.admin.service.SysLoginService;
import com.zhonglai.luhui.admin.service.SysRegisterService;
import com.ruoyi.system.service.ISysConfigService;
import com.zhonglai.luhui.sys.service.ISysConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ...
... ... @@ -2,20 +2,22 @@ package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysRole;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.admin.service.SysPermissionService;
import com.ruoyi.system.login.service.TokenService;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.domain.sys.SysUserRole;
import com.zhonglai.luhui.security.controller.LoginBaseController;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import com.zhonglai.luhui.security.service.SecurityService;
import com.zhonglai.luhui.security.service.TokenService;
import com.zhonglai.luhui.sys.service.ISysRoleService;
import com.zhonglai.luhui.sys.service.ISysUserService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -48,6 +50,10 @@ public class SysRoleController extends BaseController
@Autowired
private ISysUserService userService;
@Autowired
private SecurityService securityService;
@ApiOperation("列表")
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
... ... @@ -77,7 +83,7 @@ public class SysRoleController extends BaseController
@GetMapping(value = "/{roleId}")
public AjaxResult getInfo(@PathVariable Long roleId)
{
roleService.checkRoleDataScope(roleId);
securityService.checkRoleDataScope(roleId);
return AjaxResult.success(roleService.selectRoleById(roleId));
}
... ... @@ -98,7 +104,7 @@ public class SysRoleController extends BaseController
{
return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
role.setCreateBy(getUsername());
role.setCreateBy(LoginBaseController.getUsername());
return toAjax(roleService.insertRole(role));
}
... ... @@ -113,7 +119,7 @@ public class SysRoleController extends BaseController
public AjaxResult edit(@Validated @RequestBody SysRole role)
{
roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId());
securityService.checkRoleDataScope(role.getRoleId());
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
{
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
... ... @@ -122,12 +128,12 @@ public class SysRoleController extends BaseController
{
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
role.setUpdateBy(getUsername());
role.setUpdateBy(LoginBaseController.getUsername());
if (roleService.updateRole(role) > 0)
{
// 更新缓存用户权限
SysLoginUser loginUser = (SysLoginUser) getLoginUser();
SysLoginUser loginUser = (SysLoginUser) LoginBaseController.getLoginUser();
if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
{
loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
... ... @@ -149,7 +155,7 @@ public class SysRoleController extends BaseController
public AjaxResult dataScope(@RequestBody SysRole role)
{
roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId());
securityService.checkRoleDataScope(role.getRoleId());
return toAjax(roleService.authDataScope(role));
}
... ... @@ -163,8 +169,8 @@ public class SysRoleController extends BaseController
public AjaxResult changeStatus(@RequestBody SysRole role)
{
roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId());
role.setUpdateBy(getUsername());
securityService.checkRoleDataScope(role.getRoleId());
role.setUpdateBy(LoginBaseController.getUsername());
return toAjax(roleService.updateRoleStatus(role));
}
... ... @@ -177,7 +183,7 @@ public class SysRoleController extends BaseController
@DeleteMapping("/{roleIds}")
public AjaxResult remove(@PathVariable Long[] roleIds)
{
return toAjax(roleService.deleteRoleByIds(roleIds));
return toAjax(securityService.deleteRoleByIds(roleIds));
}
/**
... ... @@ -250,7 +256,7 @@ public class SysRoleController extends BaseController
@PutMapping("/authUser/selectAll")
public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
{
roleService.checkRoleDataScope(roleId);
securityService.checkRoleDataScope(roleId);
return toAjax(roleService.insertAuthUsers(roleId, userIds));
}
}
... ...
... ... @@ -2,18 +2,19 @@ package com.zhonglai.luhui.admin.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.entity.SysRole;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.service.SecurityService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysPostService;
import com.zhonglai.luhui.sys.service.ISysRoleService;
import com.zhonglai.luhui.sys.service.ISysUserService;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
... ... @@ -46,6 +47,8 @@ public class SysUserController extends BaseController
@Autowired
private ISysPostService postService;
@Autowired
private SecurityService securityService;
/**
* 获取用户列表
*/
... ... @@ -78,8 +81,8 @@ public class SysUserController extends BaseController
{
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
List<SysUser> userList = util.importExcel(file.getInputStream());
String operName = getUsername();
String message = userService.importUser(userList, updateSupport, operName);
String operName = SecurityUtils.getUsername();
String message = securityService.importUser(userList, updateSupport, operName);
return AjaxResult.success(message);
}
... ... @@ -99,7 +102,7 @@ public class SysUserController extends BaseController
@GetMapping(value = { "/", "/{userId}" })
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
{
userService.checkUserDataScope(userId);
securityService.checkUserDataScope(userId);
AjaxResult ajax = AjaxResult.success();
List<SysRole> roles = roleService.selectRoleAll();
ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
... ... @@ -137,7 +140,7 @@ public class SysUserController extends BaseController
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setCreateBy(getUsername());
user.setCreateBy(SecurityUtils.getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
return toAjax(userService.insertUser(user));
}
... ... @@ -152,7 +155,7 @@ public class SysUserController extends BaseController
public AjaxResult edit(@Validated @RequestBody SysUser user)
{
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
securityService.checkUserDataScope(user.getUserId());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
... ... @@ -163,7 +166,7 @@ public class SysUserController extends BaseController
{
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setUpdateBy(getUsername());
user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.updateUser(user));
}
... ... @@ -176,11 +179,11 @@ public class SysUserController extends BaseController
@DeleteMapping("/{userIds}")
public AjaxResult remove(@PathVariable Long[] userIds)
{
if (ArrayUtils.contains(userIds, getUserId()))
if (ArrayUtils.contains(userIds, SecurityUtils.getUserId()))
{
return error("当前用户不能删除");
}
return toAjax(userService.deleteUserByIds(userIds));
return toAjax(securityService.deleteUserByIds(userIds));
}
/**
... ... @@ -193,9 +196,9 @@ public class SysUserController extends BaseController
public AjaxResult resetPwd(@RequestBody SysUser user)
{
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
securityService.checkUserDataScope(user.getUserId());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
user.setUpdateBy(getUsername());
user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.resetPwd(user));
}
... ... @@ -209,8 +212,8 @@ public class SysUserController extends BaseController
public AjaxResult changeStatus(@RequestBody SysUser user)
{
userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId());
user.setUpdateBy(getUsername());
securityService.checkUserDataScope(user.getUserId());
user.setUpdateBy(SecurityUtils.getUsername());
return toAjax(userService.updateUserStatus(user));
}
... ... @@ -239,7 +242,7 @@ public class SysUserController extends BaseController
@PutMapping("/authRole")
public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
{
userService.checkUserDataScope(userId);
securityService.checkUserDataScope(userId);
userService.insertUserAuth(userId, roleIds);
return success();
}
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.admin.controller.user;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -16,12 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.UserTerminalGroup;
import com.ruoyi.system.service.IUserTerminalGroupService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.user.UserTerminalGroup;
import com.ruoyi.system.service.user.IUserTerminalGroupService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
... ... @@ -3,6 +3,8 @@ package com.zhonglai.luhui.admin.controller.user;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
... ... @@ -16,12 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.UserTerminalGroupRelation;
import com.ruoyi.system.service.IUserTerminalGroupRelationService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.ruoyi.system.service.user.IUserTerminalGroupRelationService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ...
package com.zhonglai.luhui.admin.dto;
import com.ruoyi.system.domain.IotThingsModel;
import com.ruoyi.system.domain.iot.IotThingsModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.admin.dto;
import com.ruoyi.system.domain.IotThingsModel;
import com.ruoyi.system.domain.iot.IotThingsModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.admin.dto;
import com.ruoyi.system.domain.IotThingsModel;
import com.ruoyi.system.domain.iot.IotThingsModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.system.domain.tool.BaseEntity;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.system.domain.entity.SysRole;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.security.dto.BaseLoginUser;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.system.domain.entity.SysRole;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.system.login.service.TokenService;
import com.ruoyi.system.service.ISysConfigService;
import com.zhonglai.luhui.security.service.TokenService;
import com.zhonglai.luhui.sys.service.ISysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.stereotype.Component;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysRoleService;
import com.zhonglai.luhui.sys.service.ISysMenuService;
import com.zhonglai.luhui.sys.service.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
... ...
... ... @@ -3,18 +3,18 @@ package com.zhonglai.luhui.admin.service;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.system.domain.entity.UserConstants;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.domain.tool.SysLogininforType;
import com.ruoyi.common.tool.SysLogininforType;
import com.zhonglai.luhui.admin.model.RegisterBody;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.login.manager.AsyncManager;
import com.ruoyi.system.login.manager.factory.AsyncFactory;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import com.zhonglai.luhui.redis.service.RedisCache;
import com.zhonglai.luhui.security.manager.AsyncManager;
import com.zhonglai.luhui.security.manager.factory.AsyncFactory;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.service.ISysConfigService;
import com.zhonglai.luhui.sys.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.ruoyi.common.enums.UserStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysUserService;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import com.zhonglai.luhui.sys.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ...
package com.zhonglai.luhui.admin.service;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.framework.web.service.ISysUserOnlineService;
import com.ruoyi.system.login.dto.SysLoginUser;
import com.zhonglai.luhui.security.service.ISysUserOnlineService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.domain.sys.SysUserOnline;
import com.zhonglai.luhui.security.dto.BaseLoginUser;
import com.zhonglai.luhui.security.dto.SysLoginUser;
import org.springframework.stereotype.Service;
/**
... ...
package com.zhonglai.luhui.admin.task;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.IotDevice;
import com.ruoyi.system.service.PublicService;
import com.zhonglai.luhui.dao.service.PublicService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/tool/gen/generatorCodeFromDb # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain, # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/tool/gen/generatorCodeFromDb # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>Luhui</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lh-afms</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<!-- 文档 -->
<dependency >
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--https://mvnrepository.com/artifact/io.swagger/swagger-models-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger-models.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--&lt;!&ndash; https://mvnrepository.com/artifact/com.github.xiaoymin/swagger-bootstrap-ui &ndash;&gt;-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-ui.version}</version>
</dependency>
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.10.0</version>
<exclusions>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 18081 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-afms # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login/ApiLogin/* # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-api-test send-tags: 1
\ No newline at end of file
package com.zhonglai.luhui.alarm;
import com.ruoyi.framework.aspectj.LogAspect;
import com.ruoyi.framework.aspectj.RateLimiterAspect;
import com.ruoyi.framework.config.*;
import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter;
import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
import com.ruoyi.system.login.service.LoginService;
import com.ruoyi.system.login.service.TokenService;
import com.ruoyi.system.service.impl.SysConfigServiceImpl;
import com.ruoyi.system.service.impl.SysDictTypeServiceImpl;
import com.ruoyi.system.service.impl.SysUserServiceImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
... ... @@ -20,11 +10,11 @@ import org.springframework.context.annotation.FilterType;
"com.ruoyi.common",
"com.ruoyi.system",
"com.ruoyi.framework",
},
excludeFilters = {@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,classes = {LogAspect.class,
RateLimiterAspect.class, LoginService.class, TokenService.class, FilterConfig.class, JwtAuthenticationTokenFilter.class,
SysConfigServiceImpl.class, SysDictTypeServiceImpl.class, SysUserServiceImpl.class,SecurityConfig.class, LogoutSuccessHandlerImpl.class
})}
}
// excludeFilters = {@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,classes = {LogAspect.class,
// RateLimiterAspect.class, LoginService.class, TokenService.class, FilterConfig.class, JwtAuthenticationTokenFilter.class,
// SysConfigServiceImpl.class, SysDictTypeServiceImpl.class, SysUserServiceImpl.class,SecurityConfig.class, LogoutSuccessHandlerImpl.class
// })}
)
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
... ...
... ... @@ -85,6 +85,18 @@
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-common-security</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-action</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-sys-service</artifactId>
</dependency>
</dependencies>
<build>
... ...
package com.zhonglai.luhui.api.controller.iot;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.IotTerminal;
import com.ruoyi.system.domain.UserTerminalGroupRelation;
import com.ruoyi.system.service.IIotTerminalService;
import com.ruoyi.system.service.IUserTerminalGroupRelationService;
import com.ruoyi.system.domain.iot.IotTerminal;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.ruoyi.system.service.iot.IIotTerminalService;
import com.ruoyi.system.service.user.IUserTerminalGroupRelationService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.handler.UserRoleAuthorizationInterceptor;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
... ... @@ -45,7 +42,7 @@ public class IotTerminalController extends BaseController
{
startPage();
UserTerminalGroupRelation userTerminalGroupRelation = new UserTerminalGroupRelation();
userTerminalGroupRelation.setUser_info_id(getUserId().intValue());
userTerminalGroupRelation.setUser_info_id(SecurityUtils.getUserId().intValue());
iotTerminal.setUserTerminalGroupRelation(userTerminalGroupRelation);
List<IotTerminal> list = iotTerminalService.selectIotTerminalListByUserId(iotTerminal);
return getDataTable(list);
... ... @@ -93,7 +90,7 @@ public class IotTerminalController extends BaseController
@PostMapping("/groupTerminal")
public AjaxResult groupTerminal(Integer iot_terminal_group_id,@RequestBody List<String> ids)
{
Integer userid= getUserId().intValue();
Integer userid= SecurityUtils.getUserId().intValue();
List<UserTerminalGroupRelation> list = userTerminalGroupRelationService.selectListByTerminalIds(ids.toArray(new String[ids.size()]));
if( null != list && list.size() != 0) //判断是否有权限删除
... ...
package com.zhonglai.luhui.api.controller.login;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.login.service.LoginService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.service.LoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ... @@ -15,8 +15,6 @@ import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@Api(tags = "登陆")
@RestController
@RequestMapping("/login/ApiLogin")
... ...
package com.zhonglai.luhui.api.controller.user;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.DateUtils;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
... ... @@ -19,12 +19,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.UserTerminalGroup;
import com.ruoyi.system.service.IUserTerminalGroupService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.user.UserTerminalGroup;
import com.ruoyi.system.service.user.IUserTerminalGroupService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -48,7 +46,7 @@ public class UserTerminalGroupController extends BaseController
@GetMapping("/list")
public TableDataInfo list(UserTerminalGroup userTerminalGroup)
{
userTerminalGroup.setUser_info_id(getUserId().intValue());
userTerminalGroup.setUser_info_id(SecurityUtils.getUserId().intValue());
startPage();
List<UserTerminalGroup> list = userTerminalGroupService.selectUserTerminalGroupList(userTerminalGroup);
return getDataTable(list);
... ... @@ -73,7 +71,7 @@ public class UserTerminalGroupController extends BaseController
@PostMapping
public AjaxResult add(@RequestBody UserTerminalGroup userTerminalGroup)
{
userTerminalGroup.setUser_info_id(getUserId().intValue());
userTerminalGroup.setUser_info_id(SecurityUtils.getUserId().intValue());
userTerminalGroup.setCreate_time(DateUtils.getNowTimeMilly());
return toAjax(userTerminalGroupService.insertUserTerminalGroup(userTerminalGroup));
}
... ...
... ... @@ -5,14 +5,14 @@ import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.system.service.PublicService;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
... ... @@ -23,12 +23,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.UserTerminalGroupRelation;
import com.ruoyi.system.service.IUserTerminalGroupRelationService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.ruoyi.system.service.user.IUserTerminalGroupRelationService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -54,7 +52,7 @@ public class UserTerminalGroupRelationController extends BaseController
@GetMapping("/list")
public TableDataInfo list(UserTerminalGroupRelation userTerminalGroupRelation)
{
userTerminalGroupRelation.setUser_info_id(getUserId().intValue());
userTerminalGroupRelation.setUser_info_id(SecurityUtils.getUserId().intValue());
startPage();
List<UserTerminalGroupRelation> list = userTerminalGroupRelationService.selectUserTerminalGroupRelationList(userTerminalGroupRelation);
return getDataTable(list);
... ... @@ -64,7 +62,7 @@ public class UserTerminalGroupRelationController extends BaseController
@GetMapping("/unGrouplist/{product_id}")
public AjaxResult unGrouplist(@PathVariable Integer product_id)
{
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT a.*,b.`name` FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+getUserId().intValue()+" AND a.iot_terminal_group_id IS NULL AND b.`product_id`="+product_id);
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT a.*,b.`name` FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+SecurityUtils.getUserId().intValue()+" AND a.iot_terminal_group_id IS NULL AND b.`product_id`="+product_id);
return AjaxResult.success(list);
}
... ... @@ -81,7 +79,7 @@ public class UserTerminalGroupRelationController extends BaseController
{
stringBuffer.append(" AND b.product_id="+product_id);
}
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT b.* FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+getUserId().intValue()+stringBuffer);
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT b.* FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+SecurityUtils.getUserId().intValue()+stringBuffer);
return AjaxResult.success(list);
}
... ... @@ -123,7 +121,7 @@ public class UserTerminalGroupRelationController extends BaseController
}
List<UserTerminalGroupRelation> list = new ArrayList<>();
String[] is = iotTerminalIds.split(",");
Integer userid = getUserId().intValue();
Integer userid = SecurityUtils.getUserId().intValue();
for(String iotTerminalId:is)
{
UserTerminalGroupRelation newuserTerminalGroupRelation = new UserTerminalGroupRelation();
... ... @@ -148,7 +146,7 @@ public class UserTerminalGroupRelationController extends BaseController
{
return AjaxResult.error("终端id必填");
}
int i = publicService.updateBySql("UPDATE `user_terminal_group_relation` SET iot_terminal_group_id="+userTerminalGroupRelation.getIot_terminal_group_id()+",iot_terminal_group_name='"+userTerminalGroupRelation.getIot_terminal_group_name()+"' WHERE iot_terminal_id IN('"+iotTerminalIds.replace(",","','")+"') and user_info_id="+getUserId().intValue());
int i = publicService.updateBySql("UPDATE `user_terminal_group_relation` SET iot_terminal_group_id="+userTerminalGroupRelation.getIot_terminal_group_id()+",iot_terminal_group_name='"+userTerminalGroupRelation.getIot_terminal_group_name()+"' WHERE iot_terminal_id IN('"+iotTerminalIds.replace(",","','")+"') and user_info_id="+SecurityUtils.getUserId().intValue());
return toAjax(i);
}
... ...
package com.zhonglai.luhui.api.service;
import com.ruoyi.common.enums.UserStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.login.dto.ApiLoginUser;
import com.ruoyi.system.login.dto.Yu2leUserInfo;
import com.ruoyi.system.login.dto.Yu2leUserLogin;
import com.ruoyi.system.service.PublicService;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.security.dto.ApiLoginUser;
import com.zhonglai.luhui.security.dto.Yu2leUserInfo;
import com.zhonglai.luhui.security.dto.Yu2leUserLogin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ...
package com.zhonglai.luhui.backups.task;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.PublicService;
import org.apache.commons.lang3.ArrayUtils;
import com.zhonglai.luhui.dao.service.PublicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
... ...
... ... @@ -28,6 +28,14 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-common-redis</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-domain</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
... ... @@ -3,10 +3,10 @@ package com.zhonglai.luhui.central.control;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.core.domain.MessageCode;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.html.HttpUtils;
import com.ruoyi.system.domain.IotDevice;
import com.ruoyi.system.domain.iot.IotDevice;
import com.zhonglai.luhui.redis.service.RedisCache;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ...
... ... @@ -86,7 +86,6 @@
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
... ...
package com.zhonglai.luhui.sse;
import okio.BufferedSource;
import java.io.IOException;
public class ResponseBodyReader {
private final BufferedSource source;
public ResponseBodyReader(BufferedSource source) {
this.source = source;
}
public boolean hasNextEvent() throws IOException {
// 判断是否还有下一个SSE事件
return !source.exhausted();
}
public ServerSentEvent nextEvent() throws IOException {
// 读取下一个SSE事件
String id = null;
String event = null;
String data = null;
while (true) {
String line = source.readUtf8LineStrict();
if (line.isEmpty()) {
break; // SSE事件结束
}
if (line.startsWith("id:")) {
id = line.substring(3).trim();
} else if (line.startsWith("event:")) {
event = line.substring(6).trim();
} else if (line.startsWith("data:")) {
data = line.substring(5).trim();
}
}
return new ServerSentEvent(id, event, data);
}
}
\ No newline at end of file
... ...
package com.zhonglai.luhui.sse;
public class ServerSentEvent {
private final String id;
private final String event;
private final String data;
public ServerSentEvent(String id, String event, String data) {
this.id = id;
this.event = event;
this.data = data;
}
public String getId() {
return id;
}
public String getEvent() {
return event;
}
public String getData() {
return data;
}
}
\ No newline at end of file
... ...
/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.7.41 : Database - lh-afms
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`lh-afms` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `lh-afms`;
/*Table structure for table `afms_basic_aquatic` */
DROP TABLE IF EXISTS `afms_basic_aquatic`;
CREATE TABLE `afms_basic_aquatic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '动保名称',
`category` varchar(255) NOT NULL COMMENT '类别',
`brand` varchar(255) NOT NULL COMMENT '品牌',
`measurement_unit_id` int(11) NOT NULL COMMENT '计量单位ID',
`specification_unit` varchar(255) NOT NULL COMMENT '规格单位',
`supplier` varchar(255) NOT NULL COMMENT '供应商',
`create_time` datetime NOT NULL COMMENT '创建时间',
`supplier_id` int(11) NOT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`),
KEY `measurement_unit_id` (`measurement_unit_id`),
KEY `FK_afms_basic_aquatic_supplier` (`supplier_id`),
CONSTRAINT `FK_afms_basic_aquatic_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `afms_basic_supplier` (`id`),
CONSTRAINT `afms_basic_aquatic_ibfk_1` FOREIGN KEY (`measurement_unit_id`) REFERENCES `afms_basic_measurement_unit` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-动保信息管理';
/*Data for the table `afms_basic_aquatic` */
/*Table structure for table `afms_basic_brand` */
DROP TABLE IF EXISTS `afms_basic_brand`;
CREATE TABLE `afms_basic_brand` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL COMMENT '名称',
`description` text NOT NULL COMMENT '描述',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-品牌信息管理';
/*Data for the table `afms_basic_brand` */
/*Table structure for table `afms_basic_category` */
DROP TABLE IF EXISTS `afms_basic_category`;
CREATE TABLE `afms_basic_category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL COMMENT '名称',
`description` text NOT NULL COMMENT '描述',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-品类信息管理';
/*Data for the table `afms_basic_category` */
/*Table structure for table `afms_basic_customer` */
DROP TABLE IF EXISTS `afms_basic_customer`;
CREATE TABLE `afms_basic_customer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '客户名称',
`customer_type_id` int(11) NOT NULL COMMENT '客户类型ID',
`contact_person` varchar(255) NOT NULL COMMENT '联系人',
`contact_phone` varchar(255) NOT NULL COMMENT '联系电话',
`contact_address` varchar(255) NOT NULL COMMENT '联系地址',
`taxpayer_identification_number` varchar(255) NOT NULL COMMENT '纳税人识别号',
`bank` varchar(255) NOT NULL COMMENT '开户行',
`account_name` varchar(255) NOT NULL COMMENT '用户名',
`account_number` varchar(255) NOT NULL COMMENT '账号',
`business_license` varchar(255) NOT NULL COMMENT '营业执照',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `customer_type_id` (`customer_type_id`),
CONSTRAINT `afms_basic_customer_ibfk_1` FOREIGN KEY (`customer_type_id`) REFERENCES `afms_basic_customer_type` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-客户信息管理';
/*Data for the table `afms_basic_customer` */
/*Table structure for table `afms_basic_customer_type` */
DROP TABLE IF EXISTS `afms_basic_customer_type`;
CREATE TABLE `afms_basic_customer_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL COMMENT '名称',
`description` text NOT NULL COMMENT '描述',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-客户类型信息管理';
/*Data for the table `afms_basic_customer_type` */
/*Table structure for table `afms_basic_feed` */
DROP TABLE IF EXISTS `afms_basic_feed`;
CREATE TABLE `afms_basic_feed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '饲料名称',
`brand_id` int(11) NOT NULL COMMENT '品牌ID',
`category_id` int(11) NOT NULL COMMENT '品类ID',
`specification_unit` varchar(255) NOT NULL COMMENT '规格单位(kg/包)',
`supplier` varchar(255) NOT NULL COMMENT '供应商',
`create_time` datetime NOT NULL COMMENT '创建时间',
`supplier_id` int(11) NOT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`),
KEY `brand_id` (`brand_id`),
KEY `category_id` (`category_id`),
KEY `FK_afms_basic_feed_supplier` (`supplier_id`),
CONSTRAINT `FK_afms_basic_feed_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `afms_basic_supplier` (`id`),
CONSTRAINT `afms_basic_feed_ibfk_1` FOREIGN KEY (`brand_id`) REFERENCES `afms_basic_brand` (`id`),
CONSTRAINT `afms_basic_feed_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `afms_basic_category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-饲料信息管理';
/*Data for the table `afms_basic_feed` */
/*Table structure for table `afms_basic_fry` */
DROP TABLE IF EXISTS `afms_basic_fry`;
CREATE TABLE `afms_basic_fry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '苗种名称',
`species_id` int(11) NOT NULL COMMENT '养殖品种ID',
`category` enum('鱼苗','虾苗','螺苗','鱼卵') NOT NULL COMMENT '类别',
`quantity_unit` enum('尾','万尾','粒') NOT NULL COMMENT '数量单位',
`specification_unit` varchar(255) NOT NULL COMMENT '规格单位',
`supplier` varchar(255) NOT NULL COMMENT '供应商',
`create_time` datetime NOT NULL COMMENT '创建时间',
`supplier_id` int(11) NOT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`),
KEY `species_id` (`species_id`),
KEY `FK_afms_basic_fry_supplier` (`supplier_id`),
CONSTRAINT `FK_afms_basic_fry_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `afms_basic_supplier` (`id`),
CONSTRAINT `afms_basic_fry_ibfk_1` FOREIGN KEY (`species_id`) REFERENCES `afms_basic_species` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-苗种信息管理';
/*Data for the table `afms_basic_fry` */
/*Table structure for table `afms_basic_measurement_unit` */
DROP TABLE IF EXISTS `afms_basic_measurement_unit`;
CREATE TABLE `afms_basic_measurement_unit` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '名称',
`description` text NOT NULL COMMENT '描述',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-计量单位信息管理';
/*Data for the table `afms_basic_measurement_unit` */
/*Table structure for table `afms_basic_pond` */
DROP TABLE IF EXISTS `afms_basic_pond`;
CREATE TABLE `afms_basic_pond` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户ID',
`name` varchar(255) NOT NULL COMMENT '塘口名称',
`person_in_charge` varchar(255) NOT NULL COMMENT '负责人',
`species_ids` varchar(255) NOT NULL COMMENT '养殖品种ID集合(以英文逗号分割)',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-塘口信息管理';
/*Data for the table `afms_basic_pond` */
/*Table structure for table `afms_basic_species` */
DROP TABLE IF EXISTS `afms_basic_species`;
CREATE TABLE `afms_basic_species` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '品种名称',
`water_type` enum('淡水','海水') NOT NULL COMMENT '水体类型',
`weight_unit` enum('斤','kg','g') NOT NULL COMMENT '重量单位',
`quantity_unit` enum('尾','粒') NOT NULL COMMENT '数量单位',
`specification_unit` varchar(255) NOT NULL COMMENT '规格单位',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-养殖品种管理';
/*Data for the table `afms_basic_species` */
/*Table structure for table `afms_basic_supplier` */
DROP TABLE IF EXISTS `afms_basic_supplier`;
CREATE TABLE `afms_basic_supplier` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '供应商名称',
`supplier_type_id` int(11) NOT NULL COMMENT '供应商类型ID',
`contact_person` varchar(255) NOT NULL COMMENT '联系人',
`contact_phone` varchar(255) NOT NULL COMMENT '联系电话',
`contact_address` varchar(255) NOT NULL COMMENT '联系地址',
`taxpayer_identification_number` varchar(255) NOT NULL COMMENT '纳税人识别号',
`bank` varchar(255) NOT NULL COMMENT '开户行',
`account_name` varchar(255) NOT NULL COMMENT '用户名',
`account_number` varchar(255) NOT NULL COMMENT '账号',
`business_license` varchar(255) NOT NULL COMMENT '营业执照',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `supplier_type_id` (`supplier_type_id`),
CONSTRAINT `afms_basic_supplier_ibfk_1` FOREIGN KEY (`supplier_type_id`) REFERENCES `afms_basic_supplier_type` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-供应商信息管理';
/*Data for the table `afms_basic_supplier` */
/*Table structure for table `afms_basic_supplier_type` */
DROP TABLE IF EXISTS `afms_basic_supplier_type`;
CREATE TABLE `afms_basic_supplier_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL COMMENT '名称',
`description` text NOT NULL COMMENT '描述',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础信息管理-供应商类型信息管理';
/*Data for the table `afms_basic_supplier_type` */
/*Table structure for table `afms_cost_expense` */
DROP TABLE IF EXISTS `afms_cost_expense`;
CREATE TABLE `afms_cost_expense` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL COMMENT '时间',
`category` varchar(255) NOT NULL COMMENT '类别',
`cost` decimal(10,2) NOT NULL COMMENT '费用',
`remarks` text COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成本与收益- 成本模块';
/*Data for the table `afms_cost_expense` */
/*Table structure for table `afms_data_loss` */
DROP TABLE IF EXISTS `afms_data_loss`;
CREATE TABLE `afms_data_loss` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`loss_record_time` datetime NOT NULL COMMENT '损失记录时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`species` varchar(255) NOT NULL COMMENT '养殖品种',
`loss_count` int(11) NOT NULL COMMENT '损失数量',
`loss_weight` decimal(10,2) NOT NULL COMMENT '损失重量',
`loss_specification` decimal(6,2) NOT NULL COMMENT '损失规格',
`estimated_reason` varchar(255) NOT NULL COMMENT '预估原因',
`image_path` varchar(255) DEFAULT NULL COMMENT '图片',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_data_loss_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `afms_data_loss` */
/*Table structure for table `afms_data_medicine` */
DROP TABLE IF EXISTS `afms_data_medicine`;
CREATE TABLE `afms_data_medicine` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`feeding_start_time` datetime NOT NULL COMMENT '投喂开始时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`medicine_name` varchar(255) NOT NULL COMMENT '动保',
`medicine_amount` decimal(10,2) NOT NULL COMMENT '动保使用量',
`unit` varchar(255) NOT NULL COMMENT '计量单位',
`reason` varchar(255) NOT NULL COMMENT '用药原因',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_data_medicine_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `afms_data_medicine` */
/*Table structure for table `afms_data_sampling` */
DROP TABLE IF EXISTS `afms_data_sampling`;
CREATE TABLE `afms_data_sampling` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sampling_time` datetime NOT NULL COMMENT '采样时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`species` varchar(255) NOT NULL COMMENT '养殖品种',
`sample_count` int(11) NOT NULL COMMENT '样本数量',
`sample_weight` decimal(10,2) NOT NULL COMMENT '样本重量',
`average_length` decimal(6,2) NOT NULL COMMENT '平均体长',
`average_specification` decimal(6,2) NOT NULL COMMENT '平均规格',
`estimated_pond_weight` decimal(10,2) NOT NULL COMMENT '预估存塘重量',
`image_path` varchar(255) DEFAULT NULL COMMENT '图片',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_data_sampling_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `afms_data_sampling` */
/*Table structure for table `afms_data_water_quality` */
DROP TABLE IF EXISTS `afms_data_water_quality`;
CREATE TABLE `afms_data_water_quality` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test_time` datetime NOT NULL COMMENT '检测时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`weather` varchar(255) NOT NULL COMMENT '天气',
`water_temperature` decimal(5,2) NOT NULL COMMENT '水温(℃)',
`dissolved_oxygen` decimal(5,2) NOT NULL COMMENT '溶氧(mg/L)',
`pH` decimal(5,2) NOT NULL COMMENT '酸碱度(pH)',
`ammonia_nitrogen` decimal(5,2) NOT NULL COMMENT '氨氮(ppm)',
`nitrite` decimal(5,2) NOT NULL COMMENT '亚硝酸盐(ppm)',
`salinity` decimal(5,2) NOT NULL COMMENT '盐度',
`total_alkalinity` decimal(5,2) NOT NULL COMMENT '总碱度',
`total_hardness` decimal(5,2) NOT NULL COMMENT '总硬度',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_data_water_quality_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `afms_data_water_quality` */
/*Table structure for table `afms_inventory_feed_purchase` */
DROP TABLE IF EXISTS `afms_inventory_feed_purchase`;
CREATE TABLE `afms_inventory_feed_purchase` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`feed_id` int(11) NOT NULL COMMENT '饲料ID(关联饲料表)',
`purchase_time` datetime NOT NULL COMMENT '进货时间',
`weight` decimal(10,2) NOT NULL COMMENT '重量(kg)',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `feed_id` (`feed_id`),
CONSTRAINT `afms_inventory_feed_purchase_ibfk_1` FOREIGN KEY (`feed_id`) REFERENCES `afms_basic_feed` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='进货模块-饲料进货';
/*Data for the table `afms_inventory_feed_purchase` */
/*Table structure for table `afms_inventory_feed_stock` */
DROP TABLE IF EXISTS `afms_inventory_feed_stock`;
CREATE TABLE `afms_inventory_feed_stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`feed_id` int(11) NOT NULL COMMENT '饲料ID(关联饲料信息表)',
`stock` int(11) NOT NULL COMMENT '库存',
`weight` decimal(10,2) NOT NULL COMMENT '重量(kg)',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `feed_id` (`feed_id`),
CONSTRAINT `afms_inventory_feed_stock_ibfk_1` FOREIGN KEY (`feed_id`) REFERENCES `afms_basic_feed` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存模块- 饲料库存';
/*Data for the table `afms_inventory_feed_stock` */
/*Table structure for table `afms_inventory_medicine_purchase` */
DROP TABLE IF EXISTS `afms_inventory_medicine_purchase`;
CREATE TABLE `afms_inventory_medicine_purchase` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`medicine_id` int(11) NOT NULL COMMENT '动保ID(关联动保表)',
`purchase_time` datetime NOT NULL COMMENT '进货时间',
`quantity` int(11) NOT NULL COMMENT '数量',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `medicine_id` (`medicine_id`),
CONSTRAINT `afms_inventory_medicine_purchase_ibfk_1` FOREIGN KEY (`medicine_id`) REFERENCES `afms_basic_aquatic` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='进货模块-动保进货';
/*Data for the table `afms_inventory_medicine_purchase` */
/*Table structure for table `afms_inventory_medicine_stock` */
DROP TABLE IF EXISTS `afms_inventory_medicine_stock`;
CREATE TABLE `afms_inventory_medicine_stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`medicine_id` int(11) NOT NULL COMMENT '动保ID(关联动保信息表)',
`stock` int(11) NOT NULL COMMENT '库存',
`weight` decimal(10,2) NOT NULL COMMENT '重量(kg)',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `medicine_id` (`medicine_id`),
CONSTRAINT `afms_inventory_medicine_stock_ibfk_1` FOREIGN KEY (`medicine_id`) REFERENCES `afms_basic_aquatic` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存模块-动保库存';
/*Data for the table `afms_inventory_medicine_stock` */
/*Table structure for table `afms_inventory_seed_purchase` */
DROP TABLE IF EXISTS `afms_inventory_seed_purchase`;
CREATE TABLE `afms_inventory_seed_purchase` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`seed_id` int(11) NOT NULL COMMENT '苗种ID(关联苗种表)',
`purchase_time` datetime NOT NULL COMMENT '进货时间',
`quantity` int(11) NOT NULL COMMENT '数量',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `seed_id` (`seed_id`),
CONSTRAINT `afms_inventory_seed_purchase_ibfk_1` FOREIGN KEY (`seed_id`) REFERENCES `afms_basic_fry` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='进货模块- 苗种进货';
/*Data for the table `afms_inventory_seed_purchase` */
/*Table structure for table `afms_inventory_seed_stock` */
DROP TABLE IF EXISTS `afms_inventory_seed_stock`;
CREATE TABLE `afms_inventory_seed_stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`seed_id` int(11) NOT NULL COMMENT '苗种ID(关联苗种信息表)',
`stock` int(11) NOT NULL COMMENT '库存',
`weight` decimal(10,2) NOT NULL COMMENT '重量(kg)',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价(元)',
`total_price` decimal(10,2) NOT NULL COMMENT '总价(元)',
PRIMARY KEY (`id`),
KEY `seed_id` (`seed_id`),
CONSTRAINT `afms_inventory_seed_stock_ibfk_1` FOREIGN KEY (`seed_id`) REFERENCES `afms_basic_fry` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存模块-苗种库存';
/*Data for the table `afms_inventory_seed_stock` */
/*Table structure for table `afms_operation_draining` */
DROP TABLE IF EXISTS `afms_operation_draining`;
CREATE TABLE `afms_operation_draining` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`draining_date` datetime NOT NULL COMMENT '清塘时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_operation_draining_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-清塘模块';
/*Data for the table `afms_operation_draining` */
/*Table structure for table `afms_operation_feed` */
DROP TABLE IF EXISTS `afms_operation_feed`;
CREATE TABLE `afms_operation_feed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`meal_count` int(11) NOT NULL COMMENT '餐数',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_operation_feed_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-饲料投喂模块';
/*Data for the table `afms_operation_feed` */
/*Table structure for table `afms_operation_feed_details` */
DROP TABLE IF EXISTS `afms_operation_feed_details`;
CREATE TABLE `afms_operation_feed_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`feed_record_id` int(11) NOT NULL COMMENT '饲料投喂记录ID',
`feed_id` int(11) NOT NULL COMMENT '饲料ID',
`feed_amount` float NOT NULL COMMENT '投放量/Kg',
PRIMARY KEY (`id`),
KEY `feed_record_id` (`feed_record_id`),
KEY `feed_id` (`feed_id`),
CONSTRAINT `afms_operation_feed_details_ibfk_1` FOREIGN KEY (`feed_record_id`) REFERENCES `afms_operation_feed` (`id`),
CONSTRAINT `afms_operation_feed_details_ibfk_2` FOREIGN KEY (`feed_id`) REFERENCES `afms_basic_feed` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-饲料投喂模块明细';
/*Data for the table `afms_operation_feed_details` */
/*Table structure for table `afms_operation_seed_stock` */
DROP TABLE IF EXISTS `afms_operation_seed_stock`;
CREATE TABLE `afms_operation_seed_stock` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stocking_date` datetime NOT NULL COMMENT '投放时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`fry_id` int(11) NOT NULL COMMENT '投放苗种ID',
`quantity` float NOT NULL COMMENT '数量',
`specification` varchar(255) NOT NULL COMMENT '规格',
`unit_price` float NOT NULL COMMENT '单价(元)',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
KEY `fry_id` (`fry_id`),
CONSTRAINT `afms_operation_seed_stock_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`),
CONSTRAINT `afms_operation_seed_stock_ibfk_2` FOREIGN KEY (`fry_id`) REFERENCES `afms_basic_fry` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-投放模块';
/*Data for the table `afms_operation_seed_stock` */
/*Table structure for table `afms_operation_transfer` */
DROP TABLE IF EXISTS `afms_operation_transfer`;
CREATE TABLE `afms_operation_transfer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`transfer_date` datetime NOT NULL COMMENT '搬塘时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`species_id` int(11) NOT NULL COMMENT '养殖品种ID',
`quantity` float NOT NULL COMMENT '搬出数量',
`weight` float NOT NULL COMMENT '搬出重量',
`unit_price` float NOT NULL COMMENT '单价',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
KEY `species_id` (`species_id`),
CONSTRAINT `afms_operation_transfer_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`),
CONSTRAINT `afms_operation_transfer_ibfk_2` FOREIGN KEY (`species_id`) REFERENCES `afms_basic_species` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-搬塘模块';
/*Data for the table `afms_operation_transfer` */
/*Table structure for table `afms_operation_transfer_details` */
DROP TABLE IF EXISTS `afms_operation_transfer_details`;
CREATE TABLE `afms_operation_transfer_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`transfer_id` int(11) NOT NULL COMMENT '搬塘记录ID',
`target_pond_id` int(11) NOT NULL COMMENT '转入塘口ID',
`quantity` float NOT NULL COMMENT '转入数量',
`weight` float NOT NULL COMMENT '转入重量',
PRIMARY KEY (`id`),
KEY `transfer_id` (`transfer_id`),
KEY `target_pond_id` (`target_pond_id`),
CONSTRAINT `afms_operation_transfer_details_ibfk_1` FOREIGN KEY (`transfer_id`) REFERENCES `afms_operation_transfer` (`id`),
CONSTRAINT `afms_operation_transfer_details_ibfk_2` FOREIGN KEY (`target_pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-搬塘模块明细';
/*Data for the table `afms_operation_transfer_details` */
/*Table structure for table `afms_operation_water_change` */
DROP TABLE IF EXISTS `afms_operation_water_change`;
CREATE TABLE `afms_operation_water_change` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`record_date` datetime NOT NULL COMMENT '换水记录时间',
`pond_id` int(11) NOT NULL COMMENT '塘口ID',
`inflow` float NOT NULL COMMENT '进水量(立方米)',
`outflow` float NOT NULL COMMENT '出水量(立方米)',
`photo` varchar(255) NOT NULL COMMENT '照片',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
CONSTRAINT `afms_operation_water_change_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养殖操作-换水模块';
/*Data for the table `afms_operation_water_change` */
/*Table structure for table `afms_revenue_harvest` */
DROP TABLE IF EXISTS `afms_revenue_harvest`;
CREATE TABLE `afms_revenue_harvest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`harvest_date` date NOT NULL COMMENT '收获时间',
`pond_id` int(11) NOT NULL COMMENT '塘口(关联塘口信息表)',
`species_id` int(11) NOT NULL COMMENT '养殖品种',
`customer` varchar(255) NOT NULL COMMENT '客户',
`total_weight` decimal(10,2) NOT NULL COMMENT '收货总重量/斤',
`total_price` decimal(10,2) NOT NULL COMMENT '收获总价格/元',
`labor_cost` decimal(10,2) NOT NULL COMMENT '人工成本/元',
`transportation_cost` decimal(10,2) NOT NULL COMMENT '运输成本/元',
PRIMARY KEY (`id`),
KEY `pond_id` (`pond_id`),
KEY `species_id` (`species_id`),
CONSTRAINT `afms_revenue_harvest_ibfk_1` FOREIGN KEY (`pond_id`) REFERENCES `afms_basic_pond` (`id`),
CONSTRAINT `afms_revenue_harvest_ibfk_2` FOREIGN KEY (`species_id`) REFERENCES `afms_basic_species` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成本与收益- 收获模块';
/*Data for the table `afms_revenue_harvest` */
/*Table structure for table `afms_revenue_harvest_detail` */
DROP TABLE IF EXISTS `afms_revenue_harvest_detail`;
CREATE TABLE `afms_revenue_harvest_detail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`harvest_id` int(11) NOT NULL COMMENT '收获(关联收获表)',
`specification_range` varchar(255) NOT NULL COMMENT '规格范围(xx~xx)',
`unit_price` decimal(10,2) NOT NULL COMMENT '单价/元',
`weight` decimal(10,2) NOT NULL COMMENT '重量/斤',
`quantity` int(11) NOT NULL COMMENT '收获数量/尾',
`harvest_value` decimal(10,2) NOT NULL COMMENT '收获产值/元',
PRIMARY KEY (`id`),
KEY `harvest_id` (`harvest_id`),
CONSTRAINT `afms_revenue_harvest_detail_ibfk_1` FOREIGN KEY (`harvest_id`) REFERENCES `afms_revenue_harvest` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成本与收益- 收获模块明细';
/*Data for the table `afms_revenue_harvest_detail` */
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-modules</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lh-afms</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 核心模块-->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<!-- 代码生成模块-->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-generator</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-sys-service</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-swagger</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.zhonglai.luhui</groupId>-->
<!-- <artifactId>ruoyi-common-security</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
... ... @@ -7,10 +7,13 @@ import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = {
"com.ruoyi.common",
"com.ruoyi.system",
"com.ruoyi.framework",
"com.zhonglai.luhui.afms.config",
"com.zhonglai.luhui.afms.controller",
"com.ruoyi.generator",
"com.zhonglai.luhui.datasource",
"com.zhonglai.luhui.dao",
"com.zhonglai.luhui.sys",
"com.zhonglai.luhui.redis",
"com.zhonglai.luhui.afms",
})
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class LhAfmsApplication {
... ...
... ... @@ -39,7 +39,7 @@ public class SwaggerConfig {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题:后台管理员端")
.title("标题:养殖管理系统")
// 描述
.description("描述:用于通过mqtt发送指令控制PC端操作")
// 作者信息
... ...
package com.zhonglai.luhui.afms.controller.admin;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
//import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.zhonglai.luhui.afms.domain.AfmsBasicAquatic;
import com.zhonglai.luhui.afms.service.IAfmsBasicAquaticService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 基础信息管理-动保信息管理Controller
*
* @author 钟来
* @date 2023-05-19
*/
@Api(tags = "基础信息管理-动保信息管理")
@RestController
@RequestMapping("/admin/afms/AfmsBasicAquatic")
public class AfmsBasicAquaticController extends BaseController
{
@Autowired
private IAfmsBasicAquaticService afmsBasicAquaticService;
/**
* 查询基础信息管理-动保信息管理列表
*/
@ApiOperation("查询基础信息管理-动保信息管理列表")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:list')")
@GetMapping("/list")
public TableDataInfo list(AfmsBasicAquatic afmsBasicAquatic)
{
startPage();
List<AfmsBasicAquatic> list = afmsBasicAquaticService.selectAfmsBasicAquaticList(afmsBasicAquatic);
return getDataTable(list);
}
/**
* 导出基础信息管理-动保信息管理列表
*/
@ApiOperation("导出基础信息管理-动保信息管理列表")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:export')")
@Log(title = "基础信息管理-动保信息管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, AfmsBasicAquatic afmsBasicAquatic)
{
List<AfmsBasicAquatic> list = afmsBasicAquaticService.selectAfmsBasicAquaticList(afmsBasicAquatic);
ExcelUtil<AfmsBasicAquatic> util = new ExcelUtil<AfmsBasicAquatic>(AfmsBasicAquatic.class);
util.exportExcel(response, list, "基础信息管理-动保信息管理数据");
}
/**
* 获取基础信息管理-动保信息管理详细信息
*/
@ApiOperation("获取基础信息管理-动保信息管理详细信息")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Integer id)
{
return AjaxResult.success(afmsBasicAquaticService.selectAfmsBasicAquaticById(id));
}
/**
* 新增基础信息管理-动保信息管理
*/
@ApiOperation("新增基础信息管理-动保信息管理")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:add')")
@Log(title = "基础信息管理-动保信息管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody AfmsBasicAquatic afmsBasicAquatic)
{
return toAjax(afmsBasicAquaticService.insertAfmsBasicAquatic(afmsBasicAquatic));
}
/**
* 修改基础信息管理-动保信息管理
*/
@ApiOperation("修改基础信息管理-动保信息管理")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:edit')")
@Log(title = "基础信息管理-动保信息管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody AfmsBasicAquatic afmsBasicAquatic)
{
return toAjax(afmsBasicAquaticService.updateAfmsBasicAquatic(afmsBasicAquatic));
}
/**
* 删除基础信息管理-动保信息管理
*/
@ApiOperation("删除基础信息管理-动保信息管理")
// @PreAuthorize("@ss.hasPermi('afms:AfmsBasicAquatic:remove')")
@Log(title = "基础信息管理-动保信息管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Integer[] ids)
{
return toAjax(afmsBasicAquaticService.deleteAfmsBasicAquaticByIds(ids));
}
}
... ...
package com.zhonglai.luhui.afms.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.tool.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.ruoyi.common.annotation.PublicSQLConfig;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 基础信息管理-动保信息管理对象 afms_basic_aquatic
*
* @author 钟来
* @date 2023-05-19
*/
@ApiModel("基础信息管理-动保信息管理")
public class AfmsBasicAquatic extends BaseEntity
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
/** */
@ApiModelProperty("")
private Integer id;
/** 动保名称 */
@ApiModelProperty("动保名称")
private String name;
/** 类别 */
@ApiModelProperty("类别")
private String category;
/** 品牌 */
@ApiModelProperty("品牌")
private String brand;
/** 计量单位ID */
@ApiModelProperty("计量单位ID")
private Integer measurement_unit_id;
/** 规格单位 */
@ApiModelProperty("规格单位")
private String specification_unit;
/** 供应商 */
@ApiModelProperty("供应商")
private String supplier;
/** 创建时间 */
@ApiModelProperty("创建时间")
private java.util.Date create_time;
/** 供应商ID */
@ApiModelProperty("供应商ID")
private Integer supplier_id;
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setCategory(String category)
{
this.category = category;
}
public String getCategory()
{
return category;
}
public void setBrand(String brand)
{
this.brand = brand;
}
public String getBrand()
{
return brand;
}
public void setMeasurement_unit_id(Integer measurement_unit_id)
{
this.measurement_unit_id = measurement_unit_id;
}
public Integer getMeasurement_unit_id()
{
return measurement_unit_id;
}
public void setSpecification_unit(String specification_unit)
{
this.specification_unit = specification_unit;
}
public String getSpecification_unit()
{
return specification_unit;
}
public void setSupplier(String supplier)
{
this.supplier = supplier;
}
public String getSupplier()
{
return supplier;
}
public void setCreate_time(java.util.Date create_time)
{
this.create_time = create_time;
}
public java.util.Date getCreate_time()
{
return create_time;
}
public void setSupplier_id(Integer supplier_id)
{
this.supplier_id = supplier_id;
}
public Integer getSupplier_id()
{
return supplier_id;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("name", getName())
.append("category", getCategory())
.append("brand", getBrand())
.append("measurement_unit_id", getMeasurement_unit_id())
.append("specification_unit", getSpecification_unit())
.append("supplier", getSupplier())
.append("create_time", getCreate_time())
.append("supplier_id", getSupplier_id())
.toString();
}
}
... ...
package com.zhonglai.luhui.afms.mapper;
import java.util.List;
import com.zhonglai.luhui.afms.domain.AfmsBasicAquatic;
/**
* 基础信息管理-动保信息管理Mapper接口
*
* @author 钟来
* @date 2023-05-19
*/
public interface AfmsBasicAquaticMapper
{
/**
* 查询基础信息管理-动保信息管理
*
* @param id 基础信息管理-动保信息管理主键
* @return 基础信息管理-动保信息管理
*/
public AfmsBasicAquatic selectAfmsBasicAquaticById(Integer id);
/**
* 查询基础信息管理-动保信息管理列表
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 基础信息管理-动保信息管理集合
*/
public List<AfmsBasicAquatic> selectAfmsBasicAquaticList(AfmsBasicAquatic afmsBasicAquatic);
/**
* 新增基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
public int insertAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic);
/**
* 修改基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
public int updateAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic);
/**
* 删除基础信息管理-动保信息管理
*
* @param id 基础信息管理-动保信息管理主键
* @return 结果
*/
public int deleteAfmsBasicAquaticById(Integer id);
/**
* 批量删除基础信息管理-动保信息管理
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteAfmsBasicAquaticByIds(Integer[] ids);
}
... ...
//package com.zhonglai.luhui.afms.service;
//
//import com.zhonglai.luhui.dao.service.PublicService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//
//public class AfmsDetailsServiceImpl implements UserDetailsService {
// private static final Logger log = LoggerFactory.getLogger(AfmsDetailsServiceImpl.class);
// @Autowired
// private PublicService publicService;
// @Override
// public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// return null;
// }
//}
... ...
package com.zhonglai.luhui.afms.service;
import java.util.List;
import com.zhonglai.luhui.afms.domain.AfmsBasicAquatic;
/**
* 基础信息管理-动保信息管理Service接口
*
* @author 钟来
* @date 2023-05-19
*/
public interface IAfmsBasicAquaticService
{
/**
* 查询基础信息管理-动保信息管理
*
* @param id 基础信息管理-动保信息管理主键
* @return 基础信息管理-动保信息管理
*/
public AfmsBasicAquatic selectAfmsBasicAquaticById(Integer id);
/**
* 查询基础信息管理-动保信息管理列表
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 基础信息管理-动保信息管理集合
*/
public List<AfmsBasicAquatic> selectAfmsBasicAquaticList(AfmsBasicAquatic afmsBasicAquatic);
/**
* 新增基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
public int insertAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic);
/**
* 修改基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
public int updateAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic);
/**
* 批量删除基础信息管理-动保信息管理
*
* @param ids 需要删除的基础信息管理-动保信息管理主键集合
* @return 结果
*/
public int deleteAfmsBasicAquaticByIds(Integer[] ids);
/**
* 删除基础信息管理-动保信息管理信息
*
* @param id 基础信息管理-动保信息管理主键
* @return 结果
*/
public int deleteAfmsBasicAquaticById(Integer id);
}
... ...
package com.zhonglai.luhui.afms.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhonglai.luhui.afms.mapper.AfmsBasicAquaticMapper;
import com.zhonglai.luhui.afms.domain.AfmsBasicAquatic;
import com.zhonglai.luhui.afms.service.IAfmsBasicAquaticService;
/**
* 基础信息管理-动保信息管理Service业务层处理
*
* @author 钟来
* @date 2023-05-19
*/
@Service
public class AfmsBasicAquaticServiceImpl implements IAfmsBasicAquaticService
{
@Autowired
private AfmsBasicAquaticMapper afmsBasicAquaticMapper;
/**
* 查询基础信息管理-动保信息管理
*
* @param id 基础信息管理-动保信息管理主键
* @return 基础信息管理-动保信息管理
*/
@Override
public AfmsBasicAquatic selectAfmsBasicAquaticById(Integer id)
{
return afmsBasicAquaticMapper.selectAfmsBasicAquaticById(id);
}
/**
* 查询基础信息管理-动保信息管理列表
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 基础信息管理-动保信息管理
*/
@Override
public List<AfmsBasicAquatic> selectAfmsBasicAquaticList(AfmsBasicAquatic afmsBasicAquatic)
{
return afmsBasicAquaticMapper.selectAfmsBasicAquaticList(afmsBasicAquatic);
}
/**
* 新增基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
@Override
public int insertAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic)
{
return afmsBasicAquaticMapper.insertAfmsBasicAquatic(afmsBasicAquatic);
}
/**
* 修改基础信息管理-动保信息管理
*
* @param afmsBasicAquatic 基础信息管理-动保信息管理
* @return 结果
*/
@Override
public int updateAfmsBasicAquatic(AfmsBasicAquatic afmsBasicAquatic)
{
return afmsBasicAquaticMapper.updateAfmsBasicAquatic(afmsBasicAquatic);
}
/**
* 批量删除基础信息管理-动保信息管理
*
* @param ids 需要删除的基础信息管理-动保信息管理主键
* @return 结果
*/
@Override
public int deleteAfmsBasicAquaticByIds(Integer[] ids)
{
return afmsBasicAquaticMapper.deleteAfmsBasicAquaticByIds(ids);
}
/**
* 删除基础信息管理-动保信息管理信息
*
* @param id 基础信息管理-动保信息管理主键
* @return 结果
*/
@Override
public int deleteAfmsBasicAquaticById(Integer id)
{
return afmsBasicAquaticMapper.deleteAfmsBasicAquaticById(id);
}
}
... ...
... ... @@ -6,16 +6,16 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://119.23.218.181:3306/lh-afms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
url: jdbc:mysql://rm-wz9740un21f09iokuao.mysql.rds.aliyuncs.com:3306/mqtt_broker?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: luhui
password: Luhui586
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
enabled: true
url: jdbc:mysql://119.23.218.181:3306/lh-afms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: luhui
password: Luhui586
# 初始连接数
initialSize: 5
# 最小连接池数量
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8060 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-afms # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /tool/gen/*
\ No newline at end of file
... ...
<?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.zhonglai.luhui.afms.mapper.AfmsBasicAquaticMapper">
<resultMap type="AfmsBasicAquatic" id="AfmsBasicAquaticResult">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="category" column="category" />
<result property="brand" column="brand" />
<result property="measurement_unit_id" column="measurement_unit_id" />
<result property="specification_unit" column="specification_unit" />
<result property="supplier" column="supplier" />
<result property="create_time" column="create_time" />
<result property="supplier_id" column="supplier_id" />
</resultMap>
<sql id="selectAfmsBasicAquaticVo">
select `id`, `name`, `category`, `brand`, `measurement_unit_id`, `specification_unit`, `supplier`, `create_time`, `supplier_id` from afms_basic_aquatic
</sql>
<select id="selectAfmsBasicAquaticList" parameterType="AfmsBasicAquatic" resultMap="AfmsBasicAquaticResult">
<include refid="selectAfmsBasicAquaticVo"/>
<where>
</where>
</select>
<select id="selectAfmsBasicAquaticById" parameterType="Integer" resultMap="AfmsBasicAquaticResult">
<include refid="selectAfmsBasicAquaticVo"/>
where id = #{id}
</select>
<insert id="insertAfmsBasicAquatic" parameterType="AfmsBasicAquatic" useGeneratedKeys="true" keyProperty="id">
insert into afms_basic_aquatic
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">name,</if>
<if test="category != null and category != ''">category,</if>
<if test="brand != null and brand != ''">brand,</if>
<if test="measurement_unit_id != null">measurement_unit_id,</if>
<if test="specification_unit != null and specification_unit != ''">specification_unit,</if>
<if test="supplier != null and supplier != ''">supplier,</if>
<if test="create_time != null">create_time,</if>
<if test="supplier_id != null">supplier_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">#{name},</if>
<if test="category != null and category != ''">#{category},</if>
<if test="brand != null and brand != ''">#{brand},</if>
<if test="measurement_unit_id != null">#{measurement_unit_id},</if>
<if test="specification_unit != null and specification_unit != ''">#{specification_unit},</if>
<if test="supplier != null and supplier != ''">#{supplier},</if>
<if test="create_time != null">#{create_time},</if>
<if test="supplier_id != null">#{supplier_id},</if>
</trim>
</insert>
<update id="updateAfmsBasicAquatic" parameterType="AfmsBasicAquatic">
update afms_basic_aquatic
<trim prefix="SET" suffixOverrides=",">
<if test="name != null and name != ''">name = #{name},</if>
<if test="category != null and category != ''">category = #{category},</if>
<if test="brand != null and brand != ''">brand = #{brand},</if>
<if test="measurement_unit_id != null">measurement_unit_id = #{measurement_unit_id},</if>
<if test="specification_unit != null and specification_unit != ''">specification_unit = #{specification_unit},</if>
<if test="supplier != null and supplier != ''">supplier = #{supplier},</if>
<if test="create_time != null">create_time = #{create_time},</if>
<if test="supplier_id != null">supplier_id = #{supplier_id},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteAfmsBasicAquaticById" parameterType="Integer">
delete from afms_basic_aquatic where id = #{id}
</delete>
<delete id="deleteAfmsBasicAquaticByIds" parameterType="String">
delete from afms_basic_aquatic where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>
\ No newline at end of file
... ...
... ... @@ -8,22 +8,24 @@
<artifactId>Luhui</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ruoyi-system</module>
<module>ruoyi-generator</module>
<module>ruoyi-framework</module>
<module>ruoyi-common</module>
<module>lh-admin</module>
<module>lh-mqtt-service</module>
<module>lh-domain</module>
<module>lh-api</module>
<module>lh-central-control</module>
<module>lh-backups</module>
<module>lh-alarm</module>
<module>lh-openai</module>
<module>lh-log</module>
<module>lh-quartz</module>
<module>lh-chatgpt-api</module>
<module>lh-afms</module>
<module>lh-common</module>
<module>lh-jar</module>
<module>lh-jar/lh-jar-sys-service</module>
<module>lh-modules</module>
<module>lh-common/lh-common-swagger</module>
<module>lh-common/lh-common-firewall</module>
<module>lh-jar/lh-jar-action</module>
<module>lh-jar/lh-jar-chatgpt</module>
<module>lh-jar/lh-jar-rocketmq</module>
</modules>
<packaging>pom</packaging>
... ... @@ -53,7 +55,7 @@
<lombok.version>1.18.12</lombok.version>
<commons-text.version>1.8</commons-text.version>
<zxing.version>3.4.0</zxing.version>
<okhttp.version>3.3.1</okhttp.version>
<okhttp.version>3.14.9</okhttp.version>
<tkmapper.version>4.2.1</tkmapper.version>
<shiro.version>1.10.1</shiro.version>
</properties>
... ... @@ -239,6 +241,85 @@
<version>${ruoyi.version}</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-poi</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 公用dao趁层 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-public-dao</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 数据连接 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-datasource</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 系统服务 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-sys-service</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- redis -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-common-redis</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- rocketmq -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-rocketmq</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 权限 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>ruoyi-common-security</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 文档 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-swagger</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 防火墙 -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common-firewall</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- action -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-action</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- chatgpt -->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-chatgpt</artifactId>
<version>${ruoyi.version}</version>
</dependency>
<!-- 支持data -->
<dependency>
<groupId>org.projectlombok</groupId>
... ... @@ -380,6 +461,12 @@
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.unfbx</groupId>
<artifactId>chatgpt-java</artifactId>
<version>1.0.12</version>
</dependency>
</dependencies>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Luhui</artifactId>
<groupId>com.zhonglai.luhui</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-common</artifactId>
<description>
common通用工具
</description>
<dependencies>
<!-- 模型-->
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-domain</artifactId>
</dependency>
<!-- Spring框架基本的核心工具 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- SpringWeb模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- spring security 安全认证 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- 自定义验证注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- io常用工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!-- 文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<!-- yml解析器 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<!-- Token生成与解析-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!-- Jaxb -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<!-- redis 缓存操作 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- pool 对象池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
</dependency>
<!-- servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<!-- 支持data -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<!-- 自定义验证注解 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.4.3.Final</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
* 数据权限过滤注解
*
* @author ruoyi
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataScope
{
/**
* 部门表的别名
*/
public String deptAlias() default "";
/**
* 用户表的别名
*/
public String userAlias() default "";
}
package com.ruoyi.common.annotation;
import com.ruoyi.common.enums.DataSourceType;
import java.lang.annotation.*;
/**
* 自定义多数据源切换注解
*
* 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
*
* @author ruoyi
*/
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface DataSource
{
/**
* 切换数据源名称
*/
public DataSourceType value() default DataSourceType.MASTER;
}
package com.ruoyi.common.annotation;
import com.ruoyi.common.utils.poi.ExcelHandlerAdapter;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
/**
* 自定义导出Excel数据注解
*
* @author ruoyi
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
/**
* 导出时在excel中排序
*/
public int sort() default Integer.MAX_VALUE;
/**
* 导出到Excel中的名字.
*/
public String name() default "";
/**
* 日期格式, 如: yyyy-MM-dd
*/
public String dateFormat() default "";
/**
* 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
*/
public String dictType() default "";
/**
* 读取内容转表达式 (如: 0=男,1=女,2=未知)
*/
public String readConverterExp() default "";
/**
* 分隔符,读取字符串组内容
*/
public String separator() default ",";
/**
* BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
*/
public int scale() default -1;
/**
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
*/
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
/**
* 导出类型(0数字 1字符串)
*/
public ColumnType cellType() default ColumnType.STRING;
/**
* 导出时在excel中每个列的高度 单位为字符
*/
public double height() default 14;
/**
* 导出时在excel中每个列的宽 单位为字符
*/
public double width() default 16;
/**
* 文字后缀,如% 90 变成90%
*/
public String suffix() default "";
/**
* 当值为空时,字段的默认值
*/
public String defaultValue() default "";
/**
* 提示信息
*/
public String prompt() default "";
/**
* 设置只能选择不能输入的列内容.
*/
public String[] combo() default {};
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
public boolean isExport() default true;
/**
* 另一个类中的属性名称,支持多级获取,以小数点隔开
*/
public String targetAttr() default "";
/**
* 是否自动统计数据,在最后追加一行统计数据总和
*/
public boolean isStatistics() default false;
/**
* 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
*/
public Align align() default Align.AUTO;
/**
* 自定义数据处理器
*/
public Class<?> handler() default ExcelHandlerAdapter.class;
/**
* 自定义数据处理器参数
*/
public String[] args() default {};
public enum Align
{
AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
private final int value;
Align(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
/**
* 字段类型(0:导出导入;1:仅导出;2:仅导入)
*/
Type type() default Type.ALL;
public enum Type
{
ALL(0), EXPORT(1), IMPORT(2);
private final int value;
Type(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
public enum ColumnType
{
NUMERIC(0), STRING(1), IMAGE(2);
private final int value;
ColumnType(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
}
\ No newline at end of file
package com.ruoyi.common.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Excel注解集
*
* @author ruoyi
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Excels
{
public Excel[] value();
}
package com.ruoyi.common.annotation;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OperatorType;
import java.lang.annotation.*;
/**
* 自定义操作日志记录注解
*
* @author ruoyi
*
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log
{
/**
* 模块
*/
public String title() default "";
/**
* 功能
*/
public BusinessType businessType() default BusinessType.OTHER;
/**
* 操作人类别
*/
public OperatorType operatorType() default OperatorType.MANAGE;
/**
* 是否保存请求的参数
*/
public boolean isSaveRequestData() default true;
/**
* 是否保存响应的参数
*/
public boolean isSaveResponseData() default true;
}
package com.ruoyi.common.annotation;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.LimitType;
import java.lang.annotation.*;
/**
* 限流注解
*
* @author ruoyi
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter
{
/**
* 限流key
*/
public String key() default Constants.RATE_LIMIT_KEY;
/**
* 限流时间,单位秒
*/
public int time() default 60;
/**
* 限流次数
*/
public int count() default 100;
/**
* 限流类型
*/
public LimitType limitType() default LimitType.DEFAULT;
}
package com.ruoyi.common.annotation;
import java.lang.annotation.*;
/**
* 自定义注解防止表单重复提交
*
* @author ruoyi
*
*/
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatSubmit
{
/**
* 间隔时间(ms),小于此时间视为重复提交
*/
public int interval() default 5000;
/**
* 提示消息
*/
public String message() default "不允许重复提交,请稍候再试";
}
package com.ruoyi.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 读取项目相关配置
*
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "jhlt")
public class RuoYiConfig
{
/** 项目名称 */
private String name;
/** 版本 */
private String version;
/** 版权年份 */
private String copyrightYear;
/** 实例演示开关 */
private boolean demoEnabled;
/** 上传路径 */
private static String profile;
/** 获取地址开关 */
private static boolean addressEnabled;
/** 验证码类型 */
private static String captchaType;
/** root */
private static String root;
public static String getRoot() {
return root;
}
public static void setRoot(String root) {
RuoYiConfig.root = root;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version = version;
}
public String getCopyrightYear()
{
return copyrightYear;
}
public void setCopyrightYear(String copyrightYear)
{
this.copyrightYear = copyrightYear;
}
public boolean isDemoEnabled()
{
return demoEnabled;
}
public void setDemoEnabled(boolean demoEnabled)
{
this.demoEnabled = demoEnabled;
}
public static String getProfile()
{
return profile;
}
public void setProfile(String profile)
{
RuoYiConfig.profile = profile;
}
public static boolean isAddressEnabled()
{
return addressEnabled;
}
public void setAddressEnabled(boolean addressEnabled)
{
RuoYiConfig.addressEnabled = addressEnabled;
}
public static String getCaptchaType() {
return captchaType;
}
public void setCaptchaType(String captchaType) {
RuoYiConfig.captchaType = captchaType;
}
/**
* 获取导入上传路径
*/
public static String getImportPath()
{
return getProfile() + "/import";
}
/**
* 获取头像上传路径
*/
public static String getAvatarPath()
{
return getProfile() + "/avatar";
}
/**
* 获取下载路径
*/
public static String getDownloadPath()
{
return getProfile() + "/download/";
}
/**
* 获取上传路径
*/
public static String getUploadPath()
{
return getProfile() + "/upload";
}
}
package com.ruoyi.common.constant;
import io.jsonwebtoken.Claims;
/**
* 通用常量信息
*
* @author ruoyi
*/
public class Constants
{
/**
* UTF-8 字符集
*/
public static final String UTF8 = "UTF-8";
/**
* GBK 字符集
*/
public static final String GBK = "GBK";
/**
* http请求
*/
public static final String HTTP = "http://";
/**
* https请求
*/
public static final String HTTPS = "https://";
/**
* 通用成功标识
*/
public static final String SUCCESS = "0";
/**
* 通用失败标识
*/
public static final String FAIL = "1";
/**
* 登录成功
*/
public static final String LOGIN_SUCCESS = "Success";
/**
* 注销
*/
public static final String LOGOUT = "Logout";
/**
* 注册
*/
public static final String REGISTER = "Register";
/**
* 登录失败
*/
public static final String LOGIN_FAIL = "Error";
/**
* 验证码 redis key
*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
* 登录用户 redis key
*/
public static final String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* 防重提交 redis key
*/
public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
/**
* 限流 redis key
*/
public static final String RATE_LIMIT_KEY = "rate_limit:";
/**
* 验证码有效期(分钟)
*/
public static final Integer CAPTCHA_EXPIRATION = 2;
/**
* 令牌
*/
public static final String TOKEN = "token";
/**
* 令牌前缀
*/
public static final String TOKEN_PREFIX = "Bearer ";
/**
* 令牌前缀
*/
public static final String LOGIN_USER_KEY = "login_user_key";
/**
* 用户ID
*/
public static final String JWT_USERID = "userid";
/**
* 用户名称
*/
public static final String JWT_USERNAME = Claims.SUBJECT;
/**
* 用户头像
*/
public static final String JWT_AVATAR = "avatar";
/**
* 创建时间
*/
public static final String JWT_CREATED = "created";
/**
* 用户权限
*/
public static final String JWT_AUTHORITIES = "authorities";
/**
* 参数管理 cache key
*/
public static final String SYS_CONFIG_KEY = "sys_config:";
/**
* 字典管理 cache key
*/
public static final String SYS_DICT_KEY = "sys_dict:";
/**
* 资源映射路径 前缀
*/
public static final String RESOURCE_PREFIX = "/profile";
/**
* 资源映射路径 前缀
*/
public static final String ROOT = "/**";
/**
* RMI 远程方法调用
*/
public static final String LOOKUP_RMI = "rmi:";
/**
* LDAP 远程方法调用
*/
public static final String LOOKUP_LDAP = "ldap:";
/**
* LDAPS 远程方法调用
*/
public static final String LOOKUP_LDAPS = "ldaps:";
/**
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };
/**
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.utils.file" };
}
package com.ruoyi.common.constant;
/**
* 代码生成通用常量
*
* @author ruoyi
*/
public class GenConstants
{
/** 单表(增删改查) */
public static final String TPL_CRUD = "crud";
/** 树表(增删改查) */
public static final String TPL_TREE = "tree";
/** 主子表(增删改查) */
public static final String TPL_SUB = "sub";
/** 树编码字段 */
public static final String TREE_CODE = "treeCode";
/** 树父编码字段 */
public static final String TREE_PARENT_CODE = "treeParentCode";
/** 树名称字段 */
public static final String TREE_NAME = "treeName";
/** 上级菜单ID字段 */
public static final String PARENT_MENU_ID = "parentMenuId";
/** 上级菜单名称字段 */
public static final String PARENT_MENU_NAME = "parentMenuName";
/** 数据库字符串类型 */
public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" };
/** 数据库文本类型 */
public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
/** 数据库时间类型 */
public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
/** 数据库数字类型 */
public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal" };
/** 页面不需要编辑字段 */
public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
/** 页面不需要显示的列表字段 */
public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
"update_time" };
/** 页面不需要查询字段 */
public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark" };
/** Entity基类字段 */
public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
/** Tree基类字段 */
public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
/** 文本框 */
public static final String HTML_INPUT = "input";
/** 文本域 */
public static final String HTML_TEXTAREA = "textarea";
/** 下拉框 */
public static final String HTML_SELECT = "select";
/** 单选框 */
public static final String HTML_RADIO = "radio";
/** 复选框 */
public static final String HTML_CHECKBOX = "checkbox";
/** 日期控件 */
public static final String HTML_DATETIME = "datetime";
/** 图片上传控件 */
public static final String HTML_IMAGE_UPLOAD = "imageUpload";
/** 文件上传控件 */
public static final String HTML_FILE_UPLOAD = "fileUpload";
/** 富文本控件 */
public static final String HTML_EDITOR = "editor";
/** 字符串类型 */
public static final String TYPE_STRING = "String";
/** 整型 */
public static final String TYPE_INTEGER = "Integer";
/** 长整型 */
public static final String TYPE_LONG = "Long";
/** 浮点型 */
public static final String TYPE_DOUBLE = "Double";
/** 高精度计算类型 */
public static final String TYPE_BIGDECIMAL = "BigDecimal";
/** 时间类型 */
public static final String TYPE_DATE = "Date";
/** 模糊查询 */
public static final String QUERY_LIKE = "LIKE";
/** 相等查询 */
public static final String QUERY_EQ = "EQ";
/** 需要 */
public static final String REQUIRE = "1";
}
package com.ruoyi.common.constant;
/**
* 返回状态码
*
* @author ruoyi
*/
public class HttpStatus
{
/**
* 操作成功
*/
public static final int SUCCESS = 200;
/**
* 对象创建成功
*/
public static final int CREATED = 201;
/**
* 请求已经被接受
*/
public static final int ACCEPTED = 202;
/**
* 操作已经执行成功,但是没有返回数据
*/
public static final int NO_CONTENT = 204;
/**
* 资源已被移除
*/
public static final int MOVED_PERM = 301;
/**
* 重定向
*/
public static final int SEE_OTHER = 303;
/**
* 资源没有被修改
*/
public static final int NOT_MODIFIED = 304;
/**
* 参数列表错误(缺少,格式不匹配)
*/
public static final int BAD_REQUEST = 400;
/**
* 未授权
*/
public static final int UNAUTHORIZED = 401;
/**
* 访问受限,授权过期
*/
public static final int FORBIDDEN = 403;
/**
* 资源,服务未找到
*/
public static final int NOT_FOUND = 404;
/**
* 不允许的http方法
*/
public static final int BAD_METHOD = 405;
/**
* 资源冲突,或者资源被锁
*/
public static final int CONFLICT = 409;
/**
* 不支持的数据,媒体类型
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
* 系统内部错误
*/
public static final int ERROR = 500;
/**
* 接口未实现
*/
public static final int NOT_IMPLEMENTED = 501;
}
package com.ruoyi.common.constant;
/**
* 任务调度通用常量
*
* @author ruoyi
*/
public class ScheduleConstants
{
public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
/** 执行目标key */
public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
/** 默认 */
public static final String MISFIRE_DEFAULT = "0";
/** 立即触发执行 */
public static final String MISFIRE_IGNORE_MISFIRES = "1";
/** 触发一次执行 */
public static final String MISFIRE_FIRE_AND_PROCEED = "2";
/** 不触发立即执行 */
public static final String MISFIRE_DO_NOTHING = "3";
public enum Status
{
/**
* 正常
*/
NORMAL("0"),
/**
* 暂停
*/
PAUSE("1");
private String value;
private Status(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
}
}
package com.ruoyi.common.core.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sql.SqlUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import java.beans.PropertyEditorSupport;
import java.util.Date;
import java.util.List;
/**
* web层通用数据处理
*
* @author ruoyi
*/
public class BaseController
{
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 将前台传递过来的日期格式的字符串,自动转化为Date类型
*/
@InitBinder
public void initBinder(WebDataBinder binder)
{
// Date 类型转换
binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
{
@Override
public void setAsText(String text)
{
setValue(DateUtils.parseDate(text));
}
});
}
/**
* 设置请求分页数据
*/
protected void startPage()
{
PageUtils.startPage();
}
/**
* 设置请求排序数据
*/
protected void startOrderBy()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
if (StringUtils.isNotEmpty(pageDomain.getOrderBy()))
{
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
PageHelper.orderBy(orderBy);
}
}
/**
* 清理分页的线程变量
*/
protected void clearPage()
{
PageUtils.clearPage();
}
/**
* 响应请求分页数据
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
protected TableDataInfo getDataTable(List<?> list)
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(new PageInfo(list).getTotal());
return rspData;
}
/**
* 返回成功
*/
public AjaxResult success()
{
return AjaxResult.success();
}
/**
* 返回失败消息
*/
public AjaxResult error()
{
return AjaxResult.error();
}
/**
* 返回成功消息
*/
public AjaxResult success(String message)
{
return AjaxResult.success(message);
}
/**
* 返回失败消息
*/
public AjaxResult error(String message)
{
return AjaxResult.error(message);
}
/**
* 响应返回结果
*
* @param rows 影响行数
* @return 操作结果
*/
protected AjaxResult toAjax(int rows)
{
return rows > 0 ? AjaxResult.success() : AjaxResult.error();
}
/**
* 响应返回结果
*
* @param result 结果
* @return 操作结果
*/
protected AjaxResult toAjax(boolean result)
{
return result ? success() : error();
}
/**
* 页面跳转
*/
public String redirect(String url)
{
return StringUtils.format("redirect:{}", url);
}
/**
* 获取用户缓存信息
*/
public BaseLoginUser getLoginUser()
{
return SecurityUtils.getLoginUser();
}
/**
* 获取登录用户id
*/
public Long getUserId()
{
return getLoginUser().getUserId();
}
/**
* 获取登录用户名
*/
public String getUsername()
{
return getLoginUser().getUsername();
}
}
package com.ruoyi.common.core.domain;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.utils.StringUtils;
import java.util.HashMap;
/**
* 操作消息提醒
*
* @author ruoyi
*/
public class AjaxResult extends HashMap<String, Object>
{
private static final long serialVersionUID = 1L;
/** 状态码 */
public static final String CODE_TAG = "code";
/** 返回内容 */
public static final String MSG_TAG = "msg";
/** 数据对象 */
public static final String DATA_TAG = "data";
/**
* 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
*/
public AjaxResult()
{
}
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
*/
public AjaxResult(int code, String msg)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
}
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
* @param data 数据对象
*/
public AjaxResult(int code, String msg, Object data)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
if (StringUtils.isNotNull(data))
{
super.put(DATA_TAG, data);
}
}
/**
* 返回成功消息
*
* @return 成功消息
*/
public static AjaxResult success()
{
return AjaxResult.success("操作成功");
}
/**
* 返回成功数据
*
* @return 成功消息
*/
public static AjaxResult success(Object data)
{
return AjaxResult.success("操作成功", data);
}
/**
* 返回成功消息
*
* @param msg 返回内容
* @return 成功消息
*/
public static AjaxResult success(String msg)
{
return AjaxResult.success(msg, null);
}
/**
* 返回成功消息
*
* @param msg 返回内容
* @param data 数据对象
* @return 成功消息
*/
public static AjaxResult success(String msg, Object data)
{
return new AjaxResult(HttpStatus.SUCCESS, msg, data);
}
/**
* 返回错误消息
*
* @return
*/
public static AjaxResult error()
{
return AjaxResult.error("操作失败");
}
/**
* 返回错误消息
*
* @param msg 返回内容
* @return 警告消息
*/
public static AjaxResult error(String msg)
{
return AjaxResult.error(msg, null);
}
/**
* 返回错误消息
*
* @param msg 返回内容
* @param data 数据对象
* @return 警告消息
*/
public static AjaxResult error(String msg, Object data)
{
return new AjaxResult(HttpStatus.ERROR, msg, data);
}
/**
* 返回错误消息
*
* @param code 状态码
* @param msg 返回内容
* @return 警告消息
*/
public static AjaxResult error(int code, String msg)
{
return new AjaxResult(code, msg, null);
}
/**
* 方便链式调用
*
* @param key 键
* @param value 值
* @return 数据对象
*/
@Override
public AjaxResult put(String key, Object value)
{
super.put(key, value);
return this;
}
}