whyclxw
2024-09-10 16b7dcef21c106165642e237d2dd823d21c46c96
src/main/java/com/whyc/service/DevA200TestparamService.java
@@ -5,19 +5,28 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.whyc.dto.A200ResDto;
import com.whyc.dto.Response;
import com.whyc.dto.ResultDto;
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.DevActmTestparam;
import com.whyc.pojo.db_lithium_ram_db.DevInf;
import com.whyc.util.ActionUtil;
import com.whyc.util.TestparamHttpUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
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 {
@@ -38,7 +47,7 @@
        DevInf dinf=dinfMapper.selectOne(wrapper);
        String url="http://"+dinf.getDevIp()+":8080/webService/getTestParameter";
        String results = restTemplate.postForObject(url, null, String.class);
        ResultDto dto= ActionUtil.getGson().fromJson(results,ResultDto.class);
        ResultA200Dto dto= ActionUtil.getGson().fromJson(results, ResultA200Dto.class);
        if(dto.getCode().equals("200")){
            DevA200Testparam a200Param=new DevA200Testparam();
            copyA200DTO(dto.getData(),a200Param);
@@ -48,26 +57,147 @@
            updateWrapper.eq("dev_id",devId);
            mapper.update(a200Param,updateWrapper);
        }
        //System.out.println(results);
         /*ResultDto dto= JSONObject.parseObject(results,ResultDto.class);
        A200ResDto a200= JSONObject.parseObject(dto.getData().toString(),A200ResDto.class);*/
        //System.out.println(dto.toString());
        return dto;
    }
    //设置a200均衡仪参数
    public Response setA200Param(DevActmTestparam param) {
        return new Response().set(1,true,"设置a200均衡仪参数");
    //设置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<>();
        String paramJson=JSONObject.toJSONString(param);
        paramMap.add("testParameter",paramJson);
        ResultA200Dto dto= (ResultA200Dto) TestparamHttpUtil.postforform_dataA200(restTemplate,url,paramMap);
        return dto;
    }
    //控制a200均衡仪
    public Response controllA200Param(int devId) {
        return new Response().set(1,true,"控制a200均衡仪");
    //批量设置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 Response controllA200ParamPl(List<Integer> devIds) {
        return new Response().set(1,true,"批量控制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);
        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";
        String results = restTemplate.postForObject(url, null, String.class);
        ResultA200Dto dto= ActionUtil.getGson().fromJson(results, ResultA200Dto.class);
        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一体机");
    }
    //将dto拷贝至param
@@ -82,13 +212,13 @@
        a200Param.setDischargeVoltage(dto.getDischargeVoltage());
        a200Param.setDischargeTime(dto.getDischargeTime());
        a200Param.setDischargeCapacity(dto.getDischargeCapacity());
        if(dto.isDischargeCapacityEnable()){
        if(dto.getIsDischargeCapacityEnable()){
            a200Param.setIsDischargeCapacityEnable(1);
        }else{
            a200Param.setIsDischargeCapacityEnable(0);
        }
        a200Param.setMinBatteryVoltage(dto.getMinBatteryVoltage());
        if(dto.isMinBatteryVoltageEnable()){
        if(dto.getIsMinBatteryVoltageEnable()){
            a200Param.setIsMinBatteryVoltageEnable(1);
        }else{
            a200Param.setIsMinBatteryVoltageEnable(0);
@@ -99,14 +229,14 @@
        a200Param.setChargeStopCurrent(dto.getChargeStopCurrent());
        a200Param.setChargeTime(dto.getChargeTime());
        a200Param.setChargeCapacity(dto.getChargeCapacity());
        if(dto.isChargeCapacityEnable()){
        if(dto.getIsChargeCapacityEnable()){
            a200Param.setIsChargeCapacityEnable(1);
        }else{
            a200Param.setIsChargeCapacityEnable(0);
        }
        a200Param.setMaxBatteryVoltage(dto.getMaxBatteryVoltage());
        if(dto.isMaxBatteryVoltageEnable()){
        if(dto.getIsMaxBatteryVoltageEnable()){
            a200Param.setIsMaxBatteryVoltageEnable(1);
        }else{
            a200Param.setIsMaxBatteryVoltageEnable(0);
@@ -114,4 +244,6 @@
        a200Param.setChargePower(dto.getChargePower());
        a200Param.setBatteryTemperatureProtect(dto.getBatteryTemperatureProtect());
    }
}