package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.whyc.dto.*;
|
import com.whyc.factory.ThreadPoolExecutorFactory;
|
import com.whyc.mapper.DevActmTestParamMapper;
|
import com.whyc.mapper.DevLithiumInfMapper;
|
import com.whyc.pojo.db_lithium_ram_db.DevActmTestParam;
|
import com.whyc.pojo.db_lithium_ram_db.DevLithiumInf;
|
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.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 DevActmTestParamService {
|
@Autowired(required = false)
|
private DevActmTestParamMapper mapper;
|
|
@Autowired(required = false)
|
private DevLithiumInfMapper devLithiumInfMapper;
|
|
private final RestTemplate restTemplate;
|
|
@Autowired
|
public DevActmTestParamService(RestTemplate restTemplate) {
|
this.restTemplate = restTemplate;
|
}
|
|
//读取Actm一体机参数
|
public Object getActmParam(int devId,int index) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/getTestParameter";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
paramMap.add("batteryStorageIndex",index);
|
ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap);
|
if(dto.getCode().equals("200")){
|
DevActmTestParam actmParam=new DevActmTestParam();
|
ResultActmDto ActmDto = (ResultActmDto) dto;
|
copyActmDTO(ActmDto.getData(),actmParam);
|
actmParam.setDevId(devId);
|
UpdateWrapper updateWrapper=new UpdateWrapper();
|
updateWrapper.eq("dev_id",devId);
|
mapper.update(actmParam,updateWrapper);
|
}
|
return dto;
|
}
|
|
|
//设置Actm均衡仪参数
|
public ResultActmBaseDto setActmParam(ActmResDto param) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",param.getDevId());
|
wrapper.last("limit 1");
|
DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/setTestParameter";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
paramMap.add("batteryStorageIndex",param.getBatteryStorageIndex());
|
paramMap.add("moduleCode",param.getModuleCode());
|
paramMap.add("workMode",param.getWorkMode());
|
paramMap.add("batteryType",param.getBatteryType());
|
paramMap.add("batteryNumber",param.getBatteryNumber());
|
paramMap.add("ntcCount",param.getNtcCount());
|
paramMap.add("testBatteryArray",param.getTestBatteryArray());
|
paramMap.add("voltage",param.getVoltage());
|
paramMap.add("current",param.getCurrent());
|
ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap);
|
return dto;
|
}
|
|
//批量设置Actm均衡仪参数
|
public Object setActmParamPl2(ActmResDto param) {
|
Map<Integer,Object> map=new HashMap<>();
|
int size=param.getDevIds().size();
|
try {
|
ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(size);
|
for (Integer devId:param.getDevIds()) {
|
poolExecutor.execute(() -> {
|
param.setDevId(devId);
|
ResultActmBaseDto dto = setActmParam(param);
|
map.put(devId,dto);
|
latch.countDown();
|
});
|
}
|
latch.await(10, TimeUnit.MINUTES);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
return new Response().setII(1,true,map,"批量设置Actm均衡仪参数");
|
}
|
|
//批量设置Actm均衡仪参数
|
public Object setActmParamPl(ActmResDto param) {
|
Map<Integer,Object> map=new HashMap<>();
|
for (Integer devId:param.getDevIds()) {
|
param.setDevId(devId);
|
ResultActmBaseDto dto= setActmParam(param);
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量设置Actm均衡仪参数");
|
}
|
|
|
//启动,暂停,继续,停止actm均衡仪
|
public ResultActmBaseDto controlActmParam(int devId,int index,int type) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.last("limit 1");
|
DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
switch (type){
|
case 1:url=url+"/startTest";break; //启动
|
case 2:url=url+"/pauseTest";break; //暂停
|
case 3:url=url+"/continueTest";break; //继续
|
case 4:url=url+"/stopTest";break; //停止
|
}
|
paramMap.add("batteryStorageIndex",index);
|
ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap);
|
return dto;
|
}
|
|
|
//批量控制Actm均衡仪
|
public Response controlActmParamPl2(List<ActmPlContDto> actmPlContDtos) {
|
Map<Integer,Object> map=new HashMap<>();
|
try {
|
ThreadPoolExecutor poolExecutor = ThreadPoolExecutorFactory.getPoolExecutor();
|
CountDownLatch latch = new CountDownLatch(actmPlContDtos.size());
|
for (ActmPlContDto actmPlContDto:actmPlContDtos) {
|
poolExecutor.execute(() -> {
|
ResultActmBaseDto dto= controlActmParam(actmPlContDto.getDevId(),actmPlContDto.getIndex(),actmPlContDto.getType());
|
map.put(actmPlContDto.getDevId(),dto);
|
latch.countDown();
|
});
|
}
|
latch.await(10, TimeUnit.MINUTES);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
return new Response().set(1,true,"批量设置Actm均衡仪参数");
|
}
|
|
//批量控制Actm均衡仪
|
public Response controlActmParamPl(List<Integer> devIds, int index, int type) {
|
Map<Integer,Object> map=new HashMap<>();
|
for (Integer devId:devIds) {
|
ResultActmBaseDto dto= controlActmParam(devId,index,type);
|
if(type==1){
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.eq("dev_id",devId);
|
wrapper.set("batch_state",1);
|
devLithiumInfMapper.update(null,wrapper);
|
}
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量控制Actm均衡仪");
|
}
|
|
//将dto拷贝至param
|
private void copyActmDTO(Object data, DevActmTestParam actmParam) {
|
ActmResDto dto= (ActmResDto) data;
|
actmParam.setBatteryStorageIndex(dto.getBatteryStorageIndex());
|
actmParam.setModuleCode(dto.getModuleCode());
|
actmParam.setWorkMode(dto.getWorkMode());
|
actmParam.setBatteryType(dto.getBatteryType());
|
actmParam.setBatteryNumber(dto.getBatteryNumber());
|
actmParam.setNtcCount(dto.getNtcCount());
|
actmParam.setTestBatteryArray(dto.getTestBatteryArray());
|
actmParam.setVoltage(dto.getVoltage());
|
actmParam.setCurrent(dto.getCurrent());
|
actmParam.setMaxBatteryNumber(dto.getMaxBatteryNumber());
|
actmParam.setMaxNtcCount(dto.getMaxNtcCount());
|
}
|
//设置电池组数与电池节数
|
public ResultActmBaseDto setActmBatteryStorageNumber(ActmResDto param) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("dev_id",param.getDevId());
|
wrapper.last("limit 1");
|
DevLithiumInf dinf= devLithiumInfMapper.selectOne(wrapper);
|
String url="http://"+dinf.getDevIp()+":8080/webService/setBatteryStorageNumber";
|
//将请求头部和参数合成一个请求
|
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
|
paramMap.add("batteryStorageNumber",param.getBatteryStorageNumber());
|
paramMap.add("batteryNumber",param.getBatteryNumber());
|
ResultActmBaseDto dto= TestParamHttpUtil.postForFormDataActm(restTemplate,url,paramMap);
|
return dto;
|
}
|
//批量设设置电池组数与电池节数
|
public Object setActmBatteryStorageNumberPl(ActmResDto param) {
|
Map<Integer,Object> map=new HashMap<>();
|
int size=param.getDevIds().size();
|
for (Integer devId:param.getDevIds()) {
|
param.setDevId(devId);
|
ResultActmBaseDto dto= setActmBatteryStorageNumber(param);
|
map.put(devId,dto);
|
}
|
return new Response().setII(1,true,map,"批量设设置电池组数与电池节数");
|
}
|
}
|