package com.yc.sdk.shopping.action;
|
|
import com.google.gson.JsonObject;
|
import com.yc.action.BaseAction;
|
import com.yc.action.panval.InvGet;
|
import com.yc.entity.DataSourceActionEntity;
|
import com.yc.entity.DataSourceEntity;
|
import com.yc.entity.DatabaseEntity;
|
import com.yc.listener.SessionListener;
|
import com.yc.multiData.MultiDataSource;
|
import com.yc.multiData.SpObserver;
|
import com.yc.sdk.shopping.util.SettingKey;
|
import com.yc.service.demo.DemoIfc;
|
import com.yc.service.sysmessage.SysMessageInf;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.dao.DataAccessException;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpSession;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
@Controller
|
@RequestMapping("/shopping/maintaince/maintaince.do")
|
public class Maintaince extends BaseAction {
|
@Autowired
|
DemoIfc demo;
|
@Autowired
|
SysMessageInf sysMessageInf ;
|
|
@RequestMapping(params = "m=StopAndStart")
|
public void maintainceStopAndStart(HttpServletRequest request,HttpServletResponse response) {
|
//HttpSession session=request.getSession(false); //必须传 false 值
|
JsonObject json = new JsonObject();
|
JsonObject errJson = new JsonObject();
|
|
String action = request.getParameter("action") ; // start 允许登录, stop 停止登录
|
String hostUrl = SettingKey.getHostUrl(request) ;
|
//将微信corpid组装成url
|
String wxQueryString = SettingKey.getQueryStringByWx(request);
|
|
//String dbId = getDatabaseId(request) ;
|
|
try {
|
DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
|
SpObserver.setDBtoDemo();
|
|
|
Integer days = 0 ;
|
if (action != null && "stop".equals(action)) {
|
days = -1 ;
|
} else {
|
days = null;
|
}
|
// expiredDate
|
demo.updateExpiredDate(dataSourceEntity.getDbId(), days ) ;
|
} catch (DataAccessException e) {
|
String msg=(e.getCause()!=null? e.getCause().getMessage():e.getMessage());
|
if(request.getHeader("x-app-type")!=null) {
|
json.addProperty("state", -1);
|
json.addProperty("msg", msg);
|
}else {
|
errJson.addProperty("warning",msg);
|
json.add("error", errJson);
|
}
|
this.printJson(response, json.toString());
|
return;
|
}catch (Exception e) {
|
String msg=(e.getCause()!=null? e.getCause().getMessage():e.getMessage());
|
if(request.getHeader("x-app-type")!=null) {
|
json.addProperty("state", -1);
|
json.addProperty("msg", msg);
|
}else{
|
errJson.addProperty("warning",msg);
|
json.add("error", errJson);
|
}
|
this.printJson(response, json.toString());
|
return;
|
} finally {
|
SpObserver.setDBtoInstance();
|
}
|
|
|
try {
|
DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
|
if (action != null && "stop".equals(action)) {
|
//删除所有在线用户
|
|
int count = SessionListener.delSession(request,dataSourceEntity.getDbId()+"") ;
|
String msg="系统已经停止使用,停止时已强制【" + count + "】用户退出系统!稍后将自动重定向到登录界面";
|
if(request.getHeader("x-app-type")!=null) {
|
json.addProperty("state", 0);
|
json.addProperty("msg", msg);
|
}else {
|
json.addProperty("hint",msg );
|
json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
|
}
|
}else {
|
String msg="系统已经启用,可以正常登录系统!";
|
if(request.getHeader("x-app-type")!=null) {
|
json.addProperty("state", 0);
|
json.addProperty("msg", msg);
|
}else {
|
json.addProperty("isstop", "false");
|
json.addProperty("hint", msg);
|
json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
|
}
|
}
|
//AsynchronousExecution.doRefreshUri(hostUrl,"/SyncDataSource.do", ""); //doRefreshDataSource();
|
|
InvGet.refreshDataSource(dataSourceEntity.getDbId()+"",DataSourceActionEntity.ActionEnum.REFRESH); //直接刷新本机
|
}catch(Exception e) {
|
this.printJson(response, e.getMessage());
|
e.printStackTrace();
|
return;
|
//throw e ;
|
}
|
|
this.printJson(response, json.toString());
|
}
|
|
@RequestMapping(params = "m=info")
|
public void maintainceInfo(HttpServletRequest request,HttpServletResponse response) {
|
HttpSession session=request.getSession(true);
|
|
String hostUrl = SettingKey.getHostUrl(request) ;
|
//将微信corpid组装成url
|
String wxQueryString = SettingKey.getQueryStringByWx(request);
|
|
JsonObject json = new JsonObject();
|
JsonObject errJson = new JsonObject();
|
try {
|
//DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
|
if (isSystemStop(request)) {
|
if (session != null ) {
|
session.invalidate() ; //强制退出
|
}
|
json.addProperty("isstop","true" );
|
} else {
|
json.addProperty("isstop","false" );
|
}
|
json.addProperty("redirect", hostUrl + "/login.jsp"+ (wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString)) ;
|
|
this.printJson(response, json.toString());
|
return ;
|
} catch (DataAccessException e) {
|
errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
|
json.add("error", errJson);
|
this.printJson(response, json.toString());
|
return;
|
}catch (Exception e) {
|
errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
|
json.add("error", errJson);
|
this.printJson(response, json.toString());
|
return;
|
} finally {
|
SpObserver.setDBtoInstance();
|
}
|
}
|
|
/**
|
* 刷新数据库占用空间情况
|
* @param request
|
* @param response
|
*/
|
@RequestMapping(params = "m=refreshdsdatasize")
|
public void refreshDataSourceDataSize(HttpServletRequest request,HttpServletResponse response) {
|
//String hostUrl = SettingKey.getHostUrl(request) ;
|
//String dbId = getDatabaseId(request) ;
|
JsonObject json = new JsonObject();
|
List<String> errList = new ArrayList<String>();
|
try {
|
try {
|
SpObserver.setDBtoDemo();
|
demo.initDataSourceDataSize() ; //初始化所有数据源 datasize logsize
|
}catch(Exception e) {
|
e.printStackTrace();
|
json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
this.printJson(response, json.toString());
|
return;
|
}finally {
|
SpObserver.setDBtoInstance();
|
}
|
|
//按相同IP和端口号取出主机名(有可能只有一条记录),然后按数据库名更新 dataSize 和 logSize
|
Map<String,DataSourceEntity> dataSourceMap = MultiDataSource.getDataSourceMapsByHostAndPort() ;
|
for (Map.Entry<String, DataSourceEntity> entry : dataSourceMap.entrySet()) {
|
DataSourceEntity dataSourceEntity = entry.getValue();
|
if(dataSourceEntity.isExpiredDate()) continue;//过期跳过处理 by danaus 2023-06-19 15:37
|
if (dataSourceEntity.getDbId() == 148) continue ; //如果是苏州科勒,则跳过
|
|
Map<String,DatabaseEntity> dbDataSizeList = null ;
|
try {
|
SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());
|
dbDataSizeList =demo.getDatabaseInfomation() ;
|
}catch(Exception e) {
|
e.printStackTrace();
|
json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
this.printJson(response, json.toString());
|
return;
|
}finally {
|
SpObserver.setDBtoInstance();
|
}
|
|
//取出相同主机和端口号的所有数据源记录
|
List<DataSourceEntity> dbList = MultiDataSource.getDataSourceListByHostAndPort(dataSourceEntity.getHost(),dataSourceEntity.getPort()) ;
|
String sql = " set nocount on ; declare @count int = 0 ; \n" ;
|
for (int i = 0 ; dbList != null && i < dbList.size();i++) {
|
DatabaseEntity databaseEntity = dbDataSizeList.get(dbList.get(i).getDb().toLowerCase());
|
DatabaseEntity curDataBaseEntity = null ;
|
try {
|
SpObserver.setDBtoInstance("_" + dbList.get(i).getDbId());
|
// demo.getDatabaseInfomation() 取出来的剩余空间有时候是错误的,因此改为取当前数据的做法(此方法有点慢),Added by Johns Wang,2019-11-18
|
curDataBaseEntity = demo.getDatabaseFreeSpaceInfo() ;
|
}catch(Exception e) {
|
e.printStackTrace();
|
errList.add(e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
//json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
//this.printJson(response, json.toString());
|
//return;
|
}finally {
|
SpObserver.setDBtoInstance();
|
}
|
|
//如果该数据库存在,则更新它的 datasize 和 logsize
|
if (databaseEntity != null) {
|
sql += " update a set DataSize = "+(curDataBaseEntity !=null?curDataBaseEntity.getDataSize(): databaseEntity.getDataSize())
|
+ " ,LogSize = " + (curDataBaseEntity !=null?curDataBaseEntity.getLogSize():databaseEntity.getLogSize() )
|
+ " ,TotalSize ="+ (curDataBaseEntity !=null?curDataBaseEntity.getTotalSize():databaseEntity.getTotalSize())
|
+ " ,DataFreeSpace = " + (curDataBaseEntity !=null? curDataBaseEntity.getDataFreeSpace() : databaseEntity.getDataFreeSpace())
|
+ " ,LogFreeSpace = " + (curDataBaseEntity !=null? curDataBaseEntity.getLogFreeSpace():databaseEntity.getLogFreeSpace())
|
+ " ,TotalFreeSpace = " + (curDataBaseEntity !=null ? curDataBaseEntity.getTotalFreeSpace():databaseEntity.getTotalFreeSpace())
|
+ " from gsystem a where id= "+dbList.get(i).getDbId() +" ; \n"
|
+ " select @count = isnull(@count,0) + 1 ; \n" ;
|
}
|
}
|
|
try {
|
SpObserver.setDBtoDemo();
|
sql += " select @count ; \n";
|
demo.updateDataSourceDataSize(sql) ;
|
}catch(Exception e) {
|
e.printStackTrace();
|
json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
this.printJson(response, json.toString());
|
return;
|
}finally {
|
SpObserver.setDBtoInstance();
|
}
|
|
}
|
DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
|
try {
|
if(!dataSourceEntity.isExpiredDate()) {//没过期才需要执行 by danaus 2023-06-19 15:38
|
InvGet.refreshDataSource(dataSourceEntity.getDbId() + "", DataSourceActionEntity.ActionEnum.REFRESH); //直接刷新本机
|
}
|
}catch(Exception e) {
|
e.printStackTrace();
|
json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
this.printJson(response, json.toString());
|
return;
|
//throw e ;
|
}
|
}catch (Exception e) {
|
e.printStackTrace();
|
json.addProperty("error", e.getCause()!= null?e.getCause().getMessage(): e.getMessage());
|
this.printJson(response, json.toString());
|
return ;
|
}
|
if (errList!=null&& errList.size()>0) {
|
json.addProperty("error",errList.toString());
|
}else {
|
json.addProperty("hint", "刷新成功!");
|
}
|
this.printJson(response, json.toString());
|
return;
|
}
|
|
/**
|
* 检查系统是否已停用
|
* @param dbId
|
* @return
|
*/
|
public static boolean isSystemStop(HttpServletRequest request) throws Exception {
|
|
//String dbId = getDatabaseId(request) ;
|
|
//Date now = new Date();
|
//SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//可以方便地修改日期格式
|
//System.out.println("maintaince.java isSystemStop() " + df.format(now) + " dbid:" + dbId + " expireddays:" + (dataSourceEntity.getExpiredDays()==null?"null":dataSourceEntity.getExpiredDays()) );
|
try {
|
|
DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
|
if(dataSourceEntity==null){
|
return true;
|
}
|
if (dataSourceEntity.isExpiredDate()) {
|
return true ;
|
}
|
|
return false ;
|
}catch (Exception e) {
|
throw e ;
|
}
|
}
|
|
}
|