diff --git a/pom.xml b/pom.xml index 6da773646..ad0084a75 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.ruoyi diff --git a/doc/contract.pdf b/running/pdf/contract.pdf similarity index 93% rename from doc/contract.pdf rename to running/pdf/contract.pdf index be360b133..24a059aff 100644 Binary files a/doc/contract.pdf and b/running/pdf/contract.pdf differ diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index e7882dcf1..5d215da05 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -119,18 +119,6 @@ provided - - - com.itextpdf - kernel - 7.1.12 - - - com.itextpdf - layout - 7.1.12 - - diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java index 0295cba77..ebb1a692f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -3,7 +3,6 @@ package com.ruoyi.web.controller.common; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.model.Contract; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -13,7 +12,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/custom/SysContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/custom/SysContractController.java index f0eebdb6c..2389f4010 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/custom/SysContractController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/custom/SysContractController.java @@ -3,7 +3,6 @@ package com.ruoyi.web.controller.custom; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.model.Contract; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -13,7 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 合同Controller @@ -92,27 +93,35 @@ public class SysContractController extends BaseController { @GetMapping("/file/{id}") public AjaxResult getfile(@PathVariable long id) { - try { - AjaxResult ajax = AjaxResult.success(); -// ajax.put("url", "/login"); - ajax.put("data", id); - return ajax; - } catch (Exception e) { - return AjaxResult.error(e.getMessage()); + AjaxResult ajax = AjaxResult.success(); + SysContract contract = sysContractService.selectSysContractById(id); + if (contract.getPath() != null) { + ajax.put("url", contract.getPath()); + } else { + Map data = new HashMap<>(); + data.put("name", contract.getName()); + data.put("amount", contract.getAmount().toString()); + data.put("serveTime", contract.getServeTime().toString()); + ajax.put("data", data); } + return ajax; } /** * 合同签单 */ @PostMapping("/sign") - public AjaxResult signContract(@RequestBody Contract contract) throws Exception { - try { + public AjaxResult signContract(@RequestBody SysContract sysContract) { + sysContract.setStatus(1); + String path = "/file/" + sysContract.getId() + ".pdf"; + sysContract.setPath(path); + int count = sysContractService.updateSysContract(sysContract); + if (count > 0) { AjaxResult ajax = AjaxResult.success(); - ajax.put("result", "hi"); + ajax.put("url", path); return ajax; - } catch (Exception e) { - return AjaxResult.error(e.getMessage()); + } else { + return AjaxResult.error("操作失败"); } } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/Contract.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/Contract.java deleted file mode 100644 index 739cd443f..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/Contract.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ruoyi.common.core.domain.model; - -public class Contract { - - private String name; - - private String phone; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } -} - diff --git a/ruoyi-custom/pom.xml b/ruoyi-custom/pom.xml index a7ed1b730..a696a53de 100644 --- a/ruoyi-custom/pom.xml +++ b/ruoyi-custom/pom.xml @@ -23,5 +23,23 @@ ruoyi-common + + + com.itextpdf + io + 7.1.12 + compile + + + com.itextpdf + kernel + 7.1.12 + + + com.itextpdf + itextpdf + 5.5.13.2 + + \ No newline at end of file diff --git a/ruoyi-custom/src/main/java/com/ruoyi/custom/domain/SysContract.java b/ruoyi-custom/src/main/java/com/ruoyi/custom/domain/SysContract.java index feffe6f99..2a403816f 100644 --- a/ruoyi-custom/src/main/java/com/ruoyi/custom/domain/SysContract.java +++ b/ruoyi-custom/src/main/java/com/ruoyi/custom/domain/SysContract.java @@ -1,114 +1,158 @@ package com.ruoyi.custom.domain; -import java.math.BigDecimal; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; /** * 合同对象 sys_contract - * + * * @author wonder * @date 2020-10-23 */ -public class SysContract extends BaseEntity -{ +public class SysContract extends BaseEntity { private static final long serialVersionUID = 1L; - /** 合同编号 */ + /** + * 合同编号 + */ @Excel(name = "合同编号") private Long id; - /** 客户姓名 */ + /** + * 客户姓名 + */ @Excel(name = "客户姓名") private String name; - /** 电话 */ + /** + * 客户身份证 + */ + private String cusId; + + /** + * 电话 + */ @Excel(name = "电话") private String phone; - /** 服务时间 */ + /** + * 服务时间 + */ @Excel(name = "服务时间") private Integer serveTime; - /** 金额 */ + /** + * 金额 + */ @Excel(name = "金额") private BigDecimal amount; - /** 文件路径 */ + private String amountUpper; + + /** + * 文件路径 + */ @Excel(name = "文件路径") private String path; - public void setId(Long id) - { + /** + * 合同状态 + * 0-未签订;1-已签订 + */ + private int Status; + + public Long getId() { + return id; + } + + public void setId(Long id) { this.id = id; } - public Long getId() - { - return id; + public String getName() { + return name; } - public void setName(String name) - { + + public void setName(String name) { this.name = name; } - public String getName() - { - return name; + public String getPhone() { + return phone; } - public void setPhone(String phone) - { + + public void setPhone(String phone) { this.phone = phone; } - public String getPhone() - { - return phone; + public Integer getServeTime() { + return serveTime; } - public void setServeTime(Integer serveTime) - { + + public void setServeTime(Integer serveTime) { this.serveTime = serveTime; } - public Integer getServeTime() - { - return serveTime; + public BigDecimal getAmount() { + return amount; } - public void setAmount(BigDecimal amount) - { + + public String getAmountUpper() { + return amountUpper; + } + + public void setAmountUpper(String amountUpper) { + this.amountUpper = amountUpper; + } + + public void setAmount(BigDecimal amount) { this.amount = amount; } - public BigDecimal getAmount() - { - return amount; + public String getPath() { + return path; } - public void setPath(String path) - { + + public void setPath(String path) { this.path = path; } - public String getPath() - { - return path; + public int getStatus() { + return Status; + } + + public void setStatus(int status) { + Status = status; + } + + public String getCusId() { + return cusId; + } + + public void setCusId(String cusId) { + this.cusId = cusId; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("name", getName()) - .append("phone", getPhone()) - .append("serveTime", getServeTime()) - .append("amount", getAmount()) - .append("path", getPath()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("cusId", getCusId()) + .append("status", getStatus()) + .append("phone", getPhone()) + .append("serveTime", getServeTime()) + .append("amount", getAmount()) + .append("path", getPath()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); } } diff --git a/ruoyi-custom/src/main/java/com/ruoyi/custom/service/ISysContractService.java b/ruoyi-custom/src/main/java/com/ruoyi/custom/service/ISysContractService.java index 40bf5d920..8df35a504 100644 --- a/ruoyi-custom/src/main/java/com/ruoyi/custom/service/ISysContractService.java +++ b/ruoyi-custom/src/main/java/com/ruoyi/custom/service/ISysContractService.java @@ -58,4 +58,6 @@ public interface ISysContractService * @return 结果 */ public int deleteSysContractById(Long id); + + public int signContract(SysContract sysContract); } diff --git a/ruoyi-custom/src/main/java/com/ruoyi/custom/service/impl/SysContractServiceImpl.java b/ruoyi-custom/src/main/java/com/ruoyi/custom/service/impl/SysContractServiceImpl.java index 9fbbea799..3f7e49184 100644 --- a/ruoyi-custom/src/main/java/com/ruoyi/custom/service/impl/SysContractServiceImpl.java +++ b/ruoyi-custom/src/main/java/com/ruoyi/custom/service/impl/SysContractServiceImpl.java @@ -1,96 +1,147 @@ package com.ruoyi.custom.service.impl; -import java.util.List; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.pdf.*; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.custom.domain.SysContract; +import com.ruoyi.custom.mapper.SysContractMapper; +import com.ruoyi.custom.service.ISysContractService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ruoyi.custom.mapper.SysContractMapper; -import com.ruoyi.custom.domain.SysContract; -import com.ruoyi.custom.service.ISysContractService; + +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; + /** * 合同Service业务层处理 - * + * * @author wonder * @date 2020-10-23 */ @Service -public class SysContractServiceImpl implements ISysContractService -{ +public class SysContractServiceImpl implements ISysContractService { @Autowired private SysContractMapper sysContractMapper; /** * 查询合同 - * + * * @param id 合同ID * @return 合同 */ @Override - public SysContract selectSysContractById(Long id) - { + public SysContract selectSysContractById(Long id) { return sysContractMapper.selectSysContractById(id); } /** * 查询合同列表 - * + * * @param sysContract 合同 * @return 合同 */ @Override - public List selectSysContractList(SysContract sysContract) - { + public List selectSysContractList(SysContract sysContract) { return sysContractMapper.selectSysContractList(sysContract); } /** * 新增合同 - * + * * @param sysContract 合同 * @return 结果 */ @Override - public int insertSysContract(SysContract sysContract) - { + public int insertSysContract(SysContract sysContract) { + sysContract.setId(DateUtils.getNowDate().getTime()); sysContract.setCreateTime(DateUtils.getNowDate()); return sysContractMapper.insertSysContract(sysContract); } /** * 修改合同 - * + * * @param sysContract 合同 * @return 结果 */ @Override - public int updateSysContract(SysContract sysContract) - { + public int updateSysContract(SysContract sysContract) { sysContract.setUpdateTime(DateUtils.getNowDate()); return sysContractMapper.updateSysContract(sysContract); } /** * 批量删除合同 - * + * * @param ids 需要删除的合同ID * @return 结果 */ @Override - public int deleteSysContractByIds(Long[] ids) - { + public int deleteSysContractByIds(Long[] ids) { return sysContractMapper.deleteSysContractByIds(ids); } /** * 删除合同信息 - * + * * @param id 合同ID * @return 结果 */ @Override - public int deleteSysContractById(Long id) - { + public int deleteSysContractById(Long id) { return sysContractMapper.deleteSysContractById(id); } + + @Override + public int signContract(SysContract sysContract) { + String templatePath = "/Users/wonder/Documents/Workspaces/java/RuoYi-Vue/running/pdf/contract.pdf"; + String filePath = "/Users/wonder/Documents/Workspaces/java/RuoYi-Vue/running" + sysContract.getPath(); + PdfReader reader; + FileOutputStream out; + ByteArrayOutputStream bos; + PdfStamper stamper; + + try { + out = new FileOutputStream(filePath);// 输出流到新的pdf,没有b2.pdf时会创建 + reader = new PdfReader(templatePath);// 读取pdf模板 + bos = new ByteArrayOutputStream(); + stamper = new PdfStamper(reader, bos); + AcroFields form = stamper.getAcroFields(); + + form.setField("name", sysContract.getName()); + form.setField("phone", sysContract.getName()); + form.setField("money", sysContract.getAmount().toString()); + form.setField("moneyUpper", sysContract.getAmountUpper()); + form.setField("date", sysContract.getName()); + form.setField("cusId", sysContract.getCusId()); + + + stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true + stamper.close(); + + Document doc = new Document(); + + PdfCopy copy = new PdfCopy(doc, out); + doc.open(); + PdfImportedPage importPage = null; + for (int i = 1; i <= reader.getNumberOfPages(); i++) { + importPage = copy + .getImportedPage(new PdfReader(bos.toByteArray()), i); + copy.addPage(importPage); + } + doc.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (DocumentException e) { + e.printStackTrace(); + } + return 0; + } } diff --git a/ruoyi-custom/src/main/resources/mapper/custom/SysContractMapper.xml b/ruoyi-custom/src/main/resources/mapper/custom/SysContractMapper.xml index c4912fee3..25a001722 100644 --- a/ruoyi-custom/src/main/resources/mapper/custom/SysContractMapper.xml +++ b/ruoyi-custom/src/main/resources/mapper/custom/SysContractMapper.xml @@ -6,7 +6,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -19,13 +21,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, name, phone, serve_time, amount, path, create_by, create_time, update_by, update_time, remark from sys_contract + select id, status, name, phone, cus_id, serve_time, amount, path, create_by, create_time, update_by, update_time, remark from sys_contract