Compare commits

...

2 Commits

Author SHA1 Message Date
薛宏祥 e3f06f322b Merge remote-tracking branch 'origin/master' 12 months ago
薛宏祥 d45b4cf1b7 运维报告单导出+巡检任务报告单导出+巡检计划报告单导出 12 months ago
  1. 15
      src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java
  2. 12
      src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java
  3. 47
      src/main/java/org/springblade/modules/business/excel/ImageExcelData.java
  4. 68
      src/main/java/org/springblade/modules/business/excel/TemplateExcelUtils.java
  5. 38
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceOutputData.java
  6. 24
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlanOutputData.java
  7. 21
      src/main/java/org/springblade/modules/business/pojo/entity/workorder/WorkOrderFillData.java
  8. 7
      src/main/java/org/springblade/modules/business/service/IMaintenancePlanDetailService.java
  9. 6
      src/main/java/org/springblade/modules/business/service/IMaintenanceTaskDetailService.java
  10. 10
      src/main/java/org/springblade/modules/business/service/IWorkOrderService.java
  11. 49
      src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanDetailServiceImpl.java
  12. 97
      src/main/java/org/springblade/modules/business/service/impl/MaintenanceTaskDetailServiceImpl.java
  13. 127
      src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java
  14. BIN
      src/main/resources/excel/MaintenancePlanReport.xlsx
  15. BIN
      src/main/resources/excel/MaintenanceTaskReport.xlsx
  16. BIN
      src/main/resources/excel/WorkOrderServiceSheet.xlsx

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.boot.ctrl.BladeController;
@ -28,6 +29,7 @@ import org.springblade.modules.system.service.IUserService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@ -45,6 +47,7 @@ import java.util.Optional;
public class MaintenanceController extends BladeController {
private final IMaintenancePlanService planService;
private final IMaintenancePlanDetailService planDetailService;
private final IMaintenanceTaskService taskService;
private final IMaintenanceTaskDetailService taskDetailService;
@ -453,4 +456,16 @@ public class MaintenanceController extends BladeController {
List<MaintenanceTaskDetail> list = taskDetailService.findListByDeviceId(deviceId);
return R.data(list);
}
@PostMapping("/maintenance-output-service")
@Operation(summary = "导出巡检任务报告", description = "导出巡检任务报告")
public void maintenanceOutputService(@RequestBody MaintenanceTask task, HttpServletResponse response) throws IOException {
taskDetailService.maintenanceOutputService(task, response);
}
@PostMapping("/maintenance-plan-report")
@Operation(summary = "导出巡检计划报告", description = "导出巡检计划报告")
private void maintenancePlanReport(@RequestBody MaintenancePlan maintenancePlan, HttpServletResponse response) throws IOException {
planDetailService.maintenancePlanReport(maintenancePlan, response);
}
}

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.mysql.cj.log.Log;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
@ -36,6 +37,7 @@ import org.springblade.modules.system.service.IUserService;
import org.springframework.web.bind.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
@ -623,4 +625,14 @@ public class WorkOrderController extends BladeController {
return R.success("");
}
/**
* 维修单报告导出
*/
@ApiLog("导出运维服务单")
@PostMapping("/report-service")
public void reportService(@RequestBody WorkOrder workOrder, HttpServletResponse response) throws IOException {
workOrderService.reportService(workOrder, response);
}
}

@ -0,0 +1,47 @@
package org.springblade.modules.business.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.converters.bytearray.ByteArrayImageConverter;
import com.alibaba.excel.converters.string.StringImageConverter;
import com.alibaba.excel.converters.url.UrlImageConverter;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
@Data
@EqualsAndHashCode(callSuper = false)
@ContentRowHeight(10)
@ColumnWidth(10)
public class ImageExcelData {
private File file;
private InputStream inputStream;
/**
* 如果string类型 必须指定转换器string默认转换成string
*/
@ExcelProperty(converter = StringImageConverter.class)
private String string;
@ExcelProperty(converter = ByteArrayImageConverter.class)
private byte[] byteArray;
/**
* 根据url导出
*
* @since 2.1.1
*/
@ExcelProperty(converter = UrlImageConverter.class)
private URL url;
/**
* 根据文件导出 并设置导出的位置
*
* @since 3.0.0-beta1
*/
private WriteCellData<Void> writeCellDataFile;
}

