|
@@ -5,6 +5,8 @@ import cn.com.ty.lift.batch.applet.dao.mapper.ContractDataMapper;
|
|
|
import cn.com.ty.lift.batch.applet.dao.model.ContractDataModel;
|
|
|
import cn.com.ty.lift.batch.applet.dao.model.request.CommonRequest;
|
|
|
import cn.com.ty.lift.batch.applet.dao.model.request.ContractDataRequest;
|
|
|
+import cn.com.ty.lift.batch.applet.dao.model.response.DueToContractResponse;
|
|
|
+import cn.com.ty.lift.batch.applet.dao.model.response.LostContractResponse;
|
|
|
import cn.com.ty.lift.batch.applet.util.DataStatisticsUtil;
|
|
|
import cn.com.ty.lift.common.constants.ApiConstants;
|
|
|
import cn.com.xwy.boot.web.dto.RestResponse;
|
|
@@ -12,7 +14,12 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author huangyuan
|
|
@@ -36,6 +43,25 @@ public class ContractDataService {
|
|
|
*/
|
|
|
public void putContractDataToRedis(CommonRequest commonRequest) {
|
|
|
List<ContractDataModel> contractDataModelList = contractDataMapper.getContractDataList(commonRequest);
|
|
|
+ if (contractDataModelList != null && contractDataModelList.size() > 0) {
|
|
|
+ //将合同数据变为 id->数据的map
|
|
|
+ Map<Long, ContractDataModel> idToContractModel = contractDataModelList.stream().collect(Collectors.toMap(ContractDataModel::getId, a -> a));
|
|
|
+ //设置合同状态
|
|
|
+ contractDataModelList.forEach(a -> {
|
|
|
+ switch (a.getStatus()) {
|
|
|
+ case 2:
|
|
|
+ a.setContractType(2);
|
|
|
+ case 3:
|
|
|
+ //合同结束,如果有续签,则合同未丢失,如果没有需求合同丢失
|
|
|
+ a.setContractType(3);
|
|
|
+ ContractDataModel contractDataModel = idToContractModel.get(a.getId());
|
|
|
+ if (contractDataModel != null) {
|
|
|
+ a.setContractType(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
//通过公司id给数据分组
|
|
|
DataStatisticsUtil.putStatisticsDataToRedis(contractDataModelList, redisTemplate,
|
|
|
DataStatisticsConstants.CONTRACT_DATA_FIELD);
|
|
@@ -52,6 +78,20 @@ public class ContractDataService {
|
|
|
List<ContractDataModel> contractDataModelList = (List<ContractDataModel>) DataStatisticsUtil
|
|
|
.getStatisticsDataFromRedis(redisTemplate,
|
|
|
DataStatisticsConstants.CONTRACT_DATA_FIELD, contractDataRequest.getMtCompanyId());
|
|
|
+ if (contractDataModelList != null && contractDataModelList.size() > 0) {
|
|
|
+ //通过起始时间过滤合同信息
|
|
|
+ if (contractDataRequest.getStartTimeDate() != null) {
|
|
|
+ contractDataModelList = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getGivenDate().isAfter(contractDataRequest.getStartTimeDate()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ //通过终止时间过滤
|
|
|
+ if (contractDataRequest.getEndTimeDate() != null) {
|
|
|
+ contractDataModelList = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getGivenDate().isBefore(contractDataRequest.getEndTimeDate()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ }
|
|
|
return contractDataModelList;
|
|
|
}
|
|
|
|
|
@@ -62,8 +102,22 @@ public class ContractDataService {
|
|
|
* @date 2020/2/5 4:35 下午
|
|
|
*/
|
|
|
public RestResponse contractOverView(ContractDataRequest contractDataRequest) {
|
|
|
+ Map<Integer, Long> contractTypeToNum = DataStatisticsConstants.ANNUAL_STATUS_TO_NUM;
|
|
|
+ //从redis中获取合同数据
|
|
|
List<ContractDataModel> contractDataModelList = getContractDataListFromRedis(contractDataRequest);
|
|
|
- return RestResponse.success(ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
+ if (contractDataModelList != null && contractDataModelList.size() > 0) {
|
|
|
+ //设置新增合同数量
|
|
|
+ contractTypeToNum.put(1, contractDataModelList.stream().count());
|
|
|
+ //设置计划合同数量
|
|
|
+ long planContractNum = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getContractType() == 2).count();
|
|
|
+ contractTypeToNum.put(2, planContractNum);
|
|
|
+ //设置丢失合同数量
|
|
|
+ long lostContractNum = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getContractType() == 3).count();
|
|
|
+ contractTypeToNum.put(3, lostContractNum);
|
|
|
+ }
|
|
|
+ return RestResponse.success(contractTypeToNum, ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -73,8 +127,40 @@ public class ContractDataService {
|
|
|
* @date 2020/2/5 4:39 下午
|
|
|
*/
|
|
|
public RestResponse lostContract(ContractDataRequest contractDataRequest) {
|
|
|
+ List<LostContractResponse> lostContractResponseList = new ArrayList<>();
|
|
|
List<ContractDataModel> contractDataModelList = getContractDataListFromRedis(contractDataRequest);
|
|
|
- return RestResponse.success(ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
+ if (contractDataModelList != null && contractDataModelList.size() > 0) {
|
|
|
+ //定义一个临时变量
|
|
|
+ final List<LostContractResponse> finalLostContractResponseList = new ArrayList<>();
|
|
|
+ contractDataModelList = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getContractType() == 3)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //循环设置丢失合同信息
|
|
|
+ contractDataModelList.forEach(a -> {
|
|
|
+ LostContractResponse lostContractResponse = new LostContractResponse();
|
|
|
+ lostContractResponse.setContractCode(a.getCode());
|
|
|
+ lostContractResponse.setProjectName(a.getProjectName());
|
|
|
+ lostContractResponse.setStartDate(a.getStarDate());
|
|
|
+ lostContractResponse.setEndDate(a.getEndDate());
|
|
|
+ //设置应收金额
|
|
|
+ double planMoney = a.getPlanMoney() != null ? a.getPlanMoney().doubleValue() : 0d;
|
|
|
+ double workMoney = a.getWorkMoney() != null ? a.getWorkMoney().doubleValue() : 0d;
|
|
|
+ lostContractResponse.setNotReceiveMoney(planMoney - workMoney);
|
|
|
+ //设置持续时间
|
|
|
+ lostContractResponse.setDuration(0L);
|
|
|
+ if (a.getStarDate() != null && a.getEndDate() != null) {
|
|
|
+ lostContractResponse.setDuration(
|
|
|
+ Duration.between(a.getEndDate(), a.getStarDate()).toDays());
|
|
|
+ }
|
|
|
+ finalLostContractResponseList.add(lostContractResponse);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ //通过应收金额降序排列,并取前5的数据
|
|
|
+ lostContractResponseList = finalLostContractResponseList.stream()
|
|
|
+ .sorted(Comparator.comparing(a -> a.getNotReceiveMoney())).limit(5)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ return RestResponse.success(lostContractResponseList, ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -84,7 +170,34 @@ public class ContractDataService {
|
|
|
* @date 2020/2/5 4:41 下午
|
|
|
*/
|
|
|
public RestResponse dueToWarn(ContractDataRequest contractDataRequest) {
|
|
|
+ List<DueToContractResponse> dueToContractResponseList = new ArrayList<>();
|
|
|
List<ContractDataModel> contractDataModelList = getContractDataListFromRedis(contractDataRequest);
|
|
|
- return RestResponse.success(ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
+ if (contractDataModelList != null && contractDataModelList.size() > 0) {
|
|
|
+ final List<DueToContractResponse> finalDueToContractResponseList = new ArrayList<>();
|
|
|
+ //获取在执行中的合同
|
|
|
+ contractDataModelList = contractDataModelList.stream()
|
|
|
+ .filter(a -> a.getContractType() == 2)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ contractDataModelList.forEach(a -> {
|
|
|
+ DueToContractResponse dueToContractResponse = new DueToContractResponse();
|
|
|
+ dueToContractResponse.setCollectDate(a.getPlanDate());
|
|
|
+ dueToContractResponse.setEndDate(a.getEndDate());
|
|
|
+ dueToContractResponse.setProjectName(a.getProjectName());
|
|
|
+ double needMoney = a.getPlanMoney() != null ? a.getPlanMoney().doubleValue() : 0d;
|
|
|
+ dueToContractResponse.setNeedMoney(needMoney);
|
|
|
+ finalDueToContractResponseList.add(dueToContractResponse);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ //通过到期时间顺序排列
|
|
|
+ dueToContractResponseList = finalDueToContractResponseList.stream()
|
|
|
+ .sorted(Comparator.comparing(DueToContractResponse::getEndDate))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //如果是前5的数据获取前5的数据
|
|
|
+ if("top5".equals(contractDataRequest.getContractScope())){
|
|
|
+ dueToContractResponseList = dueToContractResponseList.stream()
|
|
|
+ .limit(5).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return RestResponse.success(dueToContractResponseList, ApiConstants.RESULT_SUCCESS, "获取统计数据成功");
|
|
|
}
|
|
|
}
|