From 0c1e3bcd7e3b3e89b9119ab12d749bb5651dac26 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com>
Date: Wed, 27 Nov 2024 17:54:20 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dl-module-inspection/pom.xml | 10 +++
.../controller/InspectionInfoController.java | 68 ++++++++++++++++-
.../service/IInspectionInfoService.java | 11 +++
.../impl/InspectionInfoServiceImpl.java | 69 ++++++++++++++++++
.../inspection/vo/InspectionInfoVo.java | 2 +
.../四川省超标排放汽车维护修理告知书.docx | Bin 0 -> 17548 bytes
6 files changed, 159 insertions(+), 1 deletion(-)
create mode 100644 dl-module-inspection/src/main/resources/template/word/四川省超标排放汽车维护修理告知书.docx
diff --git a/dl-module-inspection/pom.xml b/dl-module-inspection/pom.xml
index 03b7e017..281ec10f 100644
--- a/dl-module-inspection/pom.xml
+++ b/dl-module-inspection/pom.xml
@@ -32,6 +32,16 @@
2.1.0-jdk8-snapshot
compile
+
+
+ cn.afterturn
+ easypoi-spring-boot-starter
+ 4.4.0
+
+
+ org.springframework
+ spring-test
+
8
diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionInfoController.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionInfoController.java
index b89e8e07..1810d278 100644
--- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionInfoController.java
+++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionInfoController.java
@@ -1,16 +1,22 @@
package cn.iocoder.yudao.module.inspection.controller;
-import java.util.List;
+import java.util.*;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.inspection.entity.InspectionInfo;
import cn.iocoder.yudao.module.inspection.entity.InspectionWorkNode;
+import cn.iocoder.yudao.module.inspection.service.AppInspectionPartnerService;
import cn.iocoder.yudao.module.inspection.service.IInspectionInfoService;
import cn.iocoder.yudao.module.inspection.service.IInspectionWorkNodeService;
+import cn.iocoder.yudao.module.inspection.vo.InspectionInfoVo;
import cn.iocoder.yudao.util.ExcelUtil;
+//import cn.iocoder.yudao.util.WordUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -32,6 +38,8 @@ public class InspectionInfoController extends BaseController {
@Autowired
private IInspectionWorkNodeService inspectionWorkNodeService;
+ @Autowired
+ private AppInspectionPartnerService partnerList;
/**
* 查询【请填写功能名称】列表
@@ -267,4 +275,62 @@ public class InspectionInfoController extends BaseController {
public CommonResult isExamine(){
return success(inspectionInfoService.isExamine());
}
+ /**
+ * 判断当前登陆人是否有重检、重审、退办理的权限(app)
+ * @return
+ */
+ @GetMapping("getRoleList")
+ public CommonResult getRoleList(){
+ return success(inspectionInfoService.getRoleList());
+ }
+
+ @GetMapping("getWordContent")
+ public CommonResult getWordContent(InspectionInfo inspectionInfo) {
+ //根据工单id查询工单信息
+ InspectionInfoVo inspectionInfoVo = partnerList.inspectionDetail(inspectionInfo.getId());
+ InspectionInfo inspectionInfos = inspectionInfoService.selectInspectionInfoById(inspectionInfo.getId());
+ Map map = new HashMap<>();
+ Date endTime = inspectionInfos.getEndTime();
+ // 创建 Calendar 实例并设置时间
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(endTime);
+
+ // 获取年、月、日
+ int year = calendar.get(Calendar.YEAR);
+ int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1
+ int day = calendar.get(Calendar.DAY_OF_MONTH);
+
+ map.put("vin", inspectionInfos.getCarIdNo());
+ map.put("day", day);
+ map.put("one","□");
+ map.put("two","□");
+ map.put("three","□");
+ map.put("four","√");
+ map.put("month", month);
+ map.put("year", year);
+ map.put("carNum", inspectionInfoVo.getCarNum());
+ map.put("userName", inspectionInfos.getBuyName());
+ //TODO 还差编号和检验报告编号 告知书编号规则:8位行政区划号码+2位年份号码+4位顺序号,例如:51132201240009。 暂时写死
+ StringBuilder sb = new StringBuilder();
+ sb.append("51132201");
+ //获取年份第二位
+ DateTime now = DateUtil.date();
+ String yearStr = DateUtil.format(now, "yy");
+ sb.append(yearStr);
+ sb.append("0001");//顺序号 暂时写死
+ map.put("id", "1111111111");
+ map.put("reportId", sb);
+
+ return success(map);
+ }
+
+ /**
+ * 根据模板导出word
+ */
+ @PostMapping("/exportWord")
+ public CommonResult exportWord(HttpServletRequest request, HttpServletResponse response,@RequestBody Map map){
+ String str = UUID.randomUUID().toString()+".docx";
+ String name = inspectionInfoService.easyPoiExport("template/word/四川省超标排放汽车维护修理告知书.docx", str, map, request, response);
+ return CommonResult.success(name);
+ }
}
diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionInfoService.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionInfoService.java
index c71c609d..78d0703d 100644
--- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionInfoService.java
+++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/IInspectionInfoService.java
@@ -2,11 +2,14 @@ package cn.iocoder.yudao.module.inspection.service;
import cn.iocoder.yudao.module.inspection.entity.InspectionWorkNode;
import cn.iocoder.yudao.module.inspection.vo.DlInspectionWorkNodeVo;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.iocoder.yudao.module.inspection.entity.InspectionInfo;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -109,4 +112,12 @@ public interface IInspectionInfoService extends IService
* @return
*/
Boolean isExamine();
+
+ /**
+ * 获取当前登陆人的角色列表
+ * @return
+ */
+ List getRoleList();
+
+ String easyPoiExport(String templatePath, String filename, Map data, HttpServletRequest request, HttpServletResponse response);
}
diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionInfoServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionInfoServiceImpl.java
index 0d99bf6a..cd13f89b 100644
--- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionInfoServiceImpl.java
+++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionInfoServiceImpl.java
@@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.inspection.service.impl;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -9,9 +14,12 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import cn.afterturn.easypoi.word.WordExportUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
@@ -19,6 +27,7 @@ import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.appBase.controller.admin.InspectionSocket;
import cn.iocoder.yudao.module.custom.entity.CustomerMain;
import cn.iocoder.yudao.module.custom.service.CustomerMainService;
+import cn.iocoder.yudao.module.infra.service.file.FileService;
import cn.iocoder.yudao.module.inspection.vo.DlInspectionWorkNodeVo;
import cn.iocoder.yudao.module.partner.entity.PartnerCustomerInfo;
import cn.iocoder.yudao.module.partner.service.IPartnerCustomerInfoService;
@@ -48,13 +57,20 @@ import cn.iocoder.yudao.module.payment.entity.OrderInfo;
import cn.iocoder.yudao.module.payment.entity.OrderInfoDetail;
import cn.iocoder.yudao.module.shop.entity.ShopMallPartners;
import org.apache.commons.lang3.ObjectUtils;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
+import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import static cn.iocoder.yudao.framework.common.config.CommonStr.USER_TYPE_CUS;
@@ -99,6 +115,8 @@ public class InspectionInfoServiceImpl extends ServiceImpl getRoleList() {
+ LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+ //获取当前登陆人的所有角色
+ List userRoles = roleService.getByUserId(loginUser.getId());
+ List userRoleIds = userRoles.stream().map(UserRoleDO::getRoleId).collect(Collectors.toList());
+ return roleService.getRoleList(userRoleIds);
+ }
+
+ /**
+ * EasyPoi 替换数据 导出 word
+ * @param templatePath word模板地址
+ * @param filename 文件名称
+ * @param data 替换参数
+ * @param request
+ * @param response
+ */
+ public String easyPoiExport(String templatePath, String filename, Map data, HttpServletRequest request, HttpServletResponse response) {
+ Assert.notNull(templatePath, "模板路径不能为空");
+ Assert.notNull(filename, "文件名称不能为空");
+ Assert.isTrue(filename.endsWith(".docx"), "文件名称仅支持docx格式");
+
+ try {
+ String userAgent = request.getHeader("user-agent").toLowerCase();
+ if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
+ filename = URLEncoder.encode(filename, "UTF-8");
+ } else {
+ filename = new String(filename.getBytes("utf-8"), "ISO-8859-1");
+ }
+
+ XWPFDocument document = WordExportUtil.exportWord07(templatePath, data);
+ MultipartFile files = convertXWPFDocumentToMultipartFile(document, filename);
+ filename = fileService.createFile(files.getOriginalFilename(), "", IoUtil.readBytes(files.getInputStream()));
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return filename;
+ }
+ public static MultipartFile convertXWPFDocumentToMultipartFile(XWPFDocument document, String filename) throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ document.write(bos);
+ byte[] bytes = bos.toByteArray();
+ return new MockMultipartFile(filename, filename, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", bytes);
+ }
}
diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/InspectionInfoVo.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/InspectionInfoVo.java
index d56a29b0..425d4e74 100644
--- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/InspectionInfoVo.java
+++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/InspectionInfoVo.java
@@ -90,4 +90,6 @@ public class InspectionInfoVo {
List workNodes;
@TableField(exist = false)
private Long leadManId;
+ @TableField(exist = false)
+ private String skuName;
}
diff --git a/dl-module-inspection/src/main/resources/template/word/四川省超标排放汽车维护修理告知书.docx b/dl-module-inspection/src/main/resources/template/word/四川省超标排放汽车维护修理告知书.docx
new file mode 100644
index 0000000000000000000000000000000000000000..acd0e5cfdbd2c95b910cd34b857144190a673a2a
GIT binary patch
literal 17548
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
literal 0
HcmV?d00001