|
@@ -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;
|
|
|
+ }
|
|
|
}
|