增加配置同步信息界面,配置同步过程中,不允许用户操作业务配置。

This commit is contained in:
zhangwei
2018-11-30 18:12:26 +08:00
parent a2266e45d6
commit 80b79208e4
4 changed files with 146 additions and 41 deletions

View File

@@ -1,5 +1,6 @@
package com.nis.web.controller.configuration; package com.nis.web.controller.configuration;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -9,11 +10,13 @@ import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.apache.commons.httpclient.util.DateUtil;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import com.beust.jcommander.internal.Maps;
import com.nis.domain.FunctionServiceDict; import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page; import com.nis.domain.Page;
import com.nis.domain.SysDataDictionaryItem; import com.nis.domain.SysDataDictionaryItem;
@@ -23,6 +26,7 @@ import com.nis.domain.maat.ToMaatResult;
import com.nis.util.CacheUtils; import com.nis.util.CacheUtils;
import com.nis.util.ConfigServiceUtil; import com.nis.util.ConfigServiceUtil;
import com.nis.util.Constants; import com.nis.util.Constants;
import com.nis.util.DateUtils;
import com.nis.util.DictUtils; import com.nis.util.DictUtils;
import com.nis.util.StringUtil; import com.nis.util.StringUtil;
import com.nis.web.controller.BaseController; import com.nis.web.controller.BaseController;
@@ -37,12 +41,16 @@ import com.nis.web.service.BaseService;
@RequestMapping("${adminPath}/config/synchronization") @RequestMapping("${adminPath}/config/synchronization")
public class ConfigSynchronizationController extends BaseController { public class ConfigSynchronizationController extends BaseController {
@RequestMapping(value = {"configSyncInfo"})
public String configSyncInfo(Model model){
return "/sys/configSyncInfo";
}
/** /**
* @param cmd 0为取消同步1为同步 * @param cmd 0为取消同步1为同步
* 下发同步命令 * 下发同步命令
*/ */
@RequestMapping(value = {"cmd"}) @RequestMapping(value = {"configSync"})
public String cmd(Model model,Integer cmd,HttpServletRequest request,HttpServletResponse response){ public String configSync(Model model,Integer cmd,HttpServletRequest request,HttpServletResponse response){
Map<String,Integer> map = new HashMap(); Map<String,Integer> map = new HashMap();
map.put("syncStatus", cmd); map.put("syncStatus", cmd);
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map)); JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));
@@ -52,10 +60,13 @@ public class ConfigSynchronizationController extends BaseController {
sysDictName.setMark("currrent_sync_status"); sysDictName.setMark("currrent_sync_status");
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName); List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
if(!StringUtil.isEmpty(dictList)){ if(!StringUtil.isEmpty(dictList)){
List<SysDataDictionaryItem> itemList = dictList.get(0).getDictItemList(); SysDataDictionaryName dict = dictList.get(0);
List<SysDataDictionaryItem> itemList = dict.getDictItemList();
if(!StringUtil.isEmpty(itemList)){ if(!StringUtil.isEmpty(itemList)){
SysDataDictionaryItem item = itemList.get(0); SysDataDictionaryItem item = itemList.get(0);
item.setDictionaryId(dict.getId().intValue());
item.setItemValue("0");//0为开始同步 item.setItemValue("0");//0为开始同步
item.setItemDesc("最近一次同步时间:"+DateUtils.formatDateTime(new Date()));//记录本次同步时间
dictService.updateDictItem(item); dictService.updateDictItem(item);
//删除字典缓存 //删除字典缓存
CacheUtils.remove(Constants.CACHE_DICT_MAP); CacheUtils.remove(Constants.CACHE_DICT_MAP);
@@ -66,8 +77,7 @@ public class ConfigSynchronizationController extends BaseController {
} }
} }
return "/sys/configSyncInfo";
return "";
} }
/** /**
@@ -75,34 +85,34 @@ public class ConfigSynchronizationController extends BaseController {
*/ */
@RequestMapping(value = {"send"}) @RequestMapping(value = {"send"})
public void send(Model model,HttpServletRequest request,HttpServletResponse response){ public void send(Model model,HttpServletRequest request,HttpServletResponse response){
int status = 1; int status = 0;
try { try {
configSynchronizationService.send(request,response,null); configSynchronizationService.send(request,response,null);
status = 1;
} catch (NoSuchFieldException e) { } catch (NoSuchFieldException e) {
e.printStackTrace(); e.printStackTrace();
status = 0;
} catch (SecurityException e) { } catch (SecurityException e) {
e.printStackTrace(); e.printStackTrace();
status = 0;
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
e.printStackTrace(); e.printStackTrace();
status = 0;
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
status = 0;
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
status = 0; }catch (Exception e) {
e.printStackTrace();
}finally{ }finally{
if(status==0){ if(status==0){
SysDataDictionaryName sysDictName = new SysDataDictionaryName(); SysDataDictionaryName sysDictName = new SysDataDictionaryName();
sysDictName.setMark("currrent_sync_status"); sysDictName.setMark("currrent_sync_status");
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName); List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
if(!StringUtil.isEmpty(dictList)){ if(!StringUtil.isEmpty(dictList)){
List<SysDataDictionaryItem> itemList = dictList.get(0).getDictItemList(); SysDataDictionaryName dict = dictList.get(0);
List<SysDataDictionaryItem> itemList = dict.getDictItemList();
if(!StringUtil.isEmpty(itemList)){ if(!StringUtil.isEmpty(itemList)){
SysDataDictionaryItem item = itemList.get(0); SysDataDictionaryItem item = itemList.get(0);
item.setItemValue("-1");//下发过程中失败 item.setDictionaryId(dict.getId().intValue());
item.setItemValue("-2");//界面组织数据失败
dictService.updateDictItem(item); dictService.updateDictItem(item);
//删除字典缓存 //删除字典缓存
CacheUtils.remove(Constants.CACHE_DICT_MAP); CacheUtils.remove(Constants.CACHE_DICT_MAP);
@@ -110,10 +120,9 @@ public class ConfigSynchronizationController extends BaseController {
} }
Map<String,Integer> map = new HashMap(); Map<String,Integer> map = new HashMap();
map.put("syncStatus", 1); map.put("syncStatus", 1);
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));//取消 JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));//取消同步
if(result.get("status").equals(200)){//取消下发成功 }else{
}
} }
} }
} }
@@ -122,33 +131,42 @@ public class ConfigSynchronizationController extends BaseController {
*/ */
@RequestMapping(value = {"getStatus"}) @RequestMapping(value = {"getStatus"})
@ResponseBody @ResponseBody
public String getStatus(Model model){ public Map<String,Object> getStatus(Model model){
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态 String currentStatus = DictUtils.getDictLabel("currrent_sync_status", "status","0");
if(result.get("status").equals(200)){ String successStatus = DictUtils.getDictCode("config_sync_status", "finish","3");
List<Map<String,Object>> list = result.getJSONArray("data"); String serverFailStatus = DictUtils.getDictCode("config_sync_status", "serverFail","-1");
if(!StringUtil.isEmpty(list)){ String failStatus = DictUtils.getDictCode("config_sync_status", "fail","-2");
Map<String,Object> map = list.get(0); Map<String,Object> map = Maps.newHashMap();
String status = map.get("status").toString(); if(!currentStatus.equals(successStatus) && !currentStatus.equals(failStatus) && !currentStatus.equals(serverFailStatus)){
SysDataDictionaryName sysDictName = new SysDataDictionaryName(); JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
sysDictName.setMark("currrent_sync_status"); if(result.get("status").equals(200)){
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName); List<Map<String,Object>> list = result.getJSONArray("data");
if(!StringUtil.isEmpty(dictList)){ if(!StringUtil.isEmpty(list)){
SysDataDictionaryName dict = dictList.get(0); map = list.get(0);
List<SysDataDictionaryItem> itemList =dict.getDictItemList(); String status = map.get("status").toString();
if(!StringUtil.isEmpty(itemList)){ SysDataDictionaryName sysDictName = new SysDataDictionaryName();
SysDataDictionaryItem item = itemList.get(0); sysDictName.setMark("currrent_sync_status");
if(!status.equals(item.getItemValue())){//如果状态不同,则更新状态 List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
item.setDictionaryId(dict.getId().intValue()); if(!StringUtil.isEmpty(dictList)){
item.setItemValue(status); SysDataDictionaryName dict = dictList.get(0);
dictService.updateDictItem(item); List<SysDataDictionaryItem> itemList =dict.getDictItemList();
//删除字典缓存 if(!StringUtil.isEmpty(itemList)){
CacheUtils.remove(Constants.CACHE_DICT_MAP); SysDataDictionaryItem item = itemList.get(0);
} if(!status.equals(item.getItemValue())){//如果状态不同,则更新状态
item.setDictionaryId(dict.getId().intValue());
item.setItemValue(status);
dictService.updateDictItem(item);
//删除字典缓存
CacheUtils.remove(Constants.CACHE_DICT_MAP);
}
}
} }
} }
} }
}else{
map.put("status",currentStatus);
} }
return ""; return map;
} }
} }

