Merge branch 'dev' of http://122.51.230.86:3000/dianliang/lanan-system into dev
This commit is contained in:
commit
3002559514
@ -159,6 +159,9 @@ public class WechatServiceImpl implements WechatService {
|
||||
wxUser.setUsername(user.getUsername());
|
||||
wxUser.setNickname(user.getNickname());
|
||||
}
|
||||
if(!StringUtils.isEmpty(inviteId)){
|
||||
//那邀请者的码查邀请者的信息
|
||||
}
|
||||
return wxUser;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,9 @@ public class Result<T> implements Serializable {
|
||||
public Result() {
|
||||
}
|
||||
|
||||
public Result(Object o, String 文件不能为空) {
|
||||
}
|
||||
|
||||
public Integer getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
@ -26,10 +26,37 @@
|
||||
<artifactId>yudao-module-system-biz</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.deepoove</groupId>
|
||||
<artifactId>poi-tl</artifactId>
|
||||
<version>1.12.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.minio</groupId>
|
||||
<artifactId>minio</artifactId>
|
||||
<version>8.4.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.boot</groupId>
|
||||
<artifactId>dl-module-knowledge</artifactId>
|
||||
<version>2.1.0-jdk8-snapshot</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.boot</groupId>
|
||||
<artifactId>yudao-module-infra-biz</artifactId>
|
||||
<version>2.1.0-jdk8-snapshot</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
@ -1,18 +1,34 @@
|
||||
package cn.iocoder.yudao.module.tickets.controller.admin;
|
||||
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||
import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
|
||||
import cn.iocoder.yudao.module.infra.service.file.FileConfigService;
|
||||
import cn.iocoder.yudao.module.infra.service.file.FileService;
|
||||
import cn.iocoder.yudao.module.knowledge.constants.Result;
|
||||
import cn.iocoder.yudao.module.knowledge.controller.requestdto.TOperationDocRequest;
|
||||
import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets;
|
||||
import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService;
|
||||
import cn.iocoder.yudao.module.tickets.tools.TOperaDocRequestUtil;
|
||||
import cn.iocoder.yudao.module.tickets.vo.CustomerAndCarVO;
|
||||
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsReqVO;
|
||||
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.tencentcloudapi.ess.v20201111.models.FileInfo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
/**
|
||||
@ -28,6 +44,15 @@ public class DlRepairTicketsController {
|
||||
*/
|
||||
@Resource
|
||||
private DlRepairTicketsService dlRepairTicketsService;
|
||||
@Autowired
|
||||
private TOperaDocRequestUtil tOperaDocRequestUtil;
|
||||
@Autowired
|
||||
private FileService fileService;
|
||||
@Resource
|
||||
private FileConfigService fileConfigService;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 维修工单表 新增
|
||||
@ -102,6 +127,28 @@ public class DlRepairTicketsController {
|
||||
return CommonResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 维修工单表 导出
|
||||
*
|
||||
* @author lzt
|
||||
* @date 2024年10月11日
|
||||
* @param file 导出文件
|
||||
*/
|
||||
@PostMapping("/print")
|
||||
@Operation(summary = "维修工单表 导出")
|
||||
public ResponseEntity<Result<FileInfo>> printDocument(@RequestParam("file") MultipartFile file) {
|
||||
if (file.isEmpty()) {
|
||||
return ResponseEntity.badRequest().body(new Result<>(null, "文件不能为空"));
|
||||
}
|
||||
|
||||
try {
|
||||
FileDO fileInfo = fileService.createFileDetail(file.getOriginalFilename(), "/ticket", IoUtil.readBytes(file.getInputStream()));
|
||||
return ResponseEntity.ok(new Result<>(fileInfo, "文件上传成功"));
|
||||
} catch (Exception e) {
|
||||
return ResponseEntity.status(500).body(new Result<>(null, "文件上传失败: " + e.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户信息和车辆信息 新增、修改
|
||||
*
|
||||
|
@ -0,0 +1,96 @@
|
||||
package cn.iocoder.yudao.module.tickets.tools;
|
||||
|
||||
import cn.iocoder.yudao.module.infra.service.file.FileService;
|
||||
import cn.iocoder.yudao.module.knowledge.constants.Result;
|
||||
import cn.iocoder.yudao.module.tickets.controller.admin.DlRepairTicketsController;
|
||||
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsReqVO;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
|
||||
import com.tencentcloudapi.ess.v20201111.models.FileInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import static com.fhs.core.trans.util.ConvertUtil.convert;
|
||||
|
||||
|
||||
/**
|
||||
* 工单导出工具类
|
||||
* @author lzt
|
||||
* @date 9:27 2024年10月11日
|
||||
*/
|
||||
@Component(value = "TOperaDocRequestUtil" )
|
||||
public class TOperaDocRequestUtil {
|
||||
|
||||
@Resource
|
||||
private FileService fileService;
|
||||
@Value("${minio.bucketName:dev}")
|
||||
private String bucketName;
|
||||
|
||||
public TOperaDocRequestUtil() throws FileNotFoundException {
|
||||
}
|
||||
|
||||
|
||||
private static String TEMPLATE_PATH = "/templates/gdmb.docx";
|
||||
|
||||
@Autowired
|
||||
private DlRepairTicketsController dlRepairTicketsController;
|
||||
|
||||
public FileInfo export(DlRepairTicketsReqVO request) throws IOException {
|
||||
String fileStr = TEMPLATE_PATH;
|
||||
|
||||
if (fileStr != null) {
|
||||
byte[] inputStream = fileService.downloadFile(bucketName, fileStr);
|
||||
|
||||
// 数据循环填充
|
||||
LoopRowTableRenderPolicy loopRowTableRenderPolicy = new LoopRowTableRenderPolicy();
|
||||
Configure configure = Configure.builder().bind("czTable", loopRowTableRenderPolicy).build();
|
||||
|
||||
// word导出到本地
|
||||
MultipartFile convert = null;
|
||||
if (fileStr.contains("gdmb.docx")) {
|
||||
// 操作模板文件-数据填充
|
||||
XWPFTemplate template = XWPFTemplate.compile(String.valueOf(inputStream), configure).render(
|
||||
new HashMap<String, Object>() {{
|
||||
// 填充数据 TODO
|
||||
//put("requestData", request);
|
||||
|
||||
}}
|
||||
);
|
||||
ByteArrayOutputStream outputStreamWord = new ByteArrayOutputStream();;
|
||||
template.writeAndClose(outputStreamWord);
|
||||
//IConverter converter = LocalConverter.builder().build();
|
||||
byte[] bytes = outputStreamWord.toByteArray();
|
||||
ByteArrayInputStream inputStreamWord = new ByteArrayInputStream(bytes);
|
||||
|
||||
ByteArrayOutputStream outputStreamPdf = new ByteArrayOutputStream();
|
||||
|
||||
//converter.convert(inputStreamWord).as(DocumentType.DOCX).to(outputStreamPdf).as(DocumentType.PDF).execute();
|
||||
byte[] bytesPdf = outputStreamPdf.toByteArray();
|
||||
ByteArrayInputStream inputStreamPdf = new ByteArrayInputStream(bytesPdf);
|
||||
|
||||
// convert = new MultipartFile(fileStr.replace(".docx", ".pdf"), "application/pdf", inputStreamPdf.readAllBytes());
|
||||
convert = new MockMultipartFile("gdmb.pdf", bytes);
|
||||
}
|
||||
ResponseEntity<Result<FileInfo>> responseEntity = dlRepairTicketsController.printDocument(convert);
|
||||
|
||||
// 获取 Result<FileInfo> 对象
|
||||
Result<FileInfo> fileupload = responseEntity.getBody();
|
||||
if (fileupload != null) {
|
||||
return fileupload.getData();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
97
dl-module-repair/src/main/resources/templates/gdmb.docx
Normal file
97
dl-module-repair/src/main/resources/templates/gdmb.docx
Normal file
@ -0,0 +1,97 @@
|
||||
泸州市蓝安汽车销售有限公司
|
||||
车辆维修结算单
|
||||
工号:{{jobNumber}}
|
||||
客户名称:
|
||||
{{customerName}}
|
||||
送修人:
|
||||
{{repairer}}
|
||||
送修人电话:
|
||||
{{repairerTelephone}}
|
||||
车牌:
|
||||
{{plate}}
|
||||
车型:
|
||||
{{carType}}
|
||||
发动机号码:
|
||||
{{engineNumber}}
|
||||
车架号:
|
||||
{{frameNumber}}
|
||||
开单时间:
|
||||
{{billingTime}}
|
||||
已行里程:
|
||||
{{mileage}}
|
||||
三包单位:
|
||||
{{tripleUnit}}
|
||||
保险名称:
|
||||
{{insuranceName}}
|
||||
旧件处理:
|
||||
{{oldhandle}}
|
||||
维修内容
|
||||
序号
|
||||
维修项目
|
||||
单价
|
||||
数量
|
||||
折扣率
|
||||
工时费
|
||||
主修人
|
||||
备注
|
||||
性质
|
||||
{{repRort}}
|
||||
{{repItem}}
|
||||
{{repPrice}}
|
||||
{{repCount}}
|
||||
{{repDiscount}}
|
||||
{{labourAmount}}
|
||||
{{major}}
|
||||
{{repRemark}}
|
||||
{{repNature}}
|
||||
材料清单
|
||||
序号
|
||||
配件件号
|
||||
名称
|
||||
单位
|
||||
单价
|
||||
数量
|
||||
折扣率
|
||||
金额
|
||||
备注
|
||||
性质
|
||||
{{matRort}}
|
||||
{{matNum}}
|
||||
{{matName}}
|
||||
{{matUnit}}
|
||||
{{matPrice}}
|
||||
{{matCount}}
|
||||
{{matDiscount}}
|
||||
{{matAmount}}
|
||||
{{matRemark}}
|
||||
{{matNature}}
|
||||
小计
|
||||
|
||||
|
||||
|
||||
|
||||
{{matTotalAmount}}
|
||||
|
||||
|
||||
材料费:{{matCost}}
|
||||
材料费优惠:{{matFavorable}}
|
||||
管理费:{{manageCost}}
|
||||
总费用:{{matTotalCost}}
|
||||
工时费:{{labourCost}}
|
||||
工时费优惠:{{labourFavorable}}
|
||||
其他费:{{otherCost}}
|
||||
材料工时优惠:{{matlabourFavorable}}
|
||||
救援费:{{rescueCost}}
|
||||
三包费:{{tripleCost}}
|
||||
定损费:{{lossCost}}
|
||||
应收费:{{allCost}}
|
||||
大写:{{bigAllCost}}
|
||||
付款情况:
|
||||
{{costCondition}}
|
||||
工单备注:{{paperRemark}}
|
||||
客户签字:
|
||||
结算备注:{{costRemark}}
|
||||
|
||||
单位:{{corporation}} 服务顾问:{{serviceConsultant}} 联系电话:{{serviceTelephone}}
|
||||
开户行:{{bank}} 地址:{{bankAddress}}
|
||||
账号:{{account}} 结算日期:{{settleDate}}
|
@ -124,6 +124,12 @@
|
||||
<groupId>org.apache.tika</groupId>
|
||||
<artifactId>tika-core</artifactId> <!-- 文件客户端:文件类型的识别 -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.aliyun.oss</groupId>
|
||||
<artifactId>aliyun-sdk-oss</artifactId>
|
||||
<version>3.11.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@ -5,6 +5,10 @@ import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReq
|
||||
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
|
||||
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
|
||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||
import org.apache.tomcat.jni.FileInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.xml.ws.Response;
|
||||
|
||||
/**
|
||||
* 文件 Service 接口
|
||||
@ -63,4 +67,16 @@ public interface FileService {
|
||||
*/
|
||||
FilePresignedUrlRespVO getFilePresignedUrl(String path) throws Exception;
|
||||
|
||||
/**
|
||||
* 下载文件
|
||||
*
|
||||
* @author lzt
|
||||
* @date 2024年10月11日
|
||||
* @param bucketName 存储桶名称
|
||||
* @param fileName 文件名称
|
||||
* @return 文件下载响应
|
||||
*/
|
||||
byte[] downloadFile(String bucketName, String fileName);
|
||||
|
||||
// FileInfo uploadFile(MultipartFile file);
|
||||
}
|
||||
|
@ -13,10 +13,18 @@ import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO
|
||||
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
|
||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||
import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper;
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.model.PutObjectRequest;
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.tomcat.jni.FileInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.xml.ws.Response;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS;
|
||||
@ -145,4 +153,43 @@ public class FileServiceImpl implements FileService {
|
||||
object -> object.setConfigId(fileClient.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public byte[] downloadFile(String bucketName, String fileStr) {
|
||||
// 获取文件存储客户端
|
||||
FileClient client = fileConfigService.getFileClient(Long.valueOf(bucketName));
|
||||
Assert.notNull(client, "客户端({}) 不能为空", bucketName);
|
||||
|
||||
// 获取文件内容
|
||||
return client.getContent(fileStr);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public FileInfo uploadFile(MultipartFile file) {
|
||||
// String bucketName = "xxxxx"; // 存储桶名称
|
||||
// String fileName = file.getOriginalFilename();
|
||||
//
|
||||
// try {
|
||||
// // 上传文件到 OSS
|
||||
// PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, file.getInputStream());
|
||||
// ossClient.putObject(putObjectRequest);
|
||||
//
|
||||
// // 创建并返回 FileInfo 对象
|
||||
// FileInfo fileInfo = new FileInfo();
|
||||
// fileInfo.setFileName(fileName);
|
||||
// fileInfo.setBucketName(bucketName);
|
||||
// return fileInfo;
|
||||
//
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// throw new RuntimeException("文件上传到 OSS 失败: " + e.getMessage());
|
||||
// } finally {
|
||||
// // 关闭 OSS 客户端
|
||||
// ossClient.shutdown();
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user