queryPersonListByExport(DemoPersonDTO queryDTO, Integer page, Integer size) {
+ return demoPersonBLO.queryPersonListByExport(queryDTO, page, size);
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java b/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java
new file mode 100644
index 0000000..9900f18
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/business/demo/controller/DemoPersonController.java
@@ -0,0 +1,138 @@
+package com.insigma.business.demo.controller;
+
+import com.insigma.business.demo.bpo.DemoPersonBPO;
+import com.insigma.business.demo.dto.DemoPersonDTO;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.web.support.annotation.OdinRequest;
+import com.insigma.web.support.annotation.OdinRequestParam;
+import com.insigma.web.support.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 人员增删改查demo
+ *
+ * 实体类传参开发方式,需继承BaseController,并且需要实体类传参的方法上加上@OdinRequest
+ * 在doInit方法上需要加上注解@OdinRequest(init = true),init = true为初始化字典数据和模块信息,其他方法上只需加@OdinRequest即可,不需要参数
+ * 方法参数如果不指定@OdinRequestParam注解,则按照参数名去取前端传过来的数据,并将其转化成实体类
+ * 如果指定了@OdinRequestParam注解,并且设定了value值,则根据value值去取前端传过来的数据
+ * 其中@OdinRequestParam参数required默认为true,即如果找不到对应的数据,则返回错误,当设置成false,则不会
+ * 如果需要接收前端传过来的表格数据,则可以通过定义PageInfo来接收数据
+ *
+ * @author yinjh
+ * @since 2020-05-28
+ */
+@RestController
+@RequestMapping("/business/demo/DemoPerson")
+public class DemoPersonController extends BaseController {
+
+ @Autowired
+ private DemoPersonBPO demoPersonBPO;
+
+ @OdinRequest(init = true)
+ @PostMapping("/doInit")
+ public ResponseMessage doInit(DemoPersonDTO f_form, Integer t_tableData_size) {
+ tableDataQuery(f_form, 1, t_tableData_size);
+ return this.ok();
+ }
+
+ @OdinRequest
+ @PostMapping("/query")
+ public ResponseMessage query(@OdinRequestParam("f_form") DemoPersonDTO queryDTO,
+ //@OdinRequestParam("t_tableData") PageInfo pageInfo, // 没用到,只作如何取表格数据的演示
+ Integer t_tableData_size) {
+ tableDataQuery(queryDTO, 1, t_tableData_size);
+// this.set("page", 1); // 需要将前端表格中:currentPage定义的值设置成1
+ return this.ok();
+ }
+
+ @OdinRequest
+ @PostMapping("/doGridQuery/{name}")
+ public ResponseMessage doGridQuery(@OdinRequestParam("f_form") DemoPersonDTO queryDTO,
+ @OdinRequestParam("t_tableData_page") Integer page,
+ @OdinRequestParam("t_tableData_size") Integer size,
+ @PathVariable String name) {
+ tableDataQuery(queryDTO, page, size);
+// this.set("page", page); // 需要将t_tableData_page的值赋值到前端表格:currentPage的值中
+ return this.ok();
+ }
+
+ @OdinRequest
+ @PostMapping("/add")
+ public ResponseMessage add() {
+ this.clearForm("f_personForm");
+ this.set("dialogFormVisible", true);
+ this.set("dialogFormTitle", "新增人员");
+ return this.ok();
+ }
+
+ @OdinRequest
+ @PostMapping("/update")
+ public ResponseMessage update(String id) {
+ DemoPersonDTO dto = demoPersonBPO.queryPerson(id);
+ this.toForm("f_personForm", dto);
+ this.set("dialogFormVisible", true);
+ this.set("dialogFormTitle", "修改人员");
+ return this.ok();
+ }
+
+ @OdinRequest(refresh = true)
+ @PostMapping("/batchDelete")
+ public ResponseMessage batchDelete() {
+ List list = this.getCheckedTableData("t_tableData", DemoPersonDTO.class);
+ if (list.size() == 0) {
+ return this.error("请勾选需要删除的人员!");
+ }
+ List ids = list.stream().map(o -> o.getId()).collect(Collectors.toList());
+ demoPersonBPO.deletePersons(ids);
+// this.refresh();
+ return this.ok("删除成功!");
+ }
+
+ @OdinRequest(refresh = true) // refresh = true 请求结束后刷新页面
+ @PostMapping("/delete")
+ public ResponseMessage delete(String id) {
+ List ids = Arrays.asList(id);
+ demoPersonBPO.deletePersons(ids);
+// this.refresh();
+ return this.ok("删除成功!");
+ }
+
+ @OdinRequest(refresh = true)
+ @PostMapping("/doSave/{name}")
+ public ResponseMessage doSave(@OdinRequestParam("f_personForm") DemoPersonDTO demoPersonDTO, @PathVariable String name) {
+
+ if (ObjectUtils.isEmpty(demoPersonDTO.getId())) {
+ DemoPersonDTO dto = demoPersonBPO.selectOne(demoPersonDTO);
+ if (dto != null) {
+ return this.error("不可添加重复数据!!");
+ }
+ }
+ demoPersonBPO.savePerson(demoPersonDTO);
+ this.set("dialogFormVisible", false);
+ //this.refresh();
+ return this.ok("保存成功!");
+ }
+
+ public void tableDataQuery(DemoPersonDTO queryDTO, Integer t_tableData_page, Integer t_tableData_size) {
+ this.pageQuery("t_tableData", () -> {
+ this.set("page", t_tableData_page); // 需要将前端表格中:currentPage定义的值设置成page的值
+ return demoPersonBPO.queryPersonListByExport(queryDTO, t_tableData_page, t_tableData_size);
+ }, (demoPersonDTO, checkbox) -> {
+ if ("1".equals(demoPersonDTO.getSex())) {
+// checkbox.setDisabled(true); // 设置行复选框不可编辑
+ } else {
+// checkbox.setChecked(true); // 设置行复选框已选中
+ }
+ });
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java
new file mode 100644
index 0000000..1ade262
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dao/DemoPersonDAO.java
@@ -0,0 +1,20 @@
+package com.insigma.business.demo.dao;
+
+import com.insigma.business.demo.entity.DemoPerson;
+import com.insigma.framework.mybatis.BaseDAO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author yinjh
+ * @since 2020-05-28
+ */
+@Mapper
+public interface DemoPersonDAO extends BaseDAO {
+
+ DemoPerson selectDemoPersonById(String id);
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java
new file mode 100644
index 0000000..526c77f
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/DemoPersonDTO.java
@@ -0,0 +1,36 @@
+package com.insigma.business.demo.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by yinjh on 2020/5/28.
+ */
+@Data
+public class DemoPersonDTO implements Serializable {
+ private Boolean checked;//用于设置复选框是否选中
+
+ private Boolean disabled;//用于设置复选框是否可编辑
+
+ private String id;
+
+ private String name;
+
+ private String sex;
+
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date birthday;
+
+ private String mobile;
+
+ private String address;
+
+ private String startTime;
+
+ private Date create_time;
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java
new file mode 100644
index 0000000..a1c26f0
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/business/demo/dto/TestDTO.java
@@ -0,0 +1,18 @@
+package com.insigma.business.demo.dto;
+
+import com.insigma.framework.data.firewall.desensitization.annotation.NameDesensitization;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yinjh
+ * @since 2024/5/22
+ */
+@Data
+public class TestDTO implements Serializable {
+
+ @NameDesensitization
+ private String name;
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java b/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java
new file mode 100644
index 0000000..9560261
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/business/demo/entity/DemoPerson.java
@@ -0,0 +1,54 @@
+package com.insigma.business.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author yinjh
+ * @since 2020-05-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("DEMO_PERSON")
+public class DemoPerson implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId("ID")
+ private String id;
+
+ @TableField("NAME")
+ private String name;
+
+ @TableField("SEX")
+ private String sex;
+
+ @TableField("BIRTHDAY")
+ private Date birthday;
+
+ @TableField("MOBILE")
+ private String mobile;
+
+ @TableField("ADDRESS")
+ private String address;
+
+ @TableField("PRSENO")
+ private Long prseno;
+
+ @TableField("CREATE_TIME")
+ private Date create_time;
+
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java b/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java
new file mode 100644
index 0000000..9c426a9
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/config/RestTemplateConfig.java
@@ -0,0 +1,38 @@
+package com.insigma.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author Linwj
+ * @version 2019/6/12 10:26
+ */
+@Configuration
+public class RestTemplateConfig {
+
+ @Value("${sys.rest-template.connect-timeout:30000}")
+ private int connectTimeout;
+
+ @Value("${sys.rest-template.read-timeout:30000}")
+ private int readTimeout;
+
+ @Bean
+ @Primary
+ public RestTemplate restTemplate(ClientHttpRequestFactory factory){
+ return new RestTemplate(factory);
+ }
+
+ @Bean
+ public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ factory.setConnectTimeout(connectTimeout);
+ factory.setReadTimeout(readTimeout);
+ return factory;
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java b/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java
new file mode 100644
index 0000000..7104037
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/CommonValidator.java
@@ -0,0 +1,137 @@
+package com.insigma.sys.common;
+
+import com.insigma.framework.exception.AppException;
+import com.insigma.sys.entity.Aa26;
+import com.insigma.sys.entity.SysOrg;
+import com.insigma.sys.entity.SysRole;
+import com.insigma.sys.entity.SysUser;
+import com.insigma.sys.repository.Aa26Repository;
+import com.insigma.sys.repository.RoleRepository;
+import com.insigma.sys.repository.SysOrgRepository;
+import com.insigma.sys.repository.SysUserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author yinjh
+ * @version 2021/12/8
+ */
+@Component
+public class CommonValidator {
+
+ @Autowired
+ private CurrentUserService currentUserService;
+
+ @Autowired
+ private RoleRepository roleRepository;
+
+ @Autowired
+ private SysOrgRepository sysOrgRepository;
+
+ @Autowired
+ private Aa26Repository aa26Repository;
+
+ @Autowired
+ private SysUserRepository sysUserRepository;
+
+ /**
+ * 校验当前登录用户是否有相应角色的操作权限
+ * @param roleId 角色ID
+ * @return
+ */
+ public boolean validateRole(String roleId) {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ SysRole sysRole = roleRepository.findById(roleId).orElseThrow(() -> new AppException("角色不存在!"));
+ if ("1".equals(sysUser.getUserType())) {
+ return true;
+ } else if ("2".equals(sysUser.getUserType())) {
+ if (sysUser.getAreaId() != null && sysUser.getAreaId().equals(sysRole.getAreaid())) {
+ return true;
+ }
+ } else if ("3".equals(sysUser.getUserType())) {
+ if (sysUser.getOrgId() != null && sysUser.getOrgId().equals(sysRole.getOrgid())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 校验角色列表
+ * @param roleIds
+ * @return
+ */
+ public boolean validateRoleIds(List roleIds) {
+ for (int i = 0; i < roleIds.size(); i++) {
+ if (!validateRole(roleIds.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 校验当前登录用户是否有相应行政区划的操作权限
+ * @param areaId 区域ID
+ * @return
+ */
+ public boolean validateArea(String areaId, String userType) {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ if ("1".equals(sysUser.getUserType()) && "1".equals(userType)) {
+ return true;
+ }
+ Aa26 aa26 = aa26Repository.findById(areaId).orElseThrow(() -> new AppException("行政区划不存在!"));
+ if ("1".equals(sysUser.getUserType())) {
+ return true;
+ } else if ("2".equals(sysUser.getUserType())) {
+ List list = aa26Repository.findByAab301AndIdPath(sysUser.getAreaId() + "", aa26.getIdpath());
+ if (list.size() > 0) {
+ return true;
+ }
+ } else if ("3".equals(sysUser.getUserType())) {
+ if (aa26.getAab301().equals(sysUser.getAreaId() + "")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 校验当前登录用户是否有相应机构的操作权限
+ * @param orgId 机构ID
+ * @return
+ */
+ public boolean validateOrg(Long orgId, String userType) {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ if ("1".equals(userType)) {
+ return "1".equals(sysUser.getUserType());
+ }
+ SysOrg sysOrg = sysOrgRepository.findById(orgId).orElseThrow(() -> new AppException("机构不存在!"));
+ if ("1".equals(sysUser.getUserType())) {
+ return true;
+ } else if ("2".equals(sysUser.getUserType())) {
+ List list = sysOrgRepository.findByRegioncodeAndIdPath(sysUser.getAreaId() + "", sysOrg.getIdpath());
+ if (list.size() > 0) {
+ return true;
+ }
+ } else if ("3".equals(sysUser.getUserType())) {
+ if (sysOrg.getOrgid().equals(orgId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 校验当前登录用户是否有相应用户的操作权限
+ * @param userId
+ * @return
+ */
+ public boolean validateUser(String userId) {
+ SysUser sysUser = sysUserRepository.findById(userId).orElseThrow(() -> new AppException("用户不存在!"));
+ return validateOrg(sysUser.getOrgId(), sysUser.getUserType());
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java b/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java
new file mode 100644
index 0000000..1b3ae38
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/CurrentUserService.java
@@ -0,0 +1,15 @@
+package com.insigma.sys.common;
+
+import com.insigma.sys.entity.SysUser;
+
+/**
+ * 获取当前用户信息服务类
+ * @author jinw
+ * @version 2019/1/9
+ * epsoft - insiis7
+ */
+
+public interface CurrentUserService {
+
+ SysUser getCurrentUser();
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java
new file mode 100644
index 0000000..afb685d
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuth.java
@@ -0,0 +1,64 @@
+package com.insigma.sys.common;
+
+import com.insigma.framework.util.SysUtils;
+import com.insigma.odin.framework.est.EstException;
+import com.insigma.odin.framework.est.auth.ClientAuth;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.web.authentication.WebAuthenticationDetails;
+import org.springframework.security.web.authentication.logout.LogoutHandler;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author jinw
+ * @version 2020/2/7
+ * epsoft - insiis7
+ */
+public class OdinClientAuth implements ClientAuth {
+
+ private static final Logger log = LoggerFactory.getLogger(OdinClientAuth.class);
+
+ @Override
+ public boolean syslogon(String loginName, HttpServletRequest request) throws EstException {
+ UserDetailsService userDetailsService;
+ ApplicationContext applicationContext = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext());
+ if (SysUtils.getAppContext() != null) {
+ userDetailsService = SysUtils.getBean(UserDetailsService.class);
+ } else {
+ userDetailsService = applicationContext.getBean(UserDetailsService.class);
+ }
+ UserDetails userDetails = userDetailsService.loadUserByUsername(loginName);
+ UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
+ token.setDetails(new WebAuthenticationDetails(request));
+ SecurityContextHolder.getContext().setAuthentication(token);
+ request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());
+ request.getSession().setAttribute(OdinClientAuthExtendFilter.IS_SAVE_LOGONLOG_SESSION_KEY, Boolean.TRUE);
+ return true;
+ }
+
+ @Override
+ public boolean syslogout(String loginName, HttpServletRequest request, HttpServletResponse response) throws EstException {
+ LogoutHandler logoutHandler;
+ if (SysUtils.getAppContext() != null) {
+ logoutHandler = SysUtils.getBean("myLogoutHandler", LogoutHandler.class);;
+ } else {
+ logoutHandler = WebApplicationContextUtils.findWebApplicationContext(request.getServletContext()).getBean("myLogoutHandler",LogoutHandler.class);
+ }
+ SecurityContext securityContext = (SecurityContext) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
+ if (securityContext != null) {
+ logoutHandler.logout(request, response, securityContext.getAuthentication());
+ request.getSession().removeAttribute("SPRING_SECURITY_CONTEXT");
+ }
+ request.getSession().invalidate();
+ return true;
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java
new file mode 100644
index 0000000..953468d
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/OdinClientAuthExtendFilter.java
@@ -0,0 +1,55 @@
+package com.insigma.sys.common;
+
+import com.insigma.framework.util.SysUtils;
+import com.insigma.framework.util.UserAgentUtil;
+import com.insigma.framework.web.securities.commons.SecurityUtils;
+import com.insigma.framework.web.securities.entity.SysLogonLog;
+import com.insigma.framework.web.securities.entity.SysUserDetails;
+import com.insigma.framework.web.securities.service.SysLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+/**
+ * @author jinw
+ * @version 2020/2/13
+ * epsoft - insiis7
+ */
+@Component
+@WebFilter(filterName = "odinClientExtendFilter",urlPatterns = "/*")
+@Slf4j
+public class OdinClientAuthExtendFilter extends OncePerRequestFilter {
+
+ public static final String IS_SAVE_LOGONLOG_SESSION_KEY = "save_logonlog_flag";
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
+ HttpSession session = httpServletRequest.getSession();
+ Boolean isSaveLogonlog = null;
+ try {
+ isSaveLogonlog = (Boolean) session.getAttribute(IS_SAVE_LOGONLOG_SESSION_KEY);
+ if (isSaveLogonlog != null && isSaveLogonlog.booleanValue()) {
+ SysLogonLog logonLog = SysUtils.getBean(SysLogService.class).saveLogonLog(SecurityUtils.getIpAddr(httpServletRequest), session.getId(), UserAgentUtil.getBrowser(httpServletRequest), UserAgentUtil.getSystem(httpServletRequest));
+ SysUserDetails userDetails = (SysUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+ if (userDetails != null) {
+ userDetails.getOthers().put("logid", logonLog.getLogonlogid());
+ }
+ }
+ } catch (Exception e) {
+ log.error("记录登录日志失败!", e);
+ } finally {
+ if (isSaveLogonlog != null) {
+ session.removeAttribute(IS_SAVE_LOGONLOG_SESSION_KEY);
+ }
+ }
+ filterChain.doFilter(httpServletRequest, httpServletResponse);
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java b/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java
new file mode 100644
index 0000000..dc48ad1
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/SysEntityListener.java
@@ -0,0 +1,47 @@
+package com.insigma.sys.common;
+
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.util.SysUtils;
+import com.insigma.sys.service.SysHashService;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.PostPersist;
+import javax.persistence.PostRemove;
+import javax.persistence.PostUpdate;
+
+/**
+ * @author jinw
+ * @version 2021/8/16
+ * epsoft - insiis7
+ */
+@Slf4j
+public class SysEntityListener {
+
+ @PostPersist
+ public void postPersist(Object entity) {
+ saveEntityHashCode(entity, PostMode.SAVE);
+ }
+
+ @PostUpdate
+ public void postUpdate(Object entity) {
+ saveEntityHashCode(entity, PostMode.UPDATE);
+ }
+
+ @PostRemove
+ public void postRemove(Object entity) {
+ saveEntityHashCode(entity, PostMode.DELETE);
+ }
+
+ public void saveEntityHashCode(Object entity, PostMode postMode) {
+ log.debug("Class: {}, Spe: {}", entity.getClass().getCanonicalName(), JSONObject.toJSONString(entity));
+ SysHashService sysHashService = SysUtils.getBean(SysHashService.class);
+ sysHashService.saveHash(entity);
+ }
+
+ private enum PostMode {
+ SAVE,
+ UPDATE,
+ DELETE
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java b/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java
new file mode 100644
index 0000000..064ec38
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/SysManageMode.java
@@ -0,0 +1,49 @@
+package com.insigma.sys.common;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.function.Supplier;
+
+/**
+ * @author jinw
+ * @version 2020/5/19
+ * epsoft - insiis7
+ */
+@Component
+public final class SysManageMode {
+
+ @Value("${sys.mode.triple:false}")
+ private boolean tripleMode;
+
+ private static boolean TRIPLE_MODE = false;
+
+ @PostConstruct
+ public void init() {
+ TRIPLE_MODE = tripleMode;
+ }
+
+ public static boolean isTripleMode() {
+ return TRIPLE_MODE;
+ }
+
+ public static T doActionInTripleMode(Supplier tripleModeAction) {
+ if (TRIPLE_MODE)
+ return tripleModeAction.get();
+ return null;
+ }
+
+ public static void doActionInTripleMode(Runnable tripleModeRun) {
+ if (TRIPLE_MODE)
+ tripleModeRun.run();
+ }
+
+ public static void doAction(Runnable tripleModeRun, Runnable notTripleModeRun) {
+ if (TRIPLE_MODE) {
+ tripleModeRun.run();
+ } else {
+ notTripleModeRun.run();
+ }
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java
new file mode 100644
index 0000000..32118a8
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/CurrentUserServiceImpl.java
@@ -0,0 +1,57 @@
+package com.insigma.sys.common.impl;
+
+import com.insigma.framework.exception.UserNoLoginException;
+import com.insigma.framework.web.securities.entity.SysUserDetails;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.entity.SysUser;
+import com.insigma.sys.repository.SysUserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+/**
+ * Created by Administrator on 2019/1/15.
+ */
+@Service
+public class CurrentUserServiceImpl implements CurrentUserService {
+ @Autowired
+ private SysUserRepository sysUserRepository;
+
+ @Override
+ public SysUser getCurrentUser() {
+ SysUser sysUser = currentUserFromSecurityContext();
+ if (sysUser == null) {
+ throw new UserNoLoginException("获取不到当前登录用户信息!");
+ }
+ return sysUser;
+ }
+
+ /**
+ * 从SpringSecurity中获取当前用户信息 jinw
+ *
+ * @return
+ */
+ private SysUser currentUserFromSecurityContext() {
+ SysUser sysUser = null;
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null && authentication.getPrincipal() != null) {
+ if (authentication.getPrincipal() instanceof SysUserDetails) {
+ SysUserDetails userDetails = (SysUserDetails) authentication.getPrincipal();
+ sysUser = (SysUser) userDetails.getOthers().get("sysUser");
+ if (sysUser == null) {
+ sysUser = sysUserRepository.findByLogonName(userDetails.getUsername()).get(0);
+ userDetails.getOthers().put("sysUser", sysUser);
+ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+ request.getSession().setAttribute("SPRING_SECURITY_CONTEXT", SecurityContextHolder.getContext());
+ }
+ }
+ }
+ return sysUser;
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java
new file mode 100644
index 0000000..9684ce7
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MyLogoutOrFailedExceptionHandler.java
@@ -0,0 +1,28 @@
+package com.insigma.sys.common.impl;
+
+import com.insigma.odin.framework.est.EstException;
+import com.insigma.odin.framework.est.auth.LogoutOrFailedExceptionHandler;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author yinjh
+ * @version 2021/9/1
+ */
+@Slf4j
+public class MyLogoutOrFailedExceptionHandler extends LogoutOrFailedExceptionHandler {
+
+ @Override
+ public void handle(EstException ex, HttpServletRequest request, HttpServletResponse response) {
+ try {
+ log.debug("异常处理:", ex);
+ response.sendError(401, "登录已失效,请重新登录!");
+ } catch (IOException e) {
+ log.error("返回异常码时失败!", e);
+ }
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java
new file mode 100644
index 0000000..0871a19
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLoginHandler.java
@@ -0,0 +1,56 @@
+package com.insigma.sys.common.impl;
+
+import com.insigma.framework.data.firewall.permission.validate.ValidateKeyValueStore;
+import com.insigma.framework.exception.AppException;
+import com.insigma.framework.web.securities.auth.SysLoginHandler;
+import com.insigma.sys.entity.SysUser;
+import com.insigma.sys.service.SysHashService;
+import com.insigma.sys.service.SysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@Service
+public class MySysLoginHandler implements SysLoginHandler {
+
+ @Value("${sys.hash.enabled:false}")
+ private boolean hashEnabled;
+
+ @Autowired
+ private SysHashService sysHashService;
+
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Autowired
+ private ValidateKeyValueStore validateKeyValueStore;
+
+ @Override
+ public void success(String username, HttpServletRequest request) {
+ request.getSession().setAttribute("auth_filter_ignored",Boolean.TRUE);
+ log.info("{} 登录成功!", username);
+ if (hashEnabled) {
+ SysUser sysUser = sysUserService.findUserByLogonName(username);
+ if (!sysHashService.checkHash(sysUser)) {
+ throw new AppException("用户数据不合法!");
+ }
+ }
+
+
+ // 测试数据与安全
+ SysUser sysUser = sysUserService.findUserByLogonName(username);
+ validateKeyValueStore.set("orgid", String.valueOf(sysUser.getOrgId()));
+ if ("admin".equals(sysUser.getLogonName())) {
+ validateKeyValueStore.skip();
+ }
+ }
+
+ @Override
+ public void failure(String username, HttpServletRequest request) {
+ log.info("{} 登录失败!", username);
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java
new file mode 100644
index 0000000..e207d8f
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/common/impl/MySysLogoutHandler.java
@@ -0,0 +1,36 @@
+package com.insigma.sys.common.impl;
+
+import com.insigma.framework.web.securities.auth.ExtSysLogoutHandler;
+import com.insigma.odin.framework.est.service.SSOServiceFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author yinjh
+ * @version 2022/5/10
+ * @since 2.6.5
+ */
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false)
+public class MySysLogoutHandler implements ExtSysLogoutHandler {
+
+ @Value("${sso.app-name:}")
+ private String appName;
+
+ @Override
+ public void logout(HttpServletRequest request, HttpServletResponse response) {
+ String est = (String) request.getSession().getAttribute("est");
+ if (est != null) {
+ log.info("存在est令牌,执行注销操作!est: {}, appName: {}", est, appName);
+ SSOServiceFactory.logoutService().logout(est, appName, request);
+ } else {
+ log.info("无est令牌,不执行注销操作!");
+ }
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java
new file mode 100644
index 0000000..08ab576
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/config/JdbcConfig.java
@@ -0,0 +1,19 @@
+package com.insigma.sys.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+
+/**
+ * Created by yinjh on 2019/6/28.
+ */
+@Configuration
+public class JdbcConfig {
+
+ @Bean
+ public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate) {
+ return new NamedParameterJdbcTemplate(jdbcTemplate);
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java
new file mode 100644
index 0000000..091e027
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/config/JpaConfig.java
@@ -0,0 +1,17 @@
+package com.insigma.sys.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+/**
+ * @author jinw
+ * @version 2021/8/16
+ * epsoft - insiis7
+ */
+@Configuration
+@EnableJpaAuditing
+public class JpaConfig {
+
+
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java
new file mode 100644
index 0000000..b9cf547
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfig.java
@@ -0,0 +1,59 @@
+package com.insigma.sys.config;
+
+import com.insigma.framework.web.securities.config.SysSecurityConfig;
+import com.insigma.framework.web.securities.config.SysSecurityNoopConfig;
+import com.insigma.odin.framework.est.auth.GenericAuthFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.ObjectUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author jinw
+ * @version 2020/2/7
+ * epsoft - insiis7
+ */
+@Configuration
+@EnableConfigurationProperties(SSOConfigProperties.class)
+@AutoConfigureAfter({SysSecurityConfig.class, SysSecurityNoopConfig.class})
+@ConditionalOnProperty(prefix = "sso", name = "app-name", matchIfMissing = false)
+public class SSOConfig {
+
+ @Autowired
+ private SSOConfigProperties configProperties;
+
+ @Bean
+ public FilterRegistrationBean genericAuth() {
+ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>();
+ filterRegistrationBean.setFilter(new GenericAuthFilter());
+ Map initParameters = new HashMap<>();
+ /*initParameters.put("app-name", "odin7c");
+ initParameters.put("auth-service-root-url", "http://127.0.0.1:8080/");
+ initParameters.put("client-auth-class", "com.insigma.sys.common.OdinClientAuth");
+ initParameters.put("free-urls", "/login");*/
+ initParameters.put("app-name", configProperties.getAppName());
+ initParameters.put("auth-service-root-url", configProperties.getAuthServiceRootUrl());
+ initParameters.put("auth-logon-page-root-url", configProperties.getAuthLogonPageRootUrl());
+ initParameters.put("client-auth-class", configProperties.getClientAuthClass());
+ initParameters.put("free-urls", configProperties.getFreeUrls());
+ initParameters.put("auth-mode", configProperties.getAuthMode());
+ if (!ObjectUtils.isEmpty(configProperties.getAuthServiceContextPath())) {
+ initParameters.put("auth-service-context-path", configProperties.getAuthServiceContextPath());
+ }
+ if (!ObjectUtils.isEmpty(configProperties.getLogoutOrFailedExceptionHandler())) {
+ initParameters.put("logout-or-failed-exception-handler", configProperties.getLogoutOrFailedExceptionHandler());
+ }
+ filterRegistrationBean.setInitParameters(initParameters);
+ filterRegistrationBean.addUrlPatterns("/*");
+ filterRegistrationBean.setOrder(-100);
+ return filterRegistrationBean;
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java
new file mode 100644
index 0000000..3952ec8
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/config/SSOConfigProperties.java
@@ -0,0 +1,24 @@
+package com.insigma.sys.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author jinw
+ * @version 2020/2/7
+ * epsoft - insiis7
+ */
+@ConfigurationProperties(prefix = "sso")
+@Data
+public class SSOConfigProperties {
+
+ private String appName;
+ private String authServiceRootUrl;
+ private String authLogonPageRootUrl;
+ private String clientAuthClass = "com.insigma.sys.common.OdinClientAuth";
+ private String freeUrls;
+ private String authMode;
+ private String authServiceContextPath;
+ private String logoutOrFailedExceptionHandler;
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java
new file mode 100644
index 0000000..0713fd1
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/AuthController.java
@@ -0,0 +1,51 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.framework.encryption.util.SM3Utils;
+import com.insigma.framework.util.IpUtil;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.entity.SysUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by yinjh on 2019/10/14.
+ */
+@RestController
+@RequestMapping("/auth")
+public class AuthController {
+
+ @Autowired
+ private CurrentUserService currentUserService;
+
+ @Autowired(required = false)
+ private RedisTemplate redisTemplate;
+
+ @GetMapping("/getToken")
+ public ResponseMessage getToken(HttpServletRequest request) {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ Date date = new Date();
+ long timetamp = date.getTime();
+ String token = SM3Utils.digest(IpUtil.getClientIp(request) + ";" + sysUser.getLogonName() + ";" + timetamp); // 生成token
+ redisTemplate.opsForValue().set(token, sysUser);
+ redisTemplate.expire(token, 300, TimeUnit.SECONDS);
+ return ResponseMessage.ok("", token);
+ }
+
+ @PostMapping("/getUserInfo")
+ public ResponseMessage getUserInfo(@RequestBody JSONObject jsonObject) {
+ String token = jsonObject.getString("token");
+ SysUser sysUser = (SysUser) redisTemplate.opsForValue().get(token);
+ if(sysUser == null) {
+ return ResponseMessage.error("获取用户信息失败!");
+ }
+ return ResponseMessage.ok(sysUser);
+ }
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java
new file mode 100644
index 0000000..3ad7697
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/HolidayController.java
@@ -0,0 +1,56 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.sys.entity.SysHoliday;
+import com.insigma.sys.service.HolidayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author yinjh
+ * @version 2021/6/16
+ */
+@RestController
+@RequestMapping("/sys/holiday")
+public class HolidayController {
+
+ @Autowired
+ private HolidayService holidayService;
+
+ @GetMapping("/query")
+ public ResponseMessage getHolidayList(int year){
+ List holidayList = holidayService.queryHolidayList(year);
+ if (holidayList == null || holidayList.isEmpty()) {
+ holidayList = holidayService.getWeekdays(year);
+ holidayService.updateHolidays(year, holidayList);
+ }
+ List dates = holidayToDate(holidayList);
+ return ResponseMessage.ok(dates);
+ }
+
+ @PostMapping("/{year}/update")
+ public ResponseMessage updateHolidays(@PathVariable int year, @RequestBody JSONObject jsonObject){
+ List holidays = jsonObject.getJSONArray("holidays").toJavaList(String.class);
+ holidayService.updateHolidays(year, dateToHoliday(holidays));
+ return ResponseMessage.ok("保存成功!");
+ }
+
+ private List holidayToDate(List holidays) {
+ return holidays.stream().map(s -> s.getYear() + "-" + (s.getMonth() < 10 ? "0" : "") + s.getMonth() + "-" + (s.getDay() < 10 ? "0" : "") + s.getDay()).collect(Collectors.toList());
+ }
+
+ private List dateToHoliday(List dates) {
+ return dates.stream().map(s -> {
+ String[] date = s.split("-");
+ SysHoliday sysHoliday = new SysHoliday();
+ sysHoliday.setYear(Integer.parseInt(date[0]));
+ sysHoliday.setMonth(Integer.parseInt(date[1]));
+ sysHoliday.setDay(Integer.parseInt(date[2]));
+ return sysHoliday;
+ }).collect(Collectors.toList());
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java
new file mode 100644
index 0000000..9a16c5e
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/HomeController.java
@@ -0,0 +1,147 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.framework.encryption.util.SM3Utils;
+import com.insigma.framework.exception.AppException;
+import com.insigma.framework.web.securities.commons.SM3PasswordEncoder;
+import com.insigma.framework.web.securities.entity.SysLogonLog;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.entity.SysUser;
+import com.insigma.sys.service.SysUserService;
+import com.insigma.sys.service.SyslogonLogService;
+import com.insigma.web.support.config.SysConfigProperties;
+import com.insigma.web.support.repository.Aa01Repository;
+import com.insigma.web.support.entity.Aa01;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 首页面公共Controller,密码修改等在首页面的请求处理可统一放到这里来
+ * @author jinw
+ * @version 2019/4/2
+ * epsoft - insiis7
+ */
+@RestController
+@Slf4j
+public class HomeController {
+
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Autowired
+ private CurrentUserService currentUserService;
+
+ @Autowired
+ private SysConfigProperties sysConfigProperties;
+
+ @Autowired
+ private Aa01Repository aa01Repository;
+
+ @Autowired
+ private SyslogonLogService syslogonLogService;
+
+ @PostMapping("/sys/modifypd")
+ public ResponseMessage modifyPasswd(@RequestBody JSONObject data) {
+ SysUser currentUser = currentUserService.getCurrentUser();
+ try {
+ String oldPass=data.getString("opasswd");
+ String newPass=data.getString("npasswd");
+ String confirmPass = data.getString("rpasswd");
+ if (ObjectUtils.isEmpty(newPass) || !newPass.equals(confirmPass)){
+ throw new AppException("新密码为空或两次输入不等!");
+ }
+ String sm3LogonName = SM3Utils.digest(currentUser.getLogonName());
+ String sm3ReverseLogonName = SM3Utils.digest(new StringBuffer(currentUser.getLogonName()).reverse().toString());
+ if (sm3LogonName.equals(newPass) || sm3ReverseLogonName.equals(newPass)) {
+ throw new AppException("新密码不能与登录名(包含逆序)相同!");
+ }
+ sysUserService.updataPassWD(oldPass,newPass);
+ return ResponseMessage.ok("修改密码成功");
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ return ResponseMessage.error("修改密码失败,失败原因:" + e.getMessage());
+ }
+ }
+
+ @PostMapping("/sys/checkDefaultPasswd")
+ public ResponseMessage checkDefaultPasswd() {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ sysUser = sysUserService.findUserByLogonName(sysUser.getLogonName());
+ Date date = sysUser.getPwEditDate();
+ if(date==null){
+ return ResponseMessage.ok(true);
+ }
+ String passwd = sysUser.getPassWD();
+ String defaultPasswd = sysConfigProperties.getDefaultPassword();
+ if(ObjectUtils.isEmpty(defaultPasswd)) {
+ return ResponseMessage.ok(false);
+ }
+ return ResponseMessage.ok(new SM3PasswordEncoder().matches(SM3Utils.digest(defaultPasswd), passwd));
+ }
+
+ @PostMapping("/sys/checkPasswordDisabled")
+ public ResponseMessage checkPasswordDisabled() {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ sysUser = sysUserService.findUserByLogonName(sysUser.getLogonName());
+ if ("1".equals(sysUser.getPwExpireType())) {
+ // 密码周期过期
+ Aa01 aa01 = aa01Repository.findByAaa001("PASSWORD_EXPIRED_PERIOD");
+ if (aa01 != null) {
+ Long period = Long.valueOf(aa01.getAaa005());
+ if (sysUser.getPwEditDate() != null) {
+ // 密码修改过,以修改之后的周期计算
+ if (sysUser.getPwEditDate().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) {
+ return ResponseMessage.ok(true);
+ }
+ } else {
+ // 密码没有修改过,以新建用户之后的周期计算
+ if (sysUser.getCreateTime().getTime() + period * 24 * 60 * 60 * 1000 <= System.currentTimeMillis()) {
+ return ResponseMessage.ok(true);
+ }
+ }
+ }
+ } else if ("3".equals(sysUser.getPwExpireType())) {
+ // 指定日期过期
+ if (sysUser.getPwExpireDate() != null && sysUser.getPwExpireDate().getTime() <= System.currentTimeMillis()) {
+ return ResponseMessage.ok(true);
+ }
+ }
+ return ResponseMessage.ok(false);
+ }
+
+ @GetMapping("/sys/getLastLoginTime")
+ public ResponseMessage getLastLoginTime() {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ List list = syslogonLogService.getLastLoginTime(sysUser.getUserId());
+ String lastLoginTime = "首次登录";
+ if(list != null&& list.size() > 1){
+ lastLoginTime = sdf.format(list.get(1).getLogontime());
+ }
+ return ResponseMessage.ok("", lastLoginTime);
+ }
+
+ @GetMapping("/sys/getUserInfo")
+ public ResponseMessage getUserInfo(){
+ SysUser sysUser = currentUserService.getCurrentUser();
+// SysUser sysUser = sysUserService.queryOneUser(currentUserService.getCurrentUser().getUserId());
+ return ResponseMessage.ok(sysUser);
+ }
+
+ @PostMapping("/sys/updateUserInfo")
+ public ResponseMessage updateUserInfo(@RequestBody SysUser sysUser){
+ sysUserService.updateUser(sysUser);
+ return ResponseMessage.ok("修改成功");
+
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java
new file mode 100644
index 0000000..cc76671
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/ImportConfigController.java
@@ -0,0 +1,94 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.framework.exception.AppException;
+import com.insigma.framework.util.TreeUtil;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.dto.ImportConfigReDTO;
+import com.insigma.sys.dto.MenuDTO;
+import com.insigma.sys.service.MenuService;
+import com.insigma.web.support.dto.ImportConfigDTO;
+import com.insigma.web.support.dto.ImportConfigDetailDTO;
+import com.insigma.web.support.fileaccess.excel.ExcelFactory;
+import com.insigma.web.support.service.ImportConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yinjh
+ * @version 2023/7/18
+ * @since 2.7.0
+ */
+@RestController
+@RequestMapping("/sys/import/config")
+public class ImportConfigController {
+
+ @Autowired
+ private ImportConfigService importConfigService;
+
+ @Autowired
+ private MenuService menuService;
+
+ @Autowired
+ private CurrentUserService currentUserService;
+
+ @GetMapping("/queryMenuList")
+ public ResponseMessage queryMenuList() {
+ List menuDTOS = menuService.getMenuList(currentUserService.getCurrentUser());
+ JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children", "0");
+ return ResponseMessage.ok("查询成功", jsonArray);
+ }
+
+ @GetMapping("/query")
+ public ResponseMessage query(String configCode, String configName) {
+ List list = importConfigService.queryConfigList(configCode, configName);
+ return ResponseMessage.ok(list);
+ }
+
+ @GetMapping("/queryConfig")
+ public ResponseMessage queryConfig(String configId) {
+ ImportConfigDTO config = importConfigService.queryConfig(configId);
+ List details = importConfigService.queryConfigDetails(configId);
+ ImportConfigReDTO reDTO = new ImportConfigReDTO();
+ reDTO.setConfig(config);
+ reDTO.setDetails(details);
+ return ResponseMessage.ok(reDTO);
+ }
+
+ @PostMapping("/importExcelTemplate")
+ public ResponseMessage importExcelTemplate(MultipartFile file, String sheetNameOrIndex, Integer headerRowIndex) {
+ try {
+ List list = new ArrayList<>();
+ ExcelFactory.readSax(file.getInputStream(), sheetNameOrIndex, (sheetIndexOrName, rowIndex, rowList) -> {
+ if (rowIndex == headerRowIndex) {
+ for (Object field : rowList) {
+ ImportConfigDetailDTO detailDTO = new ImportConfigDetailDTO();
+ detailDTO.setOriginFieldName(String.valueOf(field));
+ detailDTO.setFieldType("0");
+ list.add(detailDTO);
+ }
+ }
+ });
+ return ResponseMessage.ok(list);
+ } catch (Exception e) {
+ throw new AppException("读取模板失败:" + e.getMessage());
+ }
+ }
+
+ @PostMapping("/save")
+ public ResponseMessage save(@RequestBody ImportConfigReDTO reqDTO) {
+ importConfigService.saveConfig(reqDTO.getConfig(), reqDTO.getDetails());
+ return ResponseMessage.ok("保存成功");
+ }
+
+ @PostMapping("/delete/{configId}")
+ public ResponseMessage delete(@PathVariable String configId) {
+ importConfigService.deleteConfig(configId);
+ return ResponseMessage.ok("删除成功");
+ }
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java
new file mode 100644
index 0000000..d122bbc
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MenuController.java
@@ -0,0 +1,244 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.framework.util.TreeUtil;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.dto.MenuDTO;
+import com.insigma.sys.dto.SysAppDTO;
+import com.insigma.sys.entity.SysMenu;
+import com.insigma.sys.service.MenuService;
+import com.insigma.sys.service.SysAppService;
+import com.insigma.sys.service.SysCodeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 菜单管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/sys/menu")
+public class MenuController {
+ @Autowired
+ private MenuService menuService;
+ @Autowired
+ private SysCodeService sysCodeService;
+ @Autowired
+ private CurrentUserService currentUserService;
+ @Autowired
+ private SysAppService sysAppService;
+ /**
+ * 初始化页面数据
+ * @return
+ */
+ @PostMapping("/initCodeTypes")
+ public ResponseMessage initCodeTypes(@RequestBody JSONObject jsonObject) {
+ try {
+ JSONObject codeTypes = sysCodeService.getCodeTypes(jsonObject);
+ List list = sysAppService.querySysAppDTO();
+ JSONArray jsonArray = new JSONArray();
+ for (SysAppDTO sysAppDTO : list) {
+ JSONObject j = new JSONObject();
+ j.put("value",sysAppDTO.getAppName());
+ j.put("key",sysAppDTO.getAppId());
+ jsonArray.add(j);
+ }
+ codeTypes.put("APPID",jsonArray);
+ return ResponseMessage.ok(codeTypes);
+ } catch (Exception e) {
+ return ResponseMessage.error(e.getMessage());
+ }
+ }
+ @GetMapping("/queryTree")
+ public ResponseMessage queryTable(){
+ List menuDTOS = menuService.queryAllMenu();
+ JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
+ return ResponseMessage.ok("查询成功", jsonArray);
+ }
+
+ /**
+ * 拖拽成功完成时触发
+ * @param jsonObject
+ * @return
+ */
+ @PostMapping("/nodeDrop")
+ public ResponseMessage nodeDrop(@RequestBody JSONObject jsonObject){
+ System.out.println(jsonObject);
+ JSONArray jsonArray = jsonObject.getJSONArray("data");
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject oneMenu = jsonArray.getJSONObject(i);
+ SysMenu sysMenu = new SysMenu();
+ sysMenu.setFunctionid(oneMenu.getLong("functionid"));
+ sysMenu.setFunorder(oneMenu.getInteger("funorder"));
+ sysMenu.setParentid(oneMenu.getLong("parentid"));
+ sysMenu.setTitle(oneMenu.getString("title"));
+ menuService.update(sysMenu);
+ System.out.println(sysMenu);
+ }
+ return ResponseMessage.ok();
+ }
+ /**
+ * 点击左侧菜单后
+ */
+ @PostMapping("/nodeClick")
+ public ResponseMessage nodeClick(@RequestBody() JSONObject jsonObject) {
+ SysMenu sysMenu;
+ String a=jsonObject.get("functionid").toString();
+ if (a!=null){
+ long functionid =(long)Integer.parseInt(a);
+ sysMenu =menuService.findMenuById(functionid);
+ List menulist=menuService.findTreesByPId(sysMenu.getFunctionid());
+ if (menulist.size()>0){
+ //有子类
+ return ResponseMessage.ok(sysMenu);
+ }else {
+ //没有子类
+ return ResponseMessage.ok("重复",sysMenu);
+ }
+ }else {
+ return ResponseMessage.error();
+ }
+ }
+
+ /**
+ * 根据id查找对象
+ * @param jsonObject
+ * @return
+ */
+ @PostMapping("/queryById")
+ public ResponseMessage queryById(@RequestBody JSONObject jsonObject) {
+ try {
+ String id=jsonObject.get("functionid").toString();
+ String funtype=jsonObject.get("funtype").toString();
+ List menuDTOS=menuService.queryMenuByFuntypeAndActive(funtype);
+ JSONArray jsonArray = TreeUtil.listToTree(JSONArray.parseArray(JSONArray.toJSONString(menuDTOS)), "functionid", "parentid", "children");
+ jsonObject.put("treedata",jsonArray);
+ long fId=Integer.parseInt(id);
+ SysMenu menu=menuService.findMenuById(fId);
+ List list=new ArrayList();
+ if(menu!=null){
+ String [] ms=menu.getIdpath().split("/");
+ if (ms.length>0){
+ for (String s:ms){
+ if(s.equals("0")){
+ continue;
+ }
+ list.add(Long.valueOf(s));
+ }
+ }}
+ jsonObject.put("pname",list);
+ return ResponseMessage.ok(jsonObject);
+ }catch (Exception e){
+ return ResponseMessage.error(e.getMessage());
+ }
+ }
+ /**
+ * 查询是否多于三层
+ * @param jsonObject
+ * @return
+ */
+ @PostMapping("/querySumIsThree")
+ public ResponseMessage querySumIsThree(@RequestBody JSONObject jsonObject) {
+ try {
+ String id=jsonObject.get("functionid").toString();
+ Map list= (Map) jsonObject.get("pname");
+ long fId=Integer.parseInt(id);
+ SysMenu sysMenu=menuService.findMenuById(fId);
+ List menu=menuService.findNodes(sysMenu.getIdpath());//查询当前子节点
+ for(int i=0;i map= (Map) pageData.get("form");
+ SysMenu sysMenu = menuService.getSysMenuBean(map);
+ boolean flag = menuService.isManyLocations(sysMenu);
+ if (flag) {
+ return ResponseMessage.error("路径重复");
+ }
+ try {
+ menuService.save(sysMenu);
+ return ResponseMessage.ok("保存成功", sysMenu);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ return ResponseMessage.error("保存失败,失败原因:" +e.getMessage());
+ }
+ }
+ @PostMapping("/deleteMenu")
+ public ResponseMessage deleteMenu(@RequestBody JSONObject pageData){
+ if (!"1".equals(currentUserService.getCurrentUser().getUserType())) {
+ return ResponseMessage.error("无权操作!");
+ }
+ Long node=Long.valueOf(pageData.get("node").toString());
+ boolean withRole= (boolean) pageData.get("withRole");
+ List m=menuService.findNodes(menuService.findMenuById(node).getIdpath());
+ //当withRole为false时,和角色没有关系,如果是1就和角色有关系
+ try {
+ if (m!=null){
+ menuService.delete(m,withRole);
+ return ResponseMessage.ok("删除成功");
+ }else{
+ return ResponseMessage.error("删除失败");
+ }
+ }catch (Exception e){
+ log.error(e.getMessage(), e);
+ return ResponseMessage.error("删除失败,失败原因:" +e.getMessage());
+ }
+ }
+ /**
+ * 查找是否有角色关系
+ */
+ @PostMapping("/queryRoleBy")
+ public ResponseMessage queryRoleBy(@RequestBody JSONObject pageData){
+ Map map= (Map) pageData.get("form");
+ SysMenu sysMenu=menuService.getSysMenuBean(map);
+ boolean f=menuService.findFunctionRoles(sysMenu);
+ if (f==true){
+ return ResponseMessage.error("有权限");
+ }else if (f==false){
+ return ResponseMessage.ok("没有权限");
+ }else {
+ return ResponseMessage.error();
+ }
+ }
+ //判断是否三级
+ @PostMapping("queryMenuByPid")
+ public ResponseMessage queryMenuByPid(@RequestBody JSONObject pageData) {
+ ResponseMessage rm=new ResponseMessage();
+ String a=pageData.get("parentid").toString();
+ if (a!=null){
+ int parentid =Integer.parseInt(a);
+ SysMenu menu=menuService.queryByFuncID(parentid);
+ if (menu!=null){
+ SysMenu menu1=menuService.queryByFuncID(menu.getParentid());
+ if (menu1!=null){
+ rm= ResponseMessage.error("最多添加三级");
+ }
+ }
+ }else {
+ rm= ResponseMessage.error("没取到父节点");
+ }
+ return rm;
+ }
+
+
+
+}
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java
new file mode 100644
index 0000000..a8b2333
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorCentersController.java
@@ -0,0 +1,133 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.framework.ResponseMessage;
+import com.insigma.sys.common.CurrentUserService;
+import com.insigma.sys.dto.MonitorCentersDTO;
+import com.insigma.sys.entity.SysMenu;
+import com.insigma.sys.entity.SysUser;
+import com.insigma.sys.service.MonitorCentersService;
+import com.insigma.web.support.controller.BaseController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author GH
+ * @ClassName: MonitorCentersController
+ * @Description: 监控中心
+ * @version 2021/12/7 14:53
+ */
+@Slf4j
+@RestController
+@RequestMapping("/sys/monitoringcenter/MonitoringDetails")
+public class MonitorCentersController extends BaseController {
+ @Autowired
+ MonitorCentersService monitorCentersService;
+ @Autowired
+ private CurrentUserService currentUserService;
+ /**
+ * 查询应用数据源信息
+ *
+ * @return
+ */
+ @PostMapping("/querServiceDataSouce")
+ public JSONObject querServiceDataSouce(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.querServiceDataSouce(monitorCentersDTO);
+ }
+
+ /**
+ * 查询应用SQL监控列表
+ *
+ * @return
+ */
+ @PostMapping("/querServiceDataSqlList")
+ public JSONObject querServiceDataSqlList(@RequestBody MonitorCentersDTO MonitorCentersDTO) {
+ return monitorCentersService.querServiceDataSqlList(MonitorCentersDTO);
+ }
+
+ /**
+ * 查询WBEAPP监控信息
+ *
+ * @return
+ */
+ @PostMapping("/querServiceWebApp")
+ public JSONObject querServiceWebApp(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.querServiceWebApp(monitorCentersDTO);
+ }
+
+ /**
+ * 查询应用URI监控列表
+ *
+ * @return
+ */
+ @PostMapping("/querServiceDataUriList")
+ public JSONObject querServiceDataUriList(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.querServiceDataUriList(monitorCentersDTO);
+ }
+
+ /**
+ * 查询应用Session监控列表
+ *
+ * @return
+ */
+ @PostMapping("/querServiceDataSessionList")
+ public JSONObject querServiceDataSessionList(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.querServiceDataSessionList(monitorCentersDTO);
+
+ }
+
+ /**
+ * 查询每个应用下对应的实例IP
+ *
+ * @return
+ */
+ @PostMapping("/querServiceIp")
+ public JSONObject querServiceIp(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.querServiceIp(monitorCentersDTO);
+ }
+
+ //获取菜单名称和id实体
+ @PostMapping("/queryEntity")
+ public ResponseMessage queryEntity(@RequestBody JSONObject jsonObject) {
+ String url = jsonObject.getString("url");
+ SysMenu sysMenu = monitorCentersService.queryEntity(url);
+ return ResponseMessage.ok(sysMenu);
+ }
+
+ /**
+ * 清理全部监控数据
+ *
+ * @return
+ */
+ @PostMapping("/clearAllMonitorData")
+ public JSONObject clearAllMonitorData() {
+ return monitorCentersService.clearAllMonitorData();
+ }
+
+ /**
+ * 清理对应的监控数据
+ *
+ * @return
+ */
+ @PostMapping("/clearOneServiceData")
+ public JSONObject clearOneServiceData(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.clearOneServiceData(monitorCentersDTO);
+ }
+
+
+
+ //查询用户是否为超级管理员
+ @GetMapping("/queryUser")
+ public ResponseMessage queryUser() {
+ SysUser sysUser = currentUserService.getCurrentUser();
+ //超级管理员
+ if ("1".equals(sysUser.getUserType())) {
+ return ResponseMessage.ok(true);
+ } else {
+ return ResponseMessage.ok(false);
+ }
+ }
+}
+
+
diff --git a/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java
new file mode 100644
index 0000000..3b6552e
--- /dev/null
+++ b/template/insiis-web/src/main/java/com/insigma/sys/controller/MonitorDataController.java
@@ -0,0 +1,169 @@
+package com.insigma.sys.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.insigma.sys.dto.MonitorCentersDTO;
+import com.insigma.sys.service.MonitorCentersService;
+import com.insigma.sys.util.WordUtil;
+import com.insigma.web.support.fileaccess.excel.ExcelFactory;
+import com.insigma.web.support.fileaccess.excel.ExcelWriter;
+import com.insigma.web.support.fileaccess.excel.config.ExcelColConfig;
+import com.insigma.web.support.fileaccess.excel.config.ExcelConfig;
+import com.insigma.web.support.fileaccess.excel.enums.ExcelTypeEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowCallbackHandler;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author GH
+ * @version 2022/3/8 16:46
+ * @ClassName: MonitorDataController
+ * @Description:
+ */
+@Slf4j
+@RestController
+@RequestMapping("/sys/monitoringcenter/index")
+public class MonitorDataController {
+
+ @Autowired
+ MonitorCentersService monitorCentersService;
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+ @Value("${spring.application.name}")
+ private String appName;
+
+ /**
+ * 获取报告数据
+ *
+ * @return
+ */
+ @PostMapping("/getReportData")
+ public JSONObject getReportData(@RequestBody MonitorCentersDTO monitorCentersDTO) {
+ return monitorCentersService.getReportData(monitorCentersDTO);
+ }
+
+
+ //导出监控大屏数据
+ @GetMapping("/dataExport")
+ public void dataExport(@RequestParam("excelName") String excelName, HttpServletRequest request, HttpServletResponse response) throws IOException {
+ response.setContentType("application/octet-stream; charset=UTF-8");
+ response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(excelName, "utf-8"));
+
+ ExcelTypeEnum excelType = excelName.endsWith(".xls") ? ExcelTypeEnum.XLS : ExcelTypeEnum.XLSX;
+ ExcelWriter writer = ExcelFactory.getWriter(response.getOutputStream(), new ExcelConfig(excelType, true,
+ ExcelColConfig.of("CREATE_TIME", "创建时间"),
+ ExcelColConfig.of("START_TIME", "统计开始时间"),
+ ExcelColConfig.of("END_TIME", "统计结束时间"),
+ ExcelColConfig.of("SQL_EXECUTE_COUNT", "SQL执行总数"),
+ ExcelColConfig.of("SQL_TOTAL_TIME", "SQL耗时总数"),
+ ExcelColConfig.of("SQL_AVG_TIME", "SQL执行平均耗时"),
+ ExcelColConfig.of("SQL_SLOWEST_TIME", "SQL执行最慢耗时"),
+ ExcelColConfig.of("SQL_AVG_READ_ROWS", "SQL单次平均读取行数"),
+ ExcelColConfig.of("URL_EXECUTE_COUNT", "URL执行总数"),
+ ExcelColConfig.of("URL_TOTAL_TIME", "URL耗时总数"),
+ ExcelColConfig.of("URL_AVG_TIME", "URL执行平均耗时"),
+ ExcelColConfig.of("URL_SLOWEST_TIME", "URL执行最慢耗时"),
+ ExcelColConfig.of("URL_AVG_JDBC_COUNT", "URL单次平均JDBC执行数"),
+ ExcelColConfig.of("SLOW_SQL_ONE", "慢SQL最慢第一段个数"),
+ ExcelColConfig.of("SLOW_SQL_TWO", "慢SQL最慢第二段个数"),
+ ExcelColConfig.of("SLOW_SQL_THREE", "慢SQL最慢第三段个数"),
+ ExcelColConfig.of("SLOW_SQL_AVG_ONE", "慢SQL平均第一段个数"),
+ ExcelColConfig.of("SLOW_SQL_AVG_TWO", "慢SQL平均第二段个数"),
+ ExcelColConfig.of("SLOW_SQL_AVG_THREE", "慢SQL平均第三段个数"),
+ ExcelColConfig.of("SQL_ERROR_COUNT", "SQL执行错误数"),
+ ExcelColConfig.of("URL_JDBC_ERROR_COUNT", "URLJDBC执行错误数"),
+ ExcelColConfig.of("SCORE", "得分"),
+ ExcelColConfig.of("SCORE_SLOW_SQL", "慢SQL影响分"),
+ ExcelColConfig.of("SCORE_ERROR_SQL", "错误SQL影响分"),
+ ExcelColConfig.of("SCORE_SLOW_URL", "慢URL影响分"),
+ ExcelColConfig.of("SCORE_JDBC_ERROR_URL", "JDBC错误URL影响分"),
+ ExcelColConfig.of("INSTANCE_COUNT", "集群实例数"),
+ ExcelColConfig.of("DS_MAX_ACTIVE", "数据库最大连接数")
+ ));
+ final int[] index = {0};
+ List