package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.whyc.dto.A200ResDto;
|
import com.whyc.dto.Response;
|
import com.whyc.dto.ResultA200Dto;
|
import com.whyc.factory.ThreadPoolExecutorFactory;
|
import com.whyc.mapper.DevA200TestparamMapper;
|
import com.whyc.mapper.DevInfMapper;
|
import com.whyc.pojo.db_lithium_ram_db.DevA200Testparam;
|
import com.whyc.pojo.db_lithium_ram_db.DevInf;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.JsonUtil;
|
import com.whyc.util.TestparamHttpUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestClientException;
|
import org.springframework.web.client.RestTemplate;
|
|
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;
|
|
@Service
|
public class DevA200TestparamService {
|
@Autowired(required = false)
|
private DevA200TestparamMapper mapper;
|
|
@Autowired(required = false)
|
private DevInfMapper dinfMapper;
|
|
private final RestTemplate restTemplate;
|
|
@Autowired
|
public DevA200TestparamService(RestTemplate restTemplate) {
|
this.restTemplate = restTemplate;
|
}
|
//批量处理发送接口请求
|
public ResultA200Dto getA200Dto(String url){
|
ResultA200Dto dto= null;
|
String results =null;
|
try {
|
results = restTemplate.postForObject(url, null, String.class);
|
} catch (RestClientException e) {
|
results=" {\n" +
|
" \"code\": \"205\",\n" +
|
" \"msg\": \"接口调用出错\",\n" +
|
" \"data\": null,\n" +
|
" \"count\": 0\n" +
|
" }";
|
}finally {
|
dto = ActionUtil.getGson().fromJson(results, ResultA200Dto.class);
|
}
|
return dto;
|
}
|
//读取a200一体机参数
|
public Object getA200Param(int devId) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevInf dinf=dinfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/getTestParameter";
|
ResultA200Dto dto= getA200Dto(url);
|
if(dto.getCode().equals("200")){
|
DevA200Testparam a200Param=new DevA200Testparam();
|
copyA200DTO(dto.getData(),a200Param);
|
a200Param.setDevId(devId);
|
a200Param.setReturnCode(Integer.parseInt(dto.getCode()));
|
UpdateWrapper updateWrapper=new UpdateWrapper();
|
updateWrapper.eq("dev_id",devId);
|
mapper.update(a200Param,updateWrapper);
|
}
|
return dto;
|
}
|
|
|
//设置a200一体机参数
|
public Object setA200Param(A200ResDto param) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",param.getDevId());
|
wrapper.last("limit 1");
|
DevInf dinf=dinfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/setTestParameter";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
//param转json字符串
|
String paramJson = JsonUtil.getGson().toJson(param);
|
paramMap.add("testParameter",paramJson);
|
ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap);
|
return dto;
|
}
|
|
//批量设置a200一体机参数
|
public Object setA200ParamPl2(A200ResDto param) {
|
Map<Integer,Object> map=new HashMap<>();
|
int size=param.getDevIds().size();
|
try {
|
ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(size);
|
for (int i=0;i<size;i++) {
|
int finaldevId=param.getDevIds().get(i);
|
poolExecutor.execute(() -> {
|
int finalIIdevId=finaldevId;
|
param.setDevId(finalIIdevId);
|
ResultA200Dto dto= (ResultA200Dto) setA200Param(param);
|
map.put(finalIIdevId,dto);
|
latch.countDown();
|
});
|
}
|
latch.await(4, TimeUnit.MINUTES);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
return new Response().setII(1,true,map,"批量设置a200一体机参数");
|
}
|
//批量设置a200一体机参数
|
public Object setA200ParamPl(A200ResDto param) {
|
Map<Integer,Object> map=new HashMap<>();
|
int size=param.getDevIds().size();
|
for (int i=0;i<size;i++) {
|
int finaldevId=param.getDevIds().get(i);
|
param.setDevId(finaldevId);
|
ResultA200Dto dto= (ResultA200Dto) setA200Param(param);
|
map.put(finaldevId,dto);
|
}
|
return new Response().setII(1,true,map,"批量设置a200一体机参数");
|
}
|
|
//启动a200一体机放电/充电
|
public Object startA200Param(int devId,int type) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevInf dinf=dinfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/startTest";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
paramMap.add("testType",type);//1 放电,2 充电
|
ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap);
|
return dto;
|
}
|
//a200一体机暂停/继续
|
public Object pauseA200Param(int devId, int type) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevInf dinf=dinfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/pauseTest";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
paramMap.add("controlType",type);//1 暂停测试 ,2继续测试
|
ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap);
|
return dto;
|
}
|
//停止a200一体机放电/充电
|
public Object stopA200Param(int devId) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevInf dinf=dinfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/stopTest";
|
ResultA200Dto dto= getA200Dto(url);
|
return dto;
|
}
|
|
//批量启动a200一体机
|
public Response startA200ParamPl2(List<Integer> devIds,int type) {
|
Map<Integer,Object> map=new HashMap<>();
|
try {
|
ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(devIds.size());
|
for (int devId:devIds) {
|
poolExecutor.execute(() -> {
|
ResultA200Dto dto= (ResultA200Dto) startA200Param(devId,type);
|
map.put(devId,dto);
|
latch.countDown();
|
});
|
}
|
latch.await(10, TimeUnit.MINUTES);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
return new Response().set(1,true,"批量控制a200一体机");
|
}
|
|
//批量启动a200一体机
|
public Response startA200ParamPl(List<Integer> devIds,int type) {
|
Map<Integer,Object> map=new HashMap<>();
|
for (int devId:devIds) {
|
ResultA200Dto dto= (ResultA200Dto) startA200Param(devId,type);
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.set("batch_state",1);
|
dinfMapper.update(null,wrapper);
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量控制a200一体机");
|
}
|
|
//批量停止a200一体机
|
public Response stopA200ParamPl2(List<Integer> devIds) {
|
Map<Integer,Object> map=new HashMap<>();
|
try {
|
ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(devIds.size());
|
for (int devId:devIds) {
|
poolExecutor.execute(() -> {
|
ResultA200Dto dto= (ResultA200Dto) stopA200Param(devId);
|
map.put(devId,dto);
|
latch.countDown();
|
});
|
}
|
latch.await(10, TimeUnit.MINUTES);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
return new Response().set(1,true,"批量停止a200一体机");
|
}
|
//批量停止a200一体机
|
public Response stopA200ParamPl(List<Integer> devIds) {
|
Map<Integer,Object> map=new HashMap<>();
|
for (int devId:devIds) {
|
ResultA200Dto dto= (ResultA200Dto) stopA200Param(devId);
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量停止a200一体机");
|
}
|
|
//批量暂停/继续启动a200一体机
|
public Response pauseA200ParamPl(List<Integer> devIds,int type) {
|
Map<Integer,Object> map=new HashMap<>();
|
for (int devId:devIds) {
|
ResultA200Dto dto= (ResultA200Dto) pauseA200Param(devId,type);
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.set("batch_state",1);
|
dinfMapper.update(null,wrapper);
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量控制a200一体机");
|
}
|
|
//将dto拷贝至param
|
private void copyA200DTO(Object data, DevA200Testparam a200Param) {
|
A200ResDto dto= (A200ResDto) data;
|
a200Param.setBatteryName(dto.getBatteryName());
|
a200Param.setNominalCapacity(dto.getNominalCapacity());
|
a200Param.setBatteryType(dto.getBatteryType());
|
a200Param.setBatteryNumber(dto.getBatteryNumber());
|
a200Param.setDiffBatteryVoltage(dto.getDiffBatteryVoltage());
|
a200Param.setDischargeCurrent(dto.getDischargeCurrent());
|
a200Param.setDischargeVoltage(dto.getDischargeVoltage());
|
a200Param.setDischargeTime(dto.getDischargeTime());
|
a200Param.setDischargeCapacity(dto.getDischargeCapacity());
|
if(dto.getIsDischargeCapacityEnable()){
|
a200Param.setIsDischargeCapacityEnable(1);
|
}else{
|
a200Param.setIsDischargeCapacityEnable(0);
|
}
|
a200Param.setMinBatteryVoltage(dto.getMinBatteryVoltage());
|
if(dto.getIsMinBatteryVoltageEnable()){
|
a200Param.setIsMinBatteryVoltageEnable(1);
|
}else{
|
a200Param.setIsMinBatteryVoltageEnable(0);
|
}
|
a200Param.setChargeVoltage(dto.getChargeVoltage());
|
a200Param.setChargeProtectVoltage(dto.getChargeProtectVoltage());
|
a200Param.setChargeCurrent(dto.getChargeCurrent());
|
a200Param.setChargeStopCurrent(dto.getChargeStopCurrent());
|
a200Param.setChargeTime(dto.getChargeTime());
|
a200Param.setChargeCapacity(dto.getChargeCapacity());
|
if(dto.getIsChargeCapacityEnable()){
|
a200Param.setIsChargeCapacityEnable(1);
|
}else{
|
a200Param.setIsChargeCapacityEnable(0);
|
}
|
|
a200Param.setMaxBatteryVoltage(dto.getMaxBatteryVoltage());
|
if(dto.getIsMaxBatteryVoltageEnable()){
|
a200Param.setIsMaxBatteryVoltageEnable(1);
|
}else{
|
a200Param.setIsMaxBatteryVoltageEnable(0);
|
}
|
a200Param.setChargePower(dto.getChargePower());
|
a200Param.setBatteryTemperatureProtect(dto.getBatteryTemperatureProtect());
|
}
|
}
|