增加同步指令下发与同步状态获取功能,修改同步下发配置的asn业务逻辑

This commit is contained in:
zhangwei
2018-11-27 16:57:08 +08:00
parent 85fc51134c
commit 80e6bbb53d
8 changed files with 186 additions and 38 deletions

View File

@@ -631,9 +631,9 @@ public class ConfigServiceUtil {
* @return
* @throws MaatConvertException
*/
public static ToMaatResult configSyncCmd(String params) throws MaatConvertException{
public static JSONObject configSyncCmd(String params) throws MaatConvertException{
Response response=null;
ToMaatResult bean = null;
JSONObject bean = null;
try {
String result = null;
String url = DictUtils.getDictLabel("config_sync_url", "sync_cmd");
@@ -653,9 +653,7 @@ public class ConfigServiceUtil {
}
if(response != null && response.getStatus() == 200){
logger.info("get result success");
JsonConfig config=new JsonConfig();
JSONObject resObject = JSONObject.fromObject(result,config);
bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class);
bean = JSONObject.fromObject(result);
}else{
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}
@@ -674,9 +672,9 @@ public class ConfigServiceUtil {
* @return
* @throws MaatConvertException
*/
public static ToMaatResult configSyncStatus() throws MaatConvertException{
public static JSONObject configSyncStatus() throws MaatConvertException{
Response response=null;
ToMaatResult bean = null;
JSONObject bean = null;
try {
String result = null;
String url = DictUtils.getDictLabel("config_sync_url", "get_sync_status");
@@ -696,9 +694,7 @@ public class ConfigServiceUtil {
}
if(response != null && response.getStatus() == 200){
logger.info("get result success");
JsonConfig config=new JsonConfig();
JSONObject resObject = JSONObject.fromObject(result,config);
bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class);
bean= JSONObject.fromObject(result);
}else{
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}
@@ -717,9 +713,9 @@ public class ConfigServiceUtil {
* @return
* @throws MaatConvertException
*/
public static ToMaatResult configSync(String params,Integer cfgType,Integer serviceId,String tableName,String completeTag) throws MaatConvertException{
public static JSONObject configSync(String params,Integer cfgType,Integer serviceId,String tableName,String completeTag) throws MaatConvertException{
Response response=null;
ToMaatResult bean = null;
JSONObject bean = null;
try {
String result = null;
String url = DictUtils.getDictLabel("config_sync_url", "sync_send");
@@ -743,10 +739,7 @@ public class ConfigServiceUtil {
}
if(response != null && response.getStatus() == 200){
logger.info("get result success");
JsonConfig config=new JsonConfig();
config.setExcludes(new String[]{"configCompileList"});
JSONObject resObject = JSONObject.fromObject(result,config);
bean = (ToMaatResult) JSONObject.toBean(resObject,ToMaatResult.class);
bean = JSONObject.fromObject(result);
}else{
throw new MaatConvertException("<spring:message code=\"request_service_failed\"/>:"+result);
}

View File

@@ -1,20 +1,32 @@
package com.nis.web.controller.configuration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page;
import com.nis.domain.SysDataDictionaryItem;
import com.nis.domain.SysDataDictionaryName;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.domain.maat.ToMaatResult;
import com.nis.util.CacheUtils;
import com.nis.util.ConfigServiceUtil;
import com.nis.util.Constants;
import com.nis.util.DictUtils;
import com.nis.util.StringUtil;
import com.nis.web.controller.BaseController;
import com.nis.web.service.BaseService;
/**
* 配置全量同步
@@ -26,10 +38,34 @@ import com.nis.web.controller.BaseController;
public class ConfigSynchronizationController extends BaseController {
/**
* @param cmd 0为取消同步1为同步
* 下发同步命令
*/
@RequestMapping(value = {"cmd"})
public String cmd(Model model,String cmd){
public String cmd(Model model,Integer cmd,HttpServletRequest request,HttpServletResponse response){
Map<String,Integer> map = new HashMap();
map.put("syncStatus", cmd);
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));
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)){
List<SysDataDictionaryItem> itemList = dictList.get(0).getDictItemList();
if(!StringUtil.isEmpty(itemList)){
SysDataDictionaryItem item = itemList.get(0);
item.setItemValue("0");//0为开始同步
dictService.updateDictItem(item);
//删除字典缓存
CacheUtils.remove(Constants.CACHE_DICT_MAP);
}
}
send(model,request,response);
}else if(cmd.equals(0)){//取消
}
}
return "";
}
@@ -39,31 +75,80 @@ public class ConfigSynchronizationController extends BaseController {
*/
@RequestMapping(value = {"send"})
public void send(Model model,HttpServletRequest request,HttpServletResponse response){
int status = 1;
try {
configSynchronizationService.send(request,response,null);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
status = 0;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
status = 0;
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
status = 0;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
status = 0;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
status = 0;
}finally{
if(status==0){
SysDataDictionaryName sysDictName = new SysDataDictionaryName();
sysDictName.setMark("currrent_sync_status");
List<SysDataDictionaryName> dictList = dictService.findDicByName(sysDictName);
if(!StringUtil.isEmpty(dictList)){
List<SysDataDictionaryItem> itemList = dictList.get(0).getDictItemList();
if(!StringUtil.isEmpty(itemList)){
SysDataDictionaryItem item = itemList.get(0);
item.setItemValue("-1");//下发过程中失败
dictService.updateDictItem(item);
//删除字典缓存
CacheUtils.remove(Constants.CACHE_DICT_MAP);
}
}
Map<String,Integer> map = new HashMap();
map.put("syncStatus", 1);
JSONObject result = ConfigServiceUtil.configSyncCmd(BaseService.gsonToJson(map));//取消
if(result.get("status").equals(200)){//取消下发成功
}
}
}
}
/**
* 同步状态获取
*/
@RequestMapping(value = {"getStatus"})
@ResponseBody
public String getStatus(Model model){
JSONObject result = ConfigServiceUtil.configSyncStatus();//获取同步状态
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 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);
}
}
}
}
}
return "";
}
}

View File

@@ -11,7 +11,7 @@ import com.nis.domain.SysDataDictionaryName;
public interface SysDictDao extends CrudDao<SysDataDictionaryName> {
List<SysDataDictionaryName> findDicByName(@Param("DEL_FLAG_NORMAL")String DEL_FLAG_NORMAL,@Param("modualName") String modualName);
List<SysDataDictionaryName> findDicByName(@Param("DEL_FLAG_NORMAL")String DEL_FLAG_NORMAL,@Param("modualName") String modualName,@Param("mark") String mark);
List<SysDataDictionaryName> findDictList(SysDataDictionaryName sysDictName);
@@ -27,6 +27,6 @@ public interface SysDictDao extends CrudDao<SysDataDictionaryName> {
void deleteDictName(@Param("dictId")Integer dictId);
void updateDictItem(SysDataDictionaryItem sysDictItem);
}

View File

@@ -65,7 +65,13 @@
<include refid="dictColumns"/>
FROM sys_data_dictionary_name n
<include refid="dictJoins"/>
WHERE n.status = #{DEL_FLAG_NORMAL} AND n.module_name = #{modualName}
WHERE n.status = #{DEL_FLAG_NORMAL}
<if test="modualName != null and modualName!=''">
AND n.module_name = #{modualName}
</if>
<if test="mark != null and mark!=''">
AND n.mark = #{mark}
</if>
ORDER BY n.id,t.item_sort
</select>
@@ -149,5 +155,12 @@
status = #{status,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
<!-- 编辑词典词条信息 -->
<update id="updateDictItem" parameterType="com.nis.domain.SysDataDictionaryItem" >
update sys_data_dictionary_item
set item_code=#{itemCode}, item_value=#{itemValue},
item_desc=#{itemDesc}, item_sort=#{itemSort}, status=#{status},
type=#{type}, dictionary_id=#{dictionaryId}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>

View File

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Param;
import com.nis.domain.basics.AsnIpCfg;
import com.nis.domain.configuration.AppByteCfg;
import com.nis.domain.configuration.AppComplexKeywordCfg;
import com.nis.domain.configuration.AppDomainCfg;
@@ -68,6 +69,7 @@ public interface ConfigSynchronizationDao {
public List<CfgIndexInfo> getCfgIndexList(BaseCfg entity);
public List<IpPortCfg> getIpPortList(@Param("tableName")String tableName,@Param("compileIds")List compileIds);
public List<AsnIpCfg> getAsnIpList(@Param("asnGroupIds")List asnGroupIds);
public List<BaseStringCfg> getStrList(@Param("tableName")String tableName,@Param("compileIds")List compileIds);
public List<ComplexkeywordCfg> getComplexStrList(@Param("tableName")String tableName,@Param("compileIds")List compileIds);
public List<FileDigestCfg> getFileDigestList(@Param("tableName")String tableName,@Param("compileIds")List compileIds);

View File

@@ -706,6 +706,11 @@
a.ip_type,a.src_ip_address,a.ip_pattern,a.port_pattern,a.src_port
,a.protocol,a.protocol_id,a.direction,a.dest_port,a.dest_ip_address,a.cfg_type,a.compile_id
</sql>
<sql id="AsnIpCfg_Column" >
a.ip_type,a.src_ip_address,a.ip_pattern,a.port_pattern,a.src_port
,a.protocol,a.protocol_id,a.direction,a.dest_port,a.dest_ip_address,a.cfg_type,a.asn_ip_group,
a.user_region1
</sql>
<sql id="StrCfg_Column" >
a.cfg_desc,a.cfg_keywords,a.cfg_type,
a.expr_type,a.match_method,a.is_hexbin,a.compile_id
@@ -860,6 +865,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -883,6 +889,27 @@
</if> -->
</where>
</select>
<select id="getAsnIpList" resultType="com.nis.domain.basics.AsnIpCfg">
SELECT
<include refid="AsnIpCfg_Column" />
FROM asn_ip_cfg a
<where>
a.is_valid!=-1
and a.asn_ip_group in
<foreach collection="asnGroupIds" index="index" item="groupId" open="(" separator="," close=")">
#{groupId}
</foreach>
<!-- <if test="compileId != null">
AND a.compile_id =#{compileId}
</if>
<if test="functionId != null">
AND a.function_id =#{functionId}
</if>
<if test="serviceId!= null">
AND a.service_id =#{serviceId}
</if> -->
</where>
</select>
<select id="getStrList" resultMap="stringCfgMap" >
SELECT
<include refid="StrCfg_Column" />
@@ -954,6 +981,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -977,6 +1005,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1000,6 +1029,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1023,6 +1053,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1053,6 +1084,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1078,6 +1110,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1102,6 +1135,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>
@@ -1125,6 +1159,7 @@
AND a.action=#{action,jdbcType=INTEGER}
</if>
and a.is_valid=#{isValid} and a.is_audit=#{isAudit}
and a.is_valid!=-1
</trim>
ORDER BY a.CFG_ID
</select>

View File

@@ -29,6 +29,9 @@ public class DictService extends BaseService {
return page;
}
public List<SysDataDictionaryName> findDicByName(SysDataDictionaryName sysDictName){
return dictDao.findDicByName(sysDictName.DEL_FLAG_NORMAL, sysDictName.getModuleName(),sysDictName.getMark());
}
public void saveOrUpdate(SysDataDictionaryName sysDictName) {
@@ -102,7 +105,9 @@ public class DictService extends BaseService {
return dictDao.getDictById(1,id);
}
public void updateDictItem(SysDataDictionaryItem sysDictItem){
dictDao.updateDictItem(sysDictItem);
}
}

View File

@@ -21,6 +21,7 @@ import antlr.StringUtils;
import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page;
import com.nis.domain.basics.AsnIpCfg;
import com.nis.domain.configuration.AppPolicyCfg;
import com.nis.domain.configuration.AvFileSampleCfg;
import com.nis.domain.configuration.BaseCfg;
@@ -176,6 +177,7 @@ public class ConfigSynchronizationService extends BaseService{
List<IpPortCfg> ipList = new ArrayList();
List<AsnIpCfg> asnIpList = new ArrayList();
List<BaseStringCfg> strList = new ArrayList();
List<ComplexkeywordCfg> complexStrList = new ArrayList();
List<com.nis.domain.configuration.NumBoundaryCfg> numList = new ArrayList();
@@ -183,15 +185,19 @@ public class ConfigSynchronizationService extends BaseService{
maatBean = new ToMaatBean();
configCompileList = new ArrayList();
List<Integer> compileIds = new ArrayList();
List<String> asnGroupIds = new ArrayList();
for(CfgIndexInfo cfg:list){
compileIds.add(cfg.getCompileId());
if(entity.getServiceId().equals(37)||entity.getServiceId().equals(149)){
asnGroupIds.add(cfg.getUserRegion4());
}
}
if(cfgList!=null){
for(Map<String,Object> m:cfgList){
String tableName = m.get("tableName").toString();
if("1".equals(m.get("cfgType"))){
if(tableName.equals("asn_ip_cfg")){
asnIpList.addAll(configSynchronizationDao.getAsnIpList(asnGroupIds));
}else{
ipList.addAll(configSynchronizationDao.getIpPortList(tableName, compileIds));
}
@@ -215,7 +221,7 @@ public class ConfigSynchronizationService extends BaseService{
numRegionList = new ArrayList();
digestRegionList = new ArrayList();
areaIpRegionList = new ArrayList();
List<IpPortCfg> list1 = new ArrayList();
List list1 = new ArrayList();
List<BaseStringCfg> list2 = new ArrayList();
List<ComplexkeywordCfg> list3 = new ArrayList();
List<com.nis.domain.configuration.NumBoundaryCfg> list4 = new ArrayList();
@@ -268,6 +274,11 @@ public class ConfigSynchronizationService extends BaseService{
list1.add(ip);
}
}
for(AsnIpCfg ip:asnIpList){
if(ip.getAsnIpGroup().toString().equals(cfg.getUserRegion4())){//根据组号对应
list1.add(ip);
}
}
for(BaseStringCfg str:strList){
if(str.getCompileId().equals(cfg.getCompileId())){
list2.add(str);
@@ -307,11 +318,15 @@ public class ConfigSynchronizationService extends BaseService{
}
if(list1.size()>0){
ipList.removeAll(list1);
Map<String,List> map = cfgConvert(ipRegionList,list1,1,cfg,groupRelationList);
groupRelationList=map.get("groupList");
ipRegionList=map.get("dstList");
if(map.get("numRegionList")!=null){
numRegionList.addAll(map.get("numRegionList"));
if(entity.getServiceId().equals(37)||entity.getServiceId().equals(149)){//asn业务
ipRegionList.addAll(groupReuseCfgAddRemoveConvert(list1,Constants.VALID_YES,null));
}else{
Map<String,List> map = cfgConvert(ipRegionList,list1,1,cfg,groupRelationList);
groupRelationList=map.get("groupList");
ipRegionList=map.get("dstList");
if(map.get("numRegionList")!=null){
numRegionList.addAll(map.get("numRegionList"));
}
}
}
if(list2.size()>0){
@@ -367,7 +382,7 @@ public class ConfigSynchronizationService extends BaseService{
maatBean.setOpAction(Constants.INSERT_ACTION);
String json=gsonToJson(maatBean);
//调用服务接口配置全量更新
ToMaatResult result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED"));
JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED"));
}
return hasData;
}
@@ -518,7 +533,7 @@ public class ConfigSynchronizationService extends BaseService{
maatBean.setOpAction(Constants.INSERT_ACTION);
String json=gsonToJson(maatBean);
//调用服务接口配置全量更新
ToMaatResult result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED"));
JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(hasData?null:"FINISHED"));
}
return hasData;
}
@@ -640,7 +655,7 @@ public class ConfigSynchronizationService extends BaseService{
String json=gsonToJson(newList);
logger.info("回调类配置同步:"+json);
//调用服务接口同步回调类配置
ToMaatResult result = ConfigServiceUtil.configSync(json,2,entity.getServiceId(),entity.getTableName(),(hasData?null:"FINISHED"));
JSONObject result = ConfigServiceUtil.configSync(json,2,entity.getServiceId(),entity.getTableName(),(hasData?null:"FINISHED"));
// logger.info("回调类配置同步:"+result.getMsg());
return hasData;