whycxzp
2023-12-22 6320368558f548b4a3a07228e52d5ebed4818401
src/main/java/com/whyc/service/CKPowerDevBattRtStateSetService.java
@@ -1,6 +1,8 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.constant.CMD_Constant;
import com.whyc.dto.BattRtSetDto;
@@ -17,6 +19,9 @@
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import static com.baomidou.mybatisplus.core.toolkit.Wrappers.update;
@Service
public class CKPowerDevBattRtStateSetService {
@@ -39,10 +44,11 @@
    @Autowired
    private CKPowerDevBattRtStateService stateService;
    public Response update(BattRtSetDto set) {
        CKPowerDevBattRtDataSet dataSet = set.getDataSet();
    public Response updateMon(BattRtSetDto set) {
        List<CKPowerDevBattRtDataSet> dataSetList = set.getDataSetList();
        CKPowerDevBattRtStateSet stateSet = set.getStateSet();
        updateDataFromDataAndStateToSet(dataSet.getBattIndex());
        //查询data和state表数据并设置到对应的set表
        updateDataFromDataAndStateToSet(dataSetList);
        //设置state_set表,与李军沟通确定,组端和单体设置,都采用设置下面这个cmd值.因为单体和组端会一起设置
        if(stateSet.getBattIndex() == 0) {
            stateSet.setOpCmd(CMD_Constant.CMD_SetBatt1MonData);
@@ -51,9 +57,9 @@
        }else{
            return new Response().set(0,"未指定具体的电池组或电池组超出2组,无法设置");
        }
        mapper.update(stateSet,null);
        //设置data_set表 TODO 待确定是设置单体时 所有单体还是某个单体
        dataSetService.update(dataSet);
        update(stateSet);
        //设置data_set表
        dataSetService.updateBatch(dataSetList);
        //读取opCmd返回是否成功
        QueryWrapper<CKPowerDevBattRtStateSet> query = Wrappers.query();
        Response opStatus =OpCmdUtil.getOpStatus(mapper, query, stateSet.getOpCmd(),20,set.getStateSet().getBattIndex());
@@ -74,9 +80,38 @@
        return opStatus;
    }
    private void updateDataFromDataAndStateToSet(Integer battIndex) {
        List<CKPowerDevBattRtData> rtDataList = dataService.getList(battIndex);
        CKPowerDevBattRtState state = stateService.get();
    public Response updateGroup(CKPowerDevBattRtStateSet stateSet) {
        //查询state表数据并设置到对应的set表
        updateDataFromStateToSet(stateSet.getBattIndex());
        //设置state_set表,与李军沟通确定,组端和单体设置,都采用设置下面这个cmd值.因为单体和组端会一起设置
        if(stateSet.getBattIndex() == 0) {
            stateSet.setOpCmd(CMD_Constant.CMD_SetBatt1MonData);
        }else if(stateSet.getBattIndex() == 1){
            stateSet.setOpCmd(CMD_Constant.CMD_SetBatt2MonData);
        }else{
            return new Response().set(0,"未指定具体的电池组或电池组超出2组,无法设置");
        }
        update(stateSet);
        //读取opCmd返回是否成功
        QueryWrapper<CKPowerDevBattRtStateSet> query = Wrappers.query();
        Response opStatus =OpCmdUtil.getOpStatus(mapper, query, stateSet.getOpCmd(),20,stateSet.getBattIndex());
        return opStatus;
    }
    private void updateDataFromStateToSet(Integer battIndex) {
        CKPowerDevBattRtState state = stateService.get(battIndex);
        CKPowerDevBattRtStateSet stateSet = new CKPowerDevBattRtStateSet();
        BeanUtils.copyProperties(state,stateSet);
        update(stateSet);
    }
    private void updateDataFromDataAndStateToSet(List<CKPowerDevBattRtDataSet> dataSetList) {
        Integer battIndex = dataSetList.get(0).getBattIndex();
        List<Integer> monNumList = dataSetList.stream().map(CKPowerDevBattRtDataSet::getMonNum).collect(Collectors.toList());
        //获取实时表数据并写入set表
        List<CKPowerDevBattRtData> rtDataList = dataService.getMonList(battIndex,monNumList);
        CKPowerDevBattRtState state = stateService.get(battIndex);
        //属性迁移
        List<CKPowerDevBattRtDataSet> rtSetDataList = new LinkedList<>();
@@ -87,8 +122,15 @@
            rtSetDataList.add(set);
        }
        BeanUtils.copyProperties(state,stateSet);
        //rt表数据更新到set表中 TODO 待确定是设置单体时 所有单体还是某个单体
        //dataSetService.update();
        //rt表数据更新到set表中
        dataSetService.updateBatch(rtSetDataList);
        update(stateSet);
    }
    private void update(CKPowerDevBattRtStateSet stateSet) {
        UpdateWrapper<CKPowerDevBattRtStateSet> update = Wrappers.update();
        update.eq("batt_index",stateSet.getBattIndex());
        mapper.update(stateSet,update);
    }
}