@ -0,0 +1,68 @@
package org.springblade.modules.business.excel;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class TemplateExcelUtils {
/**
* Excel所有图片设置
*
* @param bytes
* @return
*/
//参数依次为图片字节,图片宽度(像素),图片高度,行高(厘米),列宽
public static WriteCellData<Void> imageCells(byte[] bytes, Double imageWidth, Double imageHight, Double rowLength, Double columLength) throws IOException {
//等比例缩小图片,直到图片能放在单元格下,每次缩小20%
Integer top = 0;
Integer left = 0;
//厘米转换成像素
rowLength = rowLength * 28;
columLength = columLength * 28;
while (true) {
if (imageHight < rowLength && imageWidth < columLength) {
//计算边框值
top = Math.toIntExact(Math.round((rowLength - imageHight) / 2));
left = Math.toIntExact(Math.round((columLength - imageWidth) / 2));
break;
} else {
imageHight = imageHight * 0.8;
imageWidth = imageWidth * 0.8;
}
}
WriteCellData<Void> writeCellData = new WriteCellData<>();
// 这里可以设置为 EMPTY 则代表不需要其他数据了
//writeCellData.setType(CellDataTypeEnum.EMPTY);
// 可以放入多个图片
List<ImageData> imageDataList = new ArrayList<>();
writeCellData.setImageDataList(imageDataList);
ImageData imageData = new ImageData();
imageDataList.add(imageData);
// 设置图片
imageData.setImage(bytes);
// 图片类型
//imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
// 上 右 下 左 需要留空,这个类似于 css 的 margin;这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。
imageData.setTop(top);
imageData.setRight(left);
imageData.setBottom(top);
imageData.setLeft(left);
// * 设置图片的位置。Relative表示相对于当前的单元格index。first是左上点,last是对角线的右下点,这样确定一个图片的位置和大小。
// 目前填充模板的图片变量是images,index:row=7,column=0。所有图片都基于此位置来设置相对位置
// 第1张图片相对位置
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(0);
imageData.setRelativeLastColumnIndex(0);
return writeCellData;
}
}

@ -0,0 +1,38 @@
package org.springblade.modules.business.pojo.entity.maintenance;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.converters.bytearray.ByteArrayImageConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaintenanceOutputData {
//序号
private Long no;
//楼层
private String floor;
//房间
private String deptName;
//专业名称
private String majorName;
//巡检内容
private String checkContent;
//状态
private Integer status;
//现场照片
@ExcelProperty(converter = ByteArrayImageConverter.class)
private byte[] image1;
//签字照片
@ExcelProperty(converter = ByteArrayImageConverter.class)
private byte[] image2;
private String remark;
}

@ -0,0 +1,24 @@
package org.springblade.modules.business.pojo.entity.maintenance;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaintenancePlanOutputData {
//专业
private String majorName;
//点位
private String address;
//巡检内容
private String checkContent;
//巡检工艺
private String craft;
//巡检频次
private String period;
}

@ -0,0 +1,21 @@
package org.springblade.modules.business.pojo.entity.workorder;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import org.springblade.modules.business.excel.ImageExcelData;
import java.awt.image.BufferedImage;
import java.util.List;
@Data
public class WorkOrderFillData {
private String materialName;
private Integer materialCount;
private Double materialPrice;
private Double price;
}

@ -1,7 +1,12 @@
package org.springblade.modules.business.service;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanDetail;
import org.springframework.web.bind.annotation.RequestBody;
import java.io.IOException;
/**
* 维保计划详情 服务类
@ -10,5 +15,5 @@ import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanD
* @since 2024-10-14
*/
public interface IMaintenancePlanDetailService extends BaseService<MaintenancePlanDetail> {
void maintenancePlanReport(MaintenancePlan maintenancePlan, HttpServletResponse response) throws IOException;
}

@ -1,8 +1,12 @@
package org.springblade.modules.business.service;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTaskDetail;
import org.springframework.web.bind.annotation.RequestBody;
import java.io.IOException;
import java.util.List;
/**
@ -13,4 +17,6 @@ import java.util.List;
*/
public interface IMaintenanceTaskDetailService extends BaseService<MaintenanceTaskDetail> {
List<MaintenanceTaskDetail> findListByDeviceId(Long deviceId);
void maintenanceOutputService(MaintenanceTask task, HttpServletResponse response) throws IOException;
}

