TrackingFlowTask.java 28.3 KB
Newer Older
lzxry committed
1 2 3 4 5
package track.task;

import common.model.CalculationFlow;
import common.model.Contract;
import common.model.TkioFlow;
kangxiaoshan committed
6
import common.repository.*;
lzxry committed
7 8 9
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
lzxry committed
10
import org.springframework.util.CollectionUtils;
lzxry committed
11 12 13 14
import tkio.model.Account;
import tkio.repository.AccountRepository;
import tkio.repository.AppRepository;
import tkio.service.AccountFlowRestrictService;
15
import tkio.service.FlowService;
16
import util.Constant;
lzxry committed
17
import util.DateUtil;
18
import util.StringUtil;
lzxry committed
19

lzxry committed
20
import java.math.BigDecimal;
lzxry committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
import java.math.BigInteger;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author liyin
 * @description
 * @date
 */
public class TrackingFlowTask {

    private final Logger logger = LoggerFactory.getLogger(TrackingFlowTask.class);

    @Autowired
    private ContractRepository contractRepository;
    @Autowired
    private AccountRepository accountRepository;
    @Autowired
    private AppRepository appRepository;
41 42
    /*@Autowired
    private AccountFlowRestrictService accountFlowRestrictService;*/
lzxry committed
43
    @Autowired
44
    private FlowService flowService;
lzxry committed
45 46 47 48 49 50
    @Autowired
    private TkioFlowRepository tkioFlowRepository;
    @Autowired
    private ContractChangeRepository contractChangeRepository;
    @Autowired
    private CalculationFlowRepository calculationFlowRepository;
kangxiaoshan committed
51 52
    @Autowired
    private TkioFlowHistoryRepository tkioFlowHistoryRepository;
lzxry committed
53

54
    public void syncFlow() {
lzxry committed
55
        List<CalculationFlow> calculationFlows = calculationFlowRepository.findByStatus(0);
lzxry committed
56 57 58 59 60 61
        for (CalculationFlow calculationFlow : calculationFlows) {
            List<TkioFlow> tkioFlowList = new ArrayList<>();
            calculationFlow.setStatus(1);
            calculationFlowRepository.save(calculationFlow);
            tkioFlowRepository.deleteByEmail(calculationFlow.getEmail());
            String email = calculationFlow.getEmail();
62

lzxry committed
63
            //查询用户下所有appkey
64
            try {
lzxry committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
                Account account = accountRepository.findByEmail(email);
                List<Account> accountList = accountRepository.findByRootParent(account.getRootParent());
                List<Long> idList = new ArrayList<>();
                for (Account ac : accountList) {
                    idList.add(ac.getId());
                }
                List<String> appkeys = appRepository.findAppkeysNotDebug(idList);
                String appkeyStr = String.join("','", appkeys);
                appkeyStr = "'" + appkeyStr + "'";

                String ago = DateUtil.format(account.getCreateTime(), DateUtil.C_DATE_PATTON_DEFAULT);//查找最早一天的流量
                if (ago == null) {
                    calculationFlow.setStatus(2);
                    calculationFlowRepository.save(calculationFlow);
                    continue;
                }
lzxry committed
81

lzxry committed
82 83 84 85 86 87 88 89 90 91 92 93
                int between = 0;
                try {
                    between = DateUtil.daysBetween(ago, DateUtil.getBeforeDays(1)) + 1;
                } catch (ParseException e) {
                    logger.error("强转错误:", e);
                }
                int startInt = 0;
                if (Integer.valueOf(DateUtil.getHH()) > 10) {
                    startInt = -1;
                }
                for (int ii = between; ii > startInt; ii--) {
                    String yesterday = DateUtil.getBeforeDays(ii);//昨日
94 95
                    //BigInteger clickNum = accountFlowRestrictService.getTotalNum(yesterday, yesterday, appkeyStr, "account_track_flow_restrict", "click_sum");
                    BigInteger clickNum = flowService.getFlowByAccount(yesterday,yesterday,appkeys);
lzxry committed
96 97 98 99 100 101
                    if (clickNum != null && clickNum.longValue() > 0) {
                        List<Contract> contracts = contractRepository.findByPlatformAndEmail("tkio", email);
                        if (contracts.size() == 1) {//只有一个合同
                            TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contracts.get(0));
                            if (tkioFlow != null) {
                                tkioFlowList.add(tkioFlow);
lzxry committed
102
                                tkioFlowRepository.save(tkioFlow);
lzxry committed
103
                            }
lzxry committed
104 105 106 107 108 109 110 111 112 113
                        } else {
                            //多个合同
                            //看昨日被哪几个合同包含了
                            List<Contract> correlationContract = new ArrayList<>();
                            for (Contract contract : contracts) {
                                /*if (ContractStatusEnum.CANCEL.getKey().equals(contract.getStatus()) || ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) {
                                    //中止或作废合同处理结束时间,以方便昨日流量的归属计算
                                    ContractChange contractChange = contractChangeRepository.findByContentCode(ContractStatusEnum.CANCEL.getValue(), contract.getContractCode());
                                    if (contractChange != null) {
                                        contract.setEndDate(new DateTime(contractChange.getCreateTime()).toString("yyyy-MM-dd"));
lzxry committed
114
                                    }
lzxry committed
115 116 117 118 119
                                }*/
                                String startDate = contract.getStartDate();
                                String endDate = contract.getEndDate();
                                if (DateUtil.getDate(yesterday).getTime() >= DateUtil.getDate(startDate).getTime() && DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(endDate).getTime()) {
                                    correlationContract.add(contract);
lzxry committed
120 121
                                }
                            }
lzxry committed
122 123 124 125 126 127
                            //多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
                            if (correlationContract.size() > 1) {
                                //冒泡
                                //第一优先级:合同开始日期,第二优先级,合同编号大小
                                Contract[] contractsArray = new Contract[correlationContract.size()];
                                contractsArray = correlationContract.toArray(contractsArray);
lzxry committed
128

lzxry committed
129
                                contractsArray = orderByContract(contractsArray);
lzxry committed
130

lzxry committed
131 132
                                for (int i = 0; i < contractsArray.length; i++) {
                                    TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[i]);
133
                                    if (tkioFlow != null && i < contractsArray.length - 1 && tkioFlow.getCostFlow() != null && tkioFlow.getCostFlow() > 0L) {//处理成本流量,如果超出了,依次算在下一个合同上
lzxry committed
134 135
                                        clickNum = BigInteger.valueOf(tkioFlow.getCostFlow());
                                        tkioFlow.setCostFlow(null);
136
                                        if (tkioFlow.getFlow() > 0) {
lzxry committed
137 138 139
                                            tkioFlowList.add(tkioFlow);
                                            tkioFlowRepository.save(tkioFlow);
                                        }
lzxry committed
140 141
                                    } else {
                                        if (tkioFlow != null) {
lzxry committed
142
                                            tkioFlowList.add(tkioFlow);
lzxry committed
143
                                            tkioFlowRepository.save(tkioFlow);
lzxry committed
144 145 146
                                        }
                                        break;
                                    }
lzxry committed
147

lzxry committed
148
                                }
lzxry committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
                            } else {
                                if (correlationContract.size() == 0) {//昨日不包含在所有合同中
                                    //排序
                                    Contract[] contractsArray = new Contract[contracts.size()];
                                    contractsArray = contracts.toArray(contractsArray);
                                    contractsArray = orderByContract(contractsArray);
                                    //如果昨日日期在第一个合同之前,则归属到第一个合同的成本,其余区间都归属到前一个合同的成本上
                                    for (int i = 0; i < contractsArray.length; i++) {
                                        if (DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(contractsArray[i].getStartDate()).getTime() || i == contractsArray.length - 1) {
                                            int j = 0;

                                            if (i != 0) {
                                                j = i - 1;
                                            }

                                            if (i == contractsArray.length - 1) {
                                                j = i;
                                            }

                                            TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[j]);
                                            if (tkioFlow != null) {
                                                tkioFlowList.add(tkioFlow);
lzxry committed
171
                                                tkioFlowRepository.save(tkioFlow);
lzxry committed
172 173 174 175 176 177 178 179
                                            }
                                            break;
                                        }
                                    }
                                } else {
                                    TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, correlationContract.get(0));
                                    if (tkioFlow != null) {
                                        tkioFlowList.add(tkioFlow);
lzxry committed
180
                                        tkioFlowRepository.save(tkioFlow);
lzxry committed
181
                                    }
lzxry committed
182 183
                                }

lzxry committed
184
                            }
lzxry committed
185 186 187
                        }
                    }
                }
lzxry committed
188
                if (tkioFlowList.size() > 0) {
lzxry committed
189
                    //tkioFlowRepository.save(tkioFlowList);
lzxry committed
190 191 192
                }
                calculationFlow.setStatus(2);
                calculationFlowRepository.save(calculationFlow);
193 194
            } catch (Exception e) {
                logger.error("CalculationFlow:Id::" + calculationFlow.getId() + ":全流量同步失败", e);
lzxry committed
195 196
                calculationFlow.setStatus(3);
                calculationFlowRepository.save(calculationFlow);
lzxry committed
197 198 199 200
            }
        }
    }

201
    public void task() {
lzxry committed
202 203 204
        List<String> emails = contractRepository.findDistinctEmailByPlatform("tkio");

        List<TkioFlow> tkioFlowList = new ArrayList<>();
lzxry committed
205
        String yesterday = DateUtil.getBeforeDays(1);//昨日
206
        logger.info("昨日流量同步:" + yesterday);
lzxry committed
207 208 209 210
        for (String email : emails) {

            //查询用户下所有appkey
            Account account = accountRepository.findByEmail(email);
211
            if(account==null||account.getRootParent()==null){
lzxry committed
212 213
                logger.warn("【单日流量同步】用户不存在:{}",email);
                continue;
214
            }
lzxry committed
215 216 217 218 219 220 221
            List<Account> accountList = accountRepository.findByRootParent(account.getRootParent());
            List<Long> idList = new ArrayList<>();
            for (Account ac : accountList) {
                idList.add(ac.getId());
            }
            List<String> appkeys = appRepository.findAppkeysNotDebug(idList);
            String appkeyStr = String.join("','", appkeys);
222
            appkeyStr = "'" + appkeyStr + "'";
lzxry committed
223 224 225 226
            if(CollectionUtils.isEmpty(appkeys)){
                logger.warn("【单日流量同步】该用户没有appkey:{}",email);
                continue;
            }
227 228 229
            //BigInteger clickNum = accountFlowRestrictService.getTotalNum(yesterday, yesterday, appkeyStr, "account_track_flow_restrict", "click_sum");
            BigInteger clickNum = flowService.getFlowByAccount(yesterday,yesterday,appkeys);
            if (clickNum != null && clickNum.longValue() > 0) {
lzxry committed
230
                List<Contract> contracts = contractRepository.findByPlatformAndEmail("tkio", email);
231
                if (contracts.size() == 1) {//只有一个合同
lzxry committed
232
                    TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contracts.get(0));
233
                    if (tkioFlow != null) {
lzxry committed
234
                        tkioFlowList.add(tkioFlow);
lzxry committed
235
                        tkioFlowRepository.save(tkioFlow);
lzxry committed
236
                    }
237
                } else {//多个合同
lzxry committed
238
                    //看昨日被哪几个合同包含了
239
                    List<Contract> correlationContract = new ArrayList<>();
lzxry committed
240
                    for (Contract contract : contracts) {
lzxry committed
241
                        /*if (ContractStatusEnum.CANCEL.getKey().equals(contract.getStatus()) || ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) {
lzxry committed
242 243 244
                            //中止或作废合同处理结束时间,以方便昨日流量的归属计算
                            ContractChange contractChange = contractChangeRepository.findByContentCode(ContractStatusEnum.CANCEL.getValue(), contract.getContractCode());
                            if(contractChange!=null){
lzxry committed
245
                                contract.setEndDate(new DateTime(contractChange.getCreateTime()).toString("yyyy-MM-dd"));
lzxry committed
246
                            }
lzxry committed
247
                        }*/
lzxry committed
248 249
                        String startDate = contract.getStartDate();
                        String endDate = contract.getEndDate();
250
                        if (DateUtil.getDate(yesterday).getTime() >= DateUtil.getDate(startDate).getTime() && DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(endDate).getTime()) {
lzxry committed
251 252 253 254
                            correlationContract.add(contract);
                        }
                    }
                    //多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
255
                    if (correlationContract.size() > 1) {
lzxry committed
256 257 258 259 260 261 262 263 264
                        //冒泡
                        //第一优先级:合同开始日期,第二优先级,合同编号大小
                        Contract[] contractsArray = new Contract[correlationContract.size()];
                        contractsArray = correlationContract.toArray(contractsArray);

                        contractsArray = orderByContract(contractsArray);

                        for (int i = 0; i < contractsArray.length; i++) {
                            TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[i]);
265
                            if (tkioFlow != null && i < contractsArray.length - 1 && tkioFlow.getCostFlow() != null && tkioFlow.getCostFlow() > 0L) {//处理成本流量,如果超出了,依次算在下一个合同上
lzxry committed
266 267
                                clickNum = BigInteger.valueOf(tkioFlow.getCostFlow());
                                tkioFlow.setCostFlow(null);
268
                                if (tkioFlow.getFlow() > 0) {
lzxry committed
269 270 271
                                    tkioFlowList.add(tkioFlow);
                                    tkioFlowRepository.save(tkioFlow);
                                }
272 273
                            } else {
                                if (tkioFlow != null) {
lzxry committed
274
                                    tkioFlowList.add(tkioFlow);
lzxry committed
275
                                    tkioFlowRepository.save(tkioFlow);
lzxry committed
276 277 278 279 280
                                }
                                break;
                            }

                        }
281 282
                    } else {
                        if (correlationContract.size() == 0) {//昨日不包含在所有合同中
lzxry committed
283 284 285 286 287 288
                            //排序
                            Contract[] contractsArray = new Contract[contracts.size()];
                            contractsArray = contracts.toArray(contractsArray);
                            contractsArray = orderByContract(contractsArray);
                            //如果昨日日期在第一个合同之前,则归属到第一个合同的成本,其余区间都归属到前一个合同的成本上
                            for (int i = 0; i < contractsArray.length; i++) {
289
                                if (DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(contractsArray[i].getStartDate()).getTime() || i == contractsArray.length - 1) {
lzxry committed
290 291
                                    int j = 0;

292 293
                                    if (i != 0) {
                                        j = i - 1;
lzxry committed
294 295
                                    }

296
                                    if (i == contractsArray.length - 1) {
lzxry committed
297 298 299 300
                                        j = i;
                                    }

                                    TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[j]);
301
                                    if (tkioFlow != null) {
lzxry committed
302
                                        tkioFlowList.add(tkioFlow);
lzxry committed
303
                                        tkioFlowRepository.save(tkioFlow);
lzxry committed
304 305 306 307 308 309
                                    }
                                    break;
                                }
                            }


310
                        } else {
lzxry committed
311
                            TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, correlationContract.get(0));
312
                            if (tkioFlow != null) {
lzxry committed
313
                                tkioFlowList.add(tkioFlow);
lzxry committed
314
                                tkioFlowRepository.save(tkioFlow);
lzxry committed
315 316 317 318 319 320 321 322 323
                            }
                        }

                    }
                }
            }


        }
324
        if (tkioFlowList.size() > 0) {
lzxry committed
325
            //tkioFlowRepository.save(tkioFlowList);
lzxry committed
326 327 328 329 330
        }

    }

    //排序
331 332 333
    public Contract[] orderByContract(Contract[] contractsArray) {
        for (int i = 0; i < contractsArray.length - 1; i++) {
            for (int j = 0; j < contractsArray.length - 1 - i; j++) {
lzxry committed
334 335
                String startDate1 = contractsArray[j].getSignedDate() == null ? contractsArray[j].getStartDate() : contractsArray[j].getSignedDate();
                String startDate2 = contractsArray[j + 1].getSignedDate() == null ? contractsArray[j + 1].getStartDate() : contractsArray[j + 1].getSignedDate();
336
                if (DateUtil.getDate(startDate1).getTime() > DateUtil.getDate(startDate2).getTime()) {
lzxry committed
337
                    Contract temp = contractsArray[j];
338
                    contractsArray[j] = contractsArray[j + 1];
lzxry committed
339
                    contractsArray[j + 1] = temp;
340
                } else if (DateUtil.getDate(startDate1).getTime() == DateUtil.getDate(startDate2).getTime()) {
341 342

                    String contractCode = StringUtil.matchNumber(contractsArray[j].getContractCode());
343 344
                    String contractCodeMin = StringUtil.matchNumber(contractsArray[j + 1].getContractCode());
                    if (Long.valueOf(contractCode) > Long.valueOf(contractCodeMin)) {
lzxry committed
345
                        Contract temp = contractsArray[j];
346
                        contractsArray[j] = contractsArray[j + 1];
lzxry committed
347 348 349 350 351 352 353 354
                        contractsArray[j + 1] = temp;
                    }
                }
            }
        }
        return contractsArray;
    }

