From 5f74fe26d45acd7290b10f63327c5680069d06b0 Mon Sep 17 00:00:00 2001 From: hehaowei Date: Fri, 14 Mar 2025 17:14:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E7=89=87=E6=9D=90=E6=96=99=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 15 ++ .../ruoyi/gysl/controller/MmmController.java | 129 ++++++++++++++++++ .../main/java/com/ruoyi/gysl/entity/Mmm.java | 84 ++++++++++++ .../ruoyi/gysl/entity/request/MmmRequest.java | 54 ++++++++ .../java/com/ruoyi/gysl/mapper/MmmMapper.java | 20 +++ .../com/ruoyi/gysl/service/MmmService.java | 23 ++++ .../gysl/service/impl/MmmServiceImpl.java | 63 +++++++++ .../src/main/resources/mapper/MmmMapper.xml | 27 ++++ 8 files changed, 415 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/MmmController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/Mmm.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/MmmRequest.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/MmmMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/service/MmmService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/MmmServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/MmmMapper.xml diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 03a023d..6466d94 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -63,11 +63,26 @@ com.ruoyi ruoyi-generator + com.github.xiaoymin knife4j-openapi2-spring-boot-starter 4.4.0 + + + + com.itextpdf + itextpdf + 5.5.13.3 + + + + + com.itextpdf + itext-asian + 5.2.0 + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/MmmController.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/MmmController.java new file mode 100644 index 0000000..463d95b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/controller/MmmController.java @@ -0,0 +1,129 @@ +package com.ruoyi.gysl.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.itextpdf.text.DocumentException; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.gysl.entity.Mmm; +import com.ruoyi.gysl.entity.request.MmmRequest; +import com.ruoyi.gysl.service.MmmService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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 javax.annotation.Resource; +import java.io.IOException; +import java.time.LocalDateTime; + +/** + * 单片材料管理(MmmController)表控制层 + * + * @author User + */ +@Api(tags = "单片材料管理") +@RestController +@RequestMapping("gysl/mmm") +public class MmmController extends BaseController { + @Resource + private MmmService mmmService; + + /** + * 分页查询所有数据 + * + * @param req 分页对象 + * @return 查询结果 + */ + @ApiOperation(value = "分页查询") + @GetMapping("/page") + public AjaxResult queryByPage(MmmRequest req) { + Page page = new Page<>(); + page.setCurrent(req.getCurrent()); + page.setSize(req.getSize()); + return success(mmmService.page(page, req)); + } + + /** + * 通过主键查询单条数据 + * + * @param id 主键 + * @return 单条数据 + */ + @GetMapping("{id}") + @ApiOperation(value = "通过主键查询单条数据", response = Mmm.class) + public AjaxResult selectOne(@PathVariable Integer id) { + return success(this.mmmService.getById(id)); + } + + + /** + * 编辑数据 + * + * @param mmm 实体对象 + * @return 修改结果 + */ + @PostMapping("/edit") + @ApiOperation("修改数据") + public AjaxResult update(@RequestBody Mmm mmm) { + //上传id 上传者 上传时间 + mmm.setUpdateTime(LocalDateTime.now()); + mmm.setUpdateBy(getUsername()); + mmm.setUpdateId(getUserId()); + return success(this.mmmService.updateById(mmm)); + } + + + /** + * 添加 + */ + @PostMapping("/add") + @ApiOperation("新增数据") + public AjaxResult insert(@RequestBody Mmm mmm) { + //创建id 创建者 创建时间 + mmm.setCreateBy(getUsername()); + mmm.setCreateId(getUserId()); + mmm.setCreateTime(LocalDateTime.now()); + return success(this.mmmService.save(mmm)); + } + + /** + * 删除数据 + * + * @param id 主键 + * @return 删除结果 + */ + @ApiOperation("删除数据") + @DeleteMapping("/delete/{id}") + public AjaxResult deleteById(@PathVariable Integer id) { + return success(this.mmmService.removeById(id)); + } + + + /** + * + * @param id 查找 + * @return 导出的PDF + * @throws IOException + */ + @ApiOperation("PDF导出") + @GetMapping("/PDF/{id}") + public ResponseEntity exportPdf(@PathVariable Integer id) throws IOException, DocumentException { + Mmm item = mmmService.getById(id); + //路径 + String path = "C:\\Users\\User\\Desktop\\pdf模板.pdf"; + //PDF填充 + byte[] pdfBytes = mmmService.fillPdfTemplate(path,item); + + // 设置响应头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_PDF); + headers.setContentDispositionFormData("attachment", item.getDocumentTitle() + ".pdf"); + headers.setContentLength(pdfBytes.length); + + return new ResponseEntity<>(pdfBytes, headers, HttpStatus.OK); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/Mmm.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/Mmm.java new file mode 100644 index 0000000..8b49b06 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/Mmm.java @@ -0,0 +1,84 @@ +package com.ruoyi.gysl.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.time.LocalDateTime; + +@TableName("monolithic_material_management") +@Data +public class Mmm { + // 主键id 自增 + @ApiModelProperty("主键id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @NotBlank(message = "文件标题不能为空") + @Size(max= 50,message="文件标题长度不能超过50") + @ApiModelProperty("文件标题") + private String documentTitle; + + @NotBlank(message = "发布单位不能为空") + @Size(max= 50,message="发布单位长度不能超过50") + @ApiModelProperty("发布单位") + private String publishUnit; + + @NotBlank(message = "发布人不能为空") + @Size(max= 50,message = "发布人长度不得超过50个字") + @ApiModelProperty("发布人") + private String publisher; + + @NotBlank(message = "发布时间不能为空") + @ApiModelProperty("发布时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime publishTime; + + @Size(max = 10000 ,message = "发布内容最大支持10000字") + @ApiModelProperty("发布内容") + private String publishingContent; + + //创建者id + @Excel(name = "create_id") + @ApiModelProperty("创建者id") + private Long createId; + + //创建时间 + @Excel(name = "create_time",dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("创建时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + //创建者 + @Excel(name = "create_by") + @ApiModelProperty("创建者") + private String createBy; + + //更新者id + @Excel(name = "update_id") + @ApiModelProperty("更新者id") + private Long updateId; + + //更新者 + @Excel(name = "update_by") + @ApiModelProperty("更新者") + private String updateBy; + + //更新时间 + @Excel(name = "update_time",dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("更新时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/MmmRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/MmmRequest.java new file mode 100644 index 0000000..ff528c5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/entity/request/MmmRequest.java @@ -0,0 +1,54 @@ +package com.ruoyi.gysl.entity.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Data + +public class MmmRequest { + // 主键id 自增 + @ApiModelProperty("id") + private Integer id; + + @ApiModelProperty("文件标题") + private String documentTitle; + + @ApiModelProperty("发布单位") + private String publishUnit; + + @ApiModelProperty("发布人") + private String publisher; + + @ApiModelProperty("发布时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime publishTime; + + @ApiModelProperty("发布内容") + private String publishingContent; + + @ApiModelProperty("创建者id") + private Integer createId; + + @ApiModelProperty("发布开始时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime publishStarTime; + + @ApiModelProperty("发布结束时间") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime publishEndTime; + + @ApiModelProperty("页码") + private Long current=1L; + + @ApiModelProperty("页数") + private Long size=10L; + +} + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/MmmMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/MmmMapper.java new file mode 100644 index 0000000..ccb0c64 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/mapper/MmmMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.gysl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.gysl.entity.Mmm; +import com.ruoyi.gysl.entity.request.MmmRequest; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface MmmMapper extends BaseMapper { + Page page(Page page, @Param("req") MmmRequest mmm); + /** + * 分页查询所有数据 + * + * @param page 分页对象 + * @param as 查询实体 + * @return 所有数据 + */ +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/MmmService.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/MmmService.java new file mode 100644 index 0000000..263ff8a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/MmmService.java @@ -0,0 +1,23 @@ +package com.ruoyi.gysl.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.itextpdf.text.DocumentException; +import com.ruoyi.gysl.entity.Mmm; +import com.ruoyi.gysl.entity.request.MmmRequest; + +import java.io.IOException; + + +public interface MmmService extends IService { + /** + * 分页查询所有数据 + * + * @param page 分页对象 + * @param mmm 查询实体 + * @return 所有数据 + */ + Page page(Page page, MmmRequest mmm); + + byte[] fillPdfTemplate(String path, Mmm item) throws IOException, DocumentException; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/MmmServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/MmmServiceImpl.java new file mode 100644 index 0000000..7ad30e0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/gysl/service/impl/MmmServiceImpl.java @@ -0,0 +1,63 @@ +package com.ruoyi.gysl.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.pdf.AcroFields; +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.PdfStamper; +import com.ruoyi.gysl.entity.Mmm; +import com.ruoyi.gysl.entity.request.MmmRequest; +import com.ruoyi.gysl.mapper.MmmMapper; +import com.ruoyi.gysl.service.MmmService; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +@Service +public class MmmServiceImpl extends ServiceImpl implements MmmService { + + + @Override + public Page page(Page page, MmmRequest mmm) { + return baseMapper.page(page, mmm); + } + + @Override + public byte[] fillPdfTemplate(String path, Mmm item) throws IOException, DocumentException { + + Map fillData = new HashMap<>(); + fillData.put("Title", item.getDocumentTitle()); + fillData.put("Unit", item.getPublishUnit()); + fillData.put("Publisher", item.getPublisher()); + fillData.put("Time", item.getPublishTime().toString()); + fillData.put("Content", item.getPublishingContent()); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + PdfReader reader = new PdfReader(Files.newInputStream(Paths.get(path))); + PdfStamper stamper = new PdfStamper(reader, outputStream); + + // 获取表单字段 + AcroFields form = stamper.getAcroFields(); + + // 填充表单字段 + for (Map.Entry entry : fillData.entrySet()) { + String fieldName = entry.getKey(); + String fieldValue = entry.getValue(); + form.setField(fieldName, fieldValue); + + } + stamper.setFormFlattening(true); + stamper.close(); + reader.close(); + + return outputStream.toByteArray(); + } +} + diff --git a/ruoyi-admin/src/main/resources/mapper/MmmMapper.xml b/ruoyi-admin/src/main/resources/mapper/MmmMapper.xml new file mode 100644 index 0000000..2b6c203 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/MmmMapper.xml @@ -0,0 +1,27 @@ + + + + + +