Browse Source

fix:无处罚证明

master
“wangzihua” 3 months ago
parent
commit
d4aa91ce44
  1. 42
      yun-admin/pom.xml
  2. 14
      yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/service/LetterService.java
  3. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/dao/PenaltyLawyerDao.java
  4. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyQueryForm.java
  5. 17
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java
  6. 5
      yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyLawyerService.java
  7. 8
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java
  8. 2
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java
  9. 4
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java
  10. 13
      yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java
  11. 91
      yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java
  12. 269
      yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordCertificateService.java
  13. 3
      yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml
  14. 5
      yun-admin/src/main/resources/mapper/penaltyapply/PenaltyLawyerMapper.xml
  15. 6
      yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml
  16. 6
      yun-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml
  17. BIN
      yun-admin/src/main/resources/templates/certificate_template.docx
  18. BIN
      yun-admin/src/main/resources/templates/official_seal.png

42
yun-admin/pom.xml

@ -27,6 +27,48 @@
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>7.0.3</version>
</dependency>
<!-- POI dependencies for Word processing -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- pdf转换工具-万恶之源-->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
<build>

14
yun-admin/src/main/java/net/lab1024/sa/admin/module/letter/service/LetterService.java

@ -130,9 +130,9 @@ public class LetterService {
// 获取当前年份
String year = String.valueOf(letterEntity.getCreateTime().getYear());
contentHtml = contentHtml.replace("我自愿", employeeEntity.getActualName()+"自愿");
contentHtml = contentHtml.replace("申报年度", "申报"+year + "年度");
contentText = contentText.replace("我自愿", employeeEntity.getActualName()+"自愿");
contentHtml = contentHtml.replace("我自愿", "我[ "+employeeEntity.getActualName()+" ]自愿");
contentHtml = contentHtml.replace("申报年度", "申报[ "+year + " ]年度");
contentText = contentText.replace("我自愿", "我[ "+employeeEntity.getActualName()+" ]自愿");
contentText = contentText.replace("申报年度", "申报"+year + "年度");
// 替换模板中的占位符 - 律师个人承诺书
contentHtml = contentHtml.replace("承诺人(签字): &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;日期: &nbsp;", "承诺人(签字):" + employeeEntity.getActualName() + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日期:" + letterEntity.getCreateTime().toLocalDate().toString());
@ -149,13 +149,13 @@ public class LetterService {
String year = String.valueOf(letterEntity.getCreateTime().getYear());
// 替换模板中的占位符 - 律师事务所承诺书
contentHtml = contentHtml.replace("律师事务所", departmentEntity.getDepartmentName());
contentHtml = contentHtml.replace("年度", year + "年度");
contentHtml = contentHtml.replace("律师事务所", "[ "+departmentEntity.getDepartmentName()+" ]");
contentHtml = contentHtml.replace("年度", "[ "+year + " ]年度");
contentHtml = contentHtml.replace("主任(签字):", "主任(签字):" + employeeEntity.getActualName());
contentHtml = contentHtml.replace("日期", " 日期:" + letterEntity.getCreateTime().toLocalDate().toString());
contentText = contentText.replace("律师事务所", departmentEntity.getDepartmentName());
contentText = contentText.replace("年度", year + "年度");
contentText = contentText.replace("律师事务所", "[ "+departmentEntity.getDepartmentName()+" ]");
contentText = contentText.replace("年度", "[ "+year + " ]年度");
contentText = contentText.replace("主任(签字):", "主任(签字):" + employeeEntity.getActualName());
contentText = contentText.replace("日期", " 日期:" + letterEntity.getCreateTime().toLocalDate());

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/dao/PenaltyLawyerDao.java

@ -1,6 +1,8 @@
package net.lab1024.sa.admin.module.penalty.dao;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
import net.lab1024.sa.admin.module.penalty.domain.entity.PenaltyLawyerEntity;
import net.lab1024.sa.admin.module.penalty.domain.form.PenaltyLawyerQueryForm;
import net.lab1024.sa.admin.module.penalty.domain.vo.PenaltyLawyerVO;
@ -9,6 +11,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import javax.validation.Valid;
/**
* 处罚人 Dao
*
@ -29,4 +33,5 @@ public interface PenaltyLawyerDao extends BaseMapper<PenaltyLawyerEntity> {
*/
List<PenaltyLawyerVO> queryPage(Page page, @Param("queryForm") PenaltyLawyerQueryForm queryForm);
List<JSONObject> selectLawyerPunishList(@Param("licenseNo") String licenseNo);
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyQueryForm.java

@ -33,4 +33,6 @@ public class PenaltyApplyQueryForm extends PageParam {
* 状态0-未提交1-已提交2-审核中3-已批准5-已驳回
*/
private Integer status;
private Long userId;
}

17
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java

@ -13,8 +13,12 @@ import net.lab1024.sa.admin.module.penalty.domain.vo.PenaltyApplyVO;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
import net.lab1024.sa.admin.module.system.login.domain.RequestEmployee;
import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO;
import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService;
import net.lab1024.sa.admin.util.AdminRequestUtil;
import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
import net.lab1024.sa.base.common.util.SmartBeanUtil;
import net.lab1024.sa.base.common.util.SmartPageUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO;
@ -43,11 +47,18 @@ public class PenaltyApplyService {
private PenaltyLawyerService penaltyLawyerService;
@Resource
private EmployeeService employeeService;
@Resource
private RoleEmployeeService roleEmployeeService;
/**
* 分页查询
*/
public PageResult<PenaltyApplyVO> queryPage(PenaltyApplyQueryForm queryForm) {
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
List<RoleVO> roleIdList = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId());
if (!UserTypeEnum.CEO.getDesc().equals(roleIdList.get(0).getRoleCode())) {
queryForm.setUserId(requestUser.getEmployeeId());
}
List<PenaltyApplyVO> list = penaltyApplyDao.queryPage(page, queryForm);
return SmartPageUtil.convert2PageResult(page, list);
}
@ -59,7 +70,7 @@ public class PenaltyApplyService {
Long userId = AdminRequestUtil.getRequestUser().getUserId();
EmployeeEntity entity = employeeService.getById(userId);
//判断有没有处罚
Boolean query = penaltyLawyerService.query(entity.getCertificateNumber());
Boolean query = penaltyLawyerService.query(entity.getActualName());
if (query){
return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY);
}
@ -111,4 +122,8 @@ public class PenaltyApplyService {
penaltyApplyDao.updateById(penaltyApplyEntity);
return ResponseDTO.ok();
}
public PenaltyApplyEntity selectOne(Integer id) {
return penaltyApplyDao.selectById(id);
}
}

5
yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyLawyerService.java

@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.penalty.service;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import net.lab1024.sa.admin.module.penalty.dao.PenaltyLawyerDao;
import net.lab1024.sa.admin.module.penalty.domain.entity.PenaltyLawyerEntity;
@ -87,8 +88,8 @@ public class PenaltyLawyerService {
return ResponseDTO.ok();
}
public Boolean query(@Valid String licenseNo) {
List<PenaltyLawyerEntity> penaltyLawyerEntities = penaltyLawyerDao.selectList(new LambdaQueryWrapper<PenaltyLawyerEntity>().eq(PenaltyLawyerEntity::getLicenseNo, licenseNo));
public Boolean query(String licenseNo) {
List<JSONObject> penaltyLawyerEntities = penaltyLawyerDao.selectLawyerPunishList(licenseNo);
if (CollectionUtils.isNotEmpty(penaltyLawyerEntities)) {
return true;
}

8
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java

@ -568,8 +568,12 @@ public class ServiceApplicationsService {
serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now());
serviceApplicationsEntity.setAssociationAuditOpinion(updateForm.getAssociationAuditOpinion());
} else {
// 其他角色(如律所管理员):修改律所审核状态
serviceApplicationsEntity.setFirmAuditStatus(updateForm.getFirmAuditStatus());
if (ReviewEnum.REFUSE.getValue() == updateForm.getAssociationAuditStatus()){
serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.REFUSE.getValue());
}else {
// 其他角色(如律所管理员):修改律所审核状态
serviceApplicationsEntity.setFirmAuditStatus(updateForm.getFirmAuditStatus());
}
serviceApplicationsEntity.setFirmAuditUser(requestUser.getEmployeeId());
serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now());
}

2
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/dao/DepartmentDao.java

@ -26,4 +26,6 @@ public interface DepartmentDao extends BaseMapper<DepartmentEntity> {
List<DepartmentVO> listAll();
DepartmentVO selectDepartmentVO(@Param("departmentId")Long departmentId);
DepartmentVO selectCreditCodeById(@Param("departmentName")String departmentName);
}

4
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/domain/vo/DepartmentVO.java

@ -37,5 +37,7 @@ public class DepartmentVO implements Serializable {
@Schema(description = "创建时间")
private LocalDateTime createTime;
//社会统一信用代码
@Schema(description = "社会统一信用代码")
private String creditCode;
}

13
yun-admin/src/main/java/net/lab1024/sa/admin/module/system/department/service/DepartmentService.java

@ -147,4 +147,17 @@ public class DepartmentService {
DepartmentEntity departmentEntity = departmentDao.selectById(departmentId);
return departmentEntity;
}
public DepartmentVO getById(Long departmentId) {
DepartmentEntity departmentEntity = departmentDao.selectById(departmentId);
DepartmentVO departmentVO = new DepartmentVO();
DepartmentVO departmentVO1 = departmentDao.selectCreditCodeById(departmentEntity.getDepartmentName());
departmentVO.setDepartmentName(departmentEntity.getDepartmentName());
if (departmentVO1 != null) {
departmentVO.setCreditCode(departmentVO1.getCreditCode());
}else {
departmentVO.setCreditCode("");
}
return departmentVO;
}
}

