Commit 4bcf2879 by kangxiaoshan

跑流量

parent cff31efe
...@@ -139,45 +139,53 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -139,45 +139,53 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
try (Stream<Contract> streamContract = contracts.parallelStream()) { try (Stream<Contract> streamContract = contracts.parallelStream()) {
streamContract.forEachOrdered(v -> { streamContract.forEachOrdered(v -> {
v.setMyBodyName(bodiesNameMap.get(v.getMyBodyCode())); v.setMyBodyName(bodiesNameMap.get(v.getMyBodyCode()));
if(v.getBarrioId()!=null) if (v.getBarrioId() != null)
v.setBarrioName(barrioCitiesNameMap.get(barrioCitiesNameMap.get(v.getBarrioId()).getParentId()).getName()); v.setBarrioName(barrioCitiesNameMap.get(barrioCitiesNameMap.get(v.getBarrioId()).getParentId()).getName());
if(v.getPriceLevel()!=null) if (v.getPriceLevel() != null)
v.setPriceLevelName(packageBaseMap.get(v.getPriceLevel()).getPackageName()); v.setPriceLevelName(packageBaseMap.get(v.getPriceLevel()).getPackageName());
}); });
} }
if("tkio".equals(platform)){ if ("tkio".equals(platform)) {
this.shareIncome4ContractTKIO_2(contracts,start,end); contracts = Arrays.asList(contractRepository.findByCode("BJ-TKIO-20200821-0125"));
}else{
this.shareIncome4ContractTKIO_2(contracts, start, end);
} else {
try (Stream<Contract> streamContract = contracts.parallelStream()) { try (Stream<Contract> streamContract = contracts.parallelStream()) {
streamContract.forEachOrdered(v -> { streamContract.forEachOrdered(v -> {
switch (ContractBranchUtil.getValue(platform)){ switch (ContractBranchUtil.getValue(platform)) {
case "type_one":this.shareIncome4Contract(v, start, end);break; case "type_one":
this.shareIncome4Contract(v, start, end);
break;
case "type_two": case "type_two":
if(v.getPriceLevel()==Constant.tkioPriceLevelNotLimit){ if (v.getPriceLevel() == Constant.tkioPriceLevelNotLimit) {
//TKIO不限量套餐 //TKIO不限量套餐
this.shareIncome4Contract(v, start, end); this.shareIncome4Contract(v, start, end);
}else{ } else {
//TKIO普通流量套餐 //TKIO普通流量套餐
//this.shareIncome4ContractTwo(v, start, end); //this.shareIncome4ContractTwo(v, start, end);
this.shareIncome4ContractTKIO(v, start, end,false); this.shareIncome4ContractTKIO(v, start, end, false);
} }
break; break;
case "type_three":this.shareIncome4ContractCAS(v, start, end);break; case "type_three":
default:this.shareIncome4Contract(v, start, end);break; this.shareIncome4ContractCAS(v, start, end);
break;
default:
this.shareIncome4Contract(v, start, end);
break;
} }
}); });
} }
} }
if(ContractBranchUtil.getValue(platform).equals("type_three")){ if (ContractBranchUtil.getValue(platform).equals("type_three")) {
List<Contract> removeContracts = new ArrayList<>(); List<Contract> removeContracts = new ArrayList<>();
for (Contract contract : contracts) { for (Contract contract : contracts) {
if(contract.getIntervalUseDays()<0){ if (contract.getIntervalUseDays() < 0) {
removeContracts.add(contract); removeContracts.add(contract);
} }
} }
if(!CollectionUtils.isEmpty(removeContracts)){ if (!CollectionUtils.isEmpty(removeContracts)) {
contracts.removeAll(removeContracts); contracts.removeAll(removeContracts);
} }
} }
...@@ -189,10 +197,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -189,10 +197,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if ("tkio".equals(platform)) { if ("tkio".equals(platform)) {
//查询主账号为空的 并且 结束日期在查询范围内的 //查询主账号为空的 并且 结束日期在查询范围内的
List<Long> allEmailIsNullIds = contractRepository.findAllEmailIsNull(startDate, endDate); List<Long> allEmailIsNullIds = contractRepository.findAllEmailIsNull(startDate, endDate);
for(Contract contract : contracts){ for (Contract contract : contracts) {
if(StringUtil.isEmpty(contract.getEmail()) || "null".equals(contract.getEmail())){ if (StringUtil.isEmpty(contract.getEmail()) || "null".equals(contract.getEmail())) {
//不在查询范围内的数据,全部置空 //不在查询范围内的数据,全部置空
if(allEmailIsNullIds ==null || !allEmailIsNullIds.contains(BigInteger.valueOf(contract.getId()))) { if (allEmailIsNullIds == null || !allEmailIsNullIds.contains(BigInteger.valueOf(contract.getId()))) {
contract.setClickFlow(0D); //区间点击数(万次) contract.setClickFlow(0D); //区间点击数(万次)
contract.setIntervaIncomeShare(0L);//区间分摊收入 contract.setIntervaIncomeShare(0L);//区间分摊收入
contract.setAdjustmentFund(0L);//区间调整金额 contract.setAdjustmentFund(0L);//区间调整金额
...@@ -234,10 +242,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -234,10 +242,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
BigDecimal oneTimeRecognizedRevenue = null; BigDecimal oneTimeRecognizedRevenue = null;
BigDecimal dailyRevenueRecognition = null; BigDecimal dailyRevenueRecognition = null;
if(contract.getOneTime()!=null&&contract.getOneTime()==false){//处理cas是否计算一次性收入标识 if (contract.getOneTime() != null && contract.getOneTime() == false) {//处理cas是否计算一次性收入标识
oneTimeRecognizedRevenue = new BigDecimal("0"); oneTimeRecognizedRevenue = new BigDecimal("0");
dailyRevenueRecognition = bigDecimal.multiply(new BigDecimal("100")); dailyRevenueRecognition = bigDecimal.multiply(new BigDecimal("100"));
}else{ } else {
oneTimeRecognizedRevenue = bigDecimal.multiply(new BigDecimal("0.9")); oneTimeRecognizedRevenue = bigDecimal.multiply(new BigDecimal("0.9"));
dailyRevenueRecognition = bigDecimal.multiply(new BigDecimal("10"));//0.1*100=10,前端拿到区间分摊收入/100得到最终的值 dailyRevenueRecognition = bigDecimal.multiply(new BigDecimal("10"));//0.1*100=10,前端拿到区间分摊收入/100得到最终的值
} }
...@@ -245,16 +253,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -245,16 +253,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
int contractAllDay = getDayRange(contractValidPart[0], contractValidPart[1]) + 1;//合同总天数 int contractAllDay = getDayRange(contractValidPart[0], contractValidPart[1]) + 1;//合同总天数
//处理精度 //处理精度
BigDecimal dayShareIncome = dailyRevenueRecognition.divide(new BigDecimal(String.valueOf(contractAllDay)),8,BigDecimal.ROUND_HALF_UP); BigDecimal dayShareIncome = dailyRevenueRecognition.divide(new BigDecimal(String.valueOf(contractAllDay)), 8, BigDecimal.ROUND_HALF_UP);
//作废合同处理 //作废合同处理
Contract cancleContract = this.cancledShareCAS(contract, oneTimeRecognizedRevenue,contractAllDay, dayShareIncome, contractPart, usePart, selected ,contractValidPart); Contract cancleContract = this.cancledShareCAS(contract, oneTimeRecognizedRevenue, contractAllDay, dayShareIncome, contractPart, usePart, selected, contractValidPart);
if (cancleContract != null) { if (cancleContract != null) {
return; return;
} }
//中止合同处理 //中止合同处理
Contract suspendContract = this.suspendShareCAS(contract,oneTimeRecognizedRevenue, contractAllDay, dayShareIncome, contractPart, usePart, selected,contractValidPart); Contract suspendContract = this.suspendShareCAS(contract, oneTimeRecognizedRevenue, contractAllDay, dayShareIncome, contractPart, usePart, selected, contractValidPart);
if (suspendContract != null) { if (suspendContract != null) {
return; return;
} }
...@@ -266,7 +274,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -266,7 +274,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
create, //录入日 create, //录入日
create.dayOfMonth().withMinimumValue() //录入月1日 create.dayOfMonth().withMinimumValue() //录入月1日
}; };
this.afterContractCAS(contract,oneTimeRecognizedRevenue, contractAllDay, dayShareIncome, contractPart, usePart, selected, creatPoints,contractValidPart); this.afterContractCAS(contract, oneTimeRecognizedRevenue, contractAllDay, dayShareIncome, contractPart, usePart, selected, creatPoints, contractValidPart);
} }
...@@ -279,9 +287,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -279,9 +287,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
/*if(checkTwoTime(contractValidPart[0],usePart[1]) && checkTwoTime(usePart[0],contractValidPart[0])){ /*if(checkTwoTime(contractValidPart[0],usePart[1]) && checkTwoTime(usePart[0],contractValidPart[0])){
contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue());
}*/ }*/
if(checkTwoTime(contractValidPart[0],usePart[1]) && checkTwoTime(usePart[0],contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], usePart[1]) && checkTwoTime(usePart[0], contractValidPart[0])) {
//contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); //contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue());
}else{ } else {
contract.setOneTimeRecognizedRevenue(0.0); contract.setOneTimeRecognizedRevenue(0.0);
} }
...@@ -328,7 +336,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -328,7 +336,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
adjustmentFund = shareMultiply(dayShareIncome, new BigDecimal(getDayRange(contractValidPart[0], creatPoints[1].plusDays(-1)) + 1), 0); adjustmentFund = shareMultiply(dayShareIncome, new BigDecimal(getDayRange(contractValidPart[0], creatPoints[1].plusDays(-1)) + 1), 0);
adjustmentFund+=oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); adjustmentFund += oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
if (checkTwoTime(selected[0], creatPoints[1]) && checkTwoTime(creatPoints[1], selected[1])) { if (checkTwoTime(selected[0], creatPoints[1]) && checkTwoTime(creatPoints[1], selected[1])) {
//所选时间范围包含 录入月 1 号 显示统计的调整金 //所选时间范围包含 录入月 1 号 显示统计的调整金
contract.setAdjustmentFund(adjustmentFund); contract.setAdjustmentFund(adjustmentFund);
...@@ -339,11 +347,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -339,11 +347,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if (checkTwoTime(selected[0], contractValidPart[1]) && checkTwoTime(contractValidPart[1], selected[1])) { if (checkTwoTime(selected[0], contractValidPart[1]) && checkTwoTime(contractValidPart[1], selected[1])) {
contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], contractValidPart[1]) + 1), dayShareIncome, 0)); contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], contractValidPart[1]) + 1), dayShareIncome, 0));
contract.setIncomeGross(contract.getIncomeGross()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(contract.getIncomeGross() + oneTimeRecognizedRevenue.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} else { } else {
contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], selected[1]) + 1), dayShareIncome, 0)); contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], selected[1]) + 1), dayShareIncome, 0));
if(checkTwoTime(contractValidPart[0],selected[1])){ if (checkTwoTime(contractValidPart[0], selected[1])) {
contract.setIncomeGross(contract.getIncomeGross()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(contract.getIncomeGross() + oneTimeRecognizedRevenue.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} }
...@@ -394,9 +402,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -394,9 +402,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
adjustmentFund = 0L; adjustmentFund = 0L;
} else { } else {
adjustmentFund = shareMultiply(new BigDecimal((getDayRange(cancelDate, suspendDate) + 1) * -1), dayShareIncome, 0); adjustmentFund = shareMultiply(new BigDecimal((getDayRange(cancelDate, suspendDate) + 1) * -1), dayShareIncome, 0);
if(checkTwoTime(contractValidPart[0],suspendDate) && checkTwoTime(cancelDate,contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], suspendDate) && checkTwoTime(cancelDate, contractValidPart[0])) {
adjustmentFund+=oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); adjustmentFund += oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
}else{ } else {
contract.setOneTimeRecognizedRevenue(0.0); contract.setOneTimeRecognizedRevenue(0.0);
} }
} }
...@@ -410,22 +418,22 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -410,22 +418,22 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
/*if(checkTwoTime(contractValidPart[0],usedEnd) && checkTwoTime(usePart[0],contractValidPart[0])){ /*if(checkTwoTime(contractValidPart[0],usedEnd) && checkTwoTime(usePart[0],contractValidPart[0])){
contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(BigDecimal.ROUND_HALF_UP).longValue());
}*/ }*/
if(checkTwoTime(contractValidPart[0],usedEnd) && checkTwoTime(usePart[0],contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], usedEnd) && checkTwoTime(usePart[0], contractValidPart[0])) {
}else{ } else {
contract.setOneTimeRecognizedRevenue(0.0); contract.setOneTimeRecognizedRevenue(0.0);
} }
if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) { if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) {
contract.setAdjustmentFund(adjustmentFund); contract.setAdjustmentFund(adjustmentFund);
contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], cancelDate) + 1), dayShareIncome, 0)); contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], cancelDate) + 1), dayShareIncome, 0));
if(checkTwoTime(contractValidPart[0],cancelDate) && checkTwoTime(contractPart[0],contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], cancelDate) && checkTwoTime(contractPart[0], contractValidPart[0])) {
contract.setIncomeGross(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(contract.getIntervaIncomeShare() + oneTimeRecognizedRevenue.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} else { } else {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], selected[1]) + 1), dayShareIncome, 0)); contract.setIncomeGross(shareMultiply(new BigDecimal(getDayRange(contractValidPart[0], selected[1]) + 1), dayShareIncome, 0));
if(checkTwoTime(contractValidPart[0],cancelDate) && checkTwoTime(contractPart[0],contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], cancelDate) && checkTwoTime(contractPart[0], contractValidPart[0])) {
contract.setIncomeGross(contract.getIntervaIncomeShare()+oneTimeRecognizedRevenue.setScale(0,BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(contract.getIntervaIncomeShare() + oneTimeRecognizedRevenue.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} }
...@@ -452,9 +460,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -452,9 +460,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
DateTime cancelDate = new DateTime(contractChange.getDs()); DateTime cancelDate = new DateTime(contractChange.getDs());
Long adjustmentFund = shareMultiply(new BigDecimal((getDayRange(contractValidPart[0], cancelDate) + 1) * -1), dayShareIncome, 0); Long adjustmentFund = shareMultiply(new BigDecimal((getDayRange(contractValidPart[0], cancelDate) + 1) * -1), dayShareIncome, 0);
adjustmentFund-=oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0,BigDecimal.ROUND_HALF_UP).longValue(); adjustmentFund -= oneTimeRecognizedRevenue.multiply(new BigDecimal("100")).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
if(checkTwoTime(contractValidPart[0],selected[1]) && checkTwoTime(selected[0],contractValidPart[0])){ if (checkTwoTime(contractValidPart[0], selected[1]) && checkTwoTime(selected[0], contractValidPart[0])) {
}else{ } else {
contract.setOneTimeRecognizedRevenue(0.0); contract.setOneTimeRecognizedRevenue(0.0);
} }
...@@ -481,6 +489,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -481,6 +489,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
/** /**
* 功能描述:增加补充协议的逻辑 * 功能描述:增加补充协议的逻辑
*
* @author liyin * @author liyin
* @date 2020/11/5 * @date 2020/11/5
*/ */
...@@ -489,20 +498,20 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -489,20 +498,20 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//查出所有报表->进行代码分组,按照email分组 计算 //查出所有报表->进行代码分组,按照email分组 计算
try (Stream<Contract> streamContract = contracts.parallelStream()) { try (Stream<Contract> streamContract = contracts.parallelStream()) {
streamContract.forEachOrdered(v -> { streamContract.forEachOrdered(v -> {
if(!StringUtil.isEmpty(v.getEmail())){ if (!StringUtil.isEmpty(v.getEmail())) {
multimap.put(v.getEmail(),v); multimap.put(v.getEmail(), v);
}else{ } else {
if(v.getPriceLevel()== Constant.tkioPriceLevelNotLimit){ if (v.getPriceLevel() == Constant.tkioPriceLevelNotLimit) {
int contractAllDay = getDayRange(new DateTime(v.getStartDate()), new DateTime(v.getEndDate())) + 1;//合同总天数 int contractAllDay = getDayRange(new DateTime(v.getStartDate()), new DateTime(v.getEndDate())) + 1;//合同总天数
v.setUnitPrice(new BigDecimal(v.getMoney()/1.06/contractAllDay).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); v.setUnitPrice(new BigDecimal(v.getMoney() / 1.06 / contractAllDay).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
}else{ } else {
v.setUnitPrice(new BigDecimal(v.getMoney() / 1.06 /v.getTrackFlow()) v.setUnitPrice(new BigDecimal(v.getMoney() / 1.06 / v.getTrackFlow())
.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); .setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
v.setClickFlow(0.0); v.setClickFlow(0.0);
v.setAdjustmentFund(0L); v.setAdjustmentFund(0L);
if(checkTwoTime(new DateTime(v.getEndDate()),end)||checkTwoTime(start,new DateTime(v.getEndDate()))){ if (checkTwoTime(new DateTime(v.getEndDate()), end) || checkTwoTime(start, new DateTime(v.getEndDate()))) {
v.setIntervaIncomeShare(new BigDecimal(v.getMoney()/1.06*100).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); v.setIntervaIncomeShare(new BigDecimal(v.getMoney() / 1.06 * 100).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
v.setIncomeGross(v.getIntervaIncomeShare()); v.setIncomeGross(v.getIntervaIncomeShare());
v.setIncomeShareAll(v.getIntervaIncomeShare()); v.setIncomeShareAll(v.getIntervaIncomeShare());
} }
...@@ -517,16 +526,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -517,16 +526,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
HashMap<String, Contract> map = new HashMap<>(); HashMap<String, Contract> map = new HashMap<>();
//处理查询区间内只有补充协议没有主合同的情况 //处理查询区间内只有补充协议没有主合同的情况
for (Contract groupContract : groupContracts) { for (Contract groupContract : groupContracts) {
map.put(groupContract.getContractCode(),groupContract); map.put(groupContract.getContractCode(), groupContract);
} }
for (Contract groupContract : groupContracts) { for (Contract groupContract : groupContracts) {
if("2".equals(groupContract.getContractType())){ if ("2".equals(groupContract.getContractType())) {
Contract contract = map.get(groupContract.getRelationCode());//补充协议查找map内是否有他的主合同(首次/续约) Contract contract = map.get(groupContract.getRelationCode());//补充协议查找map内是否有他的主合同(首次/续约)
if(contract==null){ if (contract == null) {
//查出该补充协议之前签订的所有关联的合同(首次/续约-补充协议) //查出该补充协议之前签订的所有关联的合同(首次/续约-补充协议)
List<Contract> contractList = contractRepository.findByCreateTimeAndCodeNotOwn(groupContract.getRelationCode(),DateUtil.format(groupContract.getCreateTime(),DateUtil.C_TIME_PATTON_DEFAULT),groupContract.getId()); List<Contract> contractList = contractRepository.findByCreateTimeAndCodeNotOwn(groupContract.getRelationCode(), DateUtil.format(groupContract.getCreateTime(), DateUtil.C_TIME_PATTON_DEFAULT), groupContract.getId());
for (Contract contract1 : contractList) { for (Contract contract1 : contractList) {
map.put(contract1.getContractCode(),contract1); map.put(contract1.getContractCode(), contract1);
} }
groupContracts = map.values();//只要不加入传进来的那个list里面就不会影响查询的列表 groupContracts = map.values();//只要不加入传进来的那个list里面就不会影响查询的列表
} }
...@@ -537,7 +546,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -537,7 +546,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//再次进行合同的关系分组--->master //再次进行合同的关系分组--->master
List<ContractVO> contractVOs = new ArrayList<>(); List<ContractVO> contractVOs = new ArrayList<>();
for (Contract contract : groupContracts) { for (Contract contract : groupContracts) {
if(!"2".equals(contract.getContractType())){ if (!"2".equals(contract.getContractType())) {
ContractVO contractVO = new ContractVO(); ContractVO contractVO = new ContractVO();
contractVO.setMaster(contract); contractVO.setMaster(contract);
contractVOs.add(contractVO); contractVOs.add(contractVO);
...@@ -546,9 +555,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -546,9 +555,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//再次进行合同的关系分组--->sideLette //再次进行合同的关系分组--->sideLette
for (ContractVO contractVO : contractVOs) { for (ContractVO contractVO : contractVOs) {
for (Contract contract : groupContracts) { for (Contract contract : groupContracts) {
if("2".equals(contract.getContractType()) && contractVO.getMaster().getContractCode().equals(contract.getRelationCode())){ if ("2".equals(contract.getContractType()) && contractVO.getMaster().getContractCode().equals(contract.getRelationCode())) {
List<Contract> sideLette = contractVO.getSideLette(); List<Contract> sideLette = contractVO.getSideLette();
if(sideLette==null){ if (sideLette == null) {
sideLette = new ArrayList<>(); sideLette = new ArrayList<>();
} }
sideLette.add(contract); sideLette.add(contract);
...@@ -559,14 +568,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -559,14 +568,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//1个合同<----->多个合同 //1个合同<----->多个合同
//1个合同->走普通的,走tkio逻辑 //1个合同->走普通的,走tkio逻辑
for (ContractVO contractVO : contractVOs) { for (ContractVO contractVO : contractVOs) {
if(CollectionUtils.isEmpty(contractVO.getSideLette())){//1个合同 if (CollectionUtils.isEmpty(contractVO.getSideLette())) {//1个合同
Contract master = contractVO.getMaster(); Contract master = contractVO.getMaster();
if(master.getPriceLevel()== Constant.tkioPriceLevelNotLimit){//无限流量走adi计算逻辑 if (master.getPriceLevel() == Constant.tkioPriceLevelNotLimit) {//无限流量走adi计算逻辑
shareIncome4Contract(master,start,end); shareIncome4Contract(master, start, end);
}else{//普通流量走tkio计算逻辑 } else {//普通流量走tkio计算逻辑
shareIncome4ContractTKIO(master,start,end,false); shareIncome4ContractTKIO(master, start, end, false);
} }
}else{//该首次签约/续约合同 绑定了补充协议合同 } else {//该首次签约/续约合同 绑定了补充协议合同
List<Contract> sideLette = contractVO.getSideLette(); List<Contract> sideLette = contractVO.getSideLette();
/*Boolean isNotLimit = false; /*Boolean isNotLimit = false;
for (Contract contract : sideLette) { for (Contract contract : sideLette) {
...@@ -578,34 +587,34 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -578,34 +587,34 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
sideLette.add(contractVO.getMaster()); sideLette.add(contractVO.getMaster());
Contract[] contractsArray = orderByCreateTime(sideLette); Contract[] contractsArray = orderByCreateTime(sideLette);
for (int j = 0; j < contractsArray.length; j++){ //计算除了最后一个的每个合同历史所用流量 for (int j = 0; j < contractsArray.length; j++) { //计算除了最后一个的每个合同历史所用流量
boolean isLateContract = false; // 是否为晚录合同(为了兼容历史数据 此处做冗余判断) boolean isLateContract = false; // 是否为晚录合同(为了兼容历史数据 此处做冗余判断)
if (ContractStatusEnum.LATE.getKey().equals(contractsArray[j].getStatus())) { if (ContractStatusEnum.LATE.getKey().equals(contractsArray[j].getStatus())) {
isLateContract = true; isLateContract = true;
} else if (checkLateContract(new DateTime(contractsArray[j].getSignedDate()==null?contractsArray[j].getStartDate():contractsArray[j].getSignedDate()), new DateTime(new DateTime(contractsArray[j].getCreateTime()).toString("yyyy-MM-dd")))) { } else if (checkLateContract(new DateTime(contractsArray[j].getSignedDate() == null ? contractsArray[j].getStartDate() : contractsArray[j].getSignedDate()), new DateTime(new DateTime(contractsArray[j].getCreateTime()).toString("yyyy-MM-dd")))) {
isLateContract = true; isLateContract = true;
contractsArray[j].setStatus(ContractStatusEnum.LATE.getKey()); contractsArray[j].setStatus(ContractStatusEnum.LATE.getKey());
} }
String startDate = null; String startDate = null;
if(isLateContract && j>0) {//补充协议晚录 if (isLateContract && j > 0) {//补充协议晚录
startDate = new DateTime(contractsArray[j].getCreateTime()).dayOfMonth().withMinimumValue().toString("yyyy-MM-dd"); startDate = new DateTime(contractsArray[j].getCreateTime()).dayOfMonth().withMinimumValue().toString("yyyy-MM-dd");
}else { } else {
startDate = contractsArray[j].getSignedDate()==null?contractsArray[j].getStartDate():contractsArray[j].getSignedDate(); startDate = contractsArray[j].getSignedDate() == null ? contractsArray[j].getStartDate() : contractsArray[j].getSignedDate();
} }
String endDate = contractsArray[j].getNextSignedDate() == null ? contractsArray[j].getEndDate() : contractsArray[j].getNextSignedDate(); String endDate = contractsArray[j].getNextSignedDate() == null ? contractsArray[j].getEndDate() : contractsArray[j].getNextSignedDate();
ArrayList<String> codes = new ArrayList<>(); ArrayList<String> codes = new ArrayList<>();
for (int k = 0; k <= j; k++) { for (int k = 0; k <= j; k++) {
codes.add(contractsArray[k].getContractCode()); codes.add(contractsArray[k].getContractCode());
} }
BigDecimal flow = tkioFlowRepository.sumFlowByDsAndContractCodes(startDate,endDate,codes); BigDecimal flow = tkioFlowRepository.sumFlowByDsAndContractCodes(startDate, endDate, codes);
double i1 = flow == null ? 0 : flow.divide(new BigDecimal(10000.0)).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); double i1 = flow == null ? 0 : flow.divide(new BigDecimal(10000.0)).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
if(j>0){//上一份合同超出的流量算在当前合同上(肯定在签订日之前)合同的开始日(补充协议的开始日就是原合同的开始日,结束日为上一个合同的下一个签订日) if (j > 0) {//上一份合同超出的流量算在当前合同上(肯定在签订日之前)合同的开始日(补充协议的开始日就是原合同的开始日,结束日为上一个合同的下一个签订日)
BigDecimal bigDecimal = tkioFlowRepository.sumFlowByContractCodeAndDs(contractsArray[j].getContractCode(), contractsArray[j].getStartDate(), contractsArray[j - 1].getNextSignedDate()); BigDecimal bigDecimal = tkioFlowRepository.sumFlowByContractCodeAndDs(contractsArray[j].getContractCode(), contractsArray[j].getStartDate(), contractsArray[j - 1].getNextSignedDate());
double i = bigDecimal == null ? 0 : bigDecimal.divide(new BigDecimal(10000.0)).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); double i = bigDecimal == null ? 0 : bigDecimal.divide(new BigDecimal(10000.0)).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
i1+=i; i1 += i;
} }
contractsArray[j].setHistoryTkioFlow(i1); contractsArray[j].setHistoryTkioFlow(i1);
} }
...@@ -613,9 +622,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -613,9 +622,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//补充协议核心逻辑 //补充协议核心逻辑
//能运行到这里说明只有补充协议才会出现无限流量(最后一个),如果是主合同无限流量,就不可能有补充协议 //能运行到这里说明只有补充协议才会出现无限流量(最后一个),如果是主合同无限流量,就不可能有补充协议
for (int i = 0; i < contractsArray.length; i++) { for (int i = 0; i < contractsArray.length; i++) {
if(i>0){ if (i > 0) {
Contract contract = contractsArray[i]; Contract contract = contractsArray[i];
if(contracts.contains(contract)){ if (contracts.contains(contract)) {
//计算当前单价 //计算当前单价
double totalFlow = 0; double totalFlow = 0;
...@@ -624,29 +633,29 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -624,29 +633,29 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
double accruingAmounts = 0.0; double accruingAmounts = 0.0;
for (int j = 0; j < i; j++) { for (int j = 0; j < i; j++) {
totalFlow+=contractsArray[j].getTrackFlow(); totalFlow += contractsArray[j].getTrackFlow();
totalprice+=new BigDecimal(contractsArray[j].getMoney()/1.06).setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue(); totalprice += new BigDecimal(contractsArray[j].getMoney() / 1.06).setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue();
double currentFlow = totalFlow-accruingFlow; double currentFlow = totalFlow - accruingFlow;
double currentMoney = totalprice-accruingAmounts; double currentMoney = totalprice - accruingAmounts;
contractsArray[j].setUnitPriceAccurate(new BigDecimal(currentMoney / currentFlow) contractsArray[j].setUnitPriceAccurate(new BigDecimal(currentMoney / currentFlow)
.setScale(16, BigDecimal.ROUND_HALF_UP));//存储16位单价 .setScale(16, BigDecimal.ROUND_HALF_UP));//存储16位单价
accruingAmounts+= new BigDecimal(currentMoney/currentFlow*contractsArray[j].getHistoryTkioFlow()) accruingAmounts += new BigDecimal(currentMoney / currentFlow * contractsArray[j].getHistoryTkioFlow())
.setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue();//当前合同之前的累计消耗金额 .setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue();//当前合同之前的累计消耗金额
accruingFlow+=contractsArray[j].getHistoryTkioFlow();//当前合同之前的累计消耗流量,万单位 accruingFlow += contractsArray[j].getHistoryTkioFlow();//当前合同之前的累计消耗流量,万单位
} }
totalFlow=totalFlow-accruingFlow<0?0:totalFlow-accruingFlow; totalFlow = totalFlow - accruingFlow < 0 ? 0 : totalFlow - accruingFlow;
totalFlow=totalFlow+contract.getTrackFlow(); totalFlow = totalFlow + contract.getTrackFlow();
totalprice = totalprice-accruingAmounts<0?0:totalprice-accruingAmounts; totalprice = totalprice - accruingAmounts < 0 ? 0 : totalprice - accruingAmounts;
totalprice=totalprice+new BigDecimal(contract.getMoney()/1.06).setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue(); totalprice = totalprice + new BigDecimal(contract.getMoney() / 1.06).setScale(16, BigDecimal.ROUND_HALF_UP).doubleValue();
contract.setIncomeExcludingTax(new BigDecimal(totalprice) contract.setIncomeExcludingTax(new BigDecimal(totalprice)
.setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100L)).longValue()); .setScale(2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100L)).longValue());
BigDecimal unitPriceAccurate =null; BigDecimal unitPriceAccurate = null;
if(!contract.getPriceLevel().equals(Constant.tkioPriceLevelNotLimit)){ if (!contract.getPriceLevel().equals(Constant.tkioPriceLevelNotLimit)) {
unitPriceAccurate = new BigDecimal(totalprice/totalFlow) unitPriceAccurate = new BigDecimal(totalprice / totalFlow)
.setScale(16, BigDecimal.ROUND_HALF_UP);//当前合同的单价 .setScale(16, BigDecimal.ROUND_HALF_UP);//当前合同的单价
//四舍五入单价 //四舍五入单价
double unitPrice = unitPriceAccurate.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); double unitPrice = unitPriceAccurate.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
...@@ -655,16 +664,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -655,16 +664,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
boolean isLateContract = false; // 是否为晚录合同(为了兼容历史数据 此处做冗余判断) boolean isLateContract = false; // 是否为晚录合同(为了兼容历史数据 此处做冗余判断)
if (ContractStatusEnum.LATE.getKey().equals(contract.getStatus())) { if (ContractStatusEnum.LATE.getKey().equals(contract.getStatus())) {
isLateContract = true; isLateContract = true;
} else if (checkLateContract(new DateTime(contract.getSignedDate()==null?contract.getStartDate():contract.getSignedDate()), new DateTime(new DateTime(contract.getCreateTime()).toString("yyyy-MM-dd")))) { } else if (checkLateContract(new DateTime(contract.getSignedDate() == null ? contract.getStartDate() : contract.getSignedDate()), new DateTime(new DateTime(contract.getCreateTime()).toString("yyyy-MM-dd")))) {
isLateContract = true; isLateContract = true;
contract.setStatus(ContractStatusEnum.LATE.getKey()); contract.setStatus(ContractStatusEnum.LATE.getKey());
} }
//正常查流量 //正常查流量
DateTime[] selected = {start,end};//用户筛选日期区间 DateTime[] selected = {start, end};//用户筛选日期区间
DateTime[] contractPart = new DateTime[]{ DateTime[] contractPart = new DateTime[]{
new DateTime(contract.getSignedDate()), new DateTime(contract.getSignedDate()),
new DateTime(contract.getNextSignedDate()==null?contract.getEndDate():contract.getNextSignedDate())};//合同开始结束(下一份合同签订日前一天) 时间 new DateTime(contract.getNextSignedDate() == null ? contract.getEndDate() : contract.getNextSignedDate())};//合同开始结束(下一份合同签订日前一天) 时间
DateTime[] usePart = new DateTime[]{ DateTime[] usePart = new DateTime[]{
selected[0].compareTo(contractPart[0]) <= 0 ? contractPart[0] : selected[0], selected[0].compareTo(contractPart[0]) <= 0 ? contractPart[0] : selected[0],
selected[1].compareTo(contractPart[1]) >= 0 ? contractPart[1] : selected[1] selected[1].compareTo(contractPart[1]) >= 0 ? contractPart[1] : selected[1]
...@@ -676,7 +685,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -676,7 +685,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
create, //录入日 create, //录入日
create.dayOfMonth().withMinimumValue() //录入月1日 create.dayOfMonth().withMinimumValue() //录入月1日
}; };
if(selected[1].isBefore(contractPart[0])){ if (selected[1].isBefore(contractPart[0])) {
contract.setUnitPrice(0.0); contract.setUnitPrice(0.0);
contract.setIntervaIncomeShare(0L); contract.setIntervaIncomeShare(0L);
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
...@@ -684,18 +693,17 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -684,18 +693,17 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
contract.setIncomeGross(0L); contract.setIncomeGross(0L);
contracts.remove(contract);//移出列表 contracts.remove(contract);//移出列表
}else } else if (!contract.getPriceLevel().equals(Constant.tkioPriceLevelNotLimit)) {
if(!contract.getPriceLevel().equals(Constant.tkioPriceLevelNotLimit)){
boolean isLater = true; boolean isLater = true;
if(!isLateContract){//正常合同 if (!isLateContract) {//正常合同
//补充协议的开始时间和结束时间是与主合同时间一致的,所以需要按照补充协议的字段再次判断补充协议是否在区间选择内 //补充协议的开始时间和结束时间是与主合同时间一致的,所以需要按照补充协议的字段再次判断补充协议是否在区间选择内
if(selected[0].compareTo(contractPart[1]) > 0 || selected[1].compareTo(contractPart[0]) < 0) { if (selected[0].compareTo(contractPart[1]) > 0 || selected[1].compareTo(contractPart[0]) < 0) {
contract.setIntervaIncomeShare(0L); contract.setIntervaIncomeShare(0L);
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeShareAll(contract.getIntervaIncomeShare()); contract.setIncomeShareAll(contract.getIntervaIncomeShare());
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
contract.setIncomeGross(0L); contract.setIncomeGross(0L);
}else{ } else {
ArrayList<String> codes = new ArrayList<>(); ArrayList<String> codes = new ArrayList<>();
for (int k = 0; k <= i; k++) { for (int k = 0; k <= i; k++) {
codes.add(contractsArray[k].getContractCode()); codes.add(contractsArray[k].getContractCode());
...@@ -743,7 +751,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -743,7 +751,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
contract.setIncomeGross(0L); contract.setIncomeGross(0L);
contract.setStatus(ContractStatusEnum.LATE.getKey()); contract.setStatus(ContractStatusEnum.LATE.getKey());
}else{ } else {
contract.setStatus(ContractStatusEnum.LATE.getKey()); contract.setStatus(ContractStatusEnum.LATE.getKey());
//合同晚录 //合同晚录
//所选时间范围内的分摊收入(录入月1号 即creatPoints[1] 开始计算) //所选时间范围内的分摊收入(录入月1号 即creatPoints[1] 开始计算)
...@@ -753,13 +761,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -753,13 +761,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
codes.add(contractsArray[k].getContractCode()); codes.add(contractsArray[k].getContractCode());
} }
BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(useStart.toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), codes); BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(useStart.toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), codes);
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
BigDecimal beforSigndFlow = null; BigDecimal beforSigndFlow = null;
//区间分摊收入 //区间分摊收入
...@@ -770,9 +778,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -770,9 +778,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//contractPart[0], creatPoints[1].plusDays(-1) //contractPart[0], creatPoints[1].plusDays(-1)
//晚录调整金 //晚录调整金
clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), codes); clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), codes);
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
contract.setAdjustmentFund(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setAdjustmentFund(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
...@@ -783,11 +791,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -783,11 +791,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
beforSigndFlow = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), startDate.toString("yyyy-MM-dd"), endDate.toString("yyyy-MM-dd")); beforSigndFlow = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), startDate.toString("yyyy-MM-dd"), endDate.toString("yyyy-MM-dd"));
beforSigndFlow = beforSigndFlow == null ? new BigDecimal(0) : beforSigndFlow; beforSigndFlow = beforSigndFlow == null ? new BigDecimal(0) : beforSigndFlow;
BigDecimal beforSigndAdjustmentFund = beforSigndFlow.divide(new BigDecimal(10000.0 / 100)).multiply(unitPriceAccurate); BigDecimal beforSigndAdjustmentFund = beforSigndFlow.divide(new BigDecimal(10000.0 / 100)).multiply(unitPriceAccurate);
contract.setAdjustmentFund(contract.getAdjustmentFund()+beforSigndAdjustmentFund.setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setAdjustmentFund(contract.getAdjustmentFund() + beforSigndAdjustmentFund.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
//处理上一个合同的调整金 //处理上一个合同的调整金
if(i>0){ if (i > 0) {
contractsArray[i-1].setAdjustmentFund(contractsArray[i-1].getAdjustmentFund()-contractsArray[i-1].getUnitPriceAccurate().multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contractsArray[i - 1].setAdjustmentFund(contractsArray[i - 1].getAdjustmentFund() - contractsArray[i - 1].getUnitPriceAccurate().multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} else { } else {
...@@ -804,14 +812,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -804,14 +812,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
//判断合同真实结束日期之前判断该合同有没有下一份合同 //判断合同真实结束日期之前判断该合同有没有下一份合同
if (contract.getNextSignedContractCode()==null&&checkTwoTime(contractPart[1], selected[1])) { if (contract.getNextSignedContractCode() == null && checkTwoTime(contractPart[1], selected[1])) {
//最后一日分摊收入计算处理(合同的最后一天,不管流量剩余多少,都算作做最后一天的收入) //最后一日分摊收入计算处理(合同的最后一天,不管流量剩余多少,都算作做最后一天的收入)
Long lastDay; Long lastDay;
DateTime lastDate[]; DateTime lastDate[];
if (isLater) { if (isLater) {
lastDate = new DateTime[]{creatPoints[1],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{creatPoints[1], contractPart[1].plusDays(-1)};
} else { } else {
lastDate = new DateTime[]{contractPart[0],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{contractPart[0], contractPart[1].plusDays(-1)};
} }
//合同除去最后一天的流量 //合同除去最后一天的流量
ArrayList<String> codes = new ArrayList<>(); ArrayList<String> codes = new ArrayList<>();
...@@ -819,18 +827,19 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -819,18 +827,19 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
codes.add(contractsArray[k].getContractCode()); codes.add(contractsArray[k].getContractCode());
} }
BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(lastDate[0].toString("yyyy-MM-dd"), lastDate[1].toString("yyyy-MM-dd"), codes); BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(lastDate[0].toString("yyyy-MM-dd"), lastDate[1].toString("yyyy-MM-dd"), codes);
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//最后一天的流量 //最后一天的流量
clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[1].toString("yyyy-MM-dd"), contractPart[1].toString("yyyy-MM-dd"), codes); clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[1].toString("yyyy-MM-dd"), contractPart[1].toString("yyyy-MM-dd"), codes);
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0)clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); if (clickFlow != 0)
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//合同的税后总金额减去最后合同一日之前的钱和调整金 //合同的税后总金额减去最后合同一日之前的钱和调整金
long excludTax = new BigDecimal(totalprice) long excludTax = new BigDecimal(totalprice)
...@@ -843,9 +852,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -843,9 +852,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
contract.setIncomeShareAll(contract.getIntervaIncomeShare() + contract.getAdjustmentFund()); contract.setIncomeShareAll(contract.getIntervaIncomeShare() + contract.getAdjustmentFund());
}else{//不限量套餐 } else {//不限量套餐
int contractAllDay = getDayRange(contractPart[0], contractPart[1]) + 1;//合同总天数 int contractAllDay = getDayRange(contractPart[0], contractPart[1]) + 1;//合同总天数
BigDecimal dayShareIncome = new BigDecimal(totalprice/contractAllDay) BigDecimal dayShareIncome = new BigDecimal(totalprice / contractAllDay)
.setScale(16, BigDecimal.ROUND_HALF_UP); .setScale(16, BigDecimal.ROUND_HALF_UP);
contract.setUnitPrice(dayShareIncome.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());//设置不限量套餐的单价 contract.setUnitPrice(dayShareIncome.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());//设置不限量套餐的单价
...@@ -861,10 +870,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -861,10 +870,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
codes.add(contractsArray[k].getContractCode()); codes.add(contractsArray[k].getContractCode());
} }
BigDecimal clickNumLimit = tkioFlowRepository.sumFlowByDsAndContractCodes(usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), codes); BigDecimal clickNumLimit = tkioFlowRepository.sumFlowByDsAndContractCodes(usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), codes);
long clickFlowLimit = clickNumLimit==null?0L:clickNumLimit.longValue(); long clickFlowLimit = clickNumLimit == null ? 0L : clickNumLimit.longValue();
if(clickFlowLimit!=0){ if (clickFlowLimit != 0) {
contract.setClickFlow(new BigDecimal(clickFlowLimit / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlowLimit / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
}else{ } else {
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
} }
...@@ -907,20 +916,20 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -907,20 +916,20 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//处理上一份合同 //处理上一份合同
BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), codes); BigDecimal clickNum = tkioFlowRepository.sumFlowByDsAndContractCodes(contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), codes);
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
if(i>0){ if (i > 0) {
contractsArray[i-1].setAdjustmentFund(contractsArray[i-1].getAdjustmentFund()-contractsArray[i-1].getUnitPriceAccurate().multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contractsArray[i - 1].setAdjustmentFund(contractsArray[i - 1].getAdjustmentFund() - contractsArray[i - 1].getUnitPriceAccurate().multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} }
if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) { if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(shareMultiply( dayShareIncome.multiply(new BigDecimal(100L)),new BigDecimal(getDayRange(contractPart[0], contractPart[1]) + 1), 0)); contract.setIncomeGross(shareMultiply(dayShareIncome.multiply(new BigDecimal(100L)), new BigDecimal(getDayRange(contractPart[0], contractPart[1]) + 1), 0));
} else { } else {
contract.setIncomeGross(shareMultiply( dayShareIncome.multiply(new BigDecimal(100L)),new BigDecimal(getDayRange(contractPart[0], selected[1]) + 1), 0)); contract.setIncomeGross(shareMultiply(dayShareIncome.multiply(new BigDecimal(100L)), new BigDecimal(getDayRange(contractPart[0], selected[1]) + 1), 0));
} }
if (checkTwoTime(contractPart[1], selected[1])) { if (checkTwoTime(contractPart[1], selected[1])) {
...@@ -936,7 +945,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -936,7 +945,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//最后一日 或 包含最后一日 时 //最后一日 或 包含最后一日 时
contract.setIntervaIncomeShare(contract.getIntervaIncomeShare() - contract.setIntervaIncomeShare(contract.getIntervaIncomeShare() -
dayShareIncome.multiply(new BigDecimal(100L)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() + lastDay); dayShareIncome.multiply(new BigDecimal(100L)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() + lastDay);
contract.setIncomeGross(contract.getIncomeGross()-dayShareIncome.multiply(new BigDecimal(100L)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() + lastDay); contract.setIncomeGross(contract.getIncomeGross() - dayShareIncome.multiply(new BigDecimal(100L)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() + lastDay);
} }
...@@ -945,12 +954,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -945,12 +954,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
} }
}else{ } else {
Contract contractMaster = contractsArray[i]; Contract contractMaster = contractsArray[i];
if(contracts.contains(contractMaster)){ if (contracts.contains(contractMaster)) {
String endDate = contractMaster.getEndDate(); String endDate = contractMaster.getEndDate();
contractMaster.setEndDate(contractMaster.getNextSignedDate()); contractMaster.setEndDate(contractMaster.getNextSignedDate());
shareIncome4ContractTKIO(contractMaster,start,end,true);//到结束的前一天 shareIncome4ContractTKIO(contractMaster, start, end, true);//到结束的前一天
contractMaster.setEndDate(endDate); contractMaster.setEndDate(endDate);
} }
} }
...@@ -962,21 +971,21 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -962,21 +971,21 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
public Contract[] orderByCreateTime(List<Contract> contracts){//从小到大排序 public Contract[] orderByCreateTime(List<Contract> contracts) {//从小到大排序
Contract[] contractsArray = new Contract[contracts.size()]; Contract[] contractsArray = new Contract[contracts.size()];
contractsArray = contracts.toArray(contractsArray); contractsArray = contracts.toArray(contractsArray);
for (int i = 0; i < contractsArray.length-1; i++) { for (int i = 0; i < contractsArray.length - 1; i++) {
for (int j = 0; j < contractsArray.length-1-i; j++) { for (int j = 0; j < contractsArray.length - 1 - i; j++) {
if(contractsArray[j].getCreateTime().getTime() > contractsArray[j + 1].getCreateTime().getTime()){ if (contractsArray[j].getCreateTime().getTime() > contractsArray[j + 1].getCreateTime().getTime()) {
Contract temp = contractsArray[j]; Contract temp = contractsArray[j];
contractsArray[j] = contractsArray[j+1]; contractsArray[j] = contractsArray[j + 1];
contractsArray[j + 1] = temp; contractsArray[j + 1] = temp;
}else if (contractsArray[j].getCreateTime().getTime() == contractsArray[j + 1].getCreateTime().getTime()){ } else if (contractsArray[j].getCreateTime().getTime() == contractsArray[j + 1].getCreateTime().getTime()) {
String contractCode = StringUtil.matchNumber(contractsArray[j].getContractCode()); String contractCode = StringUtil.matchNumber(contractsArray[j].getContractCode());
String contractCodeMin = StringUtil.matchNumber(contractsArray[j+ 1].getContractCode()); String contractCodeMin = StringUtil.matchNumber(contractsArray[j + 1].getContractCode());
if(Long.valueOf(contractCode)>Long.valueOf(contractCodeMin)){ if (Long.valueOf(contractCode) > Long.valueOf(contractCodeMin)) {
Contract temp = contractsArray[j]; Contract temp = contractsArray[j];
contractsArray[j] = contractsArray[j+1]; contractsArray[j] = contractsArray[j + 1];
contractsArray[j + 1] = temp; contractsArray[j + 1] = temp;
} }
} }
...@@ -984,11 +993,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -984,11 +993,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
return contractsArray; return contractsArray;
} }
private void shareIncome4ContractTKIO(Contract contract, DateTime start, DateTime end,Boolean isMore) {
private void shareIncome4ContractTKIO(Contract contract, DateTime start, DateTime end, Boolean isMore) {
DateTime[] selected = new DateTime[]{ DateTime[] selected = new DateTime[]{
start, start,
end};//用户筛选开始/结束日期 end};//用户筛选开始/结束日期
DateTime[] contractPart= new DateTime[]{ DateTime[] contractPart = new DateTime[]{
new DateTime(contract.getStartDate()), new DateTime(contract.getStartDate()),
new DateTime(contract.getEndDate())};//合同开始结束 时间 new DateTime(contract.getEndDate())};//合同开始结束 时间
DateTime[] usePart = new DateTime[]{ DateTime[] usePart = new DateTime[]{
...@@ -1004,9 +1014,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1004,9 +1014,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
BigDecimal unitPriceAccurate = null; BigDecimal unitPriceAccurate = null;
//计算单价,精准保留16位数 //计算单价,精准保留16位数
try { try {
unitPriceAccurate = new BigDecimal(contract.getMoney()/1.06/contract.getTrackFlow()) unitPriceAccurate = new BigDecimal(contract.getMoney() / 1.06 / contract.getTrackFlow())
.setScale(16, BigDecimal.ROUND_HALF_UP); .setScale(16, BigDecimal.ROUND_HALF_UP);
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
//四舍五入单价 //四舍五入单价
...@@ -1018,18 +1028,18 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1018,18 +1028,18 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//晚录合同 累计收入= 同下 //晚录合同 累计收入= 同下
//正常合同 累计收入= 如果合同结束日期在选择日期之内,则直接取 [合同金额/1.06]得到总金额 ,否则 【合同开始日期-选择结束日期】 //正常合同 累计收入= 如果合同结束日期在选择日期之内,则直接取 [合同金额/1.06]得到总金额 ,否则 【合同开始日期-选择结束日期】
//作废合同处理 //作废合同处理
Contract cancleContract = this.cancledShareFlow(contract, unitPriceAccurate, usePart,selected); Contract cancleContract = this.cancledShareFlow(contract, unitPriceAccurate, usePart, selected);
if (cancleContract != null) { if (cancleContract != null) {
return; return;
} }
//中止合同处理 //中止合同处理
Contract suspendContract = this.suspendShareFlow(contract, unitPriceAccurate,contractPart, usePart, selected); Contract suspendContract = this.suspendShareFlow(contract, unitPriceAccurate, contractPart, usePart, selected);
if (suspendContract != null) { if (suspendContract != null) {
return; return;
} }
//补充协议的主合同特殊处理 //补充协议的主合同特殊处理
if (isMore&&new DateTime(contract.getNextSignedDate()).isBefore(selected[0])) { if (isMore && new DateTime(contract.getNextSignedDate()).isBefore(selected[0])) {
contract.setIntervaIncomeShare(0L); contract.setIntervaIncomeShare(0L);
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeShareAll(contract.getIntervaIncomeShare()); contract.setIncomeShareAll(contract.getIntervaIncomeShare());
...@@ -1044,7 +1054,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1044,7 +1054,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
create, //录入日 create, //录入日
create.dayOfMonth().withMinimumValue() //录入月1日 create.dayOfMonth().withMinimumValue() //录入月1日
}; };
this.afterContractFlow(contract,unitPriceAccurate, contractPart, usePart, selected, creatPoints,isMore); this.afterContractFlow(contract, unitPriceAccurate, contractPart, usePart, selected, creatPoints, isMore);
} }
private void afterContractFlow(Contract contract, BigDecimal unitPriceAccurate, DateTime[] contractPart, DateTime[] usePart, DateTime[] selected, DateTime[] creatPoints, Boolean isMore) { private void afterContractFlow(Contract contract, BigDecimal unitPriceAccurate, DateTime[] contractPart, DateTime[] usePart, DateTime[] selected, DateTime[] creatPoints, Boolean isMore) {
...@@ -1061,14 +1071,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1061,14 +1071,14 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
boolean isLater = true; boolean isLater = true;
if (!isLateContract) { if (!isLateContract) {
//非合同晚录 //非合同晚录
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),usePart[0].toString("yyyy-MM-dd"),usePart[1].toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入 //区间分摊收入
contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
...@@ -1076,12 +1086,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1076,12 +1086,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeShareAll(contract.getIntervaIncomeShare()); contract.setIncomeShareAll(contract.getIntervaIncomeShare());
if(!isMore&&checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (!isMore && checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contractPart[0].toString("yyyy-MM-dd"),usePart[1].toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contractPart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
isLater = false; isLater = false;
...@@ -1090,9 +1100,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1090,9 +1100,9 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setIntervaIncomeShare(0L); contract.setIntervaIncomeShare(0L);
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeShareAll(contract.getIntervaIncomeShare()); contract.setIncomeShareAll(contract.getIntervaIncomeShare());
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),usePart[0].toString("yyyy-MM-dd"),usePart[1].toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
contract.setIncomeGross(0L); contract.setIncomeGross(0L);
contract.setStatus(ContractStatusEnum.LATE.getKey()); contract.setStatus(ContractStatusEnum.LATE.getKey());
} else { } else {
...@@ -1101,16 +1111,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1101,16 +1111,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//所选时间范围内的分摊收入(录入月1号 即creatPoints[1] 开始计算) //所选时间范围内的分摊收入(录入月1号 即creatPoints[1] 开始计算)
DateTime useStart = creatPoints[1].compareTo(selected[0]) >= 0 ? creatPoints[1] : selected[0]; DateTime useStart = creatPoints[1].compareTo(selected[0]) >= 0 ? creatPoints[1] : selected[0];
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),useStart.toString("yyyy-MM-dd"),usePart[1].toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), useStart.toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
BigDecimal clickNumReal = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),selected[0].toString("yyyy-MM-dd"),usePart[1].toString("yyyy-MM-dd")); BigDecimal clickNumReal = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), selected[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"));
int clickNumRealFlow = clickNumReal==null?0:clickNumReal.intValue(); int clickNumRealFlow = clickNumReal == null ? 0 : clickNumReal.intValue();
contract.setClickFlow(new BigDecimal(clickNumRealFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickNumRealFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入 //区间分摊收入
contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
...@@ -1120,10 +1130,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1120,10 +1130,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//所选时间范围包含 录入月 1 号 显示统计的调整金 //所选时间范围包含 录入月 1 号 显示统计的调整金
//合同开始日期,合同录入日期的一号,-1就是上个月最后一天 //合同开始日期,合同录入日期的一号,-1就是上个月最后一天
//contractPart[0], creatPoints[1].plusDays(-1) //contractPart[0], creatPoints[1].plusDays(-1)
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contractPart[0].toString("yyyy-MM-dd"),creatPoints[1].plusDays(-1).toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
} }
...@@ -1132,39 +1142,39 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1132,39 +1142,39 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
} }
if(checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contractPart[0].toString("yyyy-MM-dd"),selected[1].plusDays(-1).toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contractPart[0].toString("yyyy-MM-dd"), selected[1].plusDays(-1).toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} }
if (!isMore&&checkTwoTime(contractPart[1], selected[1])) { if (!isMore && checkTwoTime(contractPart[1], selected[1])) {
//最后一日分摊收入计算处理(合同的最后一天,不管流量剩余多少,都算作做最后一天的收入) //最后一日分摊收入计算处理(合同的最后一天,不管流量剩余多少,都算作做最后一天的收入)
Long lastDay; Long lastDay;
DateTime lastDate[]; DateTime lastDate[];
if (isLater) { if (isLater) {
lastDate = new DateTime[]{creatPoints[1],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{creatPoints[1], contractPart[1].plusDays(-1)};
} else { } else {
lastDate = new DateTime[]{contractPart[0],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{contractPart[0], contractPart[1].plusDays(-1)};
} }
//合同除去最后一天的流量 //合同除去最后一天的流量
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),lastDate[0].toString("yyyy-MM-dd"),lastDate[1].toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), lastDate[0].toString("yyyy-MM-dd"), lastDate[1].toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//最后一天的流量 //最后一天的流量
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contractPart[1].toString("yyyy-MM-dd"),contractPart[1].toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contractPart[1].toString("yyyy-MM-dd"), contractPart[1].toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0)clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); if (clickFlow != 0) clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//合同的税后总金额减去最后合同一日之前的钱和调整金 //合同的税后总金额减去最后合同一日之前的钱和调整金
lastDay = contract.getIncomeExcludingTax() - contract.getAdjustmentFund() - beforeTheMoney; lastDay = contract.getIncomeExcludingTax() - contract.getAdjustmentFund() - beforeTheMoney;
...@@ -1202,11 +1212,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1202,11 +1212,11 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} else { } else {
//查询调整金的点击,日期开始结束时间注意不能颠倒 //查询调整金的点击,日期开始结束时间注意不能颠倒
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),cancelDate.toString("yyyy-MM-dd"),suspendDate.toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), cancelDate.toString("yyyy-MM-dd"), suspendDate.toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
adjustmentFund = unitPriceAccurate.multiply(clickTenThousand.multiply(new BigDecimal(-1))).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); adjustmentFund = unitPriceAccurate.multiply(clickTenThousand.multiply(new BigDecimal(-1))).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
...@@ -1215,25 +1225,25 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1215,25 +1225,25 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setAdjustmentFund(adjustmentFund); contract.setAdjustmentFund(adjustmentFund);
DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate; DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate;
//查询开始->中止日期的点击(有收入的点击),不包括调整金 //查询开始->中止日期的点击(有收入的点击),不包括调整金
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),usePart[0].toString("yyyy-MM-dd"),usedEnd.toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入,乘以100,前端除以100 //区间分摊收入,乘以100,前端除以100
long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
contract.setIntervaIncomeShare(share); contract.setIntervaIncomeShare(share);
contract.setIncomeShareAll(share+adjustmentFund); contract.setIncomeShareAll(share + adjustmentFund);
if(checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contractPart[0].toString("yyyy-MM-dd"),selected[1].toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
return contract; return contract;
...@@ -1256,33 +1266,33 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1256,33 +1266,33 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate; DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate;
BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),usePart[0].toString("yyyy-MM-dd"),usedEnd.toString("yyyy-MM-dd")); BigDecimal clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"));
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
//区间点击数 //区间点击数
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入,乘以100,前端除以100 //区间分摊收入,乘以100,前端除以100
long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
contract.setIntervaIncomeShare(share); contract.setIntervaIncomeShare(share);
//调整金 //调整金
if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) { if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) {
clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(),contract.getStartDate(),usedEnd.toString("yyyy-MM-dd")); clickNum = tkioFlowRepository.sumFlowByContractCodeAndDs(contract.getContractCode(), contract.getStartDate(), usedEnd.toString("yyyy-MM-dd"));
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
//区间点击数 //区间点击数
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setAdjustmentFund(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() * -1L); contract.setAdjustmentFund(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue() * -1L);
}else{ } else {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
} }
}else{ } else {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
} }
//分摊总收入 //分摊总收入
...@@ -1310,7 +1320,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1310,7 +1320,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setIncomeExcludingTax(excludTax); contract.setIncomeExcludingTax(excludTax);
//计算单价,精准保留16位数 //计算单价,精准保留16位数
BigDecimal unitPriceAccurate = new BigDecimal(contract.getMoney()/1.06/contract.getTrackFlow()) BigDecimal unitPriceAccurate = new BigDecimal(contract.getMoney() / 1.06 / contract.getTrackFlow())
.setScale(16, BigDecimal.ROUND_HALF_UP); .setScale(16, BigDecimal.ROUND_HALF_UP);
//四舍五入单价 //四舍五入单价
double unitPrice = unitPriceAccurate.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); double unitPrice = unitPriceAccurate.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
...@@ -1325,7 +1335,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1325,7 +1335,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
List<String> appkeys = appRepository.findAppkeysNotDebug(idList); List<String> appkeys = appRepository.findAppkeysNotDebug(idList);
String appkeyStr = String.join("','", appkeys); String appkeyStr = String.join("','", appkeys);
appkeyStr= "'"+appkeyStr+"'"; appkeyStr = "'" + appkeyStr + "'";
//作废合同 累计收入= 0 //作废合同 累计收入= 0
//中止合同 累计收入= 如果中止日期在选择日期之内,【合同开始日期-中止日期】,否则【合同开始日期-选择结束日期】,不需要考虑调整金 //中止合同 累计收入= 如果中止日期在选择日期之内,【合同开始日期-中止日期】,否则【合同开始日期-选择结束日期】,不需要考虑调整金
...@@ -1333,13 +1343,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1333,13 +1343,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//正常合同 累计收入= 如果合同结束日期在选择日期之内,则直接取 [合同金额/1.06]得到总金额 ,否则 【合同开始日期-选择结束日期】 //正常合同 累计收入= 如果合同结束日期在选择日期之内,则直接取 [合同金额/1.06]得到总金额 ,否则 【合同开始日期-选择结束日期】
//作废合同处理 //作废合同处理
Contract cancleContract = this.cancledShareTKIO(contract, appkeyStr, unitPriceAccurate, usePart,selected); Contract cancleContract = this.cancledShareTKIO(contract, appkeyStr, unitPriceAccurate, usePart, selected);
if (cancleContract != null) { if (cancleContract != null) {
return; return;
} }
//中止合同处理 //中止合同处理
Contract suspendContract = this.suspendShareTKIO(contract, appkeyStr, unitPriceAccurate,contractPart, usePart, selected); Contract suspendContract = this.suspendShareTKIO(contract, appkeyStr, unitPriceAccurate, contractPart, usePart, selected);
if (suspendContract != null) { if (suspendContract != null) {
return; return;
} }
...@@ -1350,14 +1360,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1350,14 +1360,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
create, //录入日 create, //录入日
create.dayOfMonth().withMinimumValue() //录入月1日 create.dayOfMonth().withMinimumValue() //录入月1日
}; };
this.afterContractTKIO(contract, appkeyStr,unitPriceAccurate, contractPart, usePart, selected, creatPoints); this.afterContractTKIO(contract, appkeyStr, unitPriceAccurate, contractPart, usePart, selected, creatPoints);
} }
private void afterContractTKIO(Contract contract, String appkeyStr,BigDecimal unitPriceAccurate, DateTime[] contractPart,DateTime[] usePart, DateTime[] selected, DateTime[] creatPoints) { private void afterContractTKIO(Contract contract, String appkeyStr, BigDecimal unitPriceAccurate, DateTime[] contractPart, DateTime[] usePart, DateTime[] selected, DateTime[] creatPoints) {
Long adjustmentFund = 0L;//调整金 Long adjustmentFund = 0L;//调整金
...@@ -1374,13 +1382,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1374,13 +1382,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
if (!isLateContract) { if (!isLateContract) {
//非合同晚录 //非合同晚录
BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入 //区间分摊收入
contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
...@@ -1388,12 +1396,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1388,12 +1396,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
contract.setIncomeShareAll(contract.getIntervaIncomeShare()); contract.setIncomeShareAll(contract.getIntervaIncomeShare());
if(checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
...@@ -1413,13 +1421,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1413,13 +1421,13 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
DateTime useStart = creatPoints[1].compareTo(selected[0]) >= 0 ? creatPoints[1] : selected[0]; DateTime useStart = creatPoints[1].compareTo(selected[0]) >= 0 ? creatPoints[1] : selected[0];
BigInteger clickNum = accountFlowRestrictService.getTotalNum(useStart.toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(useStart.toString("yyyy-MM-dd"), usePart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入 //区间分摊收入
contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIntervaIncomeShare(unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
...@@ -1429,10 +1437,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1429,10 +1437,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//所选时间范围包含 录入月 1 号 显示统计的调整金 //所选时间范围包含 录入月 1 号 显示统计的调整金
//合同开始日期,合同录入日期的一号,-1就是上个月最后一天 //合同开始日期,合同录入日期的一号,-1就是上个月最后一天
//contractPart[0], creatPoints[1].plusDays(-1) //contractPart[0], creatPoints[1].plusDays(-1)
clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"),creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), creatPoints[1].plusDays(-1).toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
} }
...@@ -1441,12 +1449,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1441,12 +1449,12 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
} }
if(checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
} }
...@@ -1456,24 +1464,24 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1456,24 +1464,24 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
Long lastDay; Long lastDay;
DateTime lastDate[]; DateTime lastDate[];
if (isLater) { if (isLater) {
lastDate = new DateTime[]{creatPoints[1],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{creatPoints[1], contractPart[1].plusDays(-1)};
} else { } else {
lastDate = new DateTime[]{contractPart[0],contractPart[1].plusDays(-1)}; lastDate = new DateTime[]{contractPart[0], contractPart[1].plusDays(-1)};
} }
//合同除去最后一天的流量 //合同除去最后一天的流量
BigInteger clickNum = accountFlowRestrictService.getTotalNum(lastDate[0].toString("yyyy-MM-dd"), lastDate[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(lastDate[0].toString("yyyy-MM-dd"), lastDate[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long beforeTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//最后一天的流量 //最后一天的流量
clickNum = accountFlowRestrictService.getTotalNum(contractPart[1].toString("yyyy-MM-dd"), contractPart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum"); clickNum = accountFlowRestrictService.getTotalNum(contractPart[1].toString("yyyy-MM-dd"), contractPart[1].toString("yyyy-MM-dd"), appkeyStr, "account_track_flow_restrict", "click_sum");
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
clickTenThousand = new BigDecimal(0); clickTenThousand = new BigDecimal(0);
if(clickFlow!=0)clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); if (clickFlow != 0) clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long lastDayTheMoney = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
//合同的税后总金额减去最后合同一日之前的钱和调整金 //合同的税后总金额减去最后合同一日之前的钱和调整金
lastDay = contract.getIncomeExcludingTax() - contract.getAdjustmentFund() - beforeTheMoney; lastDay = contract.getIncomeExcludingTax() - contract.getAdjustmentFund() - beforeTheMoney;
...@@ -1485,7 +1493,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1485,7 +1493,7 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
private Contract suspendShareTKIO(Contract contract, String appkeys, BigDecimal unitPriceAccurate,DateTime[] contractPart, DateTime[] usePart,DateTime[] selected) { private Contract suspendShareTKIO(Contract contract, String appkeys, BigDecimal unitPriceAccurate, DateTime[] contractPart, DateTime[] usePart, DateTime[] selected) {
if (!ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) { if (!ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) {
return null; return null;
} }
...@@ -1512,10 +1520,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1512,10 +1520,10 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} else { } else {
//查询调整金的点击,日期开始结束时间注意不能颠倒 //查询调整金的点击,日期开始结束时间注意不能颠倒
BigInteger clickNum = accountFlowRestrictService.getTotalNum(cancelDate.toString("yyyy-MM-dd"), suspendDate.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(cancelDate.toString("yyyy-MM-dd"), suspendDate.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
} }
adjustmentFund = unitPriceAccurate.multiply(clickTenThousand.multiply(new BigDecimal(-1))).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); adjustmentFund = unitPriceAccurate.multiply(clickTenThousand.multiply(new BigDecimal(-1))).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
...@@ -1525,24 +1533,24 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1525,24 +1533,24 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate; DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate;
//查询开始->中止日期的点击(有收入的点击),不包括调整金 //查询开始->中止日期的点击(有收入的点击),不包括调整金
BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入,乘以100,前端除以100 //区间分摊收入,乘以100,前端除以100
long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
contract.setIntervaIncomeShare(share); contract.setIntervaIncomeShare(share);
contract.setIncomeShareAll(share+adjustmentFund); contract.setIncomeShareAll(share + adjustmentFund);
if(checkTwoTime(selected[0],contractPart[1]) && checkTwoTime(contractPart[1],selected[1])){ if (checkTwoTime(selected[0], contractPart[1]) && checkTwoTime(contractPart[1], selected[1])) {
contract.setIncomeGross(contract.getIncomeExcludingTax()); contract.setIncomeGross(contract.getIncomeExcludingTax());
}else{ } else {
//累计总收入 //累计总收入
clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum"); clickNum = accountFlowRestrictService.getTotalNum(contractPart[0].toString("yyyy-MM-dd"), selected[1].toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum");
clickFlow = clickNum==null?0L:clickNum.longValue(); clickFlow = clickNum == null ? 0L : clickNum.longValue();
contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue()); contract.setIncomeGross(unitPriceAccurate.multiply(new BigDecimal(clickFlow / 10000.0 * 100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
} }
return contract; return contract;
...@@ -1565,22 +1573,22 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1565,22 +1573,22 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate; DateTime usedEnd = usePart[1].compareTo(cancelDate) <= 0 ? usePart[1] : cancelDate;
BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum"); BigInteger clickNum = accountFlowRestrictService.getTotalNum(usePart[0].toString("yyyy-MM-dd"), usedEnd.toString("yyyy-MM-dd"), appkeys, "account_track_flow_restrict", "click_sum");
long clickFlow = clickNum==null?0L:clickNum.longValue(); long clickFlow = clickNum == null ? 0L : clickNum.longValue();
//区间点击数 //区间点击数
contract.setClickFlow(0.0); contract.setClickFlow(0.0);
BigDecimal clickTenThousand = new BigDecimal(0); BigDecimal clickTenThousand = new BigDecimal(0);
if(clickFlow!=0){ if (clickFlow != 0) {
clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100); clickTenThousand = new BigDecimal(clickFlow / 10000.0 * 100);
//区间点击数 //区间点击数
contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setClickFlow(new BigDecimal(clickFlow / 10000.0).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//区间分摊收入,乘以100,前端除以100 //区间分摊收入,乘以100,前端除以100
long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); long share = unitPriceAccurate.multiply(clickTenThousand).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
contract.setIntervaIncomeShare(share); contract.setIntervaIncomeShare(share);
//调整金 //调整金
if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) { if (checkTwoTime(selected[0], cancelDate) && checkTwoTime(cancelDate, selected[1])) {
contract.setAdjustmentFund(share*-1L); contract.setAdjustmentFund(share * -1L);
}else{ } else {
contract.setAdjustmentFund(0L); contract.setAdjustmentFund(0L);
} }
//分摊总收入 //分摊总收入
...@@ -1614,8 +1622,8 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1614,8 +1622,8 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
//处理精度 //处理精度
BigDecimal dayShareIncome = new BigDecimal(excludTax * 1.0 / contractAllDay); BigDecimal dayShareIncome = new BigDecimal(excludTax * 1.0 / contractAllDay);
if("tkio".equals(contract.getPlatform())){//设置tkio无限流量的日单价 if ("tkio".equals(contract.getPlatform())) {//设置tkio无限流量的日单价
contract.setUnitPrice(dayShareIncome.divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); contract.setUnitPrice(dayShareIncome.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
//作废合同处理 //作废合同处理
...@@ -1896,16 +1904,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1896,16 +1904,16 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
Map<String, Double> offlineResult = tkioOfflineRepository.findOfflineResult(startDate, endDate); Map<String, Double> offlineResult = tkioOfflineRepository.findOfflineResult(startDate, endDate);
//查询主账号 //查询主账号
List<Map<String,String>> list = null; List<Map<String, String>> list = null;
if(StringUtil.isEmpty(email)){ if (StringUtil.isEmpty(email)) {
list = accountRepository.findAllAccountAppKeys(); list = accountRepository.findAllAccountAppKeys();
}else{ } else {
list = accountRepository.findAccountAppKeysByEmail(email); list = accountRepository.findAccountAppKeysByEmail(email);
} }
JSONArray jsonObject = JSONArray.fromObject(list); JSONArray jsonObject = JSONArray.fromObject(list);
Iterator it= jsonObject.iterator(); Iterator it = jsonObject.iterator();
List<AccountVO> avs = new ArrayList<>(); List<AccountVO> avs = new ArrayList<>();
while (it.hasNext()){ while (it.hasNext()) {
JSONArray array = JSONArray.fromObject(it.next()); JSONArray array = JSONArray.fromObject(it.next());
String e = array.getString(0); String e = array.getString(0);
String k = array.getString(1); String k = array.getString(1);
...@@ -1916,25 +1924,25 @@ public class ShareIncomeServiceImpl implements ShareIncomeService { ...@@ -1916,25 +1924,25 @@ public class ShareIncomeServiceImpl implements ShareIncomeService {
} }
//汇总计算 //汇总计算
List<TrackFlowVO> result = new ArrayList<>(); List<TrackFlowVO> result = new ArrayList<>();
for(AccountVO ac:avs){ for (AccountVO ac : avs) {
TrackFlowVO tf = new TrackFlowVO(ac.getEmail()); TrackFlowVO tf = new TrackFlowVO(ac.getEmail());
String appKeys = ac.getAppKey(); String appKeys = ac.getAppKey();
//如果appKey为空,流量为0 //如果appKey为空,流量为0
if("".equals(appKeys.trim())){ if ("".equals(appKeys.trim())) {
tf.setTrackFlow(0.0); tf.setTrackFlow(0.0);
result.add(tf); result.add(tf);
continue; continue;
} }
Double sum = 0.0; Double sum = 0.0;
String[] keyArr = appKeys.split(","); String[] keyArr = appKeys.split(",");
for(String k:keyArr){ for (String k : keyArr) {
Double v = offlineResult.get(k); Double v = offlineResult.get(k);
if(v==null){ if (v == null) {
v = 0.0; v = 0.0;
} }
sum +=v; sum += v;
} }
tf.setTrackFlow(new BigDecimal(sum/10000).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); tf.setTrackFlow(new BigDecimal(sum / 10000).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
result.add(tf); result.add(tf);
} }
return result; return result;
......
...@@ -26,6 +26,9 @@ import java.util.ArrayList; ...@@ -26,6 +26,9 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -408,7 +411,10 @@ public class TrackingFlowTask { ...@@ -408,7 +411,10 @@ public class TrackingFlowTask {
* 功能描述:临时跑一段时间内的流量任务 * 功能描述:临时跑一段时间内的流量任务
*/ */
public void reset(String lastEmail) { public void reset(String lastEmail) {
ExecutorService executorService = Executors.newFixedThreadPool(30);
List<String> emails = contractRepository.findDistinctEmailByPlatform("tkio"); List<String> emails = contractRepository.findDistinctEmailByPlatform("tkio");
emails = emails.stream().limit(40).collect(Collectors.toList());
List<String> dateInterval = DateUtil.getDateInterval("2021-05-25", "2021-07-15"); List<String> dateInterval = DateUtil.getDateInterval("2021-05-25", "2021-07-15");
// dateInterval.add("2021-06-30"); // dateInterval.add("2021-06-30");
// emails = Arrays.asList("1291269883@qq.com"); // emails = Arrays.asList("1291269883@qq.com");
...@@ -432,32 +438,33 @@ public class TrackingFlowTask { ...@@ -432,32 +438,33 @@ public class TrackingFlowTask {
} }
for (String email : emails) { for (String dsone : dateInterval) {
StopWatch stopWatch = new StopWatch(); StopWatch stopWatch = new StopWatch();
stopWatch.start(); stopWatch.start();
CompletableFuture[] futures = dateInterval.stream().map(dsone -> CompletableFuture[] futures = emails.stream().map(em ->
CompletableFuture.supplyAsync(() -> { CompletableFuture.supplyAsync(() -> {
reset(dsone, email); reset(dsone, em);
return Thread.currentThread().getName(); return Thread.currentThread().getName() + em;
} }
).exceptionally((t) -> { , executorService).exceptionally((t) -> {
logger.error("erro on " + email + "-" + dsone, t); logger.error("erro on " + em + "-" + dsone, t);
return "-1"; return "-1";
})).toArray(size -> new CompletableFuture[size]); })).toArray(size -> new CompletableFuture[size]);
CompletableFuture.allOf(futures); CompletableFuture.allOf(futures);
String names = Stream.of(futures).map(f -> f.join()).map(v -> ((String) v).split("-")[2]).collect(Collectors.joining(",-")); long names = Stream.of(futures).map(f -> f.join()).map(v -> (String) v).count();
stopWatch.stop(); stopWatch.stop();
logger.info(" {}s, emmial {} ,ForkJoinPool.commonPool-worker-{}", stopWatch.getTotalTimeSeconds(), email, names); logger.info(" {}s, ds {} ,ForkJoinPool.commonPool-worker-{}", stopWatch.getTotalTimeSeconds(), dsone, names);
} }
logger.info("reset complate ! ..."); logger.info("reset complate ! ...");
executorService.shutdown();
} }
public void reset(String yesterday, String email) { public void reset(String yesterday, String email) {
//logger.info("ds {} eamil {} running...", yesterday, email); logger.info("ds {} eamil {} running...", yesterday, email);
tkioFlowRepository.deleteByEmailDs(email, yesterday); //tkioFlowRepository.deleteByEmailDs(email, yesterday);
//查询用户下所有appkey //查询用户下所有appkey
Account account = accountRepository.findByEmail(email); Account account = accountRepository.findByEmail(email);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment