Browse Source

统计分析修改

ioioio 3 years ago
parent
commit
5642038787

+ 3 - 0
blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProject.java

@@ -162,4 +162,7 @@ public class ServiceProject  implements Serializable {
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date payTime;
+
+	@TableField(exist = false)
+	private Integer countUserName;
 }

+ 29 - 0
blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProjectItem.java

@@ -140,4 +140,33 @@ public class ServiceProjectItem extends TenantEntity implements Serializable {
 	private Long cornId;
 
 
+	@TableField(exist = false)
+	private BigDecimal Jan;
+	@TableField(exist = false)
+	private BigDecimal Feb;
+	@TableField(exist = false)
+	private BigDecimal Mar;
+	@TableField(exist = false)
+	private BigDecimal Apr;
+	@TableField(exist = false)
+	private BigDecimal May;
+	@TableField(exist = false)
+	private BigDecimal June;
+	@TableField(exist = false)
+	private BigDecimal July;
+	@TableField(exist = false)
+	private BigDecimal Aug;
+	@TableField(exist = false)
+	private BigDecimal Sept;
+	@TableField(exist = false)
+	private BigDecimal Oct;
+	@TableField(exist = false)
+	private BigDecimal Nov;
+	@TableField(exist = false)
+	private BigDecimal Dece;
+
+	@TableField(exist = false)
+	private Integer countCorp;
+
+
 }

+ 149 - 6
blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java

@@ -391,11 +391,153 @@ public class ProjectController {
 	 * 2.0-业绩分析
 	 * */
 	@GetMapping("/performanceAnalysis")
-	public R performanceAnalysis(@RequestParam(name = "flag",  required = true) int flag,@RequestParam(name = "year",  required = false) Long year,
+	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 = "createUser",  required = false) Long createUser)
+	                            ,@RequestParam(name = "userName",  required = false) String userName)
 	{
+
+		//按承做人统计多少个客户
+		if(flag==1)
+		{
+			Page<ServiceProjectItem> page=new Page<>(current,size);
+			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);
+			//分组不同的承做人
+			IPage<ServiceProjectItem>  ipage= serviceProjectItemService.page(page,itemLambdaQueryWrapper);
+			if(CollectionUtils.isEmpty(ipage.getRecords()))
+			{
+               return R.data(Collections.EMPTY_LIST);
+			}
+			Long finalYear = year;
+			ipage.getRecords().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 = 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(ipage);
+		}
+		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);
+			}
+
+            //通过上述数据,查询相关客户数据
+			Page<ServiceProject> page=new Page<>(current,size);
+			LambdaQueryWrapper<ServiceProject> countCorps=new LambdaQueryWrapper<>();
+			countCorps
+				.isNotNull(ServiceProject::getCorpId)
+				.in(ServiceProject::getId,pids)
+				.eq(ServiceProject::getIsDeleted,0)
+				.groupBy(ServiceProject::getCorpId)
+				.eq(ServiceProject::getTenantId,AuthUtil.getTenantId());
+			IPage<ServiceProject> iPage = serviceProjectService.page(page, countCorps);
+
+			Long finalYear = year;
+			//开始封装数据
+			iPage.getRecords().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(iPage);
+		}
+
+
+
+/*
 		if(year==null&&year==0L&&year==0)
 		{
 			Calendar cal = Calendar.getInstance();
@@ -491,19 +633,20 @@ public class ProjectController {
 
 
 			}
-		   	return R.data(iPage);
+		   	return R.data(iPage);*/
+		return R.data(Collections.EMPTY_LIST);
 	}
 
     //计算每个月的服务费
-	public ServiceProject calculateServiceCharge(Long id,int flag,Long year)
+	public ServiceProject calculateServiceCharge(String userName,Long id,int flag,Long year)
 	{
 		  if(flag==1)
 		  {
-			  return serviceProjectService.calculateServiceCharge(AuthUtil.getTenantId(), year.toString(), null, id);
+			  return serviceProjectService.calculateServiceCharge(AuthUtil.getTenantId(), year.toString(), null, id,userName);
 		  }
 		  else if(flag==2)
 		  {
-			  return serviceProjectService.calculateServiceCharge(AuthUtil.getTenantId(),year.toString(),id,null);
+			  return serviceProjectService.calculateServiceCharge(AuthUtil.getTenantId(),year.toString(),id,null,userName);
 		  }
 		  else
 		  {

+ 1 - 1
blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectItemMapper.java

@@ -21,5 +21,5 @@ public interface ServiceProjectItemMapper extends BaseMapper<ServiceProjectItem>
 
 	List<ServiceProjectItem>  statisticalAnalysis(@Param("tenantId") String tenantId);
 
-	ServiceProject calculateServiceCharge(@Param("tenantId") String tenantId,@Param("year") String year,@Param("corpId") Long corpId,@Param("createUser") Long createUser);
+	ServiceProject calculateServiceCharge(@Param("tenantId") String tenantId,@Param("year") String year,@Param("corpId") Long corpId,@Param("createUser") Long createUser,@Param("userName")String userName);
 }

+ 4 - 5
blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectItemMapper.xml

@@ -15,11 +15,7 @@
     WHEN  7 THEN '追加'
     WHEN  8 THEN '退费'
     ELSE 'null' END) as strStatus ,
-    (CASE a.project_type
-    WHEN  0 THEN '普通'
-    WHEN  1 THEN '追加'
-    WHEN  2 THEN '退费'
-    ELSE 'null' END) as projectType ,
+    a.project_type as projectType ,
     b.cname as cornName ,
     a.p_name as pname,
     ((a.service_charge+ a.mat_money )-a.cost_return) as grossIncome,
@@ -85,6 +81,9 @@
         <if test="createUser!=null">
             AND b.create_user = #{createUser}
         </if>
+        <if test="userName!=null">
+            AND b.user_name = #{userName}
+        </if>
     </select>
 
 </mapper>

+ 1 - 1
blade-service/blade-project/src/main/java/org/springblade/project/service/ServiceProjectService.java

@@ -40,5 +40,5 @@ public interface ServiceProjectService extends IService<ServiceProject>
 
     void settleAccounts(Long id,int status, String accountName,String accountBank,Date payTime, String accountNo);
 
-	ServiceProject calculateServiceCharge(String tenantId,  String year,  Long corpId,  Long createUser);
+	ServiceProject calculateServiceCharge(String tenantId,  String year,  Long corpId,  Long createUser,String userName);
 }

+ 2 - 2
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java

@@ -474,9 +474,9 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 	}
 
 	@Override
-	public ServiceProject calculateServiceCharge(String tenantId, String year, Long corpId, Long createUser)
+	public ServiceProject calculateServiceCharge(String tenantId, String year, Long corpId, Long createUser,String userName)
 	  {
-		return serviceProjectItemMapper.calculateServiceCharge(tenantId,year,corpId,createUser);
+		return serviceProjectItemMapper.calculateServiceCharge(tenantId,year,corpId,createUser,userName);
 	}
 
 	public void checkMoney(Long serviceId,List<ServiceProjectItem> items)