Commit 4755f9fe authored by 张展弋's avatar 张展弋

完成“换流站系统风险区域数据同步至仓库货位”基本同步功能。

parent 5578c503
package com.yeejoin.amos.fas.business.controller;
import java.util.HashMap;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.yeejoin.amos.fas.business.param.CommonPageInfoParam;
import com.yeejoin.amos.fas.business.param.RiskFmeaParam;
import com.yeejoin.amos.fas.business.service.intfc.IFmeaService;
......@@ -15,18 +31,10 @@ import com.yeejoin.amos.fas.core.util.CommonResponseUtil;
import com.yeejoin.amos.fas.dao.entity.Fmea;
import com.yeejoin.amos.fas.dao.entity.RiskSource;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
@RestController
@RequestMapping("/api/riskModel")
......@@ -71,6 +79,20 @@ public class RiskModelController extends BaseController {
if (type.equals(2) && isRegion.equals("TRUE")) {
return CommonResponseUtil.failure("该区域下只能添加风险点");
}
Long id = param.getId();
if (id == 0) {//新增
} else {
// 更新的话,就放到前面,更新失败直接阻止本地
// 如果对于新增修改有什么约束,请添加到远程同步之前
String synMsg = riskSourceService.saveToEquipManage(getAppKey(), getProduct(), getToken(), SUCCESS,
param.getId(), param.getCode(), param.getName(), param.getParentId());
if (synMsg != null) {
return CommonResponseUtil.failure(synMsg);
}
}
AgencyUserModel user = getUserInfo();
ReginParams reginParams =getSelectedOrgInfo();
String compCode=getOrgCode(reginParams);
......@@ -78,13 +100,27 @@ public class RiskModelController extends BaseController {
map.put("org_code", compCode);
map.put("user_id", user.getUserId());
map.put("param", param);
return CommonResponseUtil.success(riskSourceService.editRiskSource(map));
CommonResponse cr = CommonResponseUtil.success(riskSourceService.editRiskSource(map));
if (id == 0) {//新增 新增的话,只能放到本地之后,因为必须拿到新增之后的ID才行
// 如果对于新增修改有什么约束,请添加到远程同步之前
String synMsg = riskSourceService.saveToEquipManage(getAppKey(), getProduct(), getToken(), SUCCESS,
param.getId(), param.getCode(), param.getName(), param.getParentId());
if (synMsg != null) {
//远程新增失败,就把本地删了,有点绕,但是没办法
//由于是刚刚新建的,就直接删除,不做任何不能删校验。
riskSourceService.deleteById(param.getId());
return CommonResponseUtil.failure(synMsg);
}
}
return cr;
} catch (Exception e) {
log.error(e.getMessage(), e);
return CommonResponseUtil.failure("风险模型新增及维护失败:" + e.getMessage());
}
}
/**
* 风险模型删除
*/
......@@ -93,7 +129,7 @@ public class RiskModelController extends BaseController {
@RequestMapping(value = "/riskSource/deleteRiskSource", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
public CommonResponse deleteRiskSource(@ApiParam(value = "风险模型id", required = true) @RequestBody Long[] riskSourceId) {
try {
riskSourceService.deleteRiskSource(riskSourceId);
riskSourceService.deleteRiskSource(getAppKey(), getProduct(), getToken(), SUCCESS, riskSourceId);
return CommonResponseUtil.success();
} catch (Exception e) {
log.error(e.getMessage(), e);
......
package com.yeejoin.amos.fas.business.feign;
import com.yeejoin.amos.fas.core.util.CommonResponse;
public class EquipManageFeignFallback implements IEquipManageFeign{
@Override
public CommonResponse saveWarehouse(String appKey, String product, String token, String param) {
return null;
}
@Override
public CommonResponse delWarehouse(String appKey, String product, String token, String param) {
return null;
}
}
package com.yeejoin.amos.fas.business.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.yeejoin.amos.fas.core.util.CommonResponse;
@FeignClient(name="${equipManage.fegin.name}", fallback=MassVisualFallback.class, configuration=FeignConfiguration.class)
public interface IEquipManageFeign {
/**
*
* 远程保存仓库,如果id存在就更新,不存在就新增。
*
* @param appKey
* @param product
* @param token
* @param param
* @return CommonResponse
* @throws <br>
* @author 张展弋
* @date 2020-9-8 15:15:18
*/
@RequestMapping(value = "/equip/warehouse/saveAutoSysSyn", method = RequestMethod.POST,consumes = "application/json")
public CommonResponse saveWarehouse(
@RequestHeader(name="appKey",required = true) String appKey,
@RequestHeader(name="product",required = true) String product,
@RequestHeader(name="token",required = true) String token,
@RequestBody String param);
/**
*
* 远程删除仓库
*
* @param appKey
* @param product
* @param token
* @param riskSourceId 网络传输不支持long这边传string那边long接
* @return CommonResponse
* @throws <br>
* @author 张展弋
* @date 2020-9-8 17:43:11
*/
@RequestMapping(value = "/equip/warehouse/deleteAutoSysSyn", method = RequestMethod.POST,consumes = "application/json")
public CommonResponse delWarehouse(
@RequestHeader(name="appKey",required = true) String appKey,
@RequestHeader(name="product",required = true) String product,
@RequestHeader(name="token",required = true) String token,
@RequestBody String riskSourceId);
}
package com.yeejoin.amos.fas.business.service.impl;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.component.cache.enumeration.CacheType;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -8,12 +49,33 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.yeejoin.amos.component.rule.RuleTrigger;
import com.yeejoin.amos.fas.business.bo.*;
import com.yeejoin.amos.fas.business.bo.BindRegionBo;
import com.yeejoin.amos.fas.business.bo.JpushMsgBo;
import com.yeejoin.amos.fas.business.bo.JpushMsgContentBo;
import com.yeejoin.amos.fas.business.bo.MsgParamBo;
import com.yeejoin.amos.fas.business.bo.RpnCalculationBo;
import com.yeejoin.amos.fas.business.constants.FasConstant;
import com.yeejoin.amos.fas.business.dao.mapper.*;
import com.yeejoin.amos.fas.business.dao.mapper.FireEquipMapper;
import com.yeejoin.amos.fas.business.dao.mapper.FireEquipPointMapper;
import com.yeejoin.amos.fas.business.dao.mapper.FmeaEquipmentPointMapper;
import com.yeejoin.amos.fas.business.dao.mapper.FmeaMapper;
import com.yeejoin.amos.fas.business.dao.mapper.FmeaPointInputitemMapper;
import com.yeejoin.amos.fas.business.dao.mapper.ImpAndFireEquipMapper;
import com.yeejoin.amos.fas.business.dao.mapper.RiskSourceMapper;
import com.yeejoin.amos.fas.business.dao.mongo.EquipCommunicationDao;
import com.yeejoin.amos.fas.business.dao.repository.*;
import com.yeejoin.amos.fas.business.feign.RemoteRuleServer;
import com.yeejoin.amos.fas.business.dao.repository.IAlarmDao;
import com.yeejoin.amos.fas.business.dao.repository.IContingencyOriginalDataDao;
import com.yeejoin.amos.fas.business.dao.repository.IDictDao;
import com.yeejoin.amos.fas.business.dao.repository.IEvaluationModelDao;
import com.yeejoin.amos.fas.business.dao.repository.IFireEquipmentDao;
import com.yeejoin.amos.fas.business.dao.repository.IFireEquipmentDataDao;
import com.yeejoin.amos.fas.business.dao.repository.IFireEquipmentPointDao;
import com.yeejoin.amos.fas.business.dao.repository.IPreplanPictureDao;
import com.yeejoin.amos.fas.business.dao.repository.IRiskFactorDao;
import com.yeejoin.amos.fas.business.dao.repository.IRiskLevelDao;
import com.yeejoin.amos.fas.business.dao.repository.IRiskSourceDao;
import com.yeejoin.amos.fas.business.dao.repository.IRpnChangeLogDao;
import com.yeejoin.amos.fas.business.feign.IEquipManageFeign;
import com.yeejoin.amos.fas.business.feign.RemoteSecurityService;
import com.yeejoin.amos.fas.business.feign.RemoteWebSocketServer;
import com.yeejoin.amos.fas.business.jpush.AppMessagePushService;
......@@ -25,8 +87,17 @@ import com.yeejoin.amos.fas.business.param.FmeaBindParam;
import com.yeejoin.amos.fas.business.service.intfc.IDataRefreshService;
import com.yeejoin.amos.fas.business.service.intfc.IEquipmentService;
import com.yeejoin.amos.fas.business.service.intfc.IRiskSourceService;
import com.yeejoin.amos.fas.business.service.model.*;
import com.yeejoin.amos.fas.business.util.*;
import com.yeejoin.amos.fas.business.service.model.CheckInputItemRo;
import com.yeejoin.amos.fas.business.service.model.ContingencyDeviceStatus;
import com.yeejoin.amos.fas.business.service.model.ContingencyRo;
import com.yeejoin.amos.fas.business.service.model.FireEquimentDataRo;
import com.yeejoin.amos.fas.business.service.model.ProtalDataRo;
import com.yeejoin.amos.fas.business.service.model.RiskSourceRuleRo;
import com.yeejoin.amos.fas.business.util.CacheFactory;
import com.yeejoin.amos.fas.business.util.CacheMap;
import com.yeejoin.amos.fas.business.util.DateUtils;
import com.yeejoin.amos.fas.business.util.JexlUtil;
import com.yeejoin.amos.fas.business.util.RpnUtils;
import com.yeejoin.amos.fas.business.vo.EquipCommunicationData;
import com.yeejoin.amos.fas.business.vo.Toke;
import com.yeejoin.amos.fas.client.invoke.RsDataQueue;
......@@ -36,35 +107,26 @@ import com.yeejoin.amos.fas.common.enums.View3dRefreshAreaEum;
import com.yeejoin.amos.fas.core.common.request.CommonPageable;
import com.yeejoin.amos.fas.core.common.response.RegionTreeResponse;
import com.yeejoin.amos.fas.core.common.response.RiskSourceTreeResponse;
import com.yeejoin.amos.fas.core.util.CommonResponse;
import com.yeejoin.amos.fas.core.util.StringUtil;
import com.yeejoin.amos.fas.dao.entity.*;
import com.yeejoin.amos.fas.dao.entity.Alarm;
import com.yeejoin.amos.fas.dao.entity.ContingencyOriginalData;
import com.yeejoin.amos.fas.dao.entity.Dict;
import com.yeejoin.amos.fas.dao.entity.Equipment;
import com.yeejoin.amos.fas.dao.entity.EvaluationModel;
import com.yeejoin.amos.fas.dao.entity.FireEquipment;
import com.yeejoin.amos.fas.dao.entity.FireEquipmentData;
import com.yeejoin.amos.fas.dao.entity.FireEquipmentPoint;
import com.yeejoin.amos.fas.dao.entity.Fmea;
import com.yeejoin.amos.fas.dao.entity.FmeaEquipmentPoint;
import com.yeejoin.amos.fas.dao.entity.FmeaPointInputitem;
import com.yeejoin.amos.fas.dao.entity.PreplanPicture;
import com.yeejoin.amos.fas.dao.entity.RiskFactor;
import com.yeejoin.amos.fas.dao.entity.RiskLevel;
import com.yeejoin.amos.fas.dao.entity.RiskSource;
import com.yeejoin.amos.fas.dao.entity.RpnChangeLog;
import com.yeejoin.amos.fas.exception.YeeException;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.component.cache.Redis;
import org.typroject.tyboot.component.cache.enumeration.CacheType;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@Service("riskSourceService")
public class RiskSourceServiceImpl implements IRiskSourceService {
......@@ -122,7 +184,6 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
@Autowired
private IRiskLevelDao iRiskLevelDao;
@Autowired
private RemoteSecurityService remoteSecurityService;
......@@ -139,9 +200,6 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
IFireEquipmentDataDao iFireEquipmentDataDao;
@Autowired
private RemoteRuleServer remoteRuleServer;
@Autowired
private RemoteWebSocketServer remoteWebSocketServer;
@Autowired
......@@ -152,6 +210,7 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
@Autowired
private IDictDao dictDao;
@Autowired
private RedisTemplate redisTemplate;
......@@ -170,6 +229,9 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
@Autowired
private IRiskFactorDao iRiskFactorDao;
@Autowired
private IEquipManageFeign equipManageFeign;
public static String cacheKeyForCanBeRunning() {
return Redis.genKey(CacheType.ERASABLE.name(), "CONTINGENCYRUNING");
}
......@@ -206,9 +268,57 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
return riskSource;
}
@Value("${equipManage.fegin.isSyn:false}")
private boolean isSyn;
@Override
public void deleteRiskSource(Long[] riskSourceId) throws Exception {
public boolean isSynEquipManage() {
return isSyn;
}
/**
*
* 风险模型新增及维护时远程同步
*
* @param id
* @param code
* @param name
* @param parentId
* @return CommonResponse
* @throws <br>
* @author 张展弋
* @date 2020-9-8 15:39:20
*/
public String saveToEquipManage(String appKey,String product,String token,String success,long id, String code, String name, Long parentId) {
if(!isSynEquipManage()) {
return null;
}
JSONObject js = new JSONObject();
js.put("sourceId", id);
js.put("name", name);
js.put("sourceCode", code);
// 这里的parentId和那边系统的不是一回事,这里只是借用传输
js.put("id", parentId);
CommonResponse cr = null;
try {
// 父节点id为0表示根节点,对应那边的仓库
cr = equipManageFeign.saveWarehouse(appKey, product, token, js.toString());
} catch (Exception e) {
e.printStackTrace();
}
if (cr == null) {
return "远程调用同步失败,请检查远程系统后重试!";
}
if (!success.equals(cr.getResult())) {
return "远程同步失败,请检查远程系统后重试!附加消息:" + cr.getMessage();
}
return null;
}
@Override
public void deleteRiskSource(String appKey,String product,String token,String success,Long[] riskSourceId) throws Exception {
Set<Long> parentIds = new LinkedHashSet<>();
String synMsg = null;
for (Long rId : riskSourceId) {
int count = iRiskSourceDao.countByParentId(rId);
Optional<RiskSource> rs = iRiskSourceDao.findById(rId);
......@@ -219,6 +329,10 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
if (count > 0) {
throw new YeeException("该数据有关联子项,请先删除子项数据");
}
synMsg = deleteToEquipManage(appKey, product, token, success, rId);
if(synMsg !=null) {
throw new YeeException("远程删除失败,附加消息:" + synMsg);
}
iRiskSourceDao.deleteById(rId);
}
//1.重新计算rpn
......@@ -229,6 +343,43 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
existIds.forEach(rs::addRiskSourcePointDeleteMessage);
}
public void deleteById(Long id) {
iRiskSourceDao.deleteById(id);
}
/**
*
* 风险模型删除时远程同步
*
* @param appKey
* @param product
* @param token
* @param failed
* @param rId
* @return String
* @throws <br>
* @author 张展弋
* @date 2020-9-8 17:54:12
*/
private String deleteToEquipManage(String appKey,String product,String token,String success,Long rId) {
if(!isSynEquipManage()) {
return null;
}
CommonResponse cr = null;
try {
// 父节点id为0表示根节点,对应那边的仓库
cr = equipManageFeign.delWarehouse(appKey, product, token, rId.toString());
} catch (Exception e) {
e.printStackTrace();
}
if (cr == null) {
return "远程调用同步失败,请检查远程系统后重试!";
}
if (!success.equals(cr.getResult())) {
return "远程同步失败,请检查远程系统后重试!附加消息:" + cr.getMessage();
}
return null;
}
@Override
public Page<HashMap<String, Object>> queryRiskSourceByPage(CommonPageInfoParam param) {
long total = riskSourceMapper.countPageData(param);
......@@ -1586,6 +1737,5 @@ public class RiskSourceServiceImpl implements IRiskSourceService {
}
return null;
}
}
package com.yeejoin.amos.fas.business.service.intfc;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.data.domain.Page;
import com.yeejoin.amos.fas.business.bo.BindRegionBo;
import com.yeejoin.amos.fas.business.bo.JpushMsgBo;
import com.yeejoin.amos.fas.business.param.AlarmParam;
......@@ -11,15 +17,10 @@ import com.yeejoin.amos.fas.business.service.model.ProtalDataRo;
import com.yeejoin.amos.fas.core.common.request.CommonPageable;
import com.yeejoin.amos.fas.core.common.response.RegionTreeResponse;
import com.yeejoin.amos.fas.core.common.response.RiskSourceTreeResponse;
import com.yeejoin.amos.fas.core.util.CommonResponse;
import com.yeejoin.amos.fas.dao.entity.FmeaEquipmentPoint;
import com.yeejoin.amos.fas.dao.entity.FmeaPointInputitem;
import com.yeejoin.amos.fas.dao.entity.RiskSource;
import org.springframework.data.domain.Page;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface IRiskSourceService {
......@@ -29,9 +30,38 @@ public interface IRiskSourceService {
RiskSource editRiskSource(HashMap<String, Object> map) throws Exception;
/**
* 风险模型新增及维护时远程同步
*
* @param appKey
* @param product
* @param token
* @param failed contoler中的系统通用failed标识和这里返回前台的不一样。
* @param id
* @param code
* @param name
* @param parentId
* @return CommonResponse
* @throws <br>
* @author 张展弋
* @date 2020-9-8 17:39:32
*/
public String saveToEquipManage(String appKey, String product, String token, String success, long id,
String code, String name, Long parentId);
/**
*
* 是否同步到对站系统
*
* @return boolean
* @throws <br>
* @author 张展弋
* @date 2020-9-8 15:45:34
*/
boolean isSynEquipManage();
/**
* 删除风险点
*/
void deleteRiskSource(Long[] riskSourceId) throws Exception;
void deleteRiskSource(String appKey,String product,String token,String failed,Long[] riskSourceId) throws Exception;
/**
* 根据参数分页查询风险点信息
......@@ -139,4 +169,15 @@ public interface IRiskSourceService {
void notifyFmeaFromDelete(Long handId, String from);
void notifyRiskSourceDelete(Long handId);
/**
*
* 不做任何不能删校验,直接删除,慎用
*
* @param id void
* @throws <br>
* @author 张展弋
* @date 2020-9-9 11:53:36
*/
void deleteById(Long id);
}
spring.application.name = AMOS-AUTOSYS
spring.application.name = AMOS-AUTOSYS-ZZY
server.port = 8083
......@@ -47,6 +47,10 @@ spring.servlet.multipart.max-request-size=20MB
#feginName
visual.fegin.name=maas-visual
dutyMode.fegin.name=AMOSDUTYMODE
#队站装备管理名称,主要用于风险区域同步至仓库货位
equipManage.fegin.name=AMOS-EQUIPMANAGE-ZZY
#是否开启将风险区域同步至仓库货位true开启,false关闭。默认关闭。
equipManage.fegin.isSyn=false
spring.http.multipart.maxFileSize = 10480000
spring.http.multipart.MaxRequestSize = 50480000
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment