Browse Source

feat: 导出任务审核

shc 5 months ago
parent
commit
31a3e8143e

+ 120 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/model/excel/TaskCheckHistoryExcelModel.java

@@ -0,0 +1,120 @@
+package com.qunzhixinxi.hnqz.admin.api.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+/**
+ * 任务审核记录excel模型
+ *
+ * @author jimmy
+ * @date 2025-01-06 11:24
+ */
+@Data
+@ColumnWidth(64)
+public class TaskCheckHistoryExcelModel {
+
+    @ExcelProperty("任务ID")
+    private String taskId;
+
+    @ExcelProperty("任务编号")
+    private String taskNumber;
+
+    @ExcelProperty("执行人")
+    private String salesName;
+
+    @ExcelProperty("执行人所在企业")
+    private String vendorName;
+
+    @ExcelProperty("区域")
+    private String area;
+
+    @ExcelProperty("执行包名称")
+    private String pkgName;
+
+    @ExcelProperty("任务内容ID")
+    private String taskContentId;
+
+    @ExcelProperty("任务类型")
+    private String taskType;
+
+    @ExcelProperty("产品名称(通用名)")
+    private String skuName;
+
+    @ExcelProperty("生产企业")
+    private String mahName;
+
+    // 服务商
+    @ExcelProperty("服务商负责人审核时间")
+    private String vendorCheckTime;
+
+    @ExcelProperty("服务商负责人是否通过")
+    private String vendorCheckResult;
+
+    @ExcelProperty("服务商负责人审核意见")
+    private String vendorCheckMsg;
+
+    // 地市
+    @ExcelProperty("事业部地市经理审核时间")
+    private String cityCheckTime;
+
+    @ExcelProperty("事业部地市经理是否通过")
+    private String cityCheckResult;
+
+    @ExcelProperty("事业部地市经理审核意见")
+    private String cityCheckMsg;
+
+    // 区域
+    @ExcelProperty("事业部区域经理审核时间")
+    private String areaCheckTime;
+
+    @ExcelProperty("事业部区域经理是否通过")
+    private String areaCheckResult;
+
+    @ExcelProperty("事业部区域经理审核意见")
+    private String areaCheckMsg;
+
+    // 市场组
+    @ExcelProperty("事业部市场组审核时间")
+    private String mktCheckTime;
+
+    @ExcelProperty("事业部市场组是否通过")
+    private String mktCheckResult;
+
+    @ExcelProperty("事业部市场组审核意见")
+    private String mktCheckMsg;
+
+    // 商务组
+    @ExcelProperty("事业部商务组是否通过")
+    private String bizCheckTime;
+
+    @ExcelProperty("事业部商务组是否通过")
+    private String bizCheckResult;
+
+    @ExcelProperty("事业部商务组审核意见")
+    private String bizCheckMsg;
+
+    // 分管领导
+    @ExcelProperty("事业部分管销售领导审核时间")
+    private String subMgrCheckTime;
+
+    @ExcelProperty("事业部分管销售领导是否通过")
+    private String subMgrCheckResult;
+
+    @ExcelProperty("事业部分管销售领导审核意见")
+    private String subMgrCheckMsg;
+
+    // 总经理
+    @ExcelProperty("事业部总经理审核时间")
+    private String mgrCheckTime;
+
+    @ExcelProperty("事业部总经理是否通过")
+    private String mgrCheckResult;
+
+    @ExcelProperty("事业部总经理导审核意见")
+    private String mgrCheckMsg;
+
+
+
+
+}

+ 198 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/init/InitController.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -23,12 +24,15 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUserArea;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContentConfig;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.api.model.excel.TaskCheckExcelModel;
+import com.qunzhixinxi.hnqz.admin.api.model.excel.TaskCheckHistoryExcelModel;
 import com.qunzhixinxi.hnqz.admin.api.model.excel.WmTaskDupModel;
 import com.qunzhixinxi.hnqz.admin.event.PackageContractEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.InitMapper;
@@ -52,12 +56,15 @@ import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
+import java.time.format.DateTimeFormatter;
 import java.util.IntSummaryStatistics;
 import java.util.TreeMap;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.data.redis.core.ListOperations;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -614,8 +621,8 @@ public class InitController {
   @Inner(value = false)
   @PostMapping(value = "/cnbg/del/dup/task")
   @Transactional(rollbackFor = Exception.class)
-  public R<Map<String, Collection<String>>> delDupTaskContent( @RequestBody
-      /*@RequestExcel(ignoreEmptyRow = true) */List<WmTaskDupModel> dup) {
+  public R<Map<String, Collection<String>>> delDupTaskContent(
+      @RequestBody /*@RequestExcel(ignoreEmptyRow = true) */ List<WmTaskDupModel> dup) {
 
     if (CollUtil.isEmpty(dup)) {
       return R.ok(Collections.EMPTY_MAP, "重复数据集为空");
@@ -1396,4 +1403,193 @@ public class InitController {
     r.put("details", list);
     return R.ok(r);
   }
+
+  @Inner(value = false)
+  @ResponseExcel(
+      name = "taskCheckHistoryExcel",
+      sheets = {@Sheet(sheetName = "审核信息")})
+  @GetMapping(value = "/cnbg/init/task/check/his/export")
+  public List<TaskCheckHistoryExcelModel> exportTaskCheckHistoryExcel() {
+
+    // 获取全部的审核信息
+    List<SysCheckChainNodeCheckHistory> his = checkChainNodeCheckHistoryService.list();
+
+    if (CollUtil.isEmpty(his)) {
+      return Collections.emptyList();
+    }
+
+    ListOperations operations = redisTemplate.opsForList();
+    // 从缓存中获取用户信息
+    List<SysUser> users = operations.range(CacheConstants.USER_KEY, 0, -1);
+    Map<Integer, SysUser> userMap =
+        users.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+
+    // 从缓存中获取企业信息
+    List<SysDept> depts = operations.range(CacheConstants.DEPT_KEY, 0, -1);
+    Map<Integer, SysDept> deptMap =
+        depts.stream().collect(Collectors.toMap(SysDept::getDeptId, Function.identity()));
+
+    // 从缓存中获取商品信息
+    List<WmDaDrugEntDrugtable> drugs = operations.range(CacheConstants.DRUG_KEY, 0, -1);
+    Map<String, WmDaDrugEntDrugtable> drugtableMap =
+        drugs.stream().collect(Collectors.toMap(WmDaDrugEntDrugtable::getId, Function.identity()));
+
+    List<WmScorePackage> pkgs = wmScorePackageService.list();
+
+    Map<String, WmScorePackage> pkgMap =
+        pkgs.stream().collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
+
+    Map<Integer, List<SysCheckChainNodeCheckHistory>> taskId2HisMap =
+        his.stream().collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getTargetId));
+
+    // 获取任务
+    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    List<TaskCheckHistoryExcelModel> collect =
+        taskId2HisMap.entrySet().parallelStream()
+            .map(
+                entry -> {
+                  Integer key = entry.getKey();
+
+                  WmTask task = taskService.getById(key.toString());
+
+                  if (task == null) {
+                    return null;
+                  }
+
+                  TaskCheckHistoryExcelModel model = new TaskCheckHistoryExcelModel();
+                  model.setTaskId(task.getId());
+                  model.setTaskNumber(task.getTaskNumber());
+
+                  String taskUserId = task.getTaskUserId();
+                  SysUser sysUser = userMap.get(Integer.parseInt(taskUserId));
+                  model.setSalesName(sysUser.getRealname());
+
+                  SysDept dept = deptMap.get(sysUser.getDeptId());
+
+                  model.setVendorName(dept.getName());
+                  model.setArea("");
+                  model.setTaskContentId(task.getTaskContentId());
+                  model.setTaskType(task.getTaskTypeId());
+
+                  WmScorePackage wmScorePackage = pkgMap.get(task.getScorePackageId());
+
+                  model.setPkgName(wmScorePackage.getScorePackageName());
+
+                  String drugId = wmScorePackage.getDrugtable()[0];
+
+                  WmDaDrugEntDrugtable drugtable = drugtableMap.get(drugId);
+
+                  model.setSkuName(drugtable.getDrugnameTy());
+                  model.setMahName(drugtable.getDrugEntName());
+
+                  Map<Integer, List<SysCheckChainNodeCheckHistory>> nodeId2CheckMap =
+                      entry.getValue().stream()
+                          .collect(Collectors.groupingBy(SysCheckChainNodeCheckHistory::getNodeId));
+
+                  // 服务商
+                  List<SysCheckChainNodeCheckHistory> vendor = nodeId2CheckMap.get(1);
+
+                  if (CollUtil.isNotEmpty(vendor)) {
+
+                    Map<String, String> info = getInfo(vendor, dtf);
+
+                    model.setVendorCheckTime(info.get("time"));
+                    model.setVendorCheckResult(info.get("result"));
+                    model.setVendorCheckMsg(info.get("msg"));
+                  }
+
+                  // 地市
+                  List<SysCheckChainNodeCheckHistory> city = nodeId2CheckMap.get(2);
+
+                  if (CollUtil.isNotEmpty(city)) {
+                    Map<String, String> info = getInfo(city, dtf);
+                    model.setCityCheckTime(info.get("time"));
+                    model.setCityCheckResult(info.get("result"));
+                    model.setCityCheckMsg(info.get("msg"));
+                  }
+
+                  // 区域
+                  List<SysCheckChainNodeCheckHistory> area = nodeId2CheckMap.get(3);
+
+                  if (CollUtil.isNotEmpty(area)) {
+                    Map<String, String> info = getInfo(city, dtf);
+                    model.setAreaCheckTime(info.get("time"));
+                    model.setAreaCheckResult(info.get("result"));
+                    model.setAreaCheckMsg(info.get("msg"));
+                  }
+
+                  // 市场
+                  List<SysCheckChainNodeCheckHistory> mkt = nodeId2CheckMap.get(8);
+
+                  if (CollUtil.isNotEmpty(vendor)) {
+                    Map<String, String> info = getInfo(city, dtf);
+                    model.setMktCheckTime(info.get("time"));
+                    model.setMktCheckResult(info.get("result"));
+                    model.setMktCheckMsg(info.get("msg"));
+                  }
+
+                  // 商务
+                  List<SysCheckChainNodeCheckHistory> biz = nodeId2CheckMap.get(9);
+
+                  if (CollUtil.isNotEmpty(biz)) {
+                    Map<String, String> info = getInfo(city, dtf);
+                    model.setBizCheckTime(info.get("time"));
+                    model.setBizCheckResult(info.get("result"));
+                    model.setBizCheckMsg(info.get("msg"));
+                  }
+
+                  // 分管领导
+                  List<SysCheckChainNodeCheckHistory> subMgr = nodeId2CheckMap.get(5);
+
+                  if (CollUtil.isNotEmpty(subMgr)) {
+                    Map<String, String> info = getInfo(subMgr, dtf);
+                    model.setSubMgrCheckTime(info.get("time"));
+                    model.setSubMgrCheckResult(info.get("result"));
+                    model.setSubMgrCheckMsg(info.get("msg"));
+                  }
+
+                  // 总经理
+                  List<SysCheckChainNodeCheckHistory> mgr = nodeId2CheckMap.get(6);
+
+                  if (CollUtil.isNotEmpty(mgr)) {
+                    Map<String, String> info = getInfo(mgr, dtf);
+                    model.setMgrCheckTime(info.get("time"));
+                    model.setMgrCheckResult(info.get("result"));
+                    model.setMgrCheckMsg(info.get("msg"));
+                  }
+
+                  return model;
+                })
+            .collect(Collectors.toList());
+
+    return collect;
+  }
+
+  private Map<String, String> getInfo(
+      List<SysCheckChainNodeCheckHistory> v, DateTimeFormatter dtf) {
+    v =
+        v.stream()
+            .sorted(Comparator.comparing(SysCheckChainNodeCheckHistory::getHistoryId))
+            .collect(Collectors.toList());
+
+    String time =
+        v.stream()
+            .map(h -> dtf.format(h.getCreateTime()))
+            .collect(Collectors.joining(StrPool.COMMA));
+    String result =
+        v.stream()
+            .map(h -> h.getCheckResult() ? "通过" : "拒绝")
+            .collect(Collectors.joining(StrPool.COMMA));
+    String msg =
+        v.stream()
+            .map(h -> StrUtil.isBlank(h.getCheckMsg()) ? " " : h.getCheckMsg())
+            .collect(Collectors.joining(StrPool.COMMA));
+
+    Map<String, String> map = new HashMap<>(3);
+    map.put("time", time);
+    map.put("result", result);
+    map.put("msg", msg);
+
+    return map;
+  }
 }