|
@@ -2,6 +2,7 @@ package com.ichaoj.ams.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
+import cn.hutool.core.comparator.CompareUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
@@ -9,21 +10,30 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.ichaoj.ams.constant.AmsConstant;
|
|
import com.ichaoj.ams.constant.AmsConstant;
|
|
import com.ichaoj.ams.entity.AmsAirdropProject;
|
|
import com.ichaoj.ams.entity.AmsAirdropProject;
|
|
import com.ichaoj.ams.entity.AmsAirdropTask;
|
|
import com.ichaoj.ams.entity.AmsAirdropTask;
|
|
|
|
+import com.ichaoj.ams.entity.AmsExecuteRecord;
|
|
|
|
+import com.ichaoj.ams.entity.AmsTradeRecord;
|
|
import com.ichaoj.ams.mapper.AmsAirdropProjectMapper;
|
|
import com.ichaoj.ams.mapper.AmsAirdropProjectMapper;
|
|
import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
|
|
import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
|
|
import com.ichaoj.ams.request.airdrop.PageProjectRequest;
|
|
import com.ichaoj.ams.request.airdrop.PageProjectRequest;
|
|
import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
|
|
import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
|
|
import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
|
|
import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
|
|
|
|
+import com.ichaoj.ams.response.count.PredictCostResponse;
|
|
import com.ichaoj.ams.service.IAmsAirdropProjectService;
|
|
import com.ichaoj.ams.service.IAmsAirdropProjectService;
|
|
import com.ichaoj.ams.service.IAmsAirdropTaskService;
|
|
import com.ichaoj.ams.service.IAmsAirdropTaskService;
|
|
|
|
+import com.ichaoj.ams.service.IAmsExecuteRecordService;
|
|
|
|
+import com.ichaoj.ams.service.IAmsTradeRecordService;
|
|
import com.ichaoj.common.model.PublicPage;
|
|
import com.ichaoj.common.model.PublicPage;
|
|
|
|
+import com.ichaoj.common.model.PublicUserInfo;
|
|
import com.ichaoj.mybatis.service.SuperWhaleServiceImpl;
|
|
import com.ichaoj.mybatis.service.SuperWhaleServiceImpl;
|
|
|
|
+import com.ichaoj.web.context.SuperWhaleContext;
|
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -39,6 +49,13 @@ public class AmsAirdropProjectServiceImpl extends SuperWhaleServiceImpl<AmsAirdr
|
|
@Resource
|
|
@Resource
|
|
private IAmsAirdropTaskService taskService;
|
|
private IAmsAirdropTaskService taskService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ @Lazy
|
|
|
|
+ private IAmsExecuteRecordService executeRecordService;
|
|
|
|
+ @Resource
|
|
|
|
+ @Lazy
|
|
|
|
+ private IAmsTradeRecordService tradeRecordService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public PublicPage<AirdropProjectResponse> pageAirdropProject(PageProjectRequest projectRequest) {
|
|
public PublicPage<AirdropProjectResponse> pageAirdropProject(PageProjectRequest projectRequest) {
|
|
LambdaQueryWrapper<AmsAirdropProject> wrapper = Wrappers.lambdaQuery();
|
|
LambdaQueryWrapper<AmsAirdropProject> wrapper = Wrappers.lambdaQuery();
|
|
@@ -49,13 +66,36 @@ public class AmsAirdropProjectServiceImpl extends SuperWhaleServiceImpl<AmsAirdr
|
|
Page<AmsAirdropProject> result = this.page(this.buildPageObj(projectRequest), wrapper);
|
|
Page<AmsAirdropProject> result = this.page(this.buildPageObj(projectRequest), wrapper);
|
|
return this.convertPublicPage(result, project -> {
|
|
return this.convertPublicPage(result, project -> {
|
|
AirdropProjectResponse response = BeanUtil.copyProperties(project, AirdropProjectResponse.class);
|
|
AirdropProjectResponse response = BeanUtil.copyProperties(project, AirdropProjectResponse.class);
|
|
- long count = taskService.count(new LambdaQueryWrapper<AmsAirdropTask>()
|
|
|
|
|
|
+ List<AmsExecuteRecord> list = executeRecordService.list(
|
|
|
|
+ new LambdaQueryWrapper<AmsExecuteRecord>()
|
|
|
|
+ .eq(AmsExecuteRecord::getExecuteStatus, 1)
|
|
|
|
+ .eq(AmsExecuteRecord::getProjectId, project.getAmsProjectId())
|
|
|
|
+ .eq(AmsExecuteRecord::getUserId, SuperWhaleContext.getContext(PublicUserInfo.class).getUserId())
|
|
|
|
+ );
|
|
|
|
+ if (CollectionUtil.isNotEmpty(list)) {
|
|
|
|
+ List<AmsTradeRecord> records = tradeRecordService.listByIds(list.stream().map(AmsExecuteRecord::getExecuteId).collect(Collectors.toList()));
|
|
|
|
+ double totalGas = records.stream().mapToDouble(t -> Double.parseDouble(t.getGas())).sum();
|
|
|
|
+ response.setTotalGas(BigDecimal.valueOf(totalGas));
|
|
|
|
+ } else {
|
|
|
|
+ response.setTotalGas(BigDecimal.ZERO);
|
|
|
|
+ }
|
|
|
|
+ List<AmsAirdropTask> tasks = taskService.list(new LambdaQueryWrapper<AmsAirdropTask>()
|
|
.eq(AmsAirdropTask::getAirdropProjectId, project.getAmsProjectId()));
|
|
.eq(AmsAirdropTask::getAirdropProjectId, project.getAmsProjectId()));
|
|
- response.setTaskTotalCount(count);
|
|
|
|
- long finishCount = taskService.count(new LambdaQueryWrapper<AmsAirdropTask>()
|
|
|
|
- .eq(AmsAirdropTask::getAirdropProjectId, project.getAmsProjectId())
|
|
|
|
- .eq(AmsAirdropTask::getTaskStatus, 1));
|
|
|
|
- response.setTaskFinishCount(finishCount);
|
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(tasks)) {
|
|
|
|
+ long sum = tasks.stream().mapToLong(AmsAirdropTask::getPlanTimes).sum();
|
|
|
|
+ response.setTaskTotalCount(sum);
|
|
|
|
+ long finishCount = executeRecordService.count(
|
|
|
|
+ new LambdaQueryWrapper<AmsExecuteRecord>()
|
|
|
|
+ .eq(AmsExecuteRecord::getExecuteStatus, 1)
|
|
|
|
+ .in(AmsExecuteRecord::getTaskId, tasks.stream()
|
|
|
|
+ .map(AmsAirdropTask::getAmsTaskId)
|
|
|
|
+ .collect(Collectors.toList()))
|
|
|
|
+ );
|
|
|
|
+ response.setTaskFinishCount(finishCount);
|
|
|
|
+ } else {
|
|
|
|
+ response.setTaskTotalCount(0);
|
|
|
|
+ response.setTaskFinishCount(0);
|
|
|
|
+ }
|
|
return response;
|
|
return response;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -66,6 +106,14 @@ public class AmsAirdropProjectServiceImpl extends SuperWhaleServiceImpl<AmsAirdr
|
|
project.setCreateTime(LocalDateTime.now());
|
|
project.setCreateTime(LocalDateTime.now());
|
|
project.setStatus(AmsConstant.AirdropStatus.NOT_STARTED);
|
|
project.setStatus(AmsConstant.AirdropStatus.NOT_STARTED);
|
|
this.save(project);
|
|
this.save(project);
|
|
|
|
+// List<String> taskIds = createAirdropProject.getTaskIds();
|
|
|
|
+// if (CollectionUtil.isNotEmpty(taskIds)) {
|
|
|
|
+// List<AmsAirdropTask> tasks = taskService.listByIds(taskIds)
|
|
|
|
+// .stream()
|
|
|
|
+// .peek(t -> t.setAirdropProjectId(project.getAmsProjectId()))
|
|
|
|
+// .collect(Collectors.toList());
|
|
|
|
+// taskService.updateBatchById(tasks);
|
|
|
|
+// }
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -73,6 +121,32 @@ public class AmsAirdropProjectServiceImpl extends SuperWhaleServiceImpl<AmsAirdr
|
|
AmsAirdropProject project = BeanUtil.copyProperties(updateAirdropProject, AmsAirdropProject.class);
|
|
AmsAirdropProject project = BeanUtil.copyProperties(updateAirdropProject, AmsAirdropProject.class);
|
|
project.setUpdateTime(LocalDateTime.now());
|
|
project.setUpdateTime(LocalDateTime.now());
|
|
this.updateById(project);
|
|
this.updateById(project);
|
|
|
|
+ List<UpdateAirdropProject.Task> taskList = updateAirdropProject.getTasks();
|
|
|
|
+ if (CollectionUtil.isEmpty(taskList)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ List<AmsAirdropTask> tasks = taskService.listByIds(taskList.stream().map(UpdateAirdropProject.Task::getTaskId).collect(Collectors.toList()));
|
|
|
|
+ if (CollectionUtil.isNotEmpty(tasks)) {
|
|
|
|
+ for (AmsAirdropTask task : tasks) {
|
|
|
|
+ for (UpdateAirdropProject.Task t : taskList) {
|
|
|
|
+ if (task.getAmsTaskId().equals(t.getTaskId())) {
|
|
|
|
+ task.setTaskName(t.getTaskName());
|
|
|
|
+ taskService.updateById(task);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public PredictCostResponse predictCostStatistics() {
|
|
|
|
+ List<AmsAirdropProject> list = this.list();
|
|
|
|
+ PredictCostResponse response = new PredictCostResponse();
|
|
|
|
+ response.setTotalCount(list.size());
|
|
|
|
+ response.setTotalCost(BigDecimal.valueOf(list.stream().mapToDouble(p -> Double.parseDouble(p.getEstimatedCost())).sum()));
|
|
|
|
+ List<PredictCostResponse.Predict> predicts = BeanUtil.copyToList(list, PredictCostResponse.Predict.class);
|
|
|
|
+ response.setPredicts(predicts.stream().sorted((p1, p2) -> CompareUtil.compare(p2.getEstimatedCost(), p1.getEstimatedCost())).collect(Collectors.toList()));
|
|
|
|
+ return response;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|