Commit 4bcf2879 by kangxiaoshan

跑流量

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