This commit is contained in:
2025-03-25 20:16:03 +08:00
parent 489300abe3
commit 8d23c199fa
15 changed files with 177 additions and 76 deletions

View File

@ -47,6 +47,11 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId> <artifactId>ruoyi-generator</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- demo模块 --> <!-- demo模块 -->
<!-- <dependency>--> <!-- <dependency>-->

View File

@ -17,7 +17,13 @@
<dependencies> <dependencies>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext7-core -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.2.0</version>
<type>pom</type>
</dependency>
<!-- Spring框架基本的核心工具 --> <!-- Spring框架基本的核心工具 -->
<dependency> <dependency>
@ -158,6 +164,11 @@
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId> <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -77,6 +77,11 @@
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.15</version> <version>1.15</version>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -28,6 +28,11 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -34,6 +34,11 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -11,6 +11,8 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import java.io.Serializable; import java.io.Serializable;

View File

@ -28,6 +28,11 @@
<version>5.5.12</version> <version>5.5.12</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -82,11 +82,11 @@ public class WgzAppCheckDailyNewspaperRes implements Serializable {
@ApiModelProperty("备注") @ApiModelProperty("备注")
private String remark; private String remark;
@ApiModelProperty("姓名") @ApiModelProperty("审核人姓名")
private String username; private String auditorUserName;
@ApiModelProperty("头像地址") @ApiModelProperty("头像地址")
private String avatarName; private String auditorUserHead;
@ApiModelProperty("日报状态0正常 1补卡") @ApiModelProperty("日报状态0正常 1补卡")
private String status; private String status;

View File

@ -51,6 +51,12 @@ public class WgzReissueacard implements Serializable {
@ApiModelProperty("打卡ID") @ApiModelProperty("打卡ID")
private Long attendanceId; private Long attendanceId;
/** 考勤招工申请Id */
@Excel(name = "考勤招工申请Id")
@ApiModelProperty("考勤招工申请Id")
private Long applyKey;
/** 状态0上班补卡 1下班补卡 */ /** 状态0上班补卡 1下班补卡 */
@Excel(name = "状态" , readConverterExp = "0=上班补卡,1=下班补卡") @Excel(name = "状态" , readConverterExp = "0=上班补卡,1=下班补卡")
@ApiModelProperty("状态0上班补卡 1下班补卡") @ApiModelProperty("状态0上班补卡 1下班补卡")

View File

@ -327,7 +327,7 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl<WgzDailyClockMappe
BeanUtils.copyProperties(byId,res); BeanUtils.copyProperties(byId,res);
//2、获取日报的审核人信息 //2、获取日报的审核人信息
BgtUser by = userService.selectUserByUserId(byId.getAuditorUserId()); BgtUser by = userService.selectUserByUserId(byId.getAuditorUserId());
res.setAvatarName(by.getAvatarName()).setUsername(by.getUsername()); res.setAuditorUserHead(by.getAvatarName()).setAuditorUserName(by.getUsername());
//3、获取招工主题 //3、获取招工主题
BgtProjectRecruit byId1 = recruitService.getById(byId.getRecruitId()); BgtProjectRecruit byId1 = recruitService.getById(byId.getRecruitId());
res.setRecruitName(byId1.getRecruitName()); res.setRecruitName(byId1.getRecruitName());

View File

@ -4,6 +4,17 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.ruoyi.bgt.domain.vo.BgtQuestionResult; import com.ruoyi.bgt.domain.vo.BgtQuestionResult;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
@ -23,20 +34,23 @@ import com.ruoyi.wgz.service.IWgzQuestionBankService;
import com.ruoyi.wgz.service.IWgzQuestionSaveService; import com.ruoyi.wgz.service.IWgzQuestionSaveService;
import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService; import com.ruoyi.wgz.service.IWgzQuestionsConfigurationService;
import com.ruoyi.wgz.service.IWgzUserService; import com.ruoyi.wgz.service.IWgzUserService;
import com.sun.scenario.effect.ImageData; import com.itextpdf.layout.properties.TextAlignment;
import org.apache.poi.ss.usermodel.HorizontalAlignment; import com.itextpdf.layout.element.Paragraph;
import org.apache.poi.wp.usermodel.Paragraph; import org.aspectj.weaver.patterns.TypePatternQuestions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* 用户试卷存储Service业务层处理 * 用户试卷存储Service业务层处理
@ -209,13 +223,15 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl<WgzQuestionSaveM
/** /**
* 第二部分:分离出试卷信息 * 第二部分:分离出试卷信息
*/ */
// String two = two(req.getUserId(), configuration);
// System.out.println("????????? "+two);
// System.out.println("????????? "+two);
// System.out.println("????????? "+two);
return res; return res;
} }
// 分离试卷信息 // 分离试卷信息
public void two(Long userId,WgzQuestionsConfiguration configurationEntity) throws IOException { public String two(Long userId,WgzQuestionsConfiguration configurationEntity) {
//1、组装数据 //1、组装数据
List<PdfEntity> we = baseMapper.pdfSc(userId); List<PdfEntity> we = baseMapper.pdfSc(userId);
if (!we.isEmpty()) { if (!we.isEmpty()) {
@ -262,69 +278,106 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl<WgzQuestionSaveM
rs.setMultiple(two); rs.setMultiple(two);
rs.setEstimate(three); rs.setEstimate(three);
//2、生成pdf //2、生成pdf
// generatePdf(rs); try {
return generateExamPaper(rs);
}catch (Exception e1){
throw new RuntimeException("生成PDF试卷出现了意外请重新提交");
} }
// if len(we) > 0 { }
// value, _ := dao.BusQuestionSave.Ctx(ctx).Where("openid", req.Openid).Where("correct", "1").Fields("sum(score)").Value() throw new RuntimeException("未获取到试卷信息!");
// s := configurationEntity.SingleChoice }
// m := configurationEntity.MultipleChoice
// e := configurationEntity.Estimate public String generateExamPaper(ExaminationPaper rs) throws IOException {
// var rs *model.ExaminationPaperRes String fileName = "exam_paper_" + System.currentTimeMillis() + ".pdf";
// rs = &model.ExaminationPaperRes{ String outputPath = Paths.get(System.getProperty("user.dir"), fileName).toString();
// UserName: we[0].UserName,
// Pass: we[0].Pass, PdfWriter writer = new PdfWriter(outputPath);
// SumScore: value.String(), PdfDocument pdfDoc = new PdfDocument(writer);
// Sign: signature.Signature, Document document = new Document(pdfDoc, PageSize.A4);
// Openid: req.Openid,
// } // 加载字体(确保 simhei.ttf 可用)
// var one = new(model.ExaminationPaperOne) String fontPath = "ruoyi/uploadPath/appResource/font/simhei.ttf";
// var two = new(model.ExaminationPaperOne) PdfFont simhei = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H);
// var three = new(model.ExaminationPaperOne) PdfFont simheiBold = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H);
// one.Topic = "一、单选题,共" + strconv.Itoa(s) + "道题,每小题" + strconv.FormatFloat(configurationEntity.SingleScore, 'f', -1, 64) + "分,共计" + strconv.FormatFloat(float64(s)*configurationEntity.SingleScore, 'f', -1, 64) + "分"
// two.Topic = "二、多选题,共" + strconv.Itoa(m) + "道题,每小题" + strconv.FormatFloat(configurationEntity.MultipleScore, 'f', -1, 64) + "分,共计" + strconv.FormatFloat(float64(m)*configurationEntity.MultipleScore, 'f', -1, 64) + "分" // 标题
// three.Topic = "三、判断题,共" + strconv.Itoa(e) + "道题,每小题" + strconv.FormatFloat(configurationEntity.EstimateScore, 'f', -1, 64) + "分,共计" + strconv.FormatFloat(float64(e)*configurationEntity.EstimateScore, 'f', -1, 64) + "分" document.setFont(simheiBold).setFontSize(36);
// var sEntity []*model.ExaminationPaperTwo
// var mEntity []*model.ExaminationPaperTwo document.add(new Paragraph("《灵活用工岗前培训》")
// var eEntity []*model.ExaminationPaperTwo .setTextAlignment(TextAlignment.CENTER));
// for _, data := range we {
// var sy *model.ExaminationPaperTwo document.add(new Paragraph("\n"));
// sy = &model.ExaminationPaperTwo{
// QuestionText: data.QuestionText, // 考生信息
// Options: data.Options, document.setFont(simhei).setFontSize(16);
// Answer: data.Answer, document.add(new Paragraph("姓名: " + rs.getUserName()));
// CorrectAnswer: data.CorrectAnswer, document.add(new Paragraph("及格线/总分: " + rs.getPass()));
// Correct: data.Correct, document.add(new Paragraph("实际得分: " + rs.getSumScore()));
// Score: data.Score, document.add(new Paragraph("\n"));
// }
// if data.QuestionType == "1" { // 处理单选、多选、判断题
// sEntity = append(sEntity, sy) for (int i = 1; i <= 3; i++) {
// } else if data.QuestionType == "2" { ExaminationPaperOne ep;
// mEntity = append(mEntity, sy) if (i == 1) {
// } else if data.QuestionType == "3" { ep = rs.getSingle();
// eEntity = append(eEntity, sy) } else if (i == 2) {
ep = rs.getMultiple();
} else {
ep = rs.getEstimate();
}
document.setFont(simhei).setFontSize(20);
document.add(new Paragraph(ep.getTopic()));
document.setFont(simhei).setFontSize(12);
List<ExaminationPaperTwo> questionList = ep.getList();
for (int qIndex = 0; qIndex < questionList.size(); qIndex++) {
ExaminationPaperTwo data = questionList.get(qIndex);
String questionText = (i == 3) ?
(qIndex + 1) + "" + data.getQuestionText() + " " + data.getAnswer() + " "
: (qIndex + 1) + "" + replaceBrackets(data.getQuestionText(), data.getAnswer());
document.add(new Paragraph(questionText));
// 选项
String[] options = data.getOptions().split("@");
for (String option : options) {
document.add(new Paragraph(" " + option));
}
// 标记错误答案
if ("2".equals(data.getCorrect())) {
document.add(new Paragraph("正确答案为:" + data.getCorrectAnswer())
.setFontColor(com.itextpdf.kernel.colors.ColorConstants.RED));
}
document.add(new Paragraph("\n"));
}
}
// // 签名部分
// document.add(new Paragraph("\n\n\n"));
// document.setFont(simheiBold).setFontSize(16);
// document.add(new Paragraph("签字:").setTextAlignment(TextAlignment.RIGHT));
// // 嵌入签名图片
// if (rs.getSign() != null && !rs.getSign().isEmpty()) {
// String signPath = Paths.get(System.getProperty("user.dir"), rs.getSign()).toString();
// File signFile = new File(signPath);
// if (signFile.exists()) {
// ImageData imageData = ImageDataFactory.create(signPath);
// Image image = new Image(imageData).scaleToFit(100, 50);
// document.add(image.setRotationAngle(Math.PI / 2));
// } // }
// } // }
// one.List = sEntity
// two.List = mEntity document.close();
// three.List = eEntity return outputPath;
// rs.Single = one }
// rs.Multiple = two
// rs.Estimate = three private static String replaceBrackets(String text, String replacement) {
// path, errPath := Wo(rs) Pattern pattern = Pattern.compile("\\s*\\s*\\s*");
// if errPath != nil { Matcher matcher = pattern.matcher(text);
// errPath = errors.New("生成PDF试卷出现了意外请重新提交") return matcher.replaceAll(" " + replacement + " ");
// liberr.ErrIsNil(ctx, errPath)
// return
// } else {
// path = strings.Replace(path, "resource/public", "/wxfile", 1)
// _, err = g.DB().Insert(ctx, "bus_question_save_pdf", gdb.Map{
// "openid": req.Openid,
// "path": path,
// })
// res.PdfStr = path
// }
// }
// liberr.ErrIsNil(ctx, err, "添加失败")
} }
@Override @Override
@ -402,4 +455,5 @@ public class WgzQuestionSaveServiceImpl extends ServicePlusImpl<WgzQuestionSaveM
bgtQuestionResult.setTime(time); bgtQuestionResult.setTime(time);
return bgtQuestionResult; return bgtQuestionResult;
} }
} }

View File

@ -174,6 +174,7 @@ public class WgzReissueacardServiceImpl extends ServicePlusImpl<WgzReissueacardM
//5、组装补卡申请数据 //5、组装补卡申请数据
WgzReissueacard wgzReissueacard = new WgzReissueacard(). WgzReissueacard wgzReissueacard = new WgzReissueacard().
setRecruitId(recruitApply.getRecruitId()). setRecruitId(recruitApply.getRecruitId()).
setApplyKey(recruitApply.getId()).
setUserId(appUserId). setUserId(appUserId).
setAttendanceId(attendanceInfo.getId()). setAttendanceId(attendanceInfo.getId()).
setType(req.getType()). setType(req.getType()).

View File

@ -34,7 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
c.username as userName, c.username as userName,
c.avatar_name c.avatar_name
FROM FROM
wgz_reissueacard a wgz_reissueacard as a
LEFT JOIN bgt_user b ON (a.auditor_user_id = b.user_id and b.del_flag = 0) LEFT JOIN bgt_user b ON (a.auditor_user_id = b.user_id and b.del_flag = 0)
LEFT JOIN wgz_user c ON (a.user_id = c.user_id and c.del_flag = 0) LEFT JOIN wgz_user c ON (a.user_id = c.user_id and c.del_flag = 0)
WHERE WHERE
@ -49,11 +49,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
b.username as auditorname, b.username as auditorname,
b.avatar_name as auditorHead, b.avatar_name as auditorHead,
c.username as userName, c.username as userName,
c.avatar_name c.avatar_name,
d.recruit_name as recruitName
FROM FROM
wgz_reissueacard a wgz_reissueacard a
LEFT JOIN bgt_user b ON (a.auditor_user_id = b.user_id and b.del_flag = 0) LEFT JOIN bgt_user b ON (a.auditor_user_id = b.user_id)
LEFT JOIN wgz_user c ON (a.user_id = c.user_id and c.del_flag = 0) LEFT JOIN wgz_user c ON (a.user_id = c.user_id)
LEFT JOIN bgt_project_recruit d ON (d.id = a.recruit_id )
WHERE WHERE
a.id = #{id} and a.del_flag = 0 a.id = #{id} and a.del_flag = 0
ORDER BY ORDER BY

Binary file not shown.