@ -1,11 +1,13 @@
package org.springblade.modules.business.service;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePersonnel;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrder;
import org.springblade.modules.business.pojo.vo.PieStatVO;
import org.springblade.modules.business.pojo.vo.workorder.WorkOrderVO;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -84,14 +86,16 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
public void repairPlanSubmit(WorkOrder workOrder);
public List<Map<String,String>> selectFaultEquipTop5();
public List<Map<String, String>> selectFaultEquipTop5();
public List<Map<String,String>> selectEquipOverview();
public List<Map<String, String>> selectEquipOverview();
public List<Map<String,String>> selectEquipRepairCount();
public List<Map<String, String>> selectEquipRepairCount();
public Map<String,Object> selectEquipRepairCountByMonth(String deviceId);
public Map<String,Object> selectAverageFaultResponseTime(String startMonth,String endMonth);
public void reportService(WorkOrder workOrder, HttpServletResponse response) throws IOException;
public Map<String,Object> selectAverageFaultRepairTime(String startMonth,String endMonth);
}

@ -1,12 +1,24 @@
package org.springblade.modules.business.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanOutputData;
import org.springblade.modules.business.service.IMaintenancePlanDetailService;
import org.springblade.modules.business.mapper.MaintenancePlanDetailMapper;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanDetail;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
/**
* 巡检计划详情 服务实现类
*
@ -16,5 +28,42 @@ import org.springframework.stereotype.Service;
@Service
public class MaintenancePlanDetailServiceImpl extends BaseServiceImpl<MaintenancePlanDetailMapper, MaintenancePlanDetail> implements IMaintenancePlanDetailService {
@Override
public void maintenancePlanReport(MaintenancePlan maintenancePlan, HttpServletResponse response) throws IOException {
//数据获取
String templateFile = "./src/main/resources/excel/MaintenancePlanReport.xlsx";
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
List<MaintenancePlanDetail> maintenancePlanDetailsList = baseMapper.selectList(Wrappers.lambdaQuery(MaintenancePlanDetail.class).eq(MaintenancePlanDetail::getPlanId, maintenancePlan.getId()));
List<MaintenancePlanOutputData> maintenancePlanOutputDataList = new ArrayList<>();
for (MaintenancePlanDetail maintenancePlanDetail : maintenancePlanDetailsList) {
MaintenancePlanOutputData maintenancePlanOutputData = new MaintenancePlanOutputData();
maintenancePlanOutputData.setMajorName(maintenancePlanDetail.getMajorName());
maintenancePlanOutputData.setAddress(maintenancePlan.getAddress());
maintenancePlanOutputData.setCraft(maintenancePlanDetail.getCraft());
maintenancePlanOutputData.setCheckContent(maintenancePlanDetail.getCheckContent());
Optional<Integer> period = Optional.ofNullable(maintenancePlanDetail.getPeriod());
if (period.isPresent()) {
if (period.get() == 1) {
maintenancePlanOutputData.setPeriod("每月");
} else if (period.get() == 2) {
maintenancePlanOutputData.setPeriod("每季");
} else if (period.get() == 3) {
maintenancePlanOutputData.setPeriod("每半年");
}
} else {
maintenancePlanOutputData.setPeriod(null);
}
maintenancePlanOutputDataList.add(maintenancePlanOutputData);
}
//导出到Excel中
ServletOutputStream outputStream = response.getOutputStream();
try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(templateFile).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(maintenancePlanOutputDataList, fillConfig, writeSheet);
excelWriter.finish();
outputStream.flush();
outputStream.close();
}
}
}

@ -1,13 +1,35 @@
package org.springblade.modules.business.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.business.mapper.MaintenanceTaskDetailMapper;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceOutputData;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTaskDetail;
import org.springblade.modules.business.service.IMaintenanceTaskDetailService;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 巡检任务详情 服务实现类
@ -23,4 +45,79 @@ public class MaintenanceTaskDetailServiceImpl extends BaseServiceImpl<Maintenanc
public List<MaintenanceTaskDetail> findListByDeviceId(Long deviceId) {
return baseMapper.findListByDeviceId(deviceId);
}
@Override
public void maintenanceOutputService(MaintenanceTask task, HttpServletResponse response) throws IOException {
//数据获取
String templateFile = "./src/main/resources/excel/MaintenanceTaskReport.xlsx";
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
Map<String, Object> map = new HashMap<>();
map.put("taskName", task.getTaskName());
map.put("address", task.getAddress());
map.put("taskContent", task.getTaskContent());
map.put("serviceManName", task.getServicemanName());
List<MaintenanceTaskDetail> maintenanceTaskDetailList = baseMapper.selectList(Wrappers.lambdaQuery(MaintenanceTaskDetail.class).eq(MaintenanceTaskDetail::getTaskId, task.getId()));
List<MaintenanceOutputData> maintenanceOutputDataList = new ArrayList<>();
long no = 0;
for (MaintenanceTaskDetail maintenanceTaskDetail : maintenanceTaskDetailList) {
no++;
MaintenanceOutputData maintenanceOutputData = new MaintenanceOutputData();
maintenanceOutputData.setNo(no);
maintenanceOutputData.setFloor(maintenanceTaskDetail.getFloorName());
maintenanceOutputData.setDeptName(maintenanceTaskDetail.getDeptName());
maintenanceOutputData.setMajorName(maintenanceTaskDetail.getMajorName());
maintenanceOutputData.setCheckContent(maintenanceTaskDetail.getCheckContent());
maintenanceOutputData.setStatus(maintenanceTaskDetail.getStatus());
maintenanceOutputData.setRemark(maintenanceTaskDetail.getRemark());
if (StringUtils.isNotBlank(maintenanceTaskDetail.getPicUrl())) {
try {
URL url = new URL(maintenanceTaskDetail.getPicUrl());
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
InputStream inputStream = httpURLConnection.getInputStream();
BufferedImage image = ImageIO.read(inputStream);
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", arrayOutputStream);
byte[] bytes = arrayOutputStream.toByteArray();
maintenanceOutputData.setImage1(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
maintenanceOutputData.setImage1(null);
}
if (StringUtils.isNotBlank(maintenanceTaskDetail.getSignUrl())) {
try {
URL url = new URL(maintenanceTaskDetail.getSignUrl());
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
InputStream inputStream = httpURLConnection.getInputStream();
BufferedImage image = ImageIO.read(inputStream);
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", arrayOutputStream);
byte[] bytes = arrayOutputStream.toByteArray();
maintenanceOutputData.setImage2(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
maintenanceOutputDataList.add(maintenanceOutputData);
}
//将数据导出到Excel
ServletOutputStream outputStream = response.getOutputStream();
try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(templateFile).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(maintenanceOutputDataList, fillConfig, writeSheet);
excelWriter.fill(map, writeSheet);
excelWriter.finish();
outputStream.flush();
outputStream.close();
}
}
}

@ -1,9 +1,16 @@
package org.springblade.modules.business.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.data.ImageData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.undertow.util.FileUtils;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.Synchronized;
import org.apache.commons.collections.CollectionUtils;
@ -16,21 +23,18 @@ import org.springblade.common.utils.CommonDateUtil;
import org.springblade.common.utils.LogUtil;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.modules.business.enums.WorkOrderStatusEnum;
import org.springblade.modules.business.excel.ImageExcelData;
import org.springblade.modules.business.excel.TemplateExcelUtils;
import org.springblade.modules.business.mapper.WorkOrderMapper;
import org.springblade.modules.business.pojo.entity.Device;
import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePersonnel;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrder;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrderApproval;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrderAttach;
import org.springblade.modules.business.pojo.entity.workorder.WorkOrderRepairMaterial;
import org.springblade.modules.business.pojo.entity.workorder.*;
import org.springblade.modules.business.pojo.vo.PieStatVO;
import org.springblade.modules.business.pojo.vo.SearchMaintenancePersonnelVO;
import org.springblade.modules.business.pojo.vo.workorder.WorkOrderVO;
import org.springblade.modules.business.service.*;
import org.springblade.modules.system.pojo.entity.Dept;
@ -40,6 +44,14 @@ import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@ -551,4 +563,101 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return list;
}
@Override
public void reportService(WorkOrder workOrder, HttpServletResponse response) throws IOException {
//数据获取
String templateFileName = "./src/main/resources/excel/WorkOrderServiceSheet.xlsx";
double total = 0.0;
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
List<WorkOrderRepairMaterial> workOrderRepairMaterialList = workOrderRepairMaterialService.list(Wrappers.lambdaQuery(WorkOrderRepairMaterial.class).eq(WorkOrderRepairMaterial::getOrderId, workOrder.getId()));
List<WorkOrderFillData> workOrderFillDataList = new ArrayList<>();
WorkOrderFillData workOrderFillData = new WorkOrderFillData();
for (WorkOrderRepairMaterial workOrderRepairMaterial : workOrderRepairMaterialList) {
workOrderFillData.setMaterialName(workOrderRepairMaterial.getMaterialName());
workOrderFillData.setMaterialCount(workOrderRepairMaterial.getMaterialCount());
workOrderFillData.setMaterialPrice(workOrderRepairMaterial.getMaterialPrice());
double price = workOrderRepairMaterial.getMaterialPrice() / workOrderRepairMaterial.getMaterialCount();
workOrderFillData.setPrice(price);
workOrderFillDataList.add(workOrderFillData);
total += price;
}
ImageExcelData imageExcelData = new ImageExcelData();
imageExcelData.setUrl(new URL(workOrder.getSignatureUrl()));
//获取签字图片
URL url = new URL(workOrder.getSignatureUrl());
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
InputStream inputStream = httpURLConnection.getInputStream();
BufferedImage image = ImageIO.read(inputStream);
if (image != null) {
System.out.println("图片加载成功");
} else {
System.out.println("图片加载失败");
throw new IOException();
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, "png", byteArrayOutputStream); // 将图片写入输出流
byte[] imageBytes = byteArrayOutputStream.toByteArray();
Double width = Double.valueOf(image.getWidth());
Double height = Double.valueOf(image.getHeight());
WriteCellData<Void> voidWriteCellData = TemplateExcelUtils.imageCells(imageBytes, width, height, 0.6, 1.9);
User repairPerson = userService.getOne(Wrappers.lambdaQuery(User.class).eq(User::getId, workOrder.getRepairPerson()));
Map<String, Object> map = new HashMap<>();
User customer = userService.getOne(Wrappers.lambdaQuery(User.class).eq(User::getId, workOrder.getInformant()));
map.put("customerName", customer.getRealName());
map.put("informant", customer.getRealName());
map.put("informantPhone", customer.getPhone());
map.put("address", customer.getAddress());
map.put("faultDescribe", workOrder.getFaultDescribe());
map.put("faultCause", workOrder.getFaultCause());
map.put("total", total);
map.put("processMethod", workOrder.getProcessMethod());
map.put("repairPerson", repairPerson.getRealName());
map.put("repairPersonPhone", repairPerson.getPhone());
//转换日期格式
Date finishTime = workOrder.getFinishTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
map.put("finishTime", simpleDateFormat.format(finishTime));
map.put("image", voidWriteCellData);
Device device = deviceService.getOne(Wrappers.lambdaQuery(Device.class).eq(Device::getId, workOrder.getDeviceId()));
Optional<Integer> isWarran = Optional.ofNullable(device.getIsWarran());
if (isWarran.isPresent()) {
if (isWarran.get() == 1) {
map.put("int", "--");
map.put("out", total);
map.put("sel2", "√");
} else {
map.put("int", total);
map.put("out", "--");
map.put("sel1", "√");
}
} else {
map.put("int", "--");
map.put("out", "--");
map.put("sel2", null);
map.put("sel1", null);
}
Optional<Integer> status = Optional.ofNullable(workOrder.getStatus());
if (status.isPresent()) {
if (status.get() == 202) {
map.put("sel4", "√");
} else {
map.put("sel3", "√");
}
} else {
map.put("sel4", null);
map.put("sel3", null);
}
//写入Excel并导出
ServletOutputStream out = response.getOutputStream();
try (ExcelWriter excelWriter = EasyExcel.write(out).withTemplate(templateFileName).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(workOrderFillDataList, fillConfig, writeSheet);
excelWriter.fill(map, writeSheet);
excelWriter.finish();
out.flush();
out.close();
}
}
}

Loading…
Cancel
Save