合同管理

This commit is contained in:
liang.chao 2024-12-13 15:50:13 +08:00
parent 512b95fddd
commit 44191194b3
1 changed files with 63 additions and 43 deletions

View File

@ -8,6 +8,8 @@ import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.core.web.page.TableDataInfo;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.material.book.domain.BookCarInfoDto;
import com.bonus.material.contract.domain.BmContract;
import com.bonus.material.contract.service.BmContractService;
import com.bonus.material.order.domain.OrderDetailCostReliefDto;
import com.bonus.material.order.domain.OrderDetailDto;
import com.bonus.material.order.domain.OrderInfoDto;
@ -16,19 +18,24 @@ import com.bonus.material.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Map;
@ -48,6 +55,9 @@ public class OrderController extends BaseController {
@Resource
private OrderMapper orderMapper;
@Resource
private BmContractService bmContractService;
/**
* 提交预约车到订单
*/
@ -154,51 +164,61 @@ public class OrderController extends BaseController {
}
@ApiOperation(value = "租赁协议(查看)")
@PostMapping("/leaseAgreement")
public ResponseEntity<String> getleaseAgreement(@RequestParam("file") MultipartFile file,
@RequestParam("orderId") String orderId,
@RequestParam Map<String, String> replacements) {
// 根据orderId获取订单信息
@GetMapping("/leaseAgreement")
public ResponseEntity<byte[]> getleaseAgreement(String orderId,
Map<String, String> replacements) throws IOException {
OrderInfoDto orderInfoDto = orderService.getAgreementByOrderId(orderId);
try (XWPFDocument document = new XWPFDocument(file.getInputStream())) {
// 准备替换的占位符及其对应值
//订单日期
replacements.put("${orderTime}", orderInfoDto.getOrderTime().toString());
//装备所属公司
replacements.put("${czcompanyName}", orderInfoDto.getCzcompanyName());
//承租方所属公司
replacements.put("${companyName}", orderInfoDto.getCompanyName());
//订单金额
replacements.put("${cost}", orderInfoDto.getCost().toString());
BmContract bmContract = new BmContract();
bmContract.setStatus(1);
List<BmContract> list = bmContractService.list(bmContract);
String wordUrl = list.get(0).getBmFileInfoList().get(0).getFileUrl();
RestTemplate restTemplate = new RestTemplate();
InputStream inputStream = restTemplate.getForObject(wordUrl, InputStream.class);
// 遍历文档中的段落进行占位符替换
for (IBodyElement element : document.getBodyElements()) {
if (element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph) element;
for (XWPFRun run : paragraph.getRuns()) {
String text = run.getText(0);
if (text != null) {
for (Map.Entry<String, String> entry : replacements.entrySet()) {
text = text.replace(entry.getKey(), entry.getValue());
}
run.setText(text, 0);
XWPFDocument document = new XWPFDocument(inputStream);
//订单日期
replacements.put("${orderTime}", orderInfoDto.getOrderTime().toString());
//装备所属公司
replacements.put("${czcompanyName}", orderInfoDto.getCzcompanyName());
//承租方所属公司
replacements.put("${companyName}", orderInfoDto.getCompanyName());
//订单金额
replacements.put("${cost}", orderInfoDto.getCost().toString());
for (IBodyElement element : document.getBodyElements()) {
if (element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph) element;
for (XWPFRun run : paragraph.getRuns()) {
String text = run.getText(0);
if (text != null) {
for (Map.Entry<String, String> entry : replacements.entrySet()) {
text = text.replace(entry.getKey(), entry.getValue());
}
run.setText(text, 0);
}
}
}
// 将修改后的文档写入字节数组输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.write(byteArrayOutputStream);
// 将字节数组转换为字符串仅用于演示实际应提供文件下载
String content = byteArrayOutputStream.toString("UTF-8");
// 注意对于大文件不建议将内容作为字符串返回应提供下载链接或二进制文件响应
return ResponseEntity.ok(content);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error processing file");
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
document.write(outputStream);
byte[] wordBytes = outputStream.toByteArray();
// Convert Word to Image (simple example using BufferedImage)
BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
graphics.setPaint(Color.white);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
graphics.setPaint(Color.black);
graphics.drawString(new String(wordBytes), 10, 20);
graphics.dispose();
ByteArrayOutputStream imageOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, "png", imageOutputStream);
byte[] imageBytes = imageOutputStream.toByteArray();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return ResponseEntity.ok().headers(headers).body(imageBytes);
}
}