From 1287e0654af55e4f6435dc08d2f78cfde38bb111 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 14 Feb 2025 09:56:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReturnTrainingDetailController.java | 7 +-- .../WorkerAdmissionDetailController.java | 9 ++-- .../baotou/mapper/DeviceUnitMapper.java | 2 +- .../mapper/xml/ReturnTrainingDetailMapper.xml | 10 ++++ .../xml/WorkerAdmissionDetailMapper.xml | 26 +++++++--- .../mapper/xml/WorkerAdmissionMapper.xml | 2 +- .../WorkerAdmissionDetailServiceImpl.java | 27 ++++++++++ .../impl/WorkerAdmissionServiceImpl.java | 25 +++++++++ .../exam/controller/ExamWorkerController.java | 48 +++++++++++------- .../impl/ExamTrainRecordServiceImpl.java | 12 +++-- .../modules/worker/entity/WorkerContract.java | 5 +- .../worker/entity/WorkerPhysicals.java | 33 +++++++----- .../worker/mapper/xml/WorkerInfoMapper.xml | 5 +- .../java/com/zhgd/xmgl/util/FlowUtil.java | 21 ++++++++ .../application-gsx-t-dev.properties | 2 +- src/main/resources/template/下载试卷模板.docx | Bin 29650 -> 32037 bytes 16 files changed, 177 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/ReturnTrainingDetailController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/ReturnTrainingDetailController.java index 7395b2b47..5b46f2bdb 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/ReturnTrainingDetailController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/ReturnTrainingDetailController.java @@ -70,9 +70,10 @@ public class ReturnTrainingDetailController { @OperLog(operModul = "复工培训申请(专项培训申请)明细管理", operType = "分页查询", operDesc = "分页列表查询复工培训申请(专项培训申请)明细信息") @ApiOperation(value = "分页列表查询复工培训申请(专项培训申请)明细信息", notes = "分页列表查询复工培训申请(专项培训申请)明细信息", httpMethod = "GET") @ApiImplicitParams({ - @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), - @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), - }) + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "queryExamStatus", value = "1未考试2通过3未通过", paramType = "query", required = false, dataType = "String"), + }) @GetMapping(value = "/page") public Result> queryPageList(@ApiIgnore @RequestParam HashMap param) { return Result.success(returnTrainingDetailService.queryPageList(param)); diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionDetailController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionDetailController.java index 5eff56c9e..e7e05fe5c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionDetailController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionDetailController.java @@ -77,6 +77,7 @@ public class WorkerAdmissionDetailController { @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), @ApiImplicitParam(name = "idCards", value = "身份证号s(多个逗号分割)", paramType = "query", required = false, dataType = "String"), + @ApiImplicitParam(name = "queryExamStatus", value = "1未考试2通过3未通过", paramType = "query", required = false, dataType = "String"), }) @GetMapping(value = "/page") public Result> queryPageList(@ApiIgnore @RequestParam HashMap param) { @@ -200,7 +201,7 @@ public class WorkerAdmissionDetailController { List entity = new ArrayList(); entity.add(new ExcelExportEntity("编号", "num")); entity.add(new ExcelExportEntity("姓名", "name")); - entity.add(new ExcelExportEntity("岗位", "post")); + entity.add(new ExcelExportEntity("岗位/工种", "post")); entity.add(new ExcelExportEntity("单位", "enterprise")); entity.add(new ExcelExportEntity("发证日期", "date")); List> excelList = new ArrayList>(); @@ -220,14 +221,14 @@ public class WorkerAdmissionDetailController { map.put("date", DateUtil.today()); excelList.add(map); try { - String url = detail.getFieldAcquisitionUrl(); + String url = JSON.parseArray(detail.getFieldAcquisitionUrl()).getJSONObject(0).getString("url"); MinioUtils.downloadFile(url); - ImgUtil.convert(FileUtil.file(PathUtil.getBasePath(), JSON.parseArray(url).getJSONObject(0).getString("id")), FileUtil.file(head, workerName + ".jpg")); + FileUtil.move(FileUtil.file(PathUtil.getBasePath(), url), FileUtil.file(head, workerName + "." + StrUtil.subAfter(url, ".", true)), true); } catch (Exception e) { log.error("批量制卡", e); } // 生成指定url对应的二维码到文件,宽和高都是300像素 - QrCodeUtil.generate(idCardMap.get(detail.getIdCard()).getId() + "", 300, 300, FileUtil.file(qrCode, num + ".jpg")); + QrCodeUtil.generate("/pages/projectEnd/laborManage/searchTeam/personDetail?id=" + idCardMap.get(detail.getIdCard()).getId(), 300, 300, FileUtil.file(qrCode, num + ".jpg")); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entity, excelList); FileOutputStream fos = null; diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/DeviceUnitMapper.java b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/DeviceUnitMapper.java index af3c56ff1..c583aa087 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/DeviceUnitMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/DeviceUnitMapper.java @@ -22,7 +22,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @version: V1.0 */ @Mapper -@DataScope +//@DataScope public interface DeviceUnitMapper extends BaseMapper { List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper,@Param("param") HashMap param); diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/ReturnTrainingDetailMapper.xml b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/ReturnTrainingDetailMapper.xml index 66e3d815b..9ccc214e0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/ReturnTrainingDetailMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/ReturnTrainingDetailMapper.xml @@ -17,6 +17,16 @@ LEFT JOIN team_info b ON a.team_id = b.id LEFT JOIN department_info c ON a.department_id = c.id LEFT JOIN worker_type wt ON b.worker_type_id = wt.id + where 1=1 + + and etr.id is null + + + and etr.is_pass = 1 + + + and etr.is_pass = 0 + )t ${ew.customSqlSegment} diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/WorkerAdmissionDetailMapper.xml b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/WorkerAdmissionDetailMapper.xml index 6ffeb381e..cb9044d32 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/WorkerAdmissionDetailMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/WorkerAdmissionDetailMapper.xml @@ -25,6 +25,7 @@ tr.score, if(wi.id is null,0,1) as is_import ,tr.id as record_id + ,tr.is_new_batch from worker_admission_detail t left join worker_admission wa on wa.id=t.worker_admission_id left join enterprise_info ei1 on ei1.id=t.epc_cbs @@ -42,7 +43,7 @@ left join exam_train_record tr on tr.application_id=wa.id and t.id_card=tr.worker_card and tr.application_type=1 - and tr.is_new_batch=1 and tr.submit = 1 + and tr.submit = 1 left join ( @@ -53,13 +54,22 @@ #{item} - - - and t.worker_name = #{param.eqWorkerName} - - )t - ${ew.customSqlSegment} - + + + and t.worker_name = #{param.eqWorkerName} + + + and tr.id is null + + + and tr.is_pass = 1 + + + and tr.is_pass = 0 + + )t + ${ew.customSqlSegment} + select t.id - ,count(distinct etr.worker_card) qualifierNum + ,count(distinct etr.worker_card) examQualifierNum from worker_admission t join exam_train_record etr on etr.application_id=t.id where t.id in diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionDetailServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionDetailServiceImpl.java index eec0027bf..a5ec41831 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionDetailServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionDetailServiceImpl.java @@ -22,6 +22,7 @@ import com.zhgd.xmgl.modules.exam.service.IExamTrainRecordService; import com.zhgd.xmgl.modules.worker.entity.*; import com.zhgd.xmgl.modules.worker.mapper.UfaceDevMapper; import com.zhgd.xmgl.modules.worker.service.*; +import com.zhgd.xmgl.util.FlowUtil; import com.zhgd.xmgl.util.MapBuilder; import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.RefUtil; @@ -33,6 +34,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -70,6 +72,15 @@ public class WorkerAdmissionDetailServiceImpl extends ServiceImpl queryPageList(HashMap param) { @@ -286,6 +297,7 @@ public class WorkerAdmissionDetailServiceImpl extends ServiceImpl idCardMap = detailList.stream().collect(Collectors.toMap(WorkerAdmissionDetail::getIdCard, Function.identity(), (o1, o2) -> o1)); existDepartmentInfos.addAll(addDepartments); for (WorkerInfo addWorker : addWorkers) { try { @@ -300,6 +312,21 @@ public class WorkerAdmissionDetailServiceImpl extends ServiceImpl queryPageList(HashMap param) { @@ -155,6 +161,7 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl map) { String instanceId = FlowUtil.getString(map, "instanceId"); + String startUser = FlowUtil.getString(map, "startUser"); // HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult(); // Date approvalTime = historicProcessInstance.getEndTime(); Long certificateIssuingUnit = FlowUtil.getPullDownLong(map, "certificateIssuingUnit"); @@ -174,6 +181,10 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl workerTypeList = dictionaryItemService.getDictList("bt_worker_type", projectSn); if (map.get("details") != null) { if (map.get("details") instanceof List) { + List applyUsers = systemUserService.getProjectChildernSystemUserList(new MapBuilder() + .put("userId", startUser) + .put("projectSn", projectSn) + .build()); // List nums = workerAdmissionDetailService.list(new LambdaQueryWrapper() // .eq(WorkerAdmissionDetail::getProjectSn, projectSn) // .eq(WorkerAdmissionDetail::getIsCertificateQualified, 1) @@ -183,12 +194,18 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl readNums = detailsList.stream().map(o -> MapUtils.getString(((Map) o), "field8425114066876")).collect(Collectors.toList()); List nums = workerInfoService.list(new LambdaQueryWrapper() .in(WorkerInfo::getNum, readNums).eq(WorkerInfo::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION)).stream().map(WorkerInfo::getNum).collect(Collectors.toList()); + if (applyUsers.size() > 0) { + nums.remove(applyUsers.get(0).getNum()); + } // List existDetailIdCards = workerAdmissionDetailService.list(new LambdaQueryWrapper() // .in(WorkerAdmissionDetail::getIdCard, idCards) // .eq(WorkerAdmissionDetail::getIsCertificateQualified, 1) // .eq(WorkerAdmissionDetail::getProjectSn, projectSn)).stream().map(WorkerAdmissionDetail::getIdCard).collect(Collectors.toList()); List existWorkerIdCards = workerInfoService.list(new LambdaQueryWrapper() .in(WorkerInfo::getIdCard, idCards).eq(WorkerInfo::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION)).stream().map(WorkerInfo::getIdCard).collect(Collectors.toList()); + if (applyUsers.size() > 0) { + existWorkerIdCards.remove(applyUsers.get(0).getIdCard()); + } // existDetailIdCards.addAll(existWorkerIdCards); existWorkerIdCards.stream().distinct(); for (Object o : detailsList) { @@ -385,6 +402,14 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl> list = ExcelUtils.jxlExlToList(is, 0); + list = list.stream().filter(o -> { + for (Map.Entry entry : o.entrySet()) { + if (StrUtil.isNotBlank(entry.getValue())) { + return true; + } + } + return false; + }).collect(Collectors.toList()); if (list == null || list.size() == 0) { throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); } diff --git a/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamWorkerController.java b/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamWorkerController.java index 035415f6c..2706c09d9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamWorkerController.java +++ b/src/main/java/com/zhgd/xmgl/modules/exam/controller/ExamWorkerController.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -220,17 +221,17 @@ public class ExamWorkerController { BigDecimal total = NumberUtil.mul(list.size(), score); if (key == 1) { params.put("t1", typeArr[++typeIndex] + "、单选题:(每题" + score + "分,共计" + total + "分)"); - addOption(list, content, i, imageMap); + addOption(list, content, i, imageMap, params); params.put("c1", content.toString()); } else if (key == 2) { params.put("t2", typeArr[++typeIndex] + "、多选题:(每题" + one.getScore() + "分,共计" + total + "分、漏选少选得" + NumberUtil.div(one.getScore(), 2, 2) + "分,错选不得分。)"); //遍历题目 - addOption(list, content, i, imageMap); + addOption(list, content, i, imageMap, params); params.put("c2", content.toString()); } else { params.put("t3", typeArr[++typeIndex] + "、判断题(每题" + one.getScore() + "分,共" + total + "分,正确:打√,错误:打×)"); //遍历题目 - addOption(list, content, i, imageMap); + addOption(list, content, i, imageMap, params); params.put("c3", content.toString()); } } @@ -243,8 +244,8 @@ public class ExamWorkerController { params.put("score", record.getScore()); params.put("startExamTime", DateUtil.format(record.getStartExamTime(), "yyyy年MM月dd日")); - String tempUrl = Fileutils.getExportTemplateFile("template/下载试卷模板.docx").getAbsolutePath(); -// String tempUrl = "C:\\Users\\Administrator\\Desktop\\下载试卷模板.docx"; +// String tempUrl = Fileutils.getExportTemplateFile("template/下载试卷模板.docx").getAbsolutePath(); + String tempUrl = "C:\\Users\\Administrator\\Desktop\\下载试卷模板.docx"; //生成word文档流 EasyPoiUtil.exportNewLineWord(response, params, FileUtil.file(tempUrl)); @@ -344,17 +345,17 @@ public class ExamWorkerController { BigDecimal total = NumberUtil.mul(volist.size(), score); if (key == 1) { params.put("t1", typeArr[++typeIndex] + "、单选题:(每题" + score + "分,共计" + total + "分)"); - addOption(volist, content, i, imageMap); + addOption(volist, content, i, imageMap, params); params.put("c1", content.toString()); } else if (key == 2) { params.put("t2", typeArr[++typeIndex] + "、多选题:(每题" + one.getScore() + "分,共计" + total + "分、漏选少选得" + NumberUtil.div(one.getScore(), 2, 2) + "分,错选不得分。)"); //遍历题目 - addOption(volist, content, i, imageMap); + addOption(volist, content, i, imageMap, params); params.put("c2", content.toString()); } else { params.put("t3", typeArr[++typeIndex] + "、判断题(每题" + one.getScore() + "分,共" + total + "分,正确:打√,错误:打×)"); //遍历题目 - addOption(volist, content, i, imageMap); + addOption(volist, content, i, imageMap, params); params.put("c3", content.toString()); } } @@ -401,8 +402,9 @@ public class ExamWorkerController { * @param content * @param i * @param imageMap + * @param params */ - private void addOption(List list, StringBuilder content, int[] i, HashMap imageMap) { + private void addOption(List list, StringBuilder content, int[] i, HashMap imageMap, Map params) { //遍历题目 for (ExamQuestionBankVo question : list) { content.append(" ").append(i[0]).append("、"); @@ -411,18 +413,26 @@ public class ExamWorkerController { JSONArray ja = JSON.parseArray(question.getPic()); if (CollUtil.isNotEmpty(ja)) { //保存图片占位符 - /*try { - String imageKey = "image" + i[0]; - imageMap.put(imageKey, EasyPoiUtil.imgFormatting(PathUtil.getBasePath() + "/" + ja.getJSONObject(0).getString("url"), 18, 18)); - content.append("{{" + imageKey + "}}"); - } catch (Exception e) { - log.error("导出word添加题目和选项错误", e); - }*/ +// try { +// String imageKey = "image" + i[0]; +// String url = ja.getJSONObject(0).getString("url"); +// String dest = PathUtil.getBasePath() + "/temp/" + IdUtil.randomUUID() + "." + StrUtil.subAfter(url, ".", true); +// HttpUtil.downloadFile(url, dest); +// imageMap.put(imageKey, EasyPoiUtil.imgFormatting(dest, 18, 18)); +// content.append("{{" + imageKey + "}}"); +// params.put(imageKey, imageMap.get(imageKey)); +// } catch (Exception e) { +// log.error("导出word添加题目和选项错误", e); +// } } } - - content.append(question.getQuestionName().replaceAll("[((]\\s*?[))]", "( " - + (question.getType() != 3 ? question.getSelectOption() : (Objects.equals(question.getSelectOption(), "对") ? "√" : "×")) + " )")).append("\n"); + String selectOption = question.getSelectOption(); + if (Objects.equals(question.getSelectOption(), "对")) { + selectOption = "√"; + } else if (Objects.equals(question.getSelectOption(), "错")) { + selectOption = "×"; + } + content.append(question.getQuestionName().replaceAll("[((]\\s*?[))]", "( " + selectOption + " )")).append("\n"); if (question.getType() == 3) { continue; } diff --git a/src/main/java/com/zhgd/xmgl/modules/exam/service/impl/ExamTrainRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/exam/service/impl/ExamTrainRecordServiceImpl.java index 1c8f25f9f..2b9b70821 100644 --- a/src/main/java/com/zhgd/xmgl/modules/exam/service/impl/ExamTrainRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/exam/service/impl/ExamTrainRecordServiceImpl.java @@ -135,7 +135,8 @@ public class ExamTrainRecordServiceImpl extends ServiceImpl Objects.equals(o.getSubmit(), 0)).sorted((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())).findFirst().map(o -> o).orElse(null); if (notSubmit == null) { - throw new OpenAlertException("您已提交试卷"); + //您已提交试卷 + return rs.stream().filter(o -> Objects.equals(o.getSubmit(), 1)).sorted((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())).findFirst().map(o -> o).orElse(null); } ExamTrainRecord submit = rs.stream().filter(o -> Objects.equals(o.getSubmit(), 1) && Objects.equals(o.getIsNewBatch(), 1)).sorted((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())).findFirst().map(o -> o).orElse(null); if (submit == null) { @@ -319,11 +320,14 @@ public class ExamTrainRecordServiceImpl extends ServiceImpl 0) { - admissionDetail = details.get(0); - typeName = admissionDetail.getPostWorkTypeName(); + admissionDetail = details.stream().filter(o -> Objects.equals(o.getIsCertificateQualified(), 1)).findFirst().map(o -> o).orElse(null); + if (admissionDetail != null) { + typeName = admissionDetail.getPostWorkTypeName(); + } else { + throw new OpenAlertException("人员资质不合格"); + } } else { throw new OpenAlertException("人员在人员入场中不存在"); } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerContract.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerContract.java index 8e07e0473..cdf2d058c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerContract.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerContract.java @@ -22,8 +22,8 @@ import io.swagger.annotations.ApiModelProperty; @ApiModel(value="WorkerContract实体类",description="WorkerContract") public class WorkerContract implements Serializable { private static final long serialVersionUID = 1L; - - /**合同表*/ + + /**合同表*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value="合同表") private java.lang.Long id ; @@ -58,7 +58,6 @@ public class WorkerContract implements Serializable { /**人员ID*/ @Excel(name = "人员ID", width = 15) @ApiModelProperty(value="人员ID") - private java.lang.Long workerId ; /**签订状态(0.未签订 1.已签订)*/ @Excel(name = "签订状态(0.未签订 1.已签订)", width = 15) diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerPhysicals.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerPhysicals.java index a7cc7d1a1..d4cab2af5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerPhysicals.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerPhysicals.java @@ -22,7 +22,7 @@ import io.swagger.annotations.ApiModelProperty; @ApiModel(value="WorkerPhysicals实体类",description="WorkerPhysicals") public class WorkerPhysicals implements Serializable { private static final long serialVersionUID = 1L; - + /**id*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value="id") @@ -30,7 +30,6 @@ public class WorkerPhysicals implements Serializable { /**人员Id*/ @Excel(name = "人员Id", width = 15) @ApiModelProperty(value="人员Id") - private java.lang.Long workerId ; /**项目唯一标识*/ @Excel(name = "项目唯一标识", width = 15) @@ -50,14 +49,24 @@ public class WorkerPhysicals implements Serializable { private java.lang.String personWeight ; /**体检时间*/ @Excel(name = "体检时间", width = 15) - @ApiModelProperty(value="体检时间") - private java.lang.String physicalsTime ; - /**状态,1未体检,2体检合格,3体检不合格*/ - @Excel(name = "状态,1未体检,2体检合格,3体检不合格", width = 15) - @ApiModelProperty(value="状态,1未体检,2体检合格,3体检不合格") - private java.lang.Integer state ; - /**结论*/ - @Excel(name = "结论", width = 15) - @ApiModelProperty(value="结论") - private java.lang.String conclusion ; + @ApiModelProperty(value = "体检时间") + private java.lang.String physicalsTime; + /** + * 状态,1未体检,2体检合格,3体检不合格 + */ + @Excel(name = "状态,1未体检,2体检合格,3体检不合格", width = 15) + @ApiModelProperty(value = "状态,1未体检,2体检合格,3体检不合格") + private java.lang.Integer state; + /** + * 结论 + */ + @Excel(name = "结论", width = 15) + @ApiModelProperty(value = "结论") + private java.lang.String conclusion; + /** + * 附件 + */ + @Excel(name = "附件", width = 15) + @ApiModelProperty(value = "附件") + private java.lang.String attachment; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml index f69523ddf..706ac2e40 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml @@ -53,6 +53,9 @@ LEFT JOIN device_unit du on du.id=a.work_area WHERE 1 = 1 + + and a.num like concat('%', #{param.num},'%') + and ( wt.type_name = '电工' or wt.type_name = '电焊工' or @@ -1216,7 +1219,7 @@ ru.rule_name ,if(a.person_type=1,wt.type_name,c.department_name) as post_work_type_name ,du.device_unit_name as work_area_name - ,ei1.enterprise_name as epc_cbs + ,ei1.enterprise_name as epc_cbs_name from worker_info a INNER JOIN project p ON a.project_sn = p.project_sn LEFT JOIN team_info b ON a.team_id = b.id diff --git a/src/main/java/com/zhgd/xmgl/util/FlowUtil.java b/src/main/java/com/zhgd/xmgl/util/FlowUtil.java index 99ba9f8d3..e88c8709e 100644 --- a/src/main/java/com/zhgd/xmgl/util/FlowUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/FlowUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -191,4 +192,24 @@ public class FlowUtil { formData.putAll(formData1); } + /** + * 拼接星号前端url,文件名称*文件路径,如image 1499@2x.png*67adc25d35f0f51e0803cc80.png,多个,分割 + * + * @param json + * @return + */ + public static String buildXingUrl(String json) { + StringBuilder url = new StringBuilder(); + JSONArray ja = JSON.parseArray(json); + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + if (i != 0) { + url.append(","); + } + url.append(jo.getString("name")); + url.append("*"); + url.append(jo.getString("url")); + } + return url.toString(); + } } diff --git a/src/main/resources/application-gsx-t-dev.properties b/src/main/resources/application-gsx-t-dev.properties index a891ac4f6..0d617cf7c 100644 --- a/src/main/resources/application-gsx-t-dev.properties +++ b/src/main/resources/application-gsx-t-dev.properties @@ -81,4 +81,4 @@ magic-api.resource.location=D:/jxj/prod/backEnd/itbgpImage/data/magic-api #上传的图片的url前缀 upload.image.url.prefix=${spring.file-storage.minio[0].domain} wordExcelUrl=http://192.168.34.133:5173/#/canvasEditor -defaultProjectSn=BD3137498CB84BF0969979E0342CDBCA +defaultProjectSn=5B8B3DB047214AE188F2C7916DD08203 diff --git a/src/main/resources/template/下载试卷模板.docx b/src/main/resources/template/下载试卷模板.docx index 2c9903d21f1efe4f63de9f214f53d72a77c4a5f6..f424f309ee65bf04d21600ce1dcb13bbc3d2acc4 100644 GIT binary patch delta 7140 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