-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCanToolMsgController.java
More file actions
227 lines (201 loc) · 7.67 KB
/
CanToolMsgController.java
File metadata and controls
227 lines (201 loc) · 7.67 KB
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
package com.work.web;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ModelAndView;
import com.tohier.weapon2.framework.Constants;
import com.tohier.weapon2.framework.ext.ExtUtil;
import com.tohier.weapon2.framework.web.BaseManageController;
import com.work.manager.COMSettingsManager;
import com.work.manager.CanBoManager;
import com.work.manager.CanSgManager;
import com.work.manager.CanToolMsgManager;
import com.work.manager.RCanBoManager;
import com.work.manager.RCanSgManager;
import com.work.model.COMSettings;
import com.work.model.CanBo;
import com.work.model.CanSg;
import com.work.model.CanToolMsg;
import com.work.model.RCanBo;
import com.work.model.RCanSg;
import com.work.service.CanToolToCanToolAppMsg;
import com.work.service.PortService;
import com.work.service.phytool.TestPhy;
import com.work.util.PageUtil;
import gnu.io.SerialPort;
/***
* CanTool的COM操作
*
* */
public class CanToolMsgController extends BaseManageController{
@Autowired
private COMSettingsManager cOMSettingsManager;
@Autowired
private CanToolMsgManager canToolMsgManager;
@Autowired
private CanBoManager canBoManager;
@Autowired
private CanSgManager canSgManager;
@Autowired
private RCanBoManager rCanBoManager;
@Autowired
private RCanSgManager rCanSgManager;
public static SerialPort serialPort;
public static String canToolPortName;
public ModelAndView pageList(HttpServletRequest request, HttpServletResponse response) throws Exception {
String start = StringUtils.trimToEmpty(request.getParameter("start"));
String limit = StringUtils.trimToEmpty(request.getParameter("limit"));
int toStart = NumberUtils.toInt(start, 0);
int toLimit = NumberUtils.toInt(limit, Constants.VALUE_PAGE_SIZE);
PageUtil pu = canToolMsgManager.pageList(toStart, toLimit);
this.renderText(response,ExtUtil.listToJson2(pu.getData(),null,pu.getTotal()));
return null;
}
//打开COM
public ModelAndView openCOM(HttpServletRequest request, HttpServletResponse response) throws Exception {
String cOMSettingsid = request.getParameter("cOMSettingsid");
COMSettings cOMSettings = cOMSettingsManager.get(Long.parseLong(cOMSettingsid));
PortService ps = new PortService();
String portName = cOMSettings.getPortName();
canToolPortName = portName;
int bitRate = cOMSettings.getBitRate();
serialPort = ps.startComPort(portName, bitRate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
return null;
}
//关闭COM
public ModelAndView closeCOM(HttpServletRequest request, HttpServletResponse response) throws Exception {
if(serialPort != null) {
serialPort.close();
serialPort = null;
}
return null;
}
//收到CAN信号, 并且将CAN信号以 串口数据传输 方式 发送给CanToolApp
/**
* 用测试组的数据进行测试: 测试组给的是 "t---"
*
* importToLocal:将excel中的数据导入到mysql
* sendCanToolMsg:将数据传输到cantoolapp
* */
public ModelAndView importToLocal(HttpServletRequest request,HttpServletResponse response) throws IOException {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile excelFile = multipartRequest.getFile("excelFile");
String fileName = excelFile.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
InputStream input = excelFile.getInputStream();
Workbook workbook = null;
if(fileType.equals(".xls")){
workbook = new HSSFWorkbook(input);
}else if(fileType.equals(".xlsx")){
workbook = new XSSFWorkbook(input);
}else{
return null;
}
CanToolMsg canToolMsg;
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext()) {
canToolMsg = new CanToolMsg();
Row row = rows.next();
if(row.getRowNum()<1){continue;}//跳过第一行(列的名称)
String cid = (row.getCell(0)==null)?(""):getCellValue(row.getCell(0));
String showMsg = (row.getCell(0)==null)?(""):getCellValue(row.getCell(1));
canToolMsg = new CanToolMsg();
canToolMsg.setCid(cid);
canToolMsg.setCanToolMsg(showMsg);
canToolMsgManager.save(canToolMsg);
}
}
this.renderText(response,ExtUtil.simpleToJson(true));
return null;
}
public static String getCellValue(Cell cell){
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
return String.valueOf(cell.getNumericCellValue());
}else if(cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
return String.valueOf(cell.getBooleanCellValue());
}else{
return cell.getStringCellValue();
}
}
//从cantool发送信息到cantoolapp
public ModelAndView sendCanToolMsg(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<CanToolMsg> ctmLs = canToolMsgManager.getAll();
for (CanToolMsg canToolMsg : ctmLs) {
//获取t/T_中的bid
int bid = CanToolToCanToolAppMsg.getBid(8,canToolMsg.getCanToolMsg());
//从字典中找到该Bid的BO_
List<CanBo> cblist = canBoManager.getAll();//获取字典中所有的BO_
String[] boinfo = CanToolToCanToolAppMsg.getBoByBid(bid, cblist);
String boMsg = boinfo[0];//BO_
String boID = boinfo[1];//BO在mysql数据库中的id
RCanBo rcb = new RCanBo();
rcb.setBoMsg(boMsg);
rCanBoManager.save(rcb);
//接收SG,存到mysql数据库中
//根据BO_的bid,找到该BO_下所有的SG_
//需要用到CanSg
List<CanSg> rcsList = canSgManager.findSgByBoID(Long.parseLong(boID));
/*
//结果测试
System.out.println("----------++");
System.out.println(boMsg);
for (CanSg canSg : rcsList) {
System.out.println(canSg.getSgMsg());//ok
}
System.out.println("----------++");
*/
/**
* 获取物理信号:
* 1.先获取一个BO下的所有SG--上面步骤已完成
* 2.把SG对象的SGmsg拿出来放到一个String链表中
* 3.使用工具类TestPhy.show获取该BO下所有SG的物理信号
*/
List<String> sgMsgls = new ArrayList<String>();
for (CanSg canSg : rcsList) {
sgMsgls.add(canSg.getSgMsg());
}
RCanSg rcs;
List<Double> sgPhyLs = TestPhy.show(canToolMsg.getCanToolMsg(), sgMsgls);
for (int i = 0; i < rcsList.size(); i++) {
rcs = new RCanSg();
rcs.setBoMsg(rcb.getBoMsg());
rcs.setrCanBo(rcb);
rcs.setSgMsg(rcsList.get(i).getSgMsg());
//获取物理信号
double phy = sgPhyLs.get(i);//一一对应
if(phy == 0) {//只保存(接收)那些物理信号phy不等于0的SG
continue;
}
if(phy<-41) {
phy = -40;
}
if(phy>368) {
phy = 368;
}
rcs.setPhy((int)phy);
//app从cantool接收到的完整的SG rcs
rCanSgManager.save(rcs);
}
}
return null;
}
}