2018-11-26 14:34:24 +08:00
|
|
|
|
package com.nis.web.controller.configuration;
|
|
|
|
|
|
|
2018-11-30 18:12:26 +08:00
|
|
|
|
import java.util.Date;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import java.util.HashMap;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import java.util.List;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import java.util.Map;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import net.sf.json.JSONObject;
|
|
|
|
|
|
|
2018-11-30 18:12:26 +08:00
|
|
|
|
import org.apache.commons.httpclient.util.DateUtil;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
|
|
|
import org.springframework.ui.Model;
|
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
|
2018-11-30 18:12:26 +08:00
|
|
|
|
import com.beust.jcommander.internal.Maps;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import com.nis.domain.FunctionServiceDict;
|
|
|
|
|
|
import com.nis.domain.Page;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import com.nis.domain.SysDataDictionaryItem;
|
|
|
|
|
|
import com.nis.domain.SysDataDictionaryName;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import com.nis.domain.configuration.CfgIndexInfo;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import com.nis.domain.maat.ToMaatResult;
|
2018-12-03 11:48:16 +08:00
|
|
|
|
import com.nis.exceptions.MaatConvertException;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import com.nis.util.CacheUtils;
|
|
|
|
|
|
import com.nis.util.ConfigServiceUtil;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import com.nis.util.Constants;
|
2018-11-30 18:12:26 +08:00
|
|
|
|
import com.nis.util.DateUtils;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import com.nis.util.DictUtils;
|
2019-04-25 14:42:41 +08:00
|
|
|
|
import com.nis.util.LogUtils;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import com.nis.util.StringUtil;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
import com.nis.web.controller.BaseController;
|
2018-11-27 16:57:08 +08:00
|
|
|
|
import com.nis.web.service.BaseService;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 配置全量同步
|
|
|
|
|
|
* @author zhangwei
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
@Controller
|
|
|
|
|
|
@RequestMapping("${adminPath}/config/synchronization")
|
|
|
|
|
|
public class ConfigSynchronizationController extends BaseController {
|
|
|
|
|
|
|
2018-11-30 18:12:26 +08:00
|
|
|
|
@RequestMapping(value = {"configSyncInfo"})
|
|
|
|
|
|
public String configSyncInfo(Model model){
|
|
|
|
|
|
return "/sys/configSyncInfo";
|
|
|
|
|
|
}
|
2018-11-26 14:34:24 +08:00
|
|
|
|
/**
|
2018-11-27 16:57:08 +08:00
|
|
|
|
* @param cmd 0为取消同步,1为同步
|
2018-11-26 14:34:24 +08:00
|
|
|
|
* 下发同步命令
|
|
|
|
|
|
*/
|
2018-11-30 18:12:26 +08:00
|
|
|
|
@RequestMapping(value = {"configSync"})
|
2019-03-15 16:15:11 +08:00
|
|
|
|
public String configSync(Model model,Integer cmd,Integer serviceId,HttpServletRequest request,HttpServletResponse response){
|
2018-11-27 16:57:08 +08:00
|
|
|
|
Map<String,Integer> map = new HashMap();
|
|
|
|
|
|
map.put("syncStatus", cmd);
|
2019-03-20 11:32:24 +08:00
|
|
|
|
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));
|
|
|
|
|
|
//JSONObject result=JSONObject.fromObject("{\"status\": 201,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":0,\"opTime\":\"2016-11-22 08:31:27\"}]}");
|
2018-11-27 16:57:08 +08:00
|
|
|
|
if(result.get("status").equals(201)){//响应成功
|
|
|
|
|
|
if(cmd.equals(1)){//同步
|
|
|
|
|
|
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
|
|
|
|
|
|
sysDictName.setMark("currrent_sync_status");
|
|
|
|
|
|
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
|
|
|
|
|
|
if(!StringUtil.isEmpty(dictList)){
|
2018-11-30 18:12:26 +08:00
|
|
|
|
SysDataDictionaryName dict = dictList.get(0);
|
|
|
|
|
|
List<SysDataDictionaryItem> itemList = dict.getDictItemList();
|
2018-11-27 16:57:08 +08:00
|
|
|
|
if(!StringUtil.isEmpty(itemList)){
|
|
|
|
|
|
SysDataDictionaryItem item = itemList.get(0);
|
2018-11-30 18:12:26 +08:00
|
|
|
|
item.setDictionaryId(dict.getId().intValue());
|
2018-11-27 16:57:08 +08:00
|
|
|
|
item.setItemValue("0");//0为开始同步
|
2018-11-30 18:12:26 +08:00
|
|
|
|
item.setItemDesc("最近一次同步时间:"+DateUtils.formatDateTime(new Date()));//记录本次同步时间
|
2018-11-27 16:57:08 +08:00
|
|
|
|
dictService.updateDictItem(item);
|
|
|
|
|
|
//删除字典缓存
|
|
|
|
|
|
CacheUtils.remove(Constants.CACHE_DICT_MAP);
|
2019-04-09 09:10:40 +08:00
|
|
|
|
|
|
|
|
|
|
//全量同步之前等待一段时间,避免定时任务还未扫描到当前的同步状态。
|
|
|
|
|
|
try{
|
|
|
|
|
|
Thread.sleep(60000);
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2019-04-09 09:10:40 +08:00
|
|
|
|
}
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-03-15 16:15:11 +08:00
|
|
|
|
send(serviceId,model,request,response);
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}else if(cmd.equals(0)){//取消
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2019-03-15 17:31:57 +08:00
|
|
|
|
model.addAttribute("serviceId", serviceId);
|
2018-11-30 18:12:26 +08:00
|
|
|
|
return "/sys/configSyncInfo";
|
2018-11-26 14:34:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 下发同步配置
|
|
|
|
|
|
*/
|
|
|
|
|
|
@RequestMapping(value = {"send"})
|
2019-03-15 16:15:11 +08:00
|
|
|
|
public void send(Integer serviceId,Model model,HttpServletRequest request,HttpServletResponse response){
|
2018-12-03 11:48:16 +08:00
|
|
|
|
int status = -2;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
try {
|
2019-03-15 16:15:11 +08:00
|
|
|
|
configSynchronizationService.send(serviceId,request,response,null);
|
2018-11-30 18:12:26 +08:00
|
|
|
|
status = 1;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
} catch (NoSuchFieldException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-11-26 14:34:24 +08:00
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-11-26 14:34:24 +08:00
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-11-26 14:34:24 +08:00
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-11-26 14:34:24 +08:00
|
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-12-03 11:48:16 +08:00
|
|
|
|
}catch(MaatConvertException e){
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-12-03 11:48:16 +08:00
|
|
|
|
status = -1;
|
2018-11-30 18:12:26 +08:00
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}finally{
|
2018-12-03 11:48:16 +08:00
|
|
|
|
if(status!=1){
|
2018-11-27 16:57:08 +08:00
|
|
|
|
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
|
|
|
|
|
|
sysDictName.setMark("currrent_sync_status");
|
|
|
|
|
|
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
|
|
|
|
|
|
if(!StringUtil.isEmpty(dictList)){
|
2018-11-30 18:12:26 +08:00
|
|
|
|
SysDataDictionaryName dict = dictList.get(0);
|
|
|
|
|
|
List<SysDataDictionaryItem> itemList = dict.getDictItemList();
|
2018-11-27 16:57:08 +08:00
|
|
|
|
if(!StringUtil.isEmpty(itemList)){
|
|
|
|
|
|
SysDataDictionaryItem item = itemList.get(0);
|
2018-11-30 18:12:26 +08:00
|
|
|
|
item.setDictionaryId(dict.getId().intValue());
|
2018-12-03 11:48:16 +08:00
|
|
|
|
item.setItemValue(String.valueOf(status));//-2界面组织数据失败,-1服务端返回的失败
|
2018-11-27 16:57:08 +08:00
|
|
|
|
dictService.updateDictItem(item);
|
|
|
|
|
|
//删除字典缓存
|
|
|
|
|
|
CacheUtils.remove(Constants.CACHE_DICT_MAP);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
Map<String,Integer> map = new HashMap();
|
2018-12-03 16:18:54 +08:00
|
|
|
|
map.put("syncStatus", 0);
|
2018-11-30 18:12:26 +08:00
|
|
|
|
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));//取消同步
|
|
|
|
|
|
}else{
|
2018-12-05 17:09:40 +08:00
|
|
|
|
boolean isFinished = true;
|
|
|
|
|
|
while(isFinished){
|
2019-03-20 11:32:24 +08:00
|
|
|
|
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
|
|
|
|
|
|
//JSONObject result = JSONObject.fromObject("{\"status\": 200,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":3,\"opTime\":\"2016-11-22 08:31:27\"}]}");
|
2018-12-05 17:09:40 +08:00
|
|
|
|
if(result.get("status").equals(200)){
|
|
|
|
|
|
List<Map<String,Object>> list = result.getJSONArray("data");
|
|
|
|
|
|
if(!StringUtil.isEmpty(list)){
|
|
|
|
|
|
Map<String,Object> map = list.get(0);
|
|
|
|
|
|
String serverStatus = map.get("status").toString();
|
|
|
|
|
|
if(serverStatus.equals("-1")||serverStatus.equals("3")){
|
|
|
|
|
|
isFinished = false;
|
|
|
|
|
|
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
|
|
|
|
|
|
sysDictName.setMark("currrent_sync_status");
|
|
|
|
|
|
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
|
|
|
|
|
|
if(!StringUtil.isEmpty(dictList)){
|
|
|
|
|
|
SysDataDictionaryName dict = dictList.get(0);
|
|
|
|
|
|
List<SysDataDictionaryItem> itemList =dict.getDictItemList();
|
|
|
|
|
|
if(!StringUtil.isEmpty(itemList)){
|
|
|
|
|
|
SysDataDictionaryItem item = itemList.get(0);
|
|
|
|
|
|
if(!serverStatus.equals(item.getItemValue())){//如果状态不同,则更新状态
|
|
|
|
|
|
item.setDictionaryId(dict.getId().intValue());
|
|
|
|
|
|
item.setItemValue(serverStatus);
|
|
|
|
|
|
dictService.updateDictItem(item);
|
|
|
|
|
|
//删除字典缓存
|
|
|
|
|
|
CacheUtils.remove(Constants.CACHE_DICT_MAP);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
try{
|
|
|
|
|
|
Thread.sleep(60000);
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
e.printStackTrace();
|
2019-04-25 14:42:41 +08:00
|
|
|
|
LogUtils.saveLog(request, null, e, null);
|
2018-12-05 17:09:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2018-11-30 18:12:26 +08:00
|
|
|
|
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}
|
2018-11-26 14:34:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 同步状态获取
|
|
|
|
|
|
*/
|
|
|
|
|
|
@RequestMapping(value = {"getStatus"})
|
2018-11-27 16:57:08 +08:00
|
|
|
|
@ResponseBody
|
2018-11-30 18:12:26 +08:00
|
|
|
|
public Map<String,Object> getStatus(Model model){
|
|
|
|
|
|
String currentStatus = DictUtils.getDictLabel("currrent_sync_status", "status","0");
|
|
|
|
|
|
String successStatus = DictUtils.getDictCode("config_sync_status", "finish","3");
|
|
|
|
|
|
String serverFailStatus = DictUtils.getDictCode("config_sync_status", "serverFail","-1");
|
|
|
|
|
|
String failStatus = DictUtils.getDictCode("config_sync_status", "fail","-2");
|
|
|
|
|
|
Map<String,Object> map = Maps.newHashMap();
|
|
|
|
|
|
if(!currentStatus.equals(successStatus) && !currentStatus.equals(failStatus) && !currentStatus.equals(serverFailStatus)){
|
2019-03-20 11:32:24 +08:00
|
|
|
|
//JSONObject result = JSONObject.fromObject("{\"status\": 200,\"businessCode\": 2001000,\"reason\":\"数据获取操作成功\",\"msg\": \"根据配置id获取对应的编译,组,域等信息成功\",\"fromuri\": \"/galaxy-service/service/cfg/v1/getAllKVByCompileId\",\"traceCode\": \"2019031211285044813363\",\"data\": [{\"service\":\"ntc\",\"status\":0,\"opTime\":\"2016-11-22 08:31:27\"}]}");
|
|
|
|
|
|
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
|
2018-11-30 18:12:26 +08:00
|
|
|
|
if(result.get("status").equals(200)){
|
|
|
|
|
|
List<Map<String,Object>> list = result.getJSONArray("data");
|
|
|
|
|
|
if(!StringUtil.isEmpty(list)){
|
|
|
|
|
|
map = list.get(0);
|
|
|
|
|
|
String status = map.get("status").toString();
|
|
|
|
|
|
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
|
|
|
|
|
|
sysDictName.setMark("currrent_sync_status");
|
|
|
|
|
|
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
|
|
|
|
|
|
if(!StringUtil.isEmpty(dictList)){
|
|
|
|
|
|
SysDataDictionaryName dict = dictList.get(0);
|
|
|
|
|
|
List<SysDataDictionaryItem> itemList =dict.getDictItemList();
|
|
|
|
|
|
if(!StringUtil.isEmpty(itemList)){
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2018-11-30 18:12:26 +08:00
|
|
|
|
}else{
|
|
|
|
|
|
map.put("status",currentStatus);
|
2018-11-27 16:57:08 +08:00
|
|
|
|
}
|
2018-11-30 18:12:26 +08:00
|
|
|
|
return map;
|
2018-11-26 14:34:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|