diff --git a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java index f5adcc2..0e80b64 100644 --- a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java @@ -26,6 +26,7 @@ import org.springblade.modules.business.service.*; import org.springblade.modules.business.sms.SmsService; import org.springblade.modules.system.pojo.entity.User; import org.springblade.modules.system.service.IUserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -463,6 +464,12 @@ public class MaintenanceController extends BladeController { taskDetailService.maintenanceOutputService(task, response); } + @PostMapping("/batch-maintenance-output-service") + @Operation(summary = "批量导出巡检任务报告", description = "批量导出巡检任务报告") + public void batchMaintenanceOutputService(@RequestBody List taskList, HttpServletResponse response) throws IOException { + taskDetailService.batchMaintenanceOutputService(taskList, response); + } + @PostMapping("/maintenance-plan-report") @Operation(summary = "导出巡检计划报告", description = "导出巡检计划报告") private void maintenancePlanReport(@RequestBody MaintenancePlan maintenancePlan, HttpServletResponse response) throws IOException { diff --git a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java index 30b72d8..cd014c7 100644 --- a/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java +++ b/src/main/java/org/springblade/modules/business/contraller/WorkOrderController.java @@ -635,4 +635,10 @@ public class WorkOrderController extends BladeController { workOrderService.reportService(workOrder, response); } + @ApiLog("批量导出运维服务单") + @PostMapping("/batch-report-service") + public void batchReportService(@RequestBody List workOrderList, HttpServletResponse response) throws IOException { + workOrderService.batchReportService(workOrderList, response); + + } } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceOutputData.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceOutputData.java index efc8d9a..d669928 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceOutputData.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceOutputData.java @@ -24,15 +24,14 @@ public class MaintenanceOutputData { private String checkContent; //状态 - private Integer status; + private String status; //现场照片 @ExcelProperty(converter = ByteArrayImageConverter.class) private byte[] image1; - //签字照片 - @ExcelProperty(converter = ByteArrayImageConverter.class) - private byte[] image2; + //签字 + private String signature; private String remark; } diff --git a/src/main/java/org/springblade/modules/business/service/IMaintenancePlanDetailService.java b/src/main/java/org/springblade/modules/business/service/IMaintenancePlanDetailService.java index 9789c03..d049dd3 100644 --- a/src/main/java/org/springblade/modules/business/service/IMaintenancePlanDetailService.java +++ b/src/main/java/org/springblade/modules/business/service/IMaintenancePlanDetailService.java @@ -4,7 +4,6 @@ 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; @@ -15,5 +14,6 @@ import java.io.IOException; * @since 2024-10-14 */ public interface IMaintenancePlanDetailService extends BaseService { + void maintenancePlanReport(MaintenancePlan maintenancePlan, HttpServletResponse response) throws IOException; } diff --git a/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskDetailService.java b/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskDetailService.java index 63878f5..793d551 100644 --- a/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskDetailService.java +++ b/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskDetailService.java @@ -19,4 +19,6 @@ public interface IMaintenanceTaskDetailService extends BaseService findListByDeviceId(Long deviceId); void maintenanceOutputService(MaintenanceTask task, HttpServletResponse response) throws IOException; + + void batchMaintenanceOutputService(List task, HttpServletResponse response) throws IOException; } diff --git a/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java b/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java index 3074863..2effc99 100644 --- a/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java +++ b/src/main/java/org/springblade/modules/business/service/IWorkOrderService.java @@ -92,10 +92,14 @@ public interface IWorkOrderService extends BaseService { public List> selectEquipRepairCount(); - public Map selectEquipRepairCountByMonth(String deviceId); - public Map selectAverageFaultResponseTime(String startMonth,String endMonth); + public Map selectEquipRepairCountByMonth(String deviceId); + + public Map selectAverageFaultResponseTime(String startMonth, String endMonth); public void reportService(WorkOrder workOrder, HttpServletResponse response) throws IOException; - public Map selectAverageFaultRepairTime(String startMonth,String endMonth); + + public void batchReportService(List workOrder, HttpServletResponse response) throws IOException; + + public Map selectAverageFaultRepairTime(String startMonth, String endMonth); } diff --git a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanDetailServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanDetailServiceImpl.java index 8e31385..7da7001 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanDetailServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanDetailServiceImpl.java @@ -8,6 +8,7 @@ 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 lombok.AllArgsConstructor; 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; @@ -17,7 +18,9 @@ import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanD import org.springframework.stereotype.Service; import java.io.IOException; +import java.io.OutputStream; import java.util.*; +import java.util.zip.ZipOutputStream; /** * 巡检计划详情 服务实现类 @@ -26,6 +29,7 @@ import java.util.*; * @since 2024-10-14 */ @Service +@AllArgsConstructor public class MaintenancePlanDetailServiceImpl extends BaseServiceImpl implements IMaintenancePlanDetailService { @Override @@ -55,7 +59,6 @@ public class MaintenancePlanDetailServiceImpl extends BaseServiceImpl map = new HashMap<>(); - map.put("taskName", task.getTaskName()); - map.put("address", task.getAddress()); + map.put("taskName", task.getDeptName()); + map.put("address", task.getDeptName()); map.put("taskContent", task.getTaskContent()); map.put("serviceManName", task.getServicemanName()); List maintenanceTaskDetailList = baseMapper.selectList(Wrappers.lambdaQuery(MaintenanceTaskDetail.class).eq(MaintenanceTaskDetail::getTaskId, task.getId())); @@ -67,10 +70,20 @@ public class MaintenanceTaskDetailServiceImpl extends BaseServiceImpl status = Optional.ofNullable(maintenanceTaskDetail.getStatus()); + if (status.isPresent()) { + if (status.get() == 1) { + maintenanceOutputData.setStatus("异常"); + } + if (status.get() == 0) { + maintenanceOutputData.setStatus("正常"); + } + } maintenanceOutputData.setRemark(maintenanceTaskDetail.getRemark()); + maintenanceOutputData.setSignature(task.getSignUrl()); if (StringUtils.isNotBlank(maintenanceTaskDetail.getPicUrl())) { try { + //获取图片 URL url = new URL(maintenanceTaskDetail.getPicUrl()); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET"); @@ -78,7 +91,7 @@ public class MaintenanceTaskDetailServiceImpl extends BaseServiceImpl taskList, HttpServletResponse response) throws IOException { + for (MaintenanceTask task : taskList) { + //数据获取 + String templateFile = "./src/main/resources/excel/MaintenanceTaskReport.xlsx"; + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + Map map = new HashMap<>(); + map.put("taskName", task.getDeptName()); + map.put("address", task.getDeptName()); + map.put("taskContent", task.getTaskContent()); + map.put("serviceManName", task.getServicemanName()); + List maintenanceTaskDetailList = baseMapper.selectList(Wrappers.lambdaQuery(MaintenanceTaskDetail.class).eq(MaintenanceTaskDetail::getTaskId, task.getId())); + List 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()); + Optional status = Optional.ofNullable(maintenanceTaskDetail.getStatus()); + if (status.isPresent()) { + if (status.get() == 1) { + maintenanceOutputData.setStatus("异常"); + } + if (status.get() == 0) { + maintenanceOutputData.setStatus("正常"); + } + } + maintenanceOutputData.setRemark(maintenanceTaskDetail.getRemark()); + maintenanceOutputData.setSignature(task.getSignUrl()); + 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, "png", 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); +// } +// +// } else { +// maintenanceOutputData.setImage2(null); +// } + maintenanceOutputDataList.add(maintenanceOutputData); + } + //将数据导出到Excel + ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); + String fileName = task.getTaskCode() + "巡检报告.xlsx"; + zos.putNextEntry(new ZipEntry(fileName)); + try (ExcelWriter excelWriter = EasyExcel.write(zos).withTemplate(templateFile).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + excelWriter.fill(maintenanceOutputDataList, fillConfig, writeSheet); + excelWriter.fill(map, writeSheet); + excelWriter.finish(); + zos.flush(); + zos.closeEntry(); + } + } } } diff --git a/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java index 0208a82..54539d6 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/WorkOrderServiceImpl.java @@ -56,6 +56,8 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import static org.springblade.common.enums.DictBizEnum.GOODS_TYPE; @@ -328,75 +330,75 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectEquipRepairCountByMonth(String deviceId) { - String startDate = DateFormatUtils.format(CommonDateUtil.getCurrentYearStartTime(),"yyyy-MM-dd HH:mm:ss"); - String endDate = DateFormatUtils.format(CommonDateUtil.getCurrentYearEndTime(),"yyyy-MM-dd HH:mm:ss"); - List monthList = CommonDateUtil.getMonthList(startDate,endDate,"yyyy-MM"); + String startDate = DateFormatUtils.format(CommonDateUtil.getCurrentYearStartTime(), "yyyy-MM-dd HH:mm:ss"); + String endDate = DateFormatUtils.format(CommonDateUtil.getCurrentYearEndTime(), "yyyy-MM-dd HH:mm:ss"); + List monthList = CommonDateUtil.getMonthList(startDate, endDate, "yyyy-MM"); List> list = baseMapper.selectEquipRepairCountByMonth(deviceId); List dataList = new ArrayList<>(); - Map dataMap = new HashMap<>(); - for(Map map1 : list){ - dataMap.put(map1.get("month").toString(),map1.get("duration").toString()); + Map dataMap = new HashMap<>(); + for (Map map1 : list) { + dataMap.put(map1.get("month").toString(), map1.get("duration").toString()); } - for(String month : monthList){ - if(null != dataMap.get(month)){ + for (String month : monthList) { + if (null != dataMap.get(month)) { dataList.add(dataMap.get(month)); - }else{ + } else { dataList.add("0"); } } - Map map = new HashMap<>(); - map.put("date",monthList); - map.put("data",dataList); + Map map = new HashMap<>(); + map.put("date", monthList); + map.put("data", dataList); return map; } @Override - public Map selectAverageFaultResponseTime(String startMonth,String endMonth) { + public Map selectAverageFaultResponseTime(String startMonth, String endMonth) { String startDate = startMonth + "-01 00:00:00"; String endDate = endMonth + "-01 23:59:59"; - List monthList = CommonDateUtil.getMonthList(startDate,endDate,"yyyy-MM"); - List> list = baseMapper.selectAverageFaultResponseTime(monthList); + List monthList = CommonDateUtil.getMonthList(startDate, endDate, "yyyy-MM"); + List> list = baseMapper.selectAverageFaultResponseTime(monthList); List dataList = new ArrayList<>(); - Map dataMap = new HashMap<>(); - for(Map map1 : list){ - dataMap.put(map1.get("month").toString(),map1.get("duration").toString()); + Map dataMap = new HashMap<>(); + for (Map map1 : list) { + dataMap.put(map1.get("month").toString(), map1.get("duration").toString()); } - for(String month : monthList){ - if(null != dataMap.get(month)){ + for (String month : monthList) { + if (null != dataMap.get(month)) { dataList.add(dataMap.get(month)); - }else{ + } else { dataList.add("0"); } } - Map map = new HashMap<>(); - map.put("date",monthList); - map.put("data",dataList); + Map map = new HashMap<>(); + map.put("date", monthList); + map.put("data", dataList); return map; } @Override - public Map selectAverageFaultRepairTime(String startMonth,String endMonth) { + public Map selectAverageFaultRepairTime(String startMonth, String endMonth) { String startDate = startMonth + "-01 00:00:00"; String endDate = endMonth + "-01 23:59:59"; - List monthList = CommonDateUtil.getMonthList(startDate,endDate,"yyyy-MM"); - List> list = baseMapper.selectAverageFaultRepairTime(monthList); + List monthList = CommonDateUtil.getMonthList(startDate, endDate, "yyyy-MM"); + List> list = baseMapper.selectAverageFaultRepairTime(monthList); List dataList = new ArrayList<>(); - Map dataMap = new HashMap<>(); - for(Map map1 : list){ - dataMap.put(map1.get("month").toString(),map1.get("duration").toString()); + Map dataMap = new HashMap<>(); + for (Map map1 : list) { + dataMap.put(map1.get("month").toString(), map1.get("duration").toString()); } - for(String month : monthList){ - if(null != dataMap.get(month)){ + for (String month : monthList) { + if (null != dataMap.get(month)) { dataList.add(dataMap.get(month)); - }else{ + } else { dataList.add("0"); } } - Map map = new HashMap<>(); - map.put("date",monthList); - map.put("data",dataList); + Map map = new HashMap<>(); + map.put("date", monthList); + map.put("data", dataList); return map; } @@ -624,18 +626,18 @@ public class WorkOrderServiceImpl extends BaseServiceImpl isWarran = Optional.ofNullable(device.getIsWarran()); if (isWarran.isPresent()) { if (isWarran.get() == 1) { - map.put("int", "--"); + map.put("in", "--"); map.put("out", total); map.put("sel2", "√"); } else { - map.put("int", total); + map.put("in", total); map.put("out", "--"); map.put("sel1", "√"); } } else { - map.put("int", "--"); + map.put("in", "--"); map.put("out", "--"); - map.put("sel2", null); + map.put("sel2", "√"); map.put("sel1", null); } Optional status = Optional.ofNullable(workOrder.getStatus()); @@ -660,4 +662,107 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workOrderList, HttpServletResponse response) throws IOException { + + for (WorkOrder workOrder : workOrderList) { + //数据获取 + String templateFileName = "./src/main/resources/excel/WorkOrderServiceSheet.xlsx"; + double total = 0.0; + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + List workOrderRepairMaterialList = workOrderRepairMaterialService.list(Wrappers.lambdaQuery(WorkOrderRepairMaterial.class).eq(WorkOrderRepairMaterial::getOrderId, workOrder.getId())); + List 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 voidWriteCellData = TemplateExcelUtils.imageCells(imageBytes, width, height, 0.6, 1.9); + User repairPerson = userService.getOne(Wrappers.lambdaQuery(User.class).eq(User::getId, workOrder.getRepairPerson())); + Map 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 isWarran = Optional.ofNullable(device.getIsWarran()); + if (isWarran.isPresent()) { + if (isWarran.get() == 1) { + map.put("in", "--"); + map.put("ou", total); + map.put("sel2", "√"); + } else { + map.put("in", total); + map.put("out", "--"); + map.put("sel1", "√"); + } + } else { + map.put("in", "--"); + map.put("out", "--"); + map.put("sel2", "√"); + map.put("sel1", null); + } + Optional 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并导出 + ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); + String fileName = workOrder.getReportUnitName() + "运维服务单.xlsx"; + zos.putNextEntry(new ZipEntry(fileName)); + try (ExcelWriter excelWriter = EasyExcel.write(zos).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + excelWriter.fill(workOrderFillDataList, fillConfig, writeSheet); + excelWriter.fill(map, writeSheet); + excelWriter.finish(); + zos.flush(); + zos.closeEntry(); + } + } + } } diff --git a/src/main/resources/excel/MaintenanceTaskReport.xlsx b/src/main/resources/excel/MaintenanceTaskReport.xlsx index 20ba664..50ba63b 100644 Binary files a/src/main/resources/excel/MaintenanceTaskReport.xlsx and b/src/main/resources/excel/MaintenanceTaskReport.xlsx differ diff --git a/src/main/resources/excel/WorkOrderServiceSheet.xlsx b/src/main/resources/excel/WorkOrderServiceSheet.xlsx index 14aaf33..0f15501 100644 Binary files a/src/main/resources/excel/WorkOrderServiceSheet.xlsx and b/src/main/resources/excel/WorkOrderServiceSheet.xlsx differ