Browse Source

feat: 个人任务明细数据导出接口初步实现

lixuesong 4 days ago
parent
commit
43a38988c8

+ 2 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/enums/ExportType.java

@@ -17,7 +17,8 @@ public enum ExportType {
 
 	USER("USER", "人员"),
 	CHECK_SUP("CHECK_SUP", "审核监督信息"),
-	SCORE_PACKAGE_SUB("SCORE_PACKAGE_SUB", "个人执行包数据");
+	SCORE_PACKAGE_SUB("SCORE_PACKAGE_SUB", "个人执行包数据"),
+	TASK_DETAIL("TASK_DETAIL", "个人任务明细数据"),;
 
 	/**
 	 * 类型

+ 15 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmTaskDTO.java

@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -74,4 +75,18 @@ public final class WmTaskDTO {
 
     }
 
+    /**
+     * 个人任务明细导出参数
+     *
+     * @author snows
+     * @date 2025/08/05
+     */
+    @Data
+    public static class OnTaskDetailExport {
+        @NotNull(message = "开始日期必填")
+        private LocalDate startDate;
+
+        private LocalDate endDate;
+    }
+
 }

+ 2 - 2
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/model/excel/WmScorePackageSubInfoExcelModel.java

@@ -63,10 +63,10 @@ public class WmScorePackageSubInfoExcelModel implements Serializable {
     private String mah;
 
     /**
-     * 接包人名
+     * 接包人
      */
     @ColumnWidth(20)
-    @ExcelProperty("接包人名")
+    @ExcelProperty("接包人名")
     private String taskUserName;
 
     /**

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

@@ -0,0 +1,133 @@
+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 snows
+ * @date 2025/08/05
+ */
+@Data
+public class WmTaskDetailExcelModel {
+
+	/**
+	 * 序号
+	 */
+	@ColumnWidth(10)
+	@ExcelProperty("序号")
+	private Integer number;
+
+	/**
+	 * 市场服务供应商名称
+	 */
+	@ColumnWidth(40)
+	@ExcelProperty("市场服务供应商名称")
+	private String serviceName;
+
+	/**
+	 * 父级执行包ID
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("执行包ID")
+	private String parentPkgId;
+
+	/**
+	 * 父级执行包
+	 */
+	@ColumnWidth(128)
+	@ExcelProperty("省区下发执行包名称")
+	private String parentPkgName;
+
+	/**
+	 * 执行包年度
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("执行包年度")
+	private String year;
+
+	/**
+	 * 执行包季度
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("执行包季度")
+	private String quarter;
+
+	/**
+	 * 个人执行包ID
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("个人执行包ID")
+	private String pkgId;
+
+	/**
+	 * 个人执行包名称
+	 */
+	@ColumnWidth(128)
+	@ExcelProperty("个人执行包名称")
+	private String pkgName;
+
+	/**
+	 * 接包人姓名
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("接包人姓名")
+	private String taskUserName;
+
+	/**
+	 * 接包人电话
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("接包人电话")
+	private String taskUserPhone;
+
+	/**
+	 * 任务ID
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("任务ID")
+	private String taskId;
+
+	/**
+	 * 任务名称
+	 */
+	@ColumnWidth(30)
+	@ExcelProperty("任务类型")
+	private String taskName;
+
+	/**
+	 * 本服务任务对应产品
+	 */
+	@ColumnWidth(30)
+	@ExcelProperty("本服务任务对应产品")
+	private String drugnameTy;
+
+	/**
+	 * 本服务任务对应产品生产企业
+	 */
+	@ColumnWidth(30)
+	@ExcelProperty("本服务任务对应生产企业")
+	private String drugEntName;
+
+	/**
+	 * 服务提交时间
+	 */
+	@ExcelProperty("服务提交时间")
+	private String taskCreateTime;
+
+	/**
+	 * 任务状态
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("任务状态")
+	private String taskStatus;
+
+	/**
+	 * 拒绝原因
+	 */
+	@ColumnWidth(30)
+	@ExcelProperty("拒绝原因")
+	private String rejectReason;
+}

+ 85 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/task/WmTaskExportController.java

@@ -0,0 +1,85 @@
+package com.qunzhixinxi.hnqz.admin.controller.task;
+
+import cn.hutool.core.collection.CollUtil;
+import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
+import com.qunzhixinxi.hnqz.admin.api.constant.enums.ExportType;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
+import com.qunzhixinxi.hnqz.admin.service.SysCommonExportService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskDetailExportService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDate;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 个人任务明细导出控制器
+ *
+ * @author snows
+ * @date 2025/08/06
+ */
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+public class WmTaskExportController {
+
+	private final WmTaskDetailExportService taskDetailExportService;
+	private final SysCommonExportService commonExportService;
+
+
+	/**
+	 * 导出个人任务明细
+	 *
+	 * @param params 查询参数
+	 * @return {@link R }<{@link Boolean }> 是否成功
+	 */
+	@SysLog("个人任务明细异步导出")
+	@PostMapping("/pkg/sub-info/export")
+	public R<Boolean> exportPackageSubInfo(@Validated @RequestBody WmTaskDTO.OnTaskDetailExport params) {
+		HnqzUser user = SecurityUtils.getUser();
+		List<Integer> roles = SecurityUtils.getRoles();
+
+		// 4-区域管理员, 37-服务供应商管理员
+		if (!CollUtil.containsAny(roles, Arrays.asList(4, 37))) {
+			throw new RuntimeException("没有导出个人任务明细数据权限");
+		}
+
+		LocalDate startDate = params.getStartDate();
+		LocalDate endDate = params.getEndDate();
+
+		LocalDate today = LocalDate.now();
+		if(endDate == null) {
+			endDate = today;
+		}
+		if(startDate == null) {
+			// 当月的第一天
+			startDate = LocalDate.of(today.getYear(),  today.getMonth(), 1);
+		}
+
+		return R.ok(taskDetailExportService.asyncExport(user, roles, startDate, endDate));
+	}
+
+	/**
+	 * 导出个人任务明细的结果
+	 *
+	 * @return {@link WmReportOpt } 状态和结果
+	 */
+	@GetMapping("/task/export/result")
+	public R<WmReportOpt> exportResult() {
+		HnqzUser user = SecurityUtils.getUser();
+		String key = String.format(CacheConstants.ASYNC_EXPORT_CACHE, ExportType.TASK_DETAIL.getType(), user.getId());
+
+		return R.ok(commonExportService.exportResult(user, key));
+	}
+}

+ 38 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/event/TaskDetailExportEvent.java

@@ -0,0 +1,38 @@
+package com.qunzhixinxi.hnqz.admin.event;
+
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 个人任务明细数据导出事件
+ *
+ * @author snows
+ * @date 2025/08/05
+ */
+@Getter
+@AllArgsConstructor
+public class TaskDetailExportEvent {
+	/**
+	 * 用户
+	 */
+	private HnqzUser user;
+
+	/**
+	 * 角色
+	 */
+	private List<Integer> roles;
+
+	/**
+	 * 开始时间
+	 */
+	private LocalDate startDate;
+
+	/**
+	 * 结束时间
+	 */
+	private LocalDate endDate;
+}

+ 36 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/listener/TaskDetailExportEventListener.java

@@ -0,0 +1,36 @@
+package com.qunzhixinxi.hnqz.admin.listener;
+
+import com.qunzhixinxi.hnqz.admin.event.TaskDetailExportEvent;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskDetailExportService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Async;
+
+/**
+ * 个人任务明细数据导出事件侦听器
+ *
+ * @author snows
+ * @date 2025/08/05
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Configuration
+public class TaskDetailExportEventListener {
+
+	private final WmTaskDetailExportService taskDetailExportService;
+
+	/**
+	 * 推送事件
+	 *
+	 * @param event 事件
+	 */
+	@Async
+	@Order
+	@EventListener(TaskDetailExportEvent.class)
+	public void pushEvent(TaskDetailExportEvent event) {
+		taskDetailExportService.export(event.getUser(), event.getRoles(), event.getStartDate(), event.getEndDate());
+	}
+}

+ 13 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageExportService.java

@@ -1,12 +1,13 @@
 package com.qunzhixinxi.hnqz.admin.service;
 
+import com.qunzhixinxi.hnqz.admin.manager.WmPackageExportScope;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 
 import java.time.LocalDate;
 import java.util.List;
 
 /**
- * 积分包导出服务
+ * 个人执行包导出服务
  *
  * @author snows
  * @date 2025/08/04
@@ -34,4 +35,15 @@ public interface WmScorePackageExportService {
 	 * @return {@link Boolean } 是否成功
 	 */
 	Boolean export(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate);
+
+	/**
+	 * 根据不同角色权限获取积分包相关数据
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link WmPackageExportScope }
+	 */
+	WmPackageExportScope getWmPackageExportScope(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate);
 }

+ 37 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskDetailExportService.java

@@ -0,0 +1,37 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 个人任务明细数据导出服务
+ *
+ * @author snows
+ * @date 2025/08/05
+ */
+public interface WmTaskDetailExportService {
+
+	/**
+	 * 异步导出
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link Boolean } 是否成功
+	 */
+	Boolean asyncExport(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate);
+
+	/**
+	 * 导出积分包
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link Boolean } 是否成功
+	 */
+	Boolean export(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate);
+}

File diff suppressed because it is too large
+ 433 - 596
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageExportServiceImpl.java


