|
@@ -4,15 +4,18 @@ import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DatePattern;
|
|
import cn.hutool.core.date.DatePattern;
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
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.text.PageSize;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
|
|
import com.qunzhixinxi.hnqz.admin.api.dto.WmSupervisionDto;
|
|
import com.qunzhixinxi.hnqz.admin.api.dto.WmSupervisionDto;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysRole;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysRole;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysUserRole;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysUserRole;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageSupervision;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageSupervision;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmRoleSupervisionWarn;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmRoleSupervisionWarn;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmRoleSupervisionWarnRule;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmRoleSupervisionWarnRule;
|
|
@@ -21,9 +24,12 @@ import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackageStatus;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSupervision;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSupervision;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSupervisionAdvice;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSupervisionAdvice;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskType;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmWarnUserRelation;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmWarnUserRelation;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.mapper.WmDaDrugEntDrugtableMapper;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysEnterpriseAreaService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysEnterpriseAreaService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.SysFileService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysRoleService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysRoleService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysUserDrugService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysUserDrugService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysUserRoleService;
|
|
import com.qunzhixinxi.hnqz.admin.service.SysUserRoleService;
|
|
@@ -36,20 +42,27 @@ import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskSupervisionAdviceService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskSupervisionAdviceService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskSupervisionService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskSupervisionService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmWarnUserRelationService;
|
|
import com.qunzhixinxi.hnqz.admin.service.WmWarnUserRelationService;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.util.OsEnvUtils;
|
|
import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.core.util.PdfUtils;
|
|
import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.mock.web.MockMultipartFile;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.nio.file.Files;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
@@ -94,6 +107,9 @@ public class WmSupervisionManager {
|
|
private final SysUserRoleService userRoleService;
|
|
private final SysUserRoleService userRoleService;
|
|
private final SysUserDrugService userDrugService;
|
|
private final SysUserDrugService userDrugService;
|
|
private final WmTaskSupervisionAdviceService taskSupervisionAdviceService;
|
|
private final WmTaskSupervisionAdviceService taskSupervisionAdviceService;
|
|
|
|
+ private final SysFileService fileService;
|
|
|
|
+ private final WmTaskTypeService taskTypeService;
|
|
|
|
+ private final WmDaDrugEntDrugtableMapper wmDaDrugEntDrugtableMapper;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1444,6 +1460,184 @@ public class WmSupervisionManager {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 生成报告pdf
|
|
|
|
+ *
|
|
|
|
+ * @param entId 企业ID
|
|
|
|
+ * @param user 操作人
|
|
|
|
+ * @return 本地路径
|
|
|
|
+ */
|
|
|
|
+ public Map<String, String> exportSupervisionReportPDF(Integer entId, HnqzUser user) throws Exception {
|
|
|
|
+
|
|
|
|
+ Map<String, String> envPaths = OsEnvUtils.getEachEnvPaths();
|
|
|
|
+ // 生成本地路径
|
|
|
|
+ String targetPath = envPaths.get(OsEnvUtils.TargetFile.TEMP.getName()) + DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN).format(LocalDate.now()) + "/supervision_" + IdUtil.fastSimpleUUID() + "_" + DateTimeFormatter.ofPattern(DatePattern.PURE_DATETIME_PATTERN).format(LocalDateTime.now()) + ".pdf";
|
|
|
|
+
|
|
|
|
+ // 封装报告数据
|
|
|
|
+ Object[][] datas = buildSupervisionReportDatas(entId, user);
|
|
|
|
+
|
|
|
|
+ PdfUtils.generateSupervisionReport(targetPath, PageSize.A4, true, envPaths.get(OsEnvUtils.TargetFile.FONT.getName()) + "SimSun.ttc", datas);
|
|
|
|
+
|
|
|
|
+ File pdf = new File(targetPath);
|
|
|
|
+ MockMultipartFile multipartFile = new MockMultipartFile("file", pdf.getName(), null, Files.newInputStream(pdf.toPath()));
|
|
|
|
+ Map<String, String> uploaded = fileService.upload(multipartFile, user.getUsername());
|
|
|
|
+
|
|
|
|
+ // 上传到oss
|
|
|
|
+ return uploaded;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Object[][] buildSupervisionReportDatas(Integer entId, HnqzUser user) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 获取企业
|
|
|
|
+ SysDept service = deptService.getById(entId);
|
|
|
|
+
|
|
|
|
+ // 获取服务商下的所有c端包
|
|
|
|
+ List<WmScorePackage> pkgs = packageService.list(Wrappers.<WmScorePackage>lambdaQuery().eq(WmScorePackage::getSendPackageDeptId, service.getDeptId().toString()));
|
|
|
|
+
|
|
|
|
+ if (CollUtil.isEmpty(pkgs)) {
|
|
|
|
+ throw new BizException("当前服务商不存在可用的执行包,无法导出");
|
|
|
|
+ }
|
|
|
|
+ Map<String, WmScorePackage> pkgMap = pkgs.stream().collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
|
|
|
|
+
|
|
|
|
+ // 获取c端包下的所有的产品
|
|
|
|
+ Map<String, WmDaDrugEntDrugtable> drugMap = wmDaDrugEntDrugtableMapper.selectList(Wrappers.<WmDaDrugEntDrugtable>lambdaQuery().in(WmDaDrugEntDrugtable::getId, pkgs.stream().flatMap(p -> Arrays.stream(p.getDrugtable())).distinct().sorted().collect(Collectors.toList()))).stream().collect(Collectors.toMap(WmDaDrugEntDrugtable::getId, Function.identity()));
|
|
|
|
+
|
|
|
|
+ // 获取服务类型
|
|
|
|
+ Map<String, String> taskTypeMap = taskTypeService.list(Wrappers.<WmTaskType>lambdaQuery().le(WmTaskType::getId, "100")).stream().collect(Collectors.toMap(WmTaskType::getId, WmTaskType::getTaskTypeName));
|
|
|
|
+
|
|
|
|
+ // 获取包下的所有任务
|
|
|
|
+ List<WmTask> tasks = taskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getScorePackageId, pkgs));
|
|
|
|
+ Map<String, WmTask> tid2EntityMap = tasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
|
+
|
|
|
|
+ List<Integer> taskIds = tasks.stream().mapToInt(t -> Integer.parseInt(t.getId())).boxed().distinct().sorted().collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 代表名称
|
|
|
|
+ List<Integer> uid = tasks.stream().mapToInt(t -> Integer.parseInt(t.getTaskUserId())).boxed().distinct().sorted().collect(Collectors.toList());
|
|
|
|
+ Map<Integer, String> userMap = userService.listByIds(uid).stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getRealname));
|
|
|
|
+
|
|
|
|
+ List<WmTaskSupervision> taskSupervisions = taskSupervisionService.list(Wrappers.<WmTaskSupervision>lambdaQuery().eq(WmTaskSupervision::getTaskId, taskIds).eq(WmTaskSupervision::getCreateBy, user.getUsername()));
|
|
|
|
+
|
|
|
|
+ // 获取监督意见
|
|
|
|
+ List<Long> supIds = taskSupervisions.stream().mapToLong(WmTaskSupervision::getSupervisionId).boxed().distinct().sorted().collect(Collectors.toList());
|
|
|
|
+ Map<Long, List<WmTaskSupervisionAdvice>> advices = taskSupervisionAdviceService.list(Wrappers.<WmTaskSupervisionAdvice>lambdaQuery().in(WmTaskSupervisionAdvice::getTaskSupervisionId, supIds)).stream().collect(Collectors.groupingBy(WmTaskSupervisionAdvice::getTaskSupervisionId));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Object[][] datas = new Object[taskSupervisions.size() + 2][12];
|
|
|
|
+ datas[0][0] = "2024年第四季度监察结构";
|
|
|
|
+ datas[1][0] = "服务ID";
|
|
|
|
+ datas[1][1] = "服务类型";
|
|
|
|
+ datas[1][2] = "代表名称";
|
|
|
|
+ datas[1][3] = "产品名称";
|
|
|
|
+ datas[1][4] = "生产企业";
|
|
|
|
+ datas[1][5] = "执行包名称";
|
|
|
|
+ datas[1][6] = "周期";
|
|
|
|
+ datas[1][7] = "监督结果";
|
|
|
|
+ datas[1][8] = "监督意见";
|
|
|
|
+ datas[1][9] = "部门负责人意见";
|
|
|
|
+ datas[1][10] = "分管领导意见";
|
|
|
|
+ datas[1][11] = "总经理意见";
|
|
|
|
+
|
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
|
|
+ int idx = 2;
|
|
|
|
+ for (WmTaskSupervision wmTaskSupervision : taskSupervisions) {
|
|
|
|
+ for (int j = 0; j < 12; j++) {
|
|
|
|
+
|
|
|
|
+ // 服务ID
|
|
|
|
+ if (j == 0) {
|
|
|
|
+ datas[idx][j] = wmTaskSupervision.getTaskId().toString();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 服务类型
|
|
|
|
+ if (j == 1) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+
|
|
|
|
+ datas[idx][j] = wmTask != null ? taskTypeMap.get(wmTask.getTaskTypeId()) : "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 代表名称
|
|
|
|
+ if (j == 2) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+ datas[idx][j] = wmTask != null ? userMap.get(Integer.parseInt(wmTask.getTaskUserId())) : "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 产品名称
|
|
|
|
+ if (j == 3) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+ WmScorePackage scorePackage = pkgMap.get(wmTask.getScorePackageId());
|
|
|
|
+ String drugId = scorePackage.getDrugtable()[0];
|
|
|
|
+ WmDaDrugEntDrugtable drugtable = drugMap.get(drugId);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ datas[idx][j] = drugtable.getDrugname();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 生产企业
|
|
|
|
+ if (j == 4) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+ WmScorePackage scorePackage = pkgMap.get(wmTask.getScorePackageId());
|
|
|
|
+ String drugId = scorePackage.getDrugtable()[0];
|
|
|
|
+ WmDaDrugEntDrugtable drugtable = drugMap.get(drugId);
|
|
|
|
+ datas[idx][j] = drugtable.getDrugEntName();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 执行包名称
|
|
|
|
+ if (j == 5) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+ WmScorePackage scorePackage = pkgMap.get(wmTask.getScorePackageId());
|
|
|
|
+ datas[idx][j] = scorePackage.getScorePackageName();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 周期
|
|
|
|
+ if (j == 6) {
|
|
|
|
+ WmTask wmTask = tid2EntityMap.get(wmTaskSupervision.getTaskId().toString());
|
|
|
|
+ WmScorePackage scorePackage = pkgMap.get(wmTask.getScorePackageId());
|
|
|
|
+ datas[idx][j] = String.format("%s至%s", formatter.format(scorePackage.getStartTime()), formatter.format(scorePackage.getEndTime()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 监督结果
|
|
|
|
+ if (j == 7) {
|
|
|
|
+ datas[idx][j] = wmTaskSupervision.getSupervisionResult() ? "通过" : "不通过";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 监督意见
|
|
|
|
+ if (j == 8) {
|
|
|
|
+ datas[idx][j] = wmTaskSupervision.getRemarks();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 部门负责人意见
|
|
|
|
+ if (j == 9) {
|
|
|
|
+ List<WmTaskSupervisionAdvice> supervisionAdvices = advices.get(wmTaskSupervision.getSupervisionId());
|
|
|
|
+ WmTaskSupervisionAdvice advice = supervisionAdvices.get(0);
|
|
|
|
+ datas[idx][j] = advice != null ? advice.getRemarks() : "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 分管领导意见
|
|
|
|
+ if (j == 10) {
|
|
|
|
+ List<WmTaskSupervisionAdvice> supervisionAdvices = advices.get(wmTaskSupervision.getSupervisionId());
|
|
|
|
+ WmTaskSupervisionAdvice advice = supervisionAdvices.get(1);
|
|
|
|
+ datas[idx][j] = advice != null ? advice.getRemarks() : "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 总经理意见
|
|
|
|
+ if (j == 11) {
|
|
|
|
+ List<WmTaskSupervisionAdvice> supervisionAdvices = advices.get(wmTaskSupervision.getSupervisionId());
|
|
|
|
+ WmTaskSupervisionAdvice advice = supervisionAdvices.get(2);
|
|
|
|
+ datas[idx][j] = advice != null ? advice.getRemarks() : "";
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ idx++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return datas;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
// public Boolean checkTaskSupervision(WmSupervisionDto.OnTaskSupervisionCheck resource, HnqzUser user) {
|
|
// public Boolean checkTaskSupervision(WmSupervisionDto.OnTaskSupervisionCheck resource, HnqzUser user) {
|
|
// Integer supervisionId = resource.getSupervisionId();
|
|
// Integer supervisionId = resource.getSupervisionId();
|