1、成员变量多线程安全优化
2、增加重心计算参考点的时间有效期判断
This commit is contained in:
parent
875d0dd423
commit
7854b5f45c
@ -3,6 +3,7 @@ package com.imdroid.sideslope.bd;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@ -24,6 +25,7 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
double pointSelectedRate = 0.5;
|
||||
double iterStep = 1;//mm
|
||||
double[] referPoint; //参考点,一般是上一次计算的位置,用来辅助计算重心
|
||||
LocalDateTime referPointTime;
|
||||
|
||||
// 惯导算法相关
|
||||
final List<Tilt> tilts = Collections.synchronizedList(new ArrayList<>());
|
||||
@ -34,11 +36,11 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
final double shockThreshold = 1.5;
|
||||
|
||||
//其他
|
||||
int delay_ms = 0;
|
||||
int delay_counter = 0;
|
||||
int counterNoB562 = 0;
|
||||
int counterNoFixed = 0;
|
||||
int counterFixedResult = 0;
|
||||
int delay_ms;
|
||||
int delay_counter;
|
||||
int counterNoB562;
|
||||
int counterNoFixed;
|
||||
int counterFixedResult;
|
||||
|
||||
/*public FocusCalculator1(double height, Tilt tilt0, double[] position0){
|
||||
this.height = height;
|
||||
@ -54,6 +56,8 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
counterNoB562 = 0;
|
||||
counterNoFixed = 0;
|
||||
counterFixedResult = 0;
|
||||
delay_ms = 0;
|
||||
delay_counter = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -63,6 +67,8 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
counterNoB562 = 0;
|
||||
counterNoFixed = 0;
|
||||
counterFixedResult = 0;
|
||||
delay_ms = 0;
|
||||
delay_counter = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,9 +108,15 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
@Override
|
||||
public void setReferPoint(double[] point){
|
||||
referPoint = point;
|
||||
referPointTime = LocalDateTime.now();
|
||||
}
|
||||
@Override
|
||||
public double[] getReferPoint(){
|
||||
if(referPoint==null || referPointTime==null) return null;
|
||||
|
||||
if(LocalDateTime.now().isAfter(referPointTime.plusHours(24))) {
|
||||
referPoint = null;
|
||||
}
|
||||
return referPoint;
|
||||
}
|
||||
@Override
|
||||
@ -368,7 +380,8 @@ public class FocusCalculator1 implements FocusCalculator{
|
||||
}
|
||||
@Override
|
||||
public int getAvgDelayMs(){
|
||||
return delay_ms/delay_counter;
|
||||
if(delay_counter==0) return -1;
|
||||
else return delay_ms/delay_counter;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -148,7 +148,8 @@ public class FocusCalculator2 extends FocusCalculator1{
|
||||
public void setReferPoint(double[] point){
|
||||
if(referPointFilteredFlag){
|
||||
// 初始参考位置保持24小时
|
||||
if(initReferPointTime!=null && LocalDateTime.now().isAfter(initReferPointTime.plusHours(1))){
|
||||
if(initReferPointTime!=null &&
|
||||
LocalDateTime.now().isAfter(initReferPointTime.plusHours(24))){
|
||||
referPoint = point;
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class MultiLineGNSSCalcService {
|
||||
GnssGroupCalcMapper groupCalcMapper;
|
||||
List<GnssGroupCalc> groupCalcList;
|
||||
|
||||
GnssGroupCalc getGroupCalc(int groupId){
|
||||
synchronized GnssGroupCalc getGroupCalc(int groupId){
|
||||
if(groupCalcList == null){
|
||||
groupCalcList = groupCalcMapper.selectList(null);
|
||||
}
|
||||
@ -187,6 +187,7 @@ public class MultiLineGNSSCalcService {
|
||||
}
|
||||
|
||||
public void refreshGroupCalc(){
|
||||
if(groupCalcList!=null) groupCalcList.clear();
|
||||
groupCalcList = groupCalcMapper.selectList(null);
|
||||
logger.info("group paras changed");
|
||||
}
|
||||
|
||||
@ -44,9 +44,11 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
||||
|
||||
@Autowired
|
||||
GnssGroupCalcMapper groupCalcMapper;
|
||||
|
||||
// 非线程安全,需加同步保护
|
||||
List<GnssGroupCalc> groupCalcList;
|
||||
|
||||
GnssGroupCalc getGroupCalc(int groupId){
|
||||
synchronized GnssGroupCalc getGroupCalc(int groupId){
|
||||
if(groupCalcList == null){
|
||||
groupCalcList = groupCalcMapper.selectList(null);
|
||||
}
|
||||
@ -58,6 +60,13 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
||||
return null;
|
||||
}
|
||||
|
||||
/***
|
||||
* 处理本轮的固定解,求出重心位置。多线程调用,访问成员变量要考虑多线程安全
|
||||
* @param message d341报文
|
||||
* @param completeWhenIdle 是否根据空闲时间判断本轮结束。是则启动30s定时器;否则需显示调用SingleDone函数
|
||||
* @return
|
||||
*/
|
||||
|
||||
@Override
|
||||
public double[] calcSingle(D341LocationMessage message, boolean completeWhenIdle) {
|
||||
String deviceId = message.getId();
|
||||
@ -229,7 +238,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
|
||||
}
|
||||
|
||||
public void refreshGroupCalc(){
|
||||
groupCalcList.clear();
|
||||
if(groupCalcList!=null) groupCalcList.clear();
|
||||
groupCalcList = groupCalcMapper.selectList(null);
|
||||
calculatorMap.clear();
|
||||
logger.info("group paras changed");
|
||||
|
||||
@ -9,9 +9,9 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Service
|
||||
public class WarningServiceImpl implements WarningService {
|
||||
@ -23,7 +23,7 @@ public class WarningServiceImpl implements WarningService {
|
||||
GnssStatusMapper gnssStatusMapper;
|
||||
|
||||
// warning type <-> level & value
|
||||
Map<Integer, int[]> cfgMap = new HashMap<>();
|
||||
Map<Integer, int[]> cfgMap = new ConcurrentHashMap<>();
|
||||
int warningLevel2Code = 0;
|
||||
|
||||
@PostConstruct
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user