|
@@ -1,5 +1,6 @@
|
|
|
package com.qunzhixinxi.hnqz.admin.controller;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
@@ -16,11 +17,13 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.common.collect.ArrayListMultimap;
|
|
|
+import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
|
|
|
import com.google.common.collect.Multimap;
|
|
|
import com.pig4cloud.plugin.excel.annotation.RequestExcel;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmPkgQuizRelation;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.enums.TargetType;
|
|
@@ -29,9 +32,11 @@ import com.qunzhixinxi.hnqz.admin.entity.*;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.dto.UnpackDTO;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchPackageExcelModel;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmScorePackageExcelModel;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
|
|
|
import com.qunzhixinxi.hnqz.admin.mapper.*;
|
|
|
import com.qunzhixinxi.hnqz.admin.recharge.entity.SysDeptRecharge;
|
|
@@ -108,6 +113,7 @@ public class WmScorePackageController {
|
|
|
private final WmBizReminderService wmBizReminderService;
|
|
|
private final StringRedisTemplate redisTemplate;
|
|
|
private final WmPkgQuizRelationService pkgQuizRelationService;
|
|
|
+ private final SysDictItemService sysDictItemService;
|
|
|
private final Sequence pkgSequence;
|
|
|
|
|
|
|
|
@@ -2713,6 +2719,160 @@ public class WmScorePackageController {
|
|
|
return R.ok(wmScorePackagePage);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 个人承接积分值导出
|
|
|
+ *
|
|
|
+ * @param acceptUser 接单对象,模糊查询
|
|
|
+ */
|
|
|
+ @ResponseExcel(name = "exportPackageSettle", sheet = "积分包结算数据")
|
|
|
+ @SysLog("个人承接积分值导出")
|
|
|
+ @GetMapping("/export-score-package")
|
|
|
+ public List<WmScorePackageExcelModel> exportScorePackage(
|
|
|
+ @RequestParam(value = "packageType1") Integer packageType1,
|
|
|
+ @RequestParam(value = "packageType2") Integer packageType2,
|
|
|
+ @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
|
|
|
+ @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
|
|
|
+ @RequestParam(value = "typeid", required = false) String typeId,
|
|
|
+ @RequestParam(value = "monthStart", required = false) String monthStart,
|
|
|
+ @RequestParam(value = "monthEnd", required = false) String monthEnd,
|
|
|
+ @RequestParam(value = "acceptUser", required = false) String acceptUser,
|
|
|
+ @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
|
|
|
+ @RequestParam(value = "toApproval", required = false) Boolean toApproval,
|
|
|
+ @RequestParam(value = "packageUserScope", required = false) String packageUserScope
|
|
|
+ ) {
|
|
|
+
|
|
|
+ Integer sendDeptId = SecurityUtils.getUser().getDeptId();
|
|
|
+ Integer userId = SecurityUtils.getUser().getId();
|
|
|
+
|
|
|
+ LocalDateTime start = null;
|
|
|
+ LocalDateTime end = null;
|
|
|
+
|
|
|
+ if (StrUtil.isNotEmpty(monthStart) && StrUtil.isNotEmpty(monthEnd)) {
|
|
|
+ start = LocalDateTime.of(LocalDate.parse(monthStart + "-01", DatePattern.NORM_DATE_FORMATTER), LocalTime.MIN);
|
|
|
+ LocalDate e = LocalDate.parse(monthEnd + "-01", DatePattern.NORM_DATE_FORMATTER);
|
|
|
+ end = LocalDateTime.of(e.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<WmScorePackage> queryWrapper = Wrappers.<WmScorePackage>query()
|
|
|
+ .eq("p.package_type1", packageType1)
|
|
|
+ .eq("p.package_type2", packageType2)
|
|
|
+ .eq(scorePackageStatus != null, "p.score_package_status", scorePackageStatus)
|
|
|
+ .eq("p.send_package_dept_id", sendDeptId)
|
|
|
+ .between(start != null && end != null, "p.create_time", start, end);
|
|
|
+
|
|
|
+ if (StrUtil.isNotBlank(scorePackageName)) {
|
|
|
+ queryWrapper.and(wrapper -> wrapper.like("p.score_package_name", scorePackageName).or().like("p.pkg_sn", scorePackageName));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtil.isEmpty(typeId)) {
|
|
|
+ queryWrapper.in("p.typeid", "3", "4", "5");
|
|
|
+ } else {
|
|
|
+ List<String> split = StrUtil.split(typeId, StrUtil.COMMA);
|
|
|
+ queryWrapper.in("p.typeid", split);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 接单对象范围筛选
|
|
|
+ if (StrUtil.isNotBlank(packageUserScope)) {
|
|
|
+ queryWrapper.eq("p.package_user_scope", packageUserScope);
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
|
|
|
+ && PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
|
|
|
+ boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
|
|
|
+ && PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
|
|
|
+ if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
|
|
|
+ // 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
|
|
|
+ List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
|
|
|
+ .eq(WmTeam::getDeptId, sendDeptId)
|
|
|
+ .eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ .eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
|
|
|
+ .apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
|
|
|
+ if (CollectionUtil.isNotEmpty(teamList)) {
|
|
|
+ // 如果配置了,则只查询所在团队下发的积分包
|
|
|
+ List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
|
|
|
+ queryWrapper.in("p.package_user_scope", teamIdList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ long startMillis = System.currentTimeMillis();
|
|
|
+ List<WmScorePackage> scorePackageList = wmScorePackageMapper.listScorePackage(
|
|
|
+ queryWrapper.orderByDesc("p.create_time"), acceptUser, relationScoreId, toApproval);
|
|
|
+ log.info("积分包列表-不分页sql耗时:{}", System.currentTimeMillis() - startMillis);
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(scorePackageList)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ long buildStartMillis = System.currentTimeMillis();
|
|
|
+
|
|
|
+ Set<String> packageIds = scorePackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 任务统计
|
|
|
+ List<WmTask> taskList = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getRealFlag, "0")
|
|
|
+ .eq(WmTask::getEnableFlag, "0")
|
|
|
+ .eq(WmTask::getDelFlag, "0")
|
|
|
+ .in(WmTask::getScorePackageId, packageIds)
|
|
|
+ );
|
|
|
+ Map<String, List<WmTask>> taskGoupMap = taskList.stream().collect(Collectors.groupingBy(WmTask::getScorePackageId));
|
|
|
+
|
|
|
+ // 领取积分包记录
|
|
|
+ List<WmScorePackageStatus> scorePackageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
|
+ .in(WmScorePackageStatus::getPackageId, packageIds)
|
|
|
+ );
|
|
|
+ Map<String, List<WmScorePackageStatus>> packageStatusGroupMap = scorePackageStatusList.stream()
|
|
|
+ .collect(Collectors.groupingBy(WmScorePackageStatus::getPackageId));
|
|
|
+
|
|
|
+ //获取上级包 TODO
|
|
|
+// Set<String> packageIds = scorePackageList.stream().map(WmScorePackage::getRelationScoreId).collect(Collectors.toSet());
|
|
|
+// List<WmScorePackage> relationScorePackages = wmScorePackageMapper.selectList(Wrappers.<WmScorePackage>lambdaQuery()
|
|
|
+// .in(WmScorePackage::getId, packageIds));
|
|
|
+// relationScorePackages.stream().collect(Collectors.groupingBy(WmScorePackage::getId));
|
|
|
+
|
|
|
+ // 类型标签
|
|
|
+ List<SysDictItem> dictItems = sysDictItemService.list(Wrappers.<SysDictItem>lambdaQuery()
|
|
|
+ .in(SysDictItem::getType, "package_type1", "package_type2"));
|
|
|
+ Map<String, List<SysDictItem>> dictItemMap = dictItems.stream().collect(Collectors.groupingBy(SysDictItem::getType));
|
|
|
+ List<SysDictItem> packageType1List = dictItemMap.get("package_type1");
|
|
|
+ List<SysDictItem> packageType2List = dictItemMap.get("package_type2");
|
|
|
+
|
|
|
+ List<WmScorePackageExcelModel> excelModelList = new ArrayList<>(scorePackageList.size());
|
|
|
+ for (int i = 0; i < scorePackageList.size(); i++) {
|
|
|
+ WmScorePackage wmScorePackage = scorePackageList.get(i);
|
|
|
+ log.info("====> 积分包SN:{}", wmScorePackage.getPackageSn());
|
|
|
+
|
|
|
+ List<WmTask> tasks = taskGoupMap.getOrDefault(wmScorePackage.getId(), new ArrayList<>());
|
|
|
+ List<WmScorePackageStatus> statuses = packageStatusGroupMap.getOrDefault(wmScorePackage.getId(), new ArrayList<>());
|
|
|
+
|
|
|
+ wmScorePackageService.buildScorePackageSync(wmScorePackage, packageType1, packageType2, tasks, statuses,
|
|
|
+ packageType1List, packageType2List);
|
|
|
+
|
|
|
+ WmScorePackageExcelModel excelModel = BeanUtil.copyProperties(wmScorePackage, WmScorePackageExcelModel.class);
|
|
|
+ if (StrUtil.isNotBlank(wmScorePackage.getScorePackageStatus())) {
|
|
|
+ excelModel.setScorePackageStatus(Objects.requireNonNull(ScorePackageStatusEnum.getByVal(wmScorePackage.getScorePackageStatus())).getDesc());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(wmScorePackage.getUserList())) {
|
|
|
+ excelModel.setUserNames(String.join(",", wmScorePackage.getUserList()));
|
|
|
+ }
|
|
|
+
|
|
|
+ String typeid = wmScorePackage.getTypeid();
|
|
|
+ if (StrUtil.isNotBlank(typeid)) {
|
|
|
+ excelModel.setTypeidName("3".equals(typeid) ? "全职学术信息沟通专员" :
|
|
|
+ "4".equals(typeid) ? "兼职学术信息沟通专员" : "5".equals(typeid) ? "招商经理" : typeid);
|
|
|
+ }
|
|
|
+
|
|
|
+ excelModelList.add(excelModel);
|
|
|
+
|
|
|
+ log.info("遍历{} 耗时{}", wmScorePackage.getId(), System.currentTimeMillis() - buildStartMillis);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("build积分包耗时:{}", System.currentTimeMillis() - buildStartMillis);
|
|
|
+
|
|
|
+ return excelModelList;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 积分包列表(结算包管理列表、无团队限制)
|
|
|
*
|