lxw
2023-12-22 d2d8eef94baf66b0917fe42adbfa971565f0928e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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;
import com.whyc.dto.Response;
import com.whyc.mapper.CKPowerDevBattRtStateSetMapper;
import com.whyc.mapper.CKPowerDevBattSetLogMapper;
import com.whyc.pojo.db_ckpwrdev_data_rt.*;
import com.whyc.util.OpCmdUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
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 {
 
    @Resource
    private CKPowerDevBattRtStateSetMapper mapper;
 
    @Autowired
    private CKPowerDevBattRtDataSetService dataSetService;
 
    @Resource
    private CKPowerDevBattSetLogMapper setLogMapper;
 
    @Resource
    private CKPowerDevBattSetLogService setLogService;
 
    @Autowired
    private CKPowerDevBattRtDataService dataService;
 
    @Autowired
    private CKPowerDevBattRtStateService stateService;
 
    public Response updateMon(BattRtSetDto setDto) {
        List<CKPowerDevBattRtDataSet> dataSetList = setDto.getDataSetList();
        Integer battIndex = dataSetList.get(0).getBattIndex();
        //查询data和state表数据并设置到对应的set表
        updateDataFromDataAndStateToSet(dataSetList);
        //设置state_set表,与李军沟通确定,组端和单体设置,都采用设置下面这个cmd值.因为单体和组端会一起设置
        int opCmd;
        if(battIndex == 0) {
            opCmd = CMD_Constant.CMD_SetBatt1MonData;
        }else if(battIndex == 1){
            opCmd =CMD_Constant.CMD_SetBatt2MonData;
        }else{
            return new Response().set(0,"未指定具体的电池组或电池组超出2组,无法设置");
        }
        //设置data_set表
        dataSetService.updateBatch(dataSetList);
        //设置state_set表
        CKPowerDevBattRtStateSet stateSet = new CKPowerDevBattRtStateSet();
        stateSet.setBattIndex(battIndex);
        stateSet.setOpCmd(opCmd);
        update(stateSet);
        //读取opCmd返回是否成功
        QueryWrapper<CKPowerDevBattRtStateSet> query = Wrappers.query();
        Response opStatus =OpCmdUtil.getOpStatus(mapper, query, opCmd,20,battIndex);
        if(opStatus.getData()!=null && (boolean)opStatus.getData()) { //成功
            //记录日志
            Date now = new Date();
            List<CKPowerDevBattSetLog> logList = setDto.getLogList();
            //查询最大的操作编号
            String opNum=setLogMapper.getOpNum()!=null?setLogMapper.getOpNum():"0";
            logList.forEach(log->{
                log.setOpNum(String.valueOf(Integer.valueOf(opNum)+1));
                log.setCmdType(stateSet.getOpCmd());
                log.setBattIndex(stateSet.getBattIndex());
                log.setCreateTime(now);
                log.setCreateDay(now);
            });
            setLogService.addBatch(logList);
        }
        return opStatus;
    }
 
    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());
        if(opStatus.getData()!=null && (boolean)opStatus.getData()) { //成功
            //记录日志
            Date now = new Date();
            List<CKPowerDevBattSetLog> logList = stateSet.getLogList();
            //查询最大的操作编号
            String opNum=setLogMapper.getOpNum()!=null?setLogMapper.getOpNum():"0";
            logList.forEach(log->{
                log.setOpNum(String.valueOf(Integer.valueOf(opNum)+1));
                log.setMonNum(0);
                log.setCmdType(stateSet.getOpCmd());
                log.setBattIndex(stateSet.getBattIndex());
                log.setCreateTime(now);
                log.setCreateDay(now);
            });
            setLogService.addBatch(logList);
        }
        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<>();
        CKPowerDevBattRtStateSet stateSet = new CKPowerDevBattRtStateSet();
        for (CKPowerDevBattRtData temp : rtDataList) {
            CKPowerDevBattRtDataSet set = new CKPowerDevBattRtDataSet();
            BeanUtils.copyProperties(temp,set);
            rtSetDataList.add(set);
        }
        BeanUtils.copyProperties(state,stateSet);
        //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);
    }
}