package com.example.springboot.service;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.CellType;
|
import org.apache.poi.ss.usermodel.CellValue;
|
import org.apache.poi.ss.usermodel.FormulaEvaluator;
|
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.ss.usermodel.WorkbookFactory;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.example.springboot.entity.GlassInfo;
|
import com.example.springboot.entity.MeasureSetting;
|
import com.example.springboot.entity.Queue;
|
import com.example.springboot.mapper.GlassInfoMapper;
|
import com.example.springboot.mapper.MeasureSettingMapper;
|
import com.example.springboot.mapper.QueueMapper;
|
|
@Service
|
public class HomeService {
|
|
@Autowired
|
MeasureSettingMapper MeasureSettingMapper;
|
@Autowired
|
GlassInfoMapper GlassInfoMapper;
|
@Autowired
|
QueueMapper QueueMapper;
|
|
// 匹配玻璃 宽,高,线路
|
public List<GlassInfo> NormalGlassInfo(double width, double height, String line) {
|
//
|
List<GlassInfo> Results = new ArrayList<GlassInfo>();
|
// 获取匹配设置
|
MeasureSetting MeasureSetting = MeasureSettingMapper.SelectMeasureSetting(line);
|
System.out.println("获取匹配设置:"+MeasureSetting);
|
if (height > 0 && width > 0 && MeasureSetting != null) {
|
// 有效参数 请求=1 长/宽>0
|
double maxheight = height + MeasureSetting.getErrorHeight();
|
double minheight = height - MeasureSetting.getErrorHeight();
|
double maxwidth = width + MeasureSetting.getErrorWidth();
|
double minwidth = width - MeasureSetting.getErrorWidth();
|
Integer Thickness = MeasureSetting.getThickness();
|
String Films = MeasureSetting.getFilms();
|
// 查询当前测量数据
|
List<GlassInfo> GlassInfos = GlassInfoMapper.selectGlassInfos(maxwidth, minwidth, maxheight, minheight,Thickness,Films);
|
System.out.println("厚度"+Thickness+"膜"+Films);
|
System.out.println("GlassInfos数量:"+GlassInfos.size());
|
if(Thickness==0||Films==""){
|
System.out.println("厚度"+Thickness+"膜"+Films);
|
return null;
|
}
|
List types = new ArrayList<>();
|
for (int i = 0; i < GlassInfos.size(); i++) {
|
Integer glasstype = GlassInfos.get(i).getGlasstype();
|
if (!types.contains(glasstype)) {
|
types.add(glasstype);
|
Results.add(GlassInfos.get(i));
|
}
|
}
|
}
|
return Results;
|
}
|
|
// 匹配逻辑
|
public boolean Normal(double width, double height, String line) {
|
List<Queue> ErrowQueues= QueueMapper.selectErrorQueues();
|
if (ErrowQueues.size()>0) {
|
System.out.println("有匹配失败数据未去除");
|
return false;
|
}
|
//查询当前领取的任务
|
List<GlassInfo> Result = NormalGlassInfo(width, height, "1");
|
System.out.println("Result:"+Result);
|
if (Result.size() == 1) {
|
// 匹配成功 就一种类型 添加数据
|
GlassInfo GlassInfo = Result.get(0);
|
int insertCount=QueueMapper.insert(GlassInfo.getId(), width, height, 1);
|
GlassInfoMapper.updatemeasurenumber(GlassInfo.getId());
|
|
System.out.println("添加条数:"+insertCount);
|
System.out.println("匹配成功测量宽高:"+width+" "+height);
|
System.out.println(GlassInfo.getGlassid());
|
return true;
|
} else if (Result.size() > 1) {
|
// 匹配失败 匹配到多条符合的数据 添加数据
|
QueueMapper.insertMatchFailure(width, height, 0);
|
System.out.println("匹配失败");
|
|
} else {
|
// 匹配失败 未找到符合的数据 添加数据
|
QueueMapper.insertMatchFailure(width, height, -1);
|
System.out.println("未找到符合的数据");
|
}
|
return false;
|
}
|
|
// Execl表格 传入文件路径
|
public List ReadExecl(String filename) {
|
try {
|
// 创建文件对象
|
File file = new File(filename);
|
if (!file.exists()) {
|
System.out.println("文件不存在! "+filename);
|
return new ArrayList<>();
|
}
|
// 创建文件输入流对象
|
FileInputStream inputStream = new FileInputStream(file);
|
// 创建工作簿对象
|
Workbook workbook = WorkbookFactory.create(inputStream);
|
// 获取第一个工作表对象
|
Sheet sheet = workbook.getSheetAt(0);
|
// 创建一个实体类集合,用于存储Excel数据
|
|
List Results = new ArrayList();
|
int i = 0;
|
// 遍历行
|
for (Row row : sheet) {
|
// 遍历单元格
|
List ResultRow = new ArrayList();
|
// System.out.println();
|
for (Cell cell : row) {
|
String LastCellvalue = "";
|
// 判断单元格类型是否为公式类型
|
if (cell.getCellType() == CellType.FORMULA) {
|
// 使用公式计算器计算单元格的值
|
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
|
CellValue cellValue = evaluator.evaluate(cell);
|
// 计算后的单元格值
|
LastCellvalue = cellValue.getNumberValue() + "";
|
} else if (cell.getCellType() == CellType.NUMERIC) {
|
double value = cell.getNumericCellValue();
|
if (value % 1 == 0) {
|
LastCellvalue = Math.round(value) + "";
|
} else {
|
LastCellvalue = value + "";
|
}
|
} else {
|
// 单元格值
|
LastCellvalue = cell.toString();
|
}
|
ResultRow.add(LastCellvalue);
|
// System.out.print(LastCellvalue+" ");
|
}
|
Results.add(ResultRow);
|
i++;
|
}
|
System.out.println(i);
|
// 关闭工作簿和输入流对象
|
workbook.close();
|
inputStream.close();
|
return Results;
|
} catch (Exception e) {
|
// TODO: handle exception
|
System.out.println("异常");
|
return new ArrayList();
|
}
|
|
}
|
|
}
|