|
|
@@ -393,6 +393,159 @@ public class ProjectController {
|
|
|
return R.data(serviceProjectItems);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 2.0-业绩分析 -导出
|
|
|
+ * */
|
|
|
+ @GetMapping("/import-out-performanceAnalysis")
|
|
|
+ public R<?> importOutPerformanceAnalysis(
|
|
|
+ @RequestParam(name = "flag", required = true) int flag
|
|
|
+ ,@RequestParam(name = "year", defaultValue = "2021") Long year
|
|
|
+ ,@RequestParam(name = "corpNames", required = false) Long corpNames
|
|
|
+ ,@RequestParam(name = "userName", required = false) String userName)
|
|
|
+ {
|
|
|
+ //按承做人统计多少个客户
|
|
|
+ if(flag==1)
|
|
|
+ {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ itemLambdaQueryWrapper.apply(" year(pay_time) = '"+year+"'");
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getTenantId,AuthUtil.getTenantId());
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getIsDeleted,0);
|
|
|
+ itemLambdaQueryWrapper.eq(StringUtils.isNotBlank(userName),ServiceProjectItem::getUserName,userName);
|
|
|
+ itemLambdaQueryWrapper.groupBy(ServiceProjectItem::getUserName);
|
|
|
+ //分组不同的承做人
|
|
|
+ List<ServiceProjectItem> itemList = serviceProjectItemService.list(itemLambdaQueryWrapper);
|
|
|
+ if(CollectionUtils.isEmpty(itemList))
|
|
|
+ {
|
|
|
+ return R.data(Collections.EMPTY_LIST);
|
|
|
+ }
|
|
|
+ Long finalYear = year;
|
|
|
+ itemList.forEach(e->{
|
|
|
+ //统计此制单人多少个客户
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> count=new LambdaQueryWrapper<>();
|
|
|
+ count
|
|
|
+ .eq(ServiceProjectItem::getUserName,e.getUserName())
|
|
|
+ .eq(ServiceProjectItem::getTenantId,AuthUtil.getTenantId())
|
|
|
+ .eq(ServiceProjectItem::getIsDeleted,0);
|
|
|
+ List<ServiceProjectItem> list = serviceProjectItemService.list(count);
|
|
|
+ List<Long> pids = list.stream().map(ServiceProjectItem::getPId).collect(Collectors.toList());
|
|
|
+ if(!CollectionUtils.isEmpty(pids))
|
|
|
+ {
|
|
|
+ //从主表获取客户并且分组
|
|
|
+ LambdaQueryWrapper<ServiceProject> countCorps=new LambdaQueryWrapper<>();
|
|
|
+ countCorps
|
|
|
+ .in(ServiceProject::getId,pids)
|
|
|
+ .eq(ServiceProject::getIsDeleted,0)
|
|
|
+ .eq(ServiceProject::getTenantId,AuthUtil.getTenantId());
|
|
|
+ List<ServiceProject> corpsProjects = serviceProjectService.list(countCorps);
|
|
|
+ e.setCountCorp(corpsProjects.stream().map(ServiceProject::getCorpId).distinct().collect(Collectors.toList()).size());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ e.setCountCorp(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //计算服务费
|
|
|
+ ServiceProject serviceProject = this.calculateServiceCharge(e.getUserName(), null, 1, finalYear);
|
|
|
+ e.setJan(serviceProject==null?BigDecimal.ZERO:serviceProject.getJan());//1
|
|
|
+ e.setFeb(serviceProject==null?BigDecimal.ZERO:serviceProject.getFeb());//2
|
|
|
+ e.setMar(serviceProject==null?BigDecimal.ZERO:serviceProject.getMar());//3
|
|
|
+ e.setApr(serviceProject==null?BigDecimal.ZERO:serviceProject.getApr());//4
|
|
|
+ e.setMay(serviceProject==null?BigDecimal.ZERO:serviceProject.getMay());//5
|
|
|
+ e.setJune(serviceProject==null?BigDecimal.ZERO:serviceProject.getJune());//6
|
|
|
+ e.setJuly(serviceProject==null?BigDecimal.ZERO:serviceProject.getJuly());//7
|
|
|
+ e.setAug(serviceProject==null?BigDecimal.ZERO:serviceProject.getAug());//8
|
|
|
+ e.setSept(serviceProject==null?BigDecimal.ZERO:serviceProject.getSept());//9
|
|
|
+ e.setOct(serviceProject==null?BigDecimal.ZERO:serviceProject.getOct());//10
|
|
|
+ e.setNov(serviceProject==null?BigDecimal.ZERO:serviceProject.getNov());//11
|
|
|
+ e.setDece(serviceProject==null?BigDecimal.ZERO:serviceProject.getDece());//12
|
|
|
+ });
|
|
|
+ return R.data(itemList);
|
|
|
+ }
|
|
|
+ else if(flag==2)
|
|
|
+ {
|
|
|
+ //获取结算时间为指定年的数据
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ itemLambdaQueryWrapper.apply(" year(pay_time) = '"+year+"'");
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getTenantId,AuthUtil.getTenantId());
|
|
|
+ itemLambdaQueryWrapper.eq(ServiceProjectItem::getIsDeleted,0);
|
|
|
+ List<Long> pids = serviceProjectItemService.list(itemLambdaQueryWrapper).stream().map(ServiceProjectItem::getPId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtils.isEmpty(pids))
|
|
|
+ {
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过上述数据,查询相关客户数据
|
|
|
+ LambdaQueryWrapper<ServiceProject> countCorps=new LambdaQueryWrapper<>();
|
|
|
+ countCorps
|
|
|
+ .eq(corpNames!=null,ServiceProject::getCorpId,corpNames)
|
|
|
+ .isNotNull(ServiceProject::getCorpId)
|
|
|
+ .in(ServiceProject::getId,pids)
|
|
|
+ .eq(ServiceProject::getIsDeleted,0)
|
|
|
+ .groupBy(ServiceProject::getCorpId)
|
|
|
+ .eq(ServiceProject::getTenantId,AuthUtil.getTenantId());
|
|
|
+ List<ServiceProject> projectList = serviceProjectService.list(countCorps);
|
|
|
+
|
|
|
+ Long finalYear = year;
|
|
|
+ //开始封装数据
|
|
|
+ projectList.forEach(e->{
|
|
|
+ //客户名称
|
|
|
+ if(e.getCorpId()!=null)
|
|
|
+ {
|
|
|
+ R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(e.getCorpId());
|
|
|
+ if(corpMessage.isSuccess()&&corpMessage.getData()!=null)
|
|
|
+ {
|
|
|
+ e.setCorpNames(corpMessage.getData().getCname());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //统计此客户多少个承做人
|
|
|
+ LambdaQueryWrapper<ServiceProject> count=new LambdaQueryWrapper<>();
|
|
|
+ count.eq(ServiceProject::getTenantId,AuthUtil.getTenantId());
|
|
|
+ count.eq(ServiceProject::getIsDeleted,0);
|
|
|
+ count.eq(ServiceProject::getCorpId,e.getCorpId());
|
|
|
+ List<Long> pid = serviceProjectService.list(count).stream().map(ServiceProject::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if(!CollectionUtils.isEmpty(pid))
|
|
|
+ {
|
|
|
+ LambdaQueryWrapper<ServiceProjectItem> countItem=new LambdaQueryWrapper<>();
|
|
|
+ countItem.in(ServiceProjectItem::getPId,pid);
|
|
|
+ countItem.eq(ServiceProjectItem::getIsDeleted,0);
|
|
|
+ countItem.eq(ServiceProjectItem::getTenantId,AuthUtil.getTenantId());
|
|
|
+ List<ServiceProjectItem> list = serviceProjectItemService.list(countItem);
|
|
|
+ e.setCountUserName(list.stream().map(ServiceProjectItem::getUserName).distinct().collect(Collectors.toList()).size());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ e.setCountUserName(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //统计服务费
|
|
|
+ ServiceProject serviceProject = calculateServiceCharge(null,e.getCorpId(), 2, finalYear);
|
|
|
+ e.setJan(serviceProject==null?BigDecimal.ZERO:serviceProject.getJan());//1
|
|
|
+ e.setFeb(serviceProject==null?BigDecimal.ZERO:serviceProject.getFeb());//2
|
|
|
+ e.setMar(serviceProject==null?BigDecimal.ZERO:serviceProject.getMar());//3
|
|
|
+ e.setApr(serviceProject==null?BigDecimal.ZERO:serviceProject.getApr());//4
|
|
|
+ e.setMay(serviceProject==null?BigDecimal.ZERO:serviceProject.getMay());//5
|
|
|
+ e.setJune(serviceProject==null?BigDecimal.ZERO:serviceProject.getJune());//6
|
|
|
+ e.setJuly(serviceProject==null?BigDecimal.ZERO:serviceProject.getJuly());//7
|
|
|
+ e.setAug(serviceProject==null?BigDecimal.ZERO:serviceProject.getAug());//8
|
|
|
+ e.setSept(serviceProject==null?BigDecimal.ZERO:serviceProject.getSept());//9
|
|
|
+ e.setOct(serviceProject==null?BigDecimal.ZERO:serviceProject.getOct());//10
|
|
|
+ e.setNov(serviceProject==null?BigDecimal.ZERO:serviceProject.getNov());//11
|
|
|
+ e.setDece(serviceProject==null?BigDecimal.ZERO:serviceProject.getDece());//12
|
|
|
+
|
|
|
+ });
|
|
|
+ return R.data(projectList);
|
|
|
+ }
|
|
|
+ return R.data(Collections.EMPTY_LIST);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* 2.0-业绩分析
|
|
|
@@ -401,6 +554,7 @@ public class ProjectController {
|
|
|
public R<?> performanceAnalysis(@RequestParam(name = "flag", required = true) int flag,@RequestParam(name = "year", defaultValue = "2021") Long year,
|
|
|
@RequestParam(name = "current", defaultValue = "1") Integer current
|
|
|
,@RequestParam(name = "size", defaultValue = "10") Integer size
|
|
|
+ ,@RequestParam(name = "corpNames", required = false) Long corpNames
|
|
|
,@RequestParam(name = "userName", required = false) String userName)
|
|
|
{
|
|
|
|
|
|
@@ -482,6 +636,7 @@ public class ProjectController {
|
|
|
Page<ServiceProject> page=new Page<>(current,size);
|
|
|
LambdaQueryWrapper<ServiceProject> countCorps=new LambdaQueryWrapper<>();
|
|
|
countCorps
|
|
|
+ .eq(corpNames!=null,ServiceProject::getCorpId,corpNames)
|
|
|
.isNotNull(ServiceProject::getCorpId)
|
|
|
.in(ServiceProject::getId,pids)
|
|
|
.eq(ServiceProject::getIsDeleted,0)
|