355
    public TkioFlow getTkioFlow(BigInteger clickNum, String yesterday, Contract contract) {
lzxry committed
356 357 358 359 360
        TkioFlow tkioFlow = new TkioFlow();
        tkioFlow.setDs(yesterday);
        tkioFlow.setEmail(contract.getEmail());
        tkioFlow.setContractCode(contract.getContractCode());
        try {
361
            if (DateUtil.daysBetween(contract.getStartDate(), yesterday) < 0 || DateUtil.daysBetween(contract.getEndDate(), yesterday) > 0) {//昨日日期早于合同开始日期
lzxry committed
362 363
                //设置为成本流量
                tkioFlow.setCostFlow(clickNum.longValue());
364
            } else {
lzxry committed
365
                //查看历史总消耗流量是否超出
366 367
                BigDecimal totalFlow = tkioFlowRepository.sumFlowByEmailAndContractCode(contract.getEmail(), contract.getContractCode());
                totalFlow = totalFlow == null ? new BigDecimal(0) : totalFlow;
368
                Double contractTrackFlow = contract.getTrackFlow() * 10000;
369
                if (contractTrackFlow.longValue() - totalFlow.longValue() - clickNum.longValue() >= 0 || contract.getPriceLevel() == Constant.tkioPriceLevelNotLimit) {
370
                    tkioFlow.setFlow(clickNum.longValue());
371
                } else {
372
                    tkioFlow.setFlow(contractTrackFlow.longValue() - totalFlow.longValue());
373
                    tkioFlow.setCostFlow(clickNum.longValue() - tkioFlow.getFlow());
374
                }
lzxry committed
375 376 377
            }
            return tkioFlow;
        } catch (ParseException e) {
378
            logger.error("合同编号-" + contract.getContractCode() + "-同步昨日流量错误:", e);
lzxry committed
379 380 381 382
        }
        return null;
    }

lzxry committed
383 384 385 386 387 388

    public void reset(){
        List<String> emails = contractRepository.findDistinctEmailByPlatform("tkio");

        List<TkioFlow> tkioFlowList = new ArrayList<>();
        //String yesterday = DateUtil.getBeforeDays(1);//昨日
lzxry committed
389
        List<String> dateInterval = DateUtil.getDateInterval("2021-05-25", "2021-05-25");
lzxry committed
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512
        for (String yesterday : dateInterval) {
            logger.info("昨日流量同步:" + yesterday);
            for (String email : emails) {

                //查询用户下所有appkey
                Account account = accountRepository.findByEmail(email);
                if(account==null||account.getRootParent()==null){
                    logger.warn("【单日流量同步】用户不存在:{}",email);
                    continue;
                }
                List<Account> accountList = accountRepository.findByRootParent(account.getRootParent());
                List<Long> idList = new ArrayList<>();
                for (Account ac : accountList) {
                    idList.add(ac.getId());
                }
                List<String> appkeys = appRepository.findAppkeysNotDebug(idList);
                String appkeyStr = String.join("','", appkeys);
                appkeyStr = "'" + appkeyStr + "'";
                if(CollectionUtils.isEmpty(appkeys)){
                    logger.warn("【单日流量同步】该用户没有appkey:{}",email);
                    continue;
                }
                //BigInteger clickNum = accountFlowRestrictService.getTotalNum(yesterday, yesterday, appkeyStr, "account_track_flow_restrict", "click_sum");
                BigInteger clickNum = flowService.getFlowByAccount(yesterday,yesterday,appkeys);
                if (clickNum != null && clickNum.longValue() > 0) {
                    List<Contract> contracts = contractRepository.findByPlatformAndEmail("tkio", email);
                    if (contracts.size() == 1) {//只有一个合同
                        TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contracts.get(0));
                        if (tkioFlow != null) {
                            tkioFlowList.add(tkioFlow);
                            tkioFlowRepository.save(tkioFlow);
                        }
                    } else {//多个合同
                        //看昨日被哪几个合同包含了
                        List<Contract> correlationContract = new ArrayList<>();
                        for (Contract contract : contracts) {
                        /*if (ContractStatusEnum.CANCEL.getKey().equals(contract.getStatus()) || ContractStatusEnum.SUSPEND.getKey().equals(contract.getStatus())) {
                            //中止或作废合同处理结束时间,以方便昨日流量的归属计算
                            ContractChange contractChange = contractChangeRepository.findByContentCode(ContractStatusEnum.CANCEL.getValue(), contract.getContractCode());
                            if(contractChange!=null){
                                contract.setEndDate(new DateTime(contractChange.getCreateTime()).toString("yyyy-MM-dd"));
                            }
                        }*/
                            String startDate = contract.getStartDate();
                            String endDate = contract.getEndDate();
                            if (DateUtil.getDate(yesterday).getTime() >= DateUtil.getDate(startDate).getTime() && DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(endDate).getTime()) {
                                correlationContract.add(contract);
                            }
                        }
                        //多个合同时,进行排序,如果第一个合同流量超出就要看第二个合同,以此往下
                        if (correlationContract.size() > 1) {
                            //冒泡
                            //第一优先级:合同开始日期,第二优先级,合同编号大小
                            Contract[] contractsArray = new Contract[correlationContract.size()];
                            contractsArray = correlationContract.toArray(contractsArray);

                            contractsArray = orderByContract(contractsArray);

                            for (int i = 0; i < contractsArray.length; i++) {
                                TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[i]);
                                if (tkioFlow != null && i < contractsArray.length - 1 && tkioFlow.getCostFlow() != null && tkioFlow.getCostFlow() > 0L) {//处理成本流量,如果超出了,依次算在下一个合同上
                                    clickNum = BigInteger.valueOf(tkioFlow.getCostFlow());
                                    tkioFlow.setCostFlow(null);
                                    if (tkioFlow.getFlow() > 0) {
                                        tkioFlowList.add(tkioFlow);
                                        tkioFlowRepository.save(tkioFlow);
                                    }
                                } else {
                                    if (tkioFlow != null) {
                                        tkioFlowList.add(tkioFlow);
                                        tkioFlowRepository.save(tkioFlow);
                                    }
                                    break;
                                }

                            }
                        } else {
                            if (correlationContract.size() == 0) {//昨日不包含在所有合同中
                                //排序
                                Contract[] contractsArray = new Contract[contracts.size()];
                                contractsArray = contracts.toArray(contractsArray);
                                contractsArray = orderByContract(contractsArray);
                                //如果昨日日期在第一个合同之前,则归属到第一个合同的成本,其余区间都归属到前一个合同的成本上
                                for (int i = 0; i < contractsArray.length; i++) {
                                    if (DateUtil.getDate(yesterday).getTime() <= DateUtil.getDate(contractsArray[i].getStartDate()).getTime() || i == contractsArray.length - 1) {
                                        int j = 0;

                                        if (i != 0) {
                                            j = i - 1;
                                        }

                                        if (i == contractsArray.length - 1) {
                                            j = i;
                                        }

                                        TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, contractsArray[j]);
                                        if (tkioFlow != null) {
                                            tkioFlowList.add(tkioFlow);
                                            tkioFlowRepository.save(tkioFlow);
                                        }
                                        break;
                                    }
                                }


                            } else {
                                TkioFlow tkioFlow = getTkioFlow(clickNum, yesterday, correlationContract.get(0));
                                if (tkioFlow != null) {
                                    tkioFlowList.add(tkioFlow);
                                    tkioFlowRepository.save(tkioFlow);
                                }
                            }

                        }
                    }
                }


            }
        }


    }
lzxry committed
513 514
    public static void main(String[] args) throws ParseException {
        String ago = "2020-10-01";
515
        int between = DateUtil.daysBetween(ago, DateUtil.getBeforeDays(1)) + 1;
lzxry committed
516 517 518 519 520 521
        System.out.println(between);
        for (int i = between; i > 0; i--) {
            System.out.println(DateUtil.getBeforeDays(i));
        }
    }
}