|
@@ -143,20 +143,45 @@ public class WorkbenchServiceImpl implements IWorkbenchService {
|
|
|
// 当前
|
|
// 当前
|
|
|
List<Salesleads> list = salesleadsMapper.selectList(new LambdaQueryWrapper<Salesleads>().eq(Salesleads::getIzClue, 0).eq(Salesleads::getDelFlag, "0"));
|
|
List<Salesleads> list = salesleadsMapper.selectList(new LambdaQueryWrapper<Salesleads>().eq(Salesleads::getIzClue, 0).eq(Salesleads::getDelFlag, "0"));
|
|
|
BigDecimal amount = list.stream().map(Salesleads::getProjectBudget).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal amount = list.stream().map(Salesleads::getProjectBudget).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- long win = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>().eq(SalesResultAnalyze::getDealResult, 1).eq(SalesResultAnalyze::getDataType, 2).eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
- long lose = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>().eq(SalesResultAnalyze::getDealResult, 0).eq(SalesResultAnalyze::getDataType, 2).eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
|
|
+ List<String> oppNos = list.stream().map(Salesleads::getProjectNo).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ long win = 0;
|
|
|
|
|
+ long lose = 0;
|
|
|
|
|
+ if (!oppNos.isEmpty()) {
|
|
|
|
|
+ win = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 1)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, oppNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
+ lose = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 2)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, oppNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// 7天前
|
|
// 7天前
|
|
|
List<Salesleads> oldList = salesleadsMapper.selectList(new LambdaQueryWrapper<Salesleads>().eq(Salesleads::getIzClue, 0).eq(Salesleads::getDelFlag, "0").le(Salesleads::getCreateTime, weekAgo));
|
|
List<Salesleads> oldList = salesleadsMapper.selectList(new LambdaQueryWrapper<Salesleads>().eq(Salesleads::getIzClue, 0).eq(Salesleads::getDelFlag, "0").le(Salesleads::getCreateTime, weekAgo));
|
|
|
BigDecimal oldAmount = oldList.stream().map(Salesleads::getProjectBudget).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal oldAmount = oldList.stream().map(Salesleads::getProjectBudget).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- long oldWin = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>().eq(SalesResultAnalyze::getDealResult, 1).eq(SalesResultAnalyze::getDataType, 2).eq(SalesResultAnalyze::getIsDelete, 0).le(SalesResultAnalyze::getCreateTime, weekAgo));
|
|
|
|
|
|
|
+ long oldWin = 0;
|
|
|
|
|
+ long oldLose = 0;
|
|
|
|
|
+ if (!oppNos.isEmpty()) {
|
|
|
|
|
+ oldWin = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 1)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, oppNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0)
|
|
|
|
|
+ .le(SalesResultAnalyze::getCreateTime, weekAgo));
|
|
|
|
|
+ oldLose = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 2)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, oppNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0)
|
|
|
|
|
+ .le(SalesResultAnalyze::getCreateTime, weekAgo));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
List<WorkbenchStatVo.StatItem> stats = new ArrayList<>();
|
|
List<WorkbenchStatVo.StatItem> stats = new ArrayList<>();
|
|
|
stats.add(new WorkbenchStatVo.StatItem("商机总数", String.valueOf(list.size()), calculateTrend(list.size(), oldList.size())));
|
|
stats.add(new WorkbenchStatVo.StatItem("商机总数", String.valueOf(list.size()), calculateTrend(list.size(), oldList.size())));
|
|
|
stats.add(new WorkbenchStatVo.StatItem("金额", amount.setScale(0, BigDecimal.ROUND_HALF_UP).toString(), calculateTrend(amount, oldAmount)));
|
|
stats.add(new WorkbenchStatVo.StatItem("金额", amount.setScale(0, BigDecimal.ROUND_HALF_UP).toString(), calculateTrend(amount, oldAmount)));
|
|
|
stats.add(new WorkbenchStatVo.StatItem("跟进中", String.valueOf(list.size() - win - lose), -0.05));
|
|
stats.add(new WorkbenchStatVo.StatItem("跟进中", String.valueOf(list.size() - win - lose), -0.05));
|
|
|
stats.add(new WorkbenchStatVo.StatItem("赢单数", String.valueOf(win), calculateTrend(win, oldWin)));
|
|
stats.add(new WorkbenchStatVo.StatItem("赢单数", String.valueOf(win), calculateTrend(win, oldWin)));
|
|
|
- stats.add(new WorkbenchStatVo.StatItem("丢单数", String.valueOf(lose), 0.02));
|
|
|
|
|
|
|
+ stats.add(new WorkbenchStatVo.StatItem("丢单数", String.valueOf(lose), calculateTrend(lose, oldLose)));
|
|
|
return stats;
|
|
return stats;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -182,18 +207,31 @@ public class WorkbenchServiceImpl implements IWorkbenchService {
|
|
|
// --- 5. 年度入围 (总览) ---
|
|
// --- 5. 年度入围 (总览) ---
|
|
|
private List<WorkbenchStatVo.StatItem> getSelectionTotalStats() {
|
|
private List<WorkbenchStatVo.StatItem> getSelectionTotalStats() {
|
|
|
Date weekAgo = new Date(System.currentTimeMillis() - 7 * DAY_MS);
|
|
Date weekAgo = new Date(System.currentTimeMillis() - 7 * DAY_MS);
|
|
|
- long total = salesAnnualFinalizationMapper.selectCount(new LambdaQueryWrapper<SalesAnnualFinalization>().eq(SalesAnnualFinalization::getIsDelete, 0));
|
|
|
|
|
|
|
+ List<SalesAnnualFinalization> selectionList = salesAnnualFinalizationMapper.selectList(new LambdaQueryWrapper<SalesAnnualFinalization>().eq(SalesAnnualFinalization::getIsDelete, 0));
|
|
|
|
|
+ long total = selectionList.size();
|
|
|
long totalOld = salesAnnualFinalizationMapper.selectCount(new LambdaQueryWrapper<SalesAnnualFinalization>().eq(SalesAnnualFinalization::getIsDelete, 0).le(SalesAnnualFinalization::getCreateTime, weekAgo));
|
|
long totalOld = salesAnnualFinalizationMapper.selectCount(new LambdaQueryWrapper<SalesAnnualFinalization>().eq(SalesAnnualFinalization::getIsDelete, 0).le(SalesAnnualFinalization::getCreateTime, weekAgo));
|
|
|
- BigDecimal amount = salesAnnualFinalizationMapper.selectList(new LambdaQueryWrapper<SalesAnnualFinalization>().eq(SalesAnnualFinalization::getIsDelete, 0))
|
|
|
|
|
- .stream().map(SalesAnnualFinalization::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
- long win = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>().eq(SalesResultAnalyze::getDealResult, 1).eq(SalesResultAnalyze::getDataType, 1).eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
|
|
+ BigDecimal amount = selectionList.stream().map(SalesAnnualFinalization::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ List<String> selectionNos = selectionList.stream().map(SalesAnnualFinalization::getProjectNo).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ long win = 0;
|
|
|
|
|
+ long lose = 0;
|
|
|
|
|
+ if (!selectionNos.isEmpty()) {
|
|
|
|
|
+ win = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 1)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, selectionNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
+ lose = salesresultanalyzeMapper.selectCount(new LambdaQueryWrapper<SalesResultAnalyze>()
|
|
|
|
|
+ .eq(SalesResultAnalyze::getDealResult, 2)
|
|
|
|
|
+ .in(SalesResultAnalyze::getObjectNo, selectionNos)
|
|
|
|
|
+ .eq(SalesResultAnalyze::getIsDelete, 0));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
List<WorkbenchStatVo.StatItem> stats = new ArrayList<>();
|
|
List<WorkbenchStatVo.StatItem> stats = new ArrayList<>();
|
|
|
stats.add(new WorkbenchStatVo.StatItem("入围项目数", String.valueOf(total), calculateTrend(total, totalOld)));
|
|
stats.add(new WorkbenchStatVo.StatItem("入围项目数", String.valueOf(total), calculateTrend(total, totalOld)));
|
|
|
stats.add(new WorkbenchStatVo.StatItem("金额", amount.setScale(0, BigDecimal.ROUND_HALF_UP).toString(), 0.10));
|
|
stats.add(new WorkbenchStatVo.StatItem("金额", amount.setScale(0, BigDecimal.ROUND_HALF_UP).toString(), 0.10));
|
|
|
- stats.add(new WorkbenchStatVo.StatItem("跟进中", String.valueOf(total - win), -0.08));
|
|
|
|
|
|
|
+ stats.add(new WorkbenchStatVo.StatItem("跟进中", String.valueOf(total - win - lose), -0.08));
|
|
|
stats.add(new WorkbenchStatVo.StatItem("赢单数", String.valueOf(win), 0.15));
|
|
stats.add(new WorkbenchStatVo.StatItem("赢单数", String.valueOf(win), 0.15));
|
|
|
- stats.add(new WorkbenchStatVo.StatItem("丢单数", "0", 0.0));
|
|
|
|
|
|
|
+ stats.add(new WorkbenchStatVo.StatItem("丢单数", String.valueOf(lose), 0.0));
|
|
|
return stats;
|
|
return stats;
|
|
|
}
|
|
}
|
|
|
|
|
|