View File

@@ -0,0 +1,8 @@
UPDATE `sys_menu` SET `id`='1169', `parent_id`='2', `parent_ids`='0,1,2,', `code`='config_sync', `name`='配置同步', `sort`='5030', `href`='/config/synchronization/configSyncInfo', `target`='', `icon`='', `is_show`='1', `permission`='', `create_by`='1', `create_date`='2018-11-23 15:12:26', `update_by`='1', `update_date`='2018-11-30 18:04:19', `remarks`='', `del_flag`='1', `menu_bg`=NULL, `quick_action`='0', `is_top`='0', `function_id`=NULL WHERE (`id`='1169');
delete from sys_data_dictionary_item where dictionary_id=141;
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3148', '0', 'start', '开始', '0', '1', '1', '141');
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3149', '1', 'init', '初始化', '0', '1', '1', '141');
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3150', '2', 'doing', '进行中', '0', '1', '1', '141');
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3151', '3', 'finish', '完成', '0', '1', '1', '141');
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3152', '-1', 'serverFail', '服务端同步失败', '0', '1', '1', '141');
INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3153', '-2', 'fail', '界面端同步失败', '0', '1', '1', '141');

View File

@@ -0,0 +1,44 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<title></title>
<script type="text/javascript">
$(document) .ready(function() {
top.$.jBox.closeTip();
$("#cfgFrom").validate({
submitHandler : function(form) {
top.$.jBox.tip("The system is being maintained and temporarily inaccessible.",'loading',{opacity:0.5,persistent:true});
form.submit();
},
})
})
</script>
</head>
<body>
<form id="cfgFrom" action="${ctx}/config/synchronization/configSync?cmd=1" method="post" class="form-horizontal">
<div class="page-content">
<h3 class="page-title">
<c:forEach items="${fns:getDictList('currrent_sync_status') }" var="dict">
${dict.itemDesc }
</c:forEach>
</h3>
<h2 class="page-title">
<c:forEach items="${fns:getDictList('currrent_sync_status') }" var="dict">
同步状态:
<c:if test="${dict.itemValue eq '0' }">开始</c:if>
<c:if test="${dict.itemValue eq '1' }">初始化</c:if>
<c:if test="${dict.itemValue eq '2' }">进行中</c:if>
<c:if test="${dict.itemValue eq '3' }">结束</c:if>
<c:if test="${dict.itemValue eq '-1' }">服务端同步失败</c:if>
<c:if test="${dict.itemValue eq '-2' }">界面端同步失败</c:if>
</c:forEach>
</h2>
<button id="save" type="submit" class="btn green">
配置同步
</button>
</div>
</form>
</body>
</html>

View File

@@ -1,6 +1,6 @@
$(function(){ $(function(){
// var leff =$("span[class~='le-ca-fo']").attr("data-original-title") // var leff =$("span[class~='le-ca-fo']").attr("data-original-title")
getConfigSyncStatus();
$("#contentTable").not(".logTb").find("tbody tr").each(function(i){ $("#contentTable").not(".logTb").find("tbody tr").each(function(i){
if($(this).find("input[type='checkbox']").attr("value")==3){ if($(this).find("input[type='checkbox']").attr("value")==3){
var ids = $(this).find("input").attr("id"); var ids = $(this).find("input").attr("id");
@@ -1551,6 +1551,41 @@ function openHelp(url){
title: "online help", buttons:{ "close":true} title: "online help", buttons:{ "close":true}
}); });
} }
//查询系统当前是否在进行配置同步,如果正在同步,界面不允许配置操作
function getConfigSyncStatus(){
var currentStatus = getSyncStatus();
//3成功-1服务端同步失败-2界面端同步失败
if(currentStatus!=3 && currentStatus!=-1 && currentStatus!=-2){
$.jBox.defaults = {
id:'syncStatusTip',
zIndex: 9999
};
var tipId = top.$.jBox.tip("The system is being maintained and temporarily inaccessible.",'loading',{opacity:0.5,persistent:true});
var t1 = setInterval(function() {
currentStatus = getSyncStatus();
alert(currentStatus);
if(currentStatus==3 || currentStatus==-1 || currentStatus==-2){//3表示同步完成-1表示服务端同步失败-2表示界面端同步失败
window.clearInterval(t1);
top.$.jBox.closeTip('syncStatusTip');
}
},5000);
}
}
function getSyncStatus(){
//获取当前是否有配置同步任务
var currentStatus = 3;
var pathName = window.document.location.pathname.substring(0,window.document.location.pathname.lastIndexOf("/nis")+4);
$.ajax({
type:'get',
async:false,
url:pathName+'/config/synchronization/getStatus',
dataType:"json",
success:function(data){
currentStatus = data.status;
}
});
return currentStatus;
}
function heightDiv(type){ function heightDiv(type){
var hei=document.documentElement.clientHeight; var hei=document.documentElement.clientHeight;
hei=hei-91; hei=hei-91;