91
yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java

@ -0,0 +1,91 @@
package net.lab1024.sa.admin.module.word;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import net.lab1024.sa.admin.module.penalty.domain.entity.PenaltyApplyEntity;
import net.lab1024.sa.admin.module.penalty.service.PenaltyApplyService;
import net.lab1024.sa.admin.module.service.domain.form.*;
import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO;
import net.lab1024.sa.admin.module.service.domain.vo.ServiceReportStatisticsVO;
import net.lab1024.sa.admin.module.service.service.ServiceApplicationsService;
import net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.domain.ValidateList;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;
/**
* 无处罚证明开具 Controller
*
* @Author wzh
* @Date 2025-12-20 14:44:06
* @Copyright 1.0
*/
@RestController
@Tag(name = "无处罚证明开具")
public class WordApplicationsController {
@Resource
WordCertificateService wordCertificateService;
@Resource
private PenaltyApplyService penaltyApplyService;
@Resource
EmployeeService employeeService;
@Resource
DepartmentService departmentService;
@Operation(summary = "无处罚证明下载 @author wzh")
@GetMapping("/wordCertificate/export/{id}")
public void wordCertificateExport(HttpServletResponse response, @PathVariable Integer id,
@RequestParam(defaultValue = "word") String format) throws Exception {
//查询出当前的开具证明信息
PenaltyApplyEntity penaltyApplyEntity = penaltyApplyService.selectOne(id);
//查询用户姓名执业证号
EmployeeEntity byId = employeeService.getById(penaltyApplyEntity.getUserId());
//机构信息
DepartmentVO departmentVO = departmentService.getById(byId.getDepartmentId());
WordCertificateService.CertificateData certificateData = new WordCertificateService.CertificateData(
departmentVO.getDepartmentName(),
departmentVO.getCreditCode(),
byId.getActualName(),
byId.getCertificateNumber(),
penaltyApplyEntity.getCreateTime()
);
byte[] fileContent;
String fileName;
String contentType;
if ("pdf".equalsIgnoreCase(format)) {
// 生成PDF文档
fileContent = wordCertificateService.generateCertificateAsPdf(certificateData);
fileName = "certificate.pdf";
contentType = "application/pdf";
} else {
// 生成Word文档
fileContent = wordCertificateService.generateCertificate(certificateData);
fileName = "certificate.docx";
contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
}
// 设置文档响应头
response.setContentType(contentType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"; filename*=UTF-8''" + fileName);
response.setContentLength(fileContent.length);
// 将文件内容写入响应输出流
response.getOutputStream().write(fileContent);
response.getOutputStream().flush();
}
}

269
yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordCertificateService.java

@ -0,0 +1,269 @@
package net.lab1024.sa.admin.module.word;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.FileCopyUtils;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
/**
* @program: yun-parent
* @description: 模板生成
* @author: Mr.Wang
* @create: 2026-01-13 16:38
**/
@Service
@Slf4j
public class WordCertificateService {
private static final String TEMPLATE_PATH = "templates/certificate_template.docx";
private static final String SEAL_PATH = "templates/official_seal.png";
/**
* 生成Word格式的证书
*/
public byte[] generateCertificate(CertificateData data) throws Exception {
XWPFDocument document = prepareDocument(data);
// 保存到字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
document.write(outputStream);
document.close();
return outputStream.toByteArray();
}
/**
* 生成PDF格式的证书
*/
public byte[] generateCertificateAsPdf(CertificateData data) throws Exception {
XWPFDocument document = prepareDocument(data);
// 转换为PDF
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
PdfConverter.getInstance().convert(document, pdfOutputStream, PdfOptions.create());
document.close();
return pdfOutputStream.toByteArray();
}
/**
* 准备文档用于Word或PDF生成
*/
private XWPFDocument prepareDocument(CertificateData data) throws Exception {
Resource templateResource = new ClassPathResource(TEMPLATE_PATH);
XWPFDocument document = new XWPFDocument(templateResource.getInputStream());
// 1. 替换文本占位符
replaceTextPlaceholders(document, data);
// 2. 插入电子章图片
insertSealImage(document);
return document;
}
/**
* 替换文本占位符
*/
private void replaceTextPlaceholders(XWPFDocument document, CertificateData data) {
// 准备替换数据
Map<String, String> replacements = new HashMap<>();
//律所名称
replacements.put("${certificateNo}", data.getCertificateNo());
//信用社代码
replacements.put("${purpose}", data.getPurpose());
//律师名称
replacements.put("${name}", data.getName());
//身份证号码
replacements.put("${idCard}", data.getIdCard());
//时间
replacements.put("${queryTime}", data.getLocalDateTime().format(
DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
// 遍历所有段落进行替换
for (XWPFParagraph paragraph : document.getParagraphs()) {
String text = paragraph.getText();
if (text != null && text.contains("${")) {
for (Map.Entry<String, String> entry : replacements.entrySet()) {
text = text.replace(entry.getKey(), entry.getValue());
}
// 清空原有内容
for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) {
paragraph.removeRun(i);
}
// 添加新内容
XWPFRun run = paragraph.createRun();
run.setText(text);
run.setFontFamily("宋体");
run.setFontSize(12);
}
}
}
/**
* 插入电子章图片正确的方法
*/
private void insertSealImage(XWPFDocument document) throws Exception {
try {
// 1. 读取电子章图片
Resource sealResource = new ClassPathResource(SEAL_PATH);
if (!sealResource.exists()) {
log.warn("电子章图片不存在");
insertTextSeal(document);
return;
}
byte[] sealBytes = FileCopyUtils.copyToByteArray(sealResource.getInputStream());
// 2. 查找插入位置
for (XWPFParagraph paragraph : document.getParagraphs()) {
String text = paragraph.getText();
if (text != null && text.contains("${电子章}")) {
// 清除占位符文本
for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) {
paragraph.removeRun(i);
}
// 创建居中的运行来放置图片
XWPFRun run = paragraph.createRun();
run.getParagraph().setAlignment(ParagraphAlignment.CENTER);
// 添加图片数据并获取关系ID
String blipId = document.addPictureData(
new ByteArrayInputStream(sealBytes),
XWPFDocument.PICTURE_TYPE_PNG
);
// 设置图片尺寸(150×150像素)
int width = 150;
int height = 150;
// 使用addPicture方法插入图片
run.addPicture(
new ByteArrayInputStream(sealBytes),
XWPFDocument.PICTURE_TYPE_PNG,
"official_seal.png",
Units.toEMU(width),
Units.toEMU(height)
);
// 获取图片对象并设置为浮于文字上方
CTDrawing drawing = run.getCTR().getDrawingArray(0);
if (drawing.sizeOfAnchorArray() > 0) {
CTInline inline = drawing.getInlineArray(0);
// 创建锚定对象
CTAnchor anchor = drawing.addNewAnchor();
// 设置位置
anchor.addNewSimplePos().setX(0);
anchor.addNewSimplePos().setY(0);
// 设置相对于页面
CTPosH posH = anchor.addNewPositionH();
posH.setRelativeFrom(STRelFromH.PAGE);
posH.setPosOffset(0);
CTPosV posV = anchor.addNewPositionV();
posV.setRelativeFrom(STRelFromV.PAGE);
posV.setPosOffset(0);
// 设置环绕方式为无(浮于文字上方)
anchor.addNewWrapNone();
// 设置在文字上方
anchor.setBehindDoc(false);
// 删除原来的内联对象
drawing.removeInline(0);
}
// 添加图片说明文字
addSealCaption(paragraph);
break;
}
}
} catch (Exception e) {
log.error("插入电子章失败: {}", e.getMessage(), e);
insertTextSeal(document);
}
}
/**
* 添加图片说明文字到指定段落
*/
private void addSealCaption(XWPFParagraph paragraph) {
XWPFRun run = paragraph.createRun();
run.setFontFamily("宋体");
run.setFontSize(11);
run.setColor("000000");
}
/**
* 插入文字替代的电子章
*/
private void insertTextSeal(XWPFDocument document) {
for (XWPFParagraph paragraph : document.getParagraphs()) {
String text = paragraph.getText();
if (text != null && text.contains("(此处插入电子章)")) {
for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) {
paragraph.removeRun(i);
}
XWPFRun run = paragraph.createRun();
run.setText("(电子公章)");
run.setFontFamily("宋体");
run.setFontSize(12);
run.setColor("FF0000");
run.setBold(true);
break;
}
}
}
/**
* 格式化日期
*/
private String formatDate(LocalDate date) {
if (date == null) return "";
return date.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
}
/**
* 证书数据类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class CertificateData {
private String certificateNo;
private String purpose;
private String name;
private String idCard;
private LocalDateTime localDateTime; // 修正字段名为驼峰命名
}
}

3
yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml

@ -42,6 +42,9 @@
<if test="queryForm.applyDateEnd != null">
AND tp_apply.apply_date &lt;= #{queryForm.applyDateEnd}
</if>
<if test="queryForm.userId != null">
AND tp_apply.user_id = #{queryForm.userId}
</if>
</if>
</where>
</select>

5
yun-admin/src/main/resources/mapper/penaltyapply/PenaltyLawyerMapper.xml

@ -30,6 +30,11 @@
<include refid="base_columns"/>
FROM t_penalty_lawyer
</select>
<select id="selectLawyerPunishList" resultType="com.alibaba.fastjson.JSONObject">
select *
from t_lawyer_punish_people
where name = #{licenseNo} and punish_time >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)
</select>
</mapper>

6
yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml

@ -67,10 +67,10 @@
and beneficiary_count = #{queryForm.beneficiaryCount}
</if>
<if test="queryForm.organizerName != null and queryForm.organizerName != ''">
and organizer_name = #{queryForm.organizerName}
and organizer_name like CONCAT('%', #{queryForm.organizerName}, '%')
</if>
<if test="queryForm.organizerContact != null and queryForm.organizerContact != ''">
and organizer_contact = #{queryForm.organizerContact}
and organizer_contact like CONCAT('%', #{queryForm.organizerContact}, '%')
</if>
<if test="queryForm.certificateNumber != null and queryForm.certificateNumber != ''">
and certificate_number = #{queryForm.certificateNumber}
@ -171,7 +171,7 @@
update t_service_applications set
association_audit_status = #{associationAuditStatus},
association_audit_time = now()
where application_id in
where association_audit_status = 0 and application_id in
<foreach collection="idList" open="(" close=")" separator="," item="item">
#{item}
</foreach>

6
yun-admin/src/main/resources/mapper/system/department/DepartmentMapper.xml

@ -29,6 +29,12 @@
left join t_department parent_department on t_department.parent_id = parent_department.department_id
where t_department.department_id = #{departmentId}
</select>
<select id="selectCreditCodeById"
resultType="net.lab1024.sa.admin.module.system.department.domain.vo.DepartmentVO">
SELECT t.unified_credit_code as creditCode
FROM t_institutions_punish t
where t.name = #{departmentName}
</select>
</mapper>

BIN
yun-admin/src/main/resources/templates/certificate_template.docx

Binary file not shown.

BIN
yun-admin/src/main/resources/templates/official_seal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Loading…
Cancel
Save