package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.github.pagehelper.PageHelper;
|
import com.whyc.dto.FBS9100_ComBase;
|
import com.whyc.dto.Response;
|
import com.whyc.factory.ThreadPoolExecutorFactory;
|
import com.whyc.mapper.Fbs9149SetparamMapper;
|
import com.whyc.pojo.Fbs9149Setparam;
|
import com.whyc.util.ActionUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
|
import static java.lang.Thread.sleep;
|
|
@Service
|
public class Fbs9149SetparamService {
|
@Autowired(required = false)
|
private Fbs9149SetparamMapper mapper;
|
|
//并联电源的cmd和ack校验 test_type -->默认启动测试的类型(控制)
|
public boolean sendCmdToFBS9149DevCon(int cmd, int testCmd, int dev_id, int battGroupNum) {
|
int m_cmd = cmd;
|
int m_cmd_ack = cmd;
|
switch (m_cmd) {
|
case FBS9100_ComBase.CMD_Start:
|
m_cmd_ack = FBS9100_ComBase.CMD_StartAck;
|
break;
|
case FBS9100_ComBase.CMD_Stop:
|
m_cmd_ack = FBS9100_ComBase.CMD_StopAck;
|
break;
|
default:
|
return false;
|
}
|
UpdateWrapper updateWrapper = new UpdateWrapper();
|
updateWrapper.set("op_cmd", m_cmd);
|
updateWrapper.set("test_cmd", testCmd);
|
updateWrapper.eq("groupnum", battGroupNum);
|
updateWrapper.eq("dev_id", dev_id);
|
int flag = mapper.update((Fbs9149Setparam) ActionUtil.objeNull, updateWrapper);
|
boolean res_exe = false;
|
if (flag > 0) {
|
PageHelper.startPage(1, 1);
|
QueryWrapper queryWrapper = new QueryWrapper();
|
queryWrapper.eq("dev_id", dev_id);
|
queryWrapper.eq("groupnum", battGroupNum);
|
for (int n = 0; n < 40; n++) {
|
|
Fbs9149Setparam fbs9149Setparam = mapper.selectOne(queryWrapper);
|
if (fbs9149Setparam != null) {
|
if (fbs9149Setparam.getOpCmd() == m_cmd_ack) {
|
res_exe = true;
|
break;
|
}
|
try {
|
Thread.sleep(500);
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
} else {
|
break;
|
}
|
}
|
}
|
return res_exe;
|
}
|
|
//并联电源的cmd和ack校验 test_type -->默认启动测试的类型(读取和设置参数)
|
public boolean sendCmdToFBS9149DevRed(int cmd, int testType, int dev_id) {
|
int m_cmd = cmd;
|
int m_cmd_ack = cmd;
|
switch (m_cmd) {
|
case FBS9100_ComBase.CMD_GetMutilMode_Param:
|
m_cmd_ack = FBS9100_ComBase.CMD_GetMutilMode_Param_Ack;
|
break;
|
case FBS9100_ComBase.CMD_SetMutilMode_Param:
|
m_cmd_ack = FBS9100_ComBase.CMD_SetMutilMode_Param_Ack;
|
break;
|
default:
|
return false;
|
}
|
UpdateWrapper updateWrapper = new UpdateWrapper();
|
updateWrapper.set("op_cmd", m_cmd);
|
//读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
|
updateWrapper.set("paramtype", testType);
|
updateWrapper.eq("dev_id", dev_id);
|
int flag = mapper.update((Fbs9149Setparam) ActionUtil.objeNull, updateWrapper);
|
boolean res_exe = false;
|
if (flag > 0) {
|
PageHelper.startPage(1, 1);
|
QueryWrapper queryWrapper = new QueryWrapper();
|
queryWrapper.eq("dev_id", dev_id);
|
//默认取第一个ack判断
|
queryWrapper.eq("groupnum", 0);
|
for (int n = 0; n < 40; n++) {
|
|
Fbs9149Setparam fbs9149Setparam = mapper.selectOne(queryWrapper);
|
if (fbs9149Setparam != null) {
|
if (fbs9149Setparam.getOpCmd() == m_cmd_ack) {
|
res_exe = true;
|
break;
|
}
|
try {
|
Thread.sleep(500);
|
} catch (InterruptedException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
} else {
|
break;
|
}
|
}
|
}
|
return res_exe;
|
}
|
|
//在线监测-实时监控-读取并联电源9149放电参数
|
public Response searchParalleParam9149(int opCmd, int paramtype, int devId) {
|
try {
|
//读取时命令同步所以只监测第一组的返回ack
|
//读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 paramtype
|
boolean bl = sendCmdToFBS9149DevRed(opCmd, paramtype, devId);
|
QueryWrapper wrapper = new QueryWrapper();
|
wrapper.eq("dev_id", devId);
|
wrapper.orderByAsc("groupnum");
|
List<Fbs9149Setparam> fbs9149Setparams = mapper.selectList(wrapper);
|
return new Response().setII(1, bl, fbs9149Setparams, bl == true ? "读取电源9149参数成功!" : "读取并联电源9149参数失败,请检查网络!");
|
} catch (Exception e) {
|
return new Response().set(1, false, "出现异常" + e);
|
}
|
}
|
|
//在线监测-实时监控-设置并联电源9149放电参数
|
public Response updateParalleParam9149(List<Fbs9149Setparam> list) {
|
try {
|
int opCmd = 0;
|
int paramtype = 0;
|
int devId = 0;
|
if (list != null && list.size() > 0) {
|
Fbs9149Setparam setparam = list.get(0);
|
opCmd = setparam.getOpCmd();
|
paramtype = setparam.getParamtype();
|
devId = setparam.getDevId();
|
}
|
boolean b = mapper.updateList(list);
|
boolean bl = false;
|
if (b) {
|
//设置时命令同步所以只监测第一组的返回ack
|
//设置时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
|
bl = sendCmdToFBS9149DevRed(opCmd, paramtype, devId);
|
}
|
return new Response().set(1, bl, bl == true ? "修改参数成功!" : "设置并联电源参数失败,请检查网络!");
|
} catch (Exception e) {
|
return new Response().set(1, false, "出现异常" + e);
|
}
|
}
|
|
//在线监测-实时监控-控制并联电源9149充放电停止
|
public Response controllerParalle9149(int opCmd, int testCmd, String battGroupNums, int devId) {
|
try {
|
//读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
|
List<String> battGroupNumList = Arrays.asList(battGroupNums.split(","));
|
//多线程
|
ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(battGroupNumList.size());
|
Map<Integer, Boolean> resMap = new HashMap<>();
|
for (int i = 0; i < battGroupNumList.size(); i++) {
|
int finalI = i;
|
pool.execute(() -> {
|
int finalII = finalI;
|
int battGroupNum = Integer.parseInt(battGroupNumList.get(finalII));
|
boolean bl = sendCmdToFBS9149DevCon(opCmd, testCmd, devId, battGroupNum);
|
resMap.put(battGroupNum, bl);
|
latch.countDown();
|
});
|
sleep(200);
|
}
|
latch.await(10, TimeUnit.MINUTES);
|
return new Response().set(1, resMap);
|
} catch (Exception e) {
|
return new Response().set(1, false, "出现异常" + e);
|
}
|
}
|
}
|