|
@@ -0,0 +1,173 @@
|
|
|
+package com.fdkankan.fusion.service.impl;
|
|
|
+
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.deepoove.poi.XWPFTemplate;
|
|
|
+import com.deepoove.poi.config.Configure;
|
|
|
+import com.deepoove.poi.config.ConfigureBuilder;
|
|
|
+import com.deepoove.poi.data.TextRenderData;
|
|
|
+import com.deepoove.poi.data.style.Style;
|
|
|
+import com.deepoove.poi.xwpf.NiceXWPFDocument;
|
|
|
+import com.fdkankan.fusion.common.ResultCode;
|
|
|
+import com.fdkankan.fusion.common.util.DateUtils;
|
|
|
+import com.fdkankan.fusion.common.util.XwpTemplateUtils;
|
|
|
+import com.fdkankan.fusion.entity.*;
|
|
|
+import com.fdkankan.fusion.exception.BusinessException;
|
|
|
+import com.fdkankan.fusion.mapper.ICaseInquestCriminalMapper;
|
|
|
+import com.fdkankan.fusion.response.CaseInquestCriminalVo;
|
|
|
+import com.fdkankan.fusion.response.CaseInquestVo;
|
|
|
+import com.fdkankan.fusion.response.WitnessVo;
|
|
|
+import com.fdkankan.fusion.service.*;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @since 2024-10-18
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class CaseInquestCriminalServiceImpl extends ServiceImpl<ICaseInquestCriminalMapper, CaseInquestCriminal> implements ICaseInquestCriminalService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ITmUserService tmUserService;
|
|
|
+ @Autowired
|
|
|
+ ICaseService caseService;
|
|
|
+ @Autowired
|
|
|
+ ITmDepartmentService tmDepartmentService;
|
|
|
+ @Autowired
|
|
|
+ ICaseNumService caseNumService;
|
|
|
+ @Autowired
|
|
|
+ IScenePlusService scenePlusService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CaseInquestCriminal getByInquestFileId(Integer caseId) {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<CaseInquestCriminal> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(CaseInquestCriminal::getInquestFileId,caseId);
|
|
|
+ CaseInquestCriminal caseInquestCriminal = this.getOne(wrapper);
|
|
|
+ /**
|
|
|
+ * 1.标题 //案件名称
|
|
|
+ * 2.笔录人 绘图人 照相人 //登录人
|
|
|
+ * 3.制作时间 //当前时间
|
|
|
+ * 4.现场勘验单位 指派/报告单位 //部门名称
|
|
|
+ * 5.勘验时间 //第一个场景的拍摄时间
|
|
|
+ * 6.现场地点 //案件地理位置
|
|
|
+ * 7.现场勘验情况 //讯飞ai图片说明
|
|
|
+ * 8.单位 //部门名称
|
|
|
+ */
|
|
|
+ if(caseInquestCriminal == null){
|
|
|
+ if(StpUtil.isLogin()){
|
|
|
+ TmUser tmUser = tmUserService.getById(StpUtil.getLoginId().toString());
|
|
|
+ CaseEntity caseEntity = caseService.getById(caseId);
|
|
|
+ TmDepartment tmDepartment = tmDepartmentService.getById(caseEntity.getDeptId());
|
|
|
+
|
|
|
+ caseInquestCriminal = new CaseInquestCriminal();
|
|
|
+ caseInquestCriminal.setInquestFileId(caseId);
|
|
|
+ caseInquestCriminal.setDeptName(tmDepartment.getName());
|
|
|
+ caseInquestCriminal.setTitle(caseEntity.getCaseTitle());
|
|
|
+ caseInquestCriminal.setSendDept(tmDepartment.getName());
|
|
|
+ caseInquestCriminal.setRecorder(tmUser.getNickName());
|
|
|
+ caseInquestCriminal.setPainter(tmUser.getNickName());
|
|
|
+ caseInquestCriminal.setPhotographer(tmUser.getNickName());
|
|
|
+ caseInquestCriminal.setMakeTime(new Date());
|
|
|
+ caseInquestCriminal.setReportDept(tmDepartment.getName());
|
|
|
+ caseInquestCriminal.setAddress(caseEntity.getMapUrl());
|
|
|
+ this.save(caseInquestCriminal);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return caseInquestCriminal;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveByParam(CaseInquestCriminal caseInquestCriminal) {
|
|
|
+ if(caseInquestCriminal.getInquestFileId() == null){
|
|
|
+ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
|
|
|
+ }
|
|
|
+ CaseInquestCriminal dbCaseInquest = this.getById(caseInquestCriminal.getInquestFileId());
|
|
|
+ if(dbCaseInquest != null){
|
|
|
+ caseInquestCriminal.setId(dbCaseInquest.getId());
|
|
|
+ }
|
|
|
+ this.saveOrUpdate(caseInquestCriminal);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public XWPFTemplate getWordByTemplate(CaseInquestCriminal caseInquest) {
|
|
|
+
|
|
|
+ InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/inquest_criminal-template.docx");
|
|
|
+ // 渲染模板
|
|
|
+
|
|
|
+ CaseInquestCriminalVo vo = new CaseInquestCriminalVo();
|
|
|
+ BeanUtils.copyProperties(caseInquest,vo);
|
|
|
+
|
|
|
+ //[{"unit":"四维","name":"张三","typeLabel":"笔录人","type":0,"job":"植物一"}]
|
|
|
+ String recorderInfo = "%s:姓名 %s 单位 %s 职务 %s\n";
|
|
|
+ StringBuilder recorderInfoMsg = new StringBuilder();
|
|
|
+ for (Object object : vo.getRecorderInfo()) {
|
|
|
+ JSONObject obj = (JSONObject) object;
|
|
|
+ String format = String.format(recorderInfo,obj.getString("typeLabel"), obj.getString("name"), obj.getString("unit"), obj.getString("job"));
|
|
|
+ recorderInfoMsg.append(format);
|
|
|
+ }
|
|
|
+ TextRenderData text = new TextRenderData("000000",recorderInfoMsg.toString());
|
|
|
+ Style style = text.getStyle();
|
|
|
+ style.setUnderlinePatterns(UnderlinePatterns.SINGLE);
|
|
|
+ vo.setRecorderInfoText(text);
|
|
|
+
|
|
|
+ //[{"unit":"四维","job":"植物一"}]
|
|
|
+ String signatureInfo = "本人签名: 单位 %s 职务 %s\n";
|
|
|
+ StringBuilder signatureInfoMsg = new StringBuilder();
|
|
|
+ for (Object object : vo.getSignatureInfo()) {
|
|
|
+ JSONObject obj = (JSONObject) object;
|
|
|
+ String format = String.format(signatureInfo, obj.getString("unit"), obj.getString("job"));
|
|
|
+ signatureInfoMsg.append(format);
|
|
|
+ }
|
|
|
+ TextRenderData text2 = new TextRenderData("000000",signatureInfoMsg.toString());
|
|
|
+ Style style2 = text2.getStyle();
|
|
|
+ style2.setUnderlinePatterns(UnderlinePatterns.SINGLE);
|
|
|
+ vo.setSignatureInfoText(text2);
|
|
|
+
|
|
|
+ //[{"birthday":"2024-10-15T16:00:00.000Z","address":"dfsdfdsdsdsdsds","sex":0}]
|
|
|
+ //[{"sex":0,"birthday":"","address":""},{"sex":0,"birthday":"","address":""}]
|
|
|
+ String witnessInfo = "本人签名: 性别 %s 出生日期 %s 住址 %s\n";
|
|
|
+ StringBuilder witnessInfoMsg = new StringBuilder();
|
|
|
+ for (Object object : vo.getWitnessInfo()) {
|
|
|
+ JSONObject obj = (JSONObject) object;
|
|
|
+ String birthday = DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT) == null?"":DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT);
|
|
|
+ String format = String.format(witnessInfo, XwpTemplateUtils.getSexStr(obj.getInteger("sex")), birthday,obj.getString("address"));
|
|
|
+ witnessInfoMsg.append(format);
|
|
|
+ }
|
|
|
+ TextRenderData text3 = new TextRenderData("000000",witnessInfoMsg.toString());
|
|
|
+ Style style3 = text3.getStyle();
|
|
|
+ style3.setUnderlinePatterns(UnderlinePatterns.SINGLE);
|
|
|
+ vo.setWitnessInfoText(text3);
|
|
|
+
|
|
|
+ ConfigureBuilder builder = Configure.builder();
|
|
|
+ builder.useSpringEL(false);
|
|
|
+ //builder.setValidErrorHandler(new Configure.DiscardHandler());
|
|
|
+ XWPFTemplate compile = XWPFTemplate.compile(inputStream, builder.build());
|
|
|
+ compile.render(vo);
|
|
|
+ return compile;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|