+ 241 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskDetailExportServiceImpl.java

@@ -0,0 +1,241 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.constant.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.api.constant.enums.ExportType;
+import com.qunzhixinxi.hnqz.admin.api.constant.enums.PackageStatusEnum;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+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.WmScorePackageStatus;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.api.model.excel.WmScorePackageSubInfoExcelModel;
+import com.qunzhixinxi.hnqz.admin.api.model.excel.WmTaskDetailExcelModel;
+import com.qunzhixinxi.hnqz.admin.aspect.ExportGuard;
+import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
+import com.qunzhixinxi.hnqz.admin.event.TaskDetailExportEvent;
+import com.qunzhixinxi.hnqz.admin.manager.WmPackageExportScope;
+import com.qunzhixinxi.hnqz.admin.manager.WmPackageManager;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageStatusMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageExportService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskDetailExportService;
+import com.qunzhixinxi.hnqz.admin.util.ExportUtils;
+import com.qunzhixinxi.hnqz.admin.util.RedisUtils;
+import com.qunzhixinxi.hnqz.common.core.util.SpringContextHolder;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 个人任务明细数据导出服务 impl
+ *
+ * @author snows
+ * @date 2025/08/05
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class WmTaskDetailExportServiceImpl implements WmTaskDetailExportService {
+	private final WmScorePackageMapper scorePackageMapper;
+	private final WmTaskMapper taskMapper;
+	private final SysUserMapper userMapper;
+	private final WmScorePackageStatusMapper scorePackageStatusMapper;
+	private final WmScorePackageExportService scorePackageExportService;
+	private final UpmsConfig upmsConfig;
+	private final RedisUtils redisUtils;
+	private final ExportUtils exportUtils;
+
+	Map<Integer, String> quarterMap =
+			Map.ofEntries(
+					Map.entry(1, "一季度"), Map.entry(2, "二季度"), Map.entry(3, "三季度"), Map.entry(4, "四季度"));
+
+	/**
+	 * 异步导出
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link Boolean } 是否成功
+	 */
+	@Override
+	@ExportGuard(type = "TASK_DETAIL")
+	public Boolean asyncExport(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate) {
+		redisUtils.setExportStarting(ExportType.TASK_DETAIL, user.getId());
+
+		SpringContextHolder.getApplicationContext().publishEvent(new TaskDetailExportEvent(user, roles, startDate, endDate));
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * 导出积分包
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link Boolean } 是否成功
+	 */
+	@Override
+	public Boolean export(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate) {
+		redisUtils.checkExportGlobalAllows(upmsConfig.getAsyncExportLimit());
+
+		try {
+			// 获取数据
+			List<WmTaskDetailExcelModel> data = this.getExportData(user, roles, startDate, endDate);
+
+			// 导出
+			String resultValue = exportUtils.WriteExportExcel(ExportType.TASK_DETAIL, data, WmTaskDetailExcelModel.class, user);
+			return !StrUtil.startWith(resultValue, "ERROR");
+		} finally {
+			redisUtils.releaseExportGlobalAllows();
+			redisUtils.cleanupGenerating(ExportType.TASK_DETAIL, user.getId());
+		}
+	}
+
+	/**
+	 * 获取导出数据
+	 *
+	 * @param user      用户
+	 * @param roles     角色
+	 * @param startDate 开始日期
+	 * @param endDate   结束日期
+	 * @return {@link List }<{@link WmScorePackageSubInfoExcelModel }> 结果
+	 * @see WmPackageManager#exportPkgInfo(LocalDate, LocalDate) 参考代码(存在冗余待合并)
+	 */
+	private List<WmTaskDetailExcelModel> getExportData(HnqzUser user, List<Integer> roles, LocalDate startDate, LocalDate endDate) {
+		WmPackageExportScope scope = scorePackageExportService.getWmPackageExportScope(user, roles, startDate, endDate);
+		Map<Integer, SysDept> service = scope.getService();
+		Map<String, WmDaDrugEntDrugtable> drugtableMap = scope.getDrugtableMap();
+		List<String> cPkgIds = scope.getCPkgIds();
+		List<WmScorePackage> childrenPkgs = scope.getChildrenPkgs();
+		Map<Integer, List<WmPackageTaskTypeQty>> pttMap = scope.getPttMap();
+
+		// 获取区域的上级包
+		List<String> parentIds = childrenPkgs.stream()
+				.map(WmScorePackage::getRelationScoreId)
+				.distinct()
+				.sorted()
+				.collect(Collectors.toList());
+
+		Map<String, WmScorePackage> parentPackageMap = scorePackageMapper
+				.selectList(
+						Wrappers.<WmScorePackage>lambdaQuery()
+								.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val())
+								.in(WmScorePackage::getId, parentIds))
+				.stream()
+				.collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
+
+		// 获取全部的任务
+		List<WmTask> tasks = taskMapper.selectList(
+				Wrappers.<WmTask>lambdaQuery()
+						.in(WmTask::getScorePackageId, cPkgIds));
+
+		// 获取所有执行包领取记录
+		List<WmScorePackageStatus> scorePackageStatuses = scorePackageStatusMapper.selectList(
+				Wrappers.<WmScorePackageStatus>lambdaQuery()
+						.in(WmScorePackageStatus::getPackageId, cPkgIds)
+						.eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val()));
+
+		Set<String> userIds = scorePackageStatuses.stream()
+				.map(WmScorePackageStatus::getUserId)
+				.collect(Collectors.toSet());
+
+		// 获取所有任务的user
+		List<SysUser> users = userMapper.selectBatchIds(userIds);
+		Map<Integer, SysUser> userMap = users.stream()
+				.collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+
+		// 转换为每个执行包对应的接包人信息
+		Map<String, SysUser> packageUserMap = scorePackageStatuses.stream()
+				.collect(Collectors.toMap(
+						WmScorePackageStatus::getPackageId,
+						ps -> userMap.get(Integer.parseInt(ps.getUserId())),
+						(u1, u2) -> u1));
+
+		// 根据包id分组
+		Map<String, List<WmTask>> pkg2TaskListMap = tasks.stream()
+				.collect(Collectors.groupingBy(WmTask::getScorePackageId));
+
+		return childrenPkgs.parallelStream()
+				.map(pkg -> buildTaskExcelModel(pkg, service, parentPackageMap, drugtableMap,
+						packageUserMap, pkg2TaskListMap))
+				.flatMap(Collection::stream)
+				.collect(Collectors.toList());
+	}
+
+	/**
+	 * 构建每个执行包下任务的Excel模型数据
+	 */
+	private List<WmTaskDetailExcelModel> buildTaskExcelModel(
+			WmScorePackage pkg,
+			Map<Integer, SysDept> service,
+			Map<String, WmScorePackage> parentPackageMap,
+			Map<String, WmDaDrugEntDrugtable> drugtableMap,
+			Map<String, SysUser> packageUserMap,
+			Map<String, List<WmTask>> pkg2TaskListMap) {
+
+		List<WmTaskDetailExcelModel> models = new ArrayList<>();
+
+		List<WmTask> tasks = pkg2TaskListMap.get(pkg.getId());
+		for (int i = 0; i < tasks.size(); i++) {
+			WmTask task = tasks.get(i);
+
+			WmTaskDetailExcelModel model = new WmTaskDetailExcelModel();
+
+			// 市场服务供应商名称
+			SysDept s = service.get(Integer.parseInt(pkg.getDeptId()));
+			model.setServiceName(s != null ? s.getName() : "");
+
+			// 执行包
+			model.setPkgId(pkg.getId());
+			model.setPkgName(pkg.getScorePackageName());
+
+			// 父级包
+			WmScorePackage parentPackage = parentPackageMap.get(pkg.getRelationScoreId());
+			model.setParentPkgName(parentPackage != null ? parentPackage.getScorePackageName() : "");
+
+			// 执行包年度、季度
+			model.setYear(String.format("%d年", pkg.getCreateTime().getYear()));
+			model.setQuarter(quarterMap.get(pkg.getCreateTime().getMonthValue() / 3 + 1));
+
+			// 产品&生产企业
+			WmDaDrugEntDrugtable drugtable = drugtableMap.get(pkg.getDrugtable()[0]);
+			model.setDrugnameTy(drugtable == null ? "未分配产品" : drugtable.getDrugnameTy());
+			model.setDrugEntName(drugtable == null ? "未知" : drugtable.getDrugEntName());
+
+			SysUser taskUser = packageUserMap.get(pkg.getId());
+			// 接包人姓名
+			model.setTaskUserName(taskUser != null ? taskUser.getRealname() : "");
+			// 接包人电话
+			model.setTaskUserPhone(taskUser != null ? taskUser.getPhone() : "");
+
+			// 任务ID、任务类型
+			model.setTaskId(task.getId());
+			model.setTaskName(task.getTaskTypeName());
+			model.setTaskStatus(task.getTaskStatus());
+			model.setTaskCreateTime(DateUtil.formatLocalDateTime(task.getCreateTime()));
+			model.setRejectReason(task.getTaskStatusInfo());
+			models.add(model);
+		}
+
+		return models;
+	}
+}

Some files were not shown because too many files changed in this diff