|
@@ -4,6 +4,7 @@ import com.ruoyi.biz.domain.*;
|
|
|
import com.ruoyi.biz.service.ITwinCalc2hrService;
|
|
|
import com.ruoyi.biz.service.ITwinCalcDayService;
|
|
|
import com.ruoyi.biz.service.ITwinDeviceService;
|
|
|
+import com.ruoyi.biz.service.ITwinRecordAlarmsService;
|
|
|
import com.ruoyi.biz.service.impl.AsyncServiceImpl;
|
|
|
import com.ruoyi.biz.service.impl.IotTokenServiceImpl;
|
|
|
import com.ruoyi.common.core.controller.BaseController;
|
|
@@ -11,14 +12,28 @@ import com.ruoyi.common.core.domain.R;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+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.Value;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.BufferedOutputStream;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.net.URLEncoder;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.ZoneOffset;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.concurrent.Future;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
/**
|
|
|
* swagger 用户测试方法
|
|
@@ -27,6 +42,7 @@ import java.util.concurrent.Future;
|
|
|
*/
|
|
|
@Api("数据接口")
|
|
|
@RestController
|
|
|
+@Slf4j
|
|
|
@RequestMapping("/api/")
|
|
|
public class ApiController extends BaseController {
|
|
|
@Resource
|
|
@@ -34,11 +50,16 @@ public class ApiController extends BaseController {
|
|
|
@Resource
|
|
|
private ITwinCalc2hrService calc2hrService;
|
|
|
@Resource
|
|
|
+ private ITwinRecordAlarmsService recordAlarmsService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
private ITwinDeviceService deviceService;
|
|
|
@Resource
|
|
|
private IotTokenServiceImpl iotTokenService;
|
|
|
@Resource
|
|
|
private AsyncServiceImpl asyncService;
|
|
|
+ @Value("${excel.template}")
|
|
|
+ private String excelTemplate;
|
|
|
|
|
|
@ApiOperation("首页统计数据")
|
|
|
@GetMapping("/index")
|
|
@@ -187,5 +208,138 @@ public class ApiController extends BaseController {
|
|
|
}
|
|
|
return R.ok(result);
|
|
|
}
|
|
|
+
|
|
|
+ @ApiOperation("设备具体数据")
|
|
|
+ @GetMapping("/export")
|
|
|
+ @CrossOrigin(origins = "*")
|
|
|
+ public void export(Date start, Date end, HttpServletResponse response) {
|
|
|
+ if (start == null) {
|
|
|
+ LocalDate localDate = LocalDate.now().minusDays(7);
|
|
|
+ start = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
|
|
|
+ }
|
|
|
+ List<TwinCalc2hr> list = calc2hrService.calc2hrList(start, end);
|
|
|
+ Map<String, Object> queryMap = new HashMap<>(16);
|
|
|
+ queryMap.put("start", start);
|
|
|
+ queryMap.put("end", end);
|
|
|
+ TwinRecordAlarms recordAlarms = new TwinRecordAlarms();
|
|
|
+ recordAlarms.setAlarmType("stop");
|
|
|
+ recordAlarms.setParams(queryMap);
|
|
|
+ List<TwinRecordAlarms> alarms = recordAlarmsService.selectTwinRecordAlarmsList(recordAlarms);
|
|
|
+ // path是指想要下载的文件的路径
|
|
|
+ // 读取现有的xlsx文件
|
|
|
+ try (FileInputStream inputStream = new FileInputStream(excelTemplate); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
|
|
|
+ Sheet sheet = wb.getSheetAt(0);
|
|
|
+ AtomicInteger rowNum = new AtomicInteger(2);
|
|
|
+ //填充数据
|
|
|
+ list.forEach(calc2hr -> {
|
|
|
+ Row row = sheet.createRow(rowNum.get());
|
|
|
+ Cell[] cells = new Cell[25];
|
|
|
+ for (int i = 0; i < cells.length; i++) {
|
|
|
+ cells[i] = row.createCell(i);
|
|
|
+ }
|
|
|
+ //设备名称
|
|
|
+ cells[0].setCellValue(calc2hr.getRemark());
|
|
|
+ //时间
|
|
|
+ cells[1].setCellValue(DateUtils.parseDateToStr(calc2hr.getDataDate()));
|
|
|
+ //总长
|
|
|
+ cells[2].setCellValue(calc2hr.getLengthA().add(calc2hr.getLengthB()).floatValue());
|
|
|
+ //总重
|
|
|
+ cells[3].setCellValue(calc2hr.getWeightA().add(calc2hr.getWeightB()).floatValue());
|
|
|
+ //稼动率 TODO 暂时无数据
|
|
|
+ cells[4].setCellValue("");
|
|
|
+ // 总电量 TODO 暂时无数据
|
|
|
+ cells[5].setCellValue("");
|
|
|
+ //告警次数
|
|
|
+ cells[6].setCellValue(calc2hr.getAlarm());
|
|
|
+ //A班米长
|
|
|
+ cells[7].setCellValue(calc2hr.getLengthA().floatValue());
|
|
|
+ //A班重量
|
|
|
+ cells[8].setCellValue(calc2hr.getWeightA().floatValue());
|
|
|
+ //A班开机时间
|
|
|
+ cells[9].setCellValue(calc2hr.getOpenTimeA().floatValue());
|
|
|
+ //A班停机时间
|
|
|
+ cells[10].setCellValue(calc2hr.getCloseTimeA().floatValue());
|
|
|
+ //A班稼动率 TODO 暂时无数据
|
|
|
+ cells[11].setCellValue("");
|
|
|
+ //A班电量 TODO 暂时无数据
|
|
|
+ cells[12].setCellValue("");
|
|
|
+ //A班停经片停机次数
|
|
|
+ cells[13].setCellValue(calc2hr.getStop1A());
|
|
|
+ //A班CCD停机次数
|
|
|
+ cells[14].setCellValue(calc2hr.getStop2A());
|
|
|
+ //A班人工停机次数
|
|
|
+ cells[15].setCellValue(calc2hr.getStop3A());
|
|
|
+ //B班米长
|
|
|
+ cells[16].setCellValue(calc2hr.getLengthB().floatValue());
|
|
|
+ //B班重量
|
|
|
+ cells[17].setCellValue(calc2hr.getWeightB().floatValue());
|
|
|
+ //B班开机时间
|
|
|
+ cells[18].setCellValue(calc2hr.getOpenTimeB().floatValue());
|
|
|
+ //B班停机时间
|
|
|
+ cells[19].setCellValue(calc2hr.getCloseTimeB().floatValue());
|
|
|
+ //B班稼动率 TODO 暂时无数据
|
|
|
+ cells[20].setCellValue("");
|
|
|
+ //B班电量 TODO 暂时无数据
|
|
|
+ cells[21].setCellValue("");
|
|
|
+ //B班停经片停机次数
|
|
|
+ cells[22].setCellValue(calc2hr.getStop1B());
|
|
|
+ //B班CCD停机次数
|
|
|
+ cells[23].setCellValue(calc2hr.getStop2B());
|
|
|
+ //B班人工停机次数
|
|
|
+ cells[24].setCellValue(calc2hr.getStop3B());
|
|
|
+ rowNum.getAndIncrement();
|
|
|
+ });
|
|
|
+
|
|
|
+ AtomicInteger row1num = new AtomicInteger(1);
|
|
|
+ Sheet sheet1 = wb.getSheetAt(1);
|
|
|
+ //填充数据
|
|
|
+ alarms.forEach(alarm -> {
|
|
|
+ Row row = sheet1.createRow(row1num.get());
|
|
|
+ Cell cell = row.createCell(0);
|
|
|
+ cell.setCellValue(alarm.getRemark());
|
|
|
+ cell = row.createCell(1);
|
|
|
+ cell.setCellValue(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, alarm.getDataTime()));
|
|
|
+ cell = row.createCell(2);
|
|
|
+ switch (alarm.getAlarmCode().intValue()) {
|
|
|
+ case 1:
|
|
|
+ cell.setCellValue("停经片停机");
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ cell.setCellValue("CCD停机");
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ cell.setCellValue("人工停机");
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ cell.setCellValue("断电停机");
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ cell.setCellValue("设备故障停机");
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ cell.setCellValue("落布米数达到停机");
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ cell.setCellValue("盘头剩余圈数达到停机");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ row1num.getAndIncrement();
|
|
|
+ });
|
|
|
+
|
|
|
+ // 清空response
|
|
|
+ response.reset();
|
|
|
+ // 设置response的Header
|
|
|
+ response.setCharacterEncoding("UTF-8");
|
|
|
+ //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
|
|
|
+ //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
|
|
|
+ // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
|
|
|
+ response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("数据导出" + System.currentTimeMillis() + ".xlsx", "UTF-8"));
|
|
|
+ response.setContentType("application/octet-stream");
|
|
|
+ wb.write(outputStream);
|
|
|
+ outputStream.flush();
|
|
|
+ } catch (IOException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-;
|