TkioAccountServiceImpl.java 25.8 KB
Newer Older
manxiaoqiang committed
1 2 3 4
package tkio.service.impl;

import com.amazonaws.services.dynamodbv2.xspec.B;
import common.model.*;
5
import common.repository.*;
manxiaoqiang committed
6
import common.service.UserService;
manxiaoqiang committed
7
import dic.ContractTypeEnum;
manxiaoqiang committed
8 9
import dic.RoleEnum;
import dic.RoleTypeEnum;
10
import org.apache.commons.collections.map.AbstractMapDecorator;
manxiaoqiang committed
11
import org.apache.commons.collections.map.HashedMap;
manxiaoqiang committed
12
import org.apache.commons.collections4.list.TreeList;
13 14 15
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
2  
manxiaoqiang committed
16 17
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
manxiaoqiang committed
18 19
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
20
import org.springframework.util.StringUtils;
manxiaoqiang committed
21
import tkio.model.Account;
manxiaoqiang committed
22
import tkio.model.Crowd;
manxiaoqiang committed
23
import tkio.model.PackageType;
manxiaoqiang committed
24
import tkio.model.SalesManLeader;
25 26
import tkio.repository.*;
import tkio.service.AccountFlowRestrictService;
manxiaoqiang committed
27
import tkio.service.TkioAccountService;
2  
manxiaoqiang committed
28
import tkio.task.AccountCheck;
29 30 31
import util.Constant;
import util.DateUtil;
import util.HttpClientUtil;
manxiaoqiang committed
32 33
import util.ValidateUtil;

34 35
import java.math.BigDecimal;
import java.math.BigInteger;
36
import java.util.*;
manxiaoqiang committed
37 38 39 40

/**
 * Created by mxq on 2017/12/26.
 */
41
@Service
manxiaoqiang committed
42
public class TkioAccountServiceImpl implements TkioAccountService {
2  
manxiaoqiang committed
43
    private static final Logger logger = LoggerFactory.getLogger(TkioAccountServiceImpl.class);
44 45 46
    //查询URI
    private final static String URI_REPORT_BY_SQL = "/api/trackingio/bysql";

manxiaoqiang committed
47 48 49 50 51 52 53 54 55 56
    @Autowired
    Account4WebRepository account4WebRepository;
    @Autowired
    SalesManLeaderRepository salesManLeaderRepository;
    @Autowired
    AccountRepository accountRepository;
    @Autowired
    BackVisitRepository backVisitRepository;
    @Autowired
    PaymentRepository paymentRepository;
57 58
    @Autowired
    ReminderRepository reminderRepository;
59 60 61 62 63 64 65 66 67 68
    @Autowired
    CampaignRepository campaignRepository;
    @Autowired
    ChannelRepository channelRepository;
    @Autowired
    AppRepository appRepository;
    @Autowired
    AccountFlowRestrictService accountFlowRestrictService;
    @Autowired
    UserRepository userRepository;
manxiaoqiang committed
69 70 71 72 73 74 75 76
    @Autowired
    ContractMoneyRepository contractMoneyRepository;
    @Autowired
    ContractRepository contractRepository;
    @Autowired
    ContractChangeRepository contractChangeRepository;
    @Autowired
    PackageTypeRepository packageTypeRepository;
manxiaoqiang committed
77 78 79 80
    @Autowired
    UserService userService;
    @Autowired
    ReminderLevelRepository reminderLevelRepository;
manxiaoqiang committed
81 82
    @Autowired
    PressMoneyRepository pressMoneyRepository;
manxiaoqiang committed
83 84
    @Autowired
    CrowdRepository crowdRepository;
manxiaoqiang committed
85

manxiaoqiang committed
86 87 88 89 90
    @Override
    public Map<String, Object> findSale(User user, Long sale) {
        Map<String, Object> map = new HashMap();
        String email = null;
        if(null != sale){
2  
manxiaoqiang committed
91 92 93 94 95 96 97 98
            try {
                SalesManLeader one = salesManLeaderRepository.findOne(Integer.parseInt(sale + ""));
                User user1 = userRepository.findByEmail(one.getEmail());
                if (null != user1)
                    map.put("old", user1.getName());
            }catch (Exception e){
                logger.error(e.getMessage(), e);
            }
manxiaoqiang committed
99
        }
100 101 102 103 104 105
        List<User> list = new ArrayList<>();
        if(user.getRole().equals(RoleEnum.NORTH_BUSSINUSS.getKey()) || user.getRole().equals(RoleEnum.SOUTH_BUSSINUSS.getKey())){
            list = userService.findbyRole(user.getRole());
        }else {
           list = userRepository.findSales();
        }
manxiaoqiang committed
106 107 108 109 110 111 112 113 114
        map.put("new", list);
        return map;
    }

    @Override
    public Account4Web updateSale(String email, String account) {
        Account accountTkio = accountRepository.findByEmail(account);
        Account4Web account4Web = account4WebRepository.findByEmail(account);
        SalesManLeader leader = salesManLeaderRepository.findOneByEmail(email);
2  
manxiaoqiang committed
115
        User user = userRepository.findByEmail(email);
manxiaoqiang committed
116 117 118 119 120

        accountTkio.setBussinessman(Long.parseLong(leader.getId()+""));
        accountRepository.save(accountTkio);

        account4Web.setBussinessMan(Long.parseLong(leader.getId()+""));
2  
manxiaoqiang committed
121
        account4Web.setSaleEamil(user.getEmail());
manxiaoqiang committed
122 123 124
        return account4WebRepository.save(account4Web);
    }

manxiaoqiang committed
125 126 127 128 129 130 131 132 133
    @Override
    public List<Account4Web> findAll(User user) {
        List<Account4Web> result = new ArrayList<>();
        List<Account4Web> account4WebList = null;
        if(user.getRole().equals(RoleEnum.MANAGER.getKey())){
            account4WebList = account4WebRepository.findAll();
        } else{
            List<Integer> idList = new ArrayList<>();
            if(user.getRoleType().equals(RoleTypeEnum.MANAGER.getKey())){
manxiaoqiang committed
134 135 136 137 138 139
                List<User> userList = userRepository.findAllUserByRole(user.getRole());
                List<String> emialList = new ArrayList<>();
                for(User u : userList){
                    emialList.add(u.getEmail());
                }
                List<SalesManLeader> salesManLeaderList = salesManLeaderRepository.findAllByEmails(emialList);
manxiaoqiang committed
140 141 142 143 144 145
                if (ValidateUtil.isValid(salesManLeaderList)){
                    for(SalesManLeader sml : salesManLeaderList){
                        idList.add(sml.getId());
                    }
                }
            }else{
manxiaoqiang committed
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
                List<String> emailList = new ArrayList<>();
                emailList.add(user.getEmail());
                List<User> userList = userService.findAllSons(user.getId());
                if(ValidateUtil.isValid(userList)){
                    for(User u : userList){
                        emailList.add(u.getEmail());
                    }
                }
                List<SalesManLeader> manLeaderList = salesManLeaderRepository.findAllByEmails(emailList);
                if(ValidateUtil.isValid(manLeaderList)){
                    for(SalesManLeader a : manLeaderList){
                        idList.add(a.getId());
                    }
                }

manxiaoqiang committed
161 162 163 164 165 166 167 168 169 170 171 172
            }
            if(ValidateUtil.isValid(idList)){
                List<Account> accountList = accountRepository.findBussnissMan(idList);
                List<String> emails = new ArrayList<>();
                if(ValidateUtil.isValid(accountList)){
                    for(Account ac : accountList){
                        emails.add(ac.getEmail());
                    }
                    account4WebList = account4WebRepository.findByEmails(emails);
                }
            }
        }
manxiaoqiang committed
173

manxiaoqiang committed
174 175 176 177 178 179 180 181 182 183
        List<SalesManLeader> roles = salesManLeaderRepository.findAll();
        Map<Long, String> busMap = new HashMap<>();
        for(SalesManLeader u : roles){
            busMap.put((long)u.getId(),u.getName());
        }
        List<User> users = userRepository.findAll();
        Map<String, Long> saleMap = new HashMap<>();
        for(User u : users){
            saleMap.put(u.getEmail(),u.getId());
        }
manxiaoqiang committed
184

185 186 187 188 189 190 191
        List<Reminder> reminderList = reminderRepository.findAllDistinct("tkio");
        Map<Long, Boolean> reMap = new HashMap<>();
        if(ValidateUtil.isValid(reminderList)){
            for(Reminder re : reminderList){
                reMap.put(re.getAccountId(), re.getRemindStatus());
            }
        }
manxiaoqiang committed
192

manxiaoqiang committed
193 194 195 196 197 198 199
        List<PressMoney> allPress = pressMoneyRepository.findAllPress("tkio");
        Map<Long, Boolean> pressMap = new HashMap<>();
        if(ValidateUtil.isValid(allPress)){
            for(PressMoney re : allPress){
                pressMap.put(re.getAccountId(), re.getPressStatus());
            }
        }
manxiaoqiang committed
200

manxiaoqiang committed
201 202
        if(ValidateUtil.isValid(account4WebList)){
            Map<String, Integer> backTimeMap = getBackTime();
manxiaoqiang committed
203
            Map<String, List<Contract>> payMap = getPay();
manxiaoqiang committed
204 205 206 207 208 209 210
            for(Account4Web aw : account4WebList){
                if(backTimeMap.containsKey(aw.getEmail())){
                    aw.setBackTime(backTimeMap.get(aw.getEmail()));
                } else{
                    aw.setBackTime(0);
                }
                if(payMap.containsKey(aw.getEmail())){
manxiaoqiang committed
211
                    List<Contract> contractList = payMap.get(aw.getEmail());
kangxiaoshan committed
212
                    //aw.setMoney(contractList.get(contractList.size() - 1 ).getPayMoney());
manxiaoqiang committed
213
                    aw.setContractStatus(contractRepository.findByPlatformAndEmailLimit1("tkio", aw.getEmail(), ContractTypeEnum.MAIN.getKey()).getStatus());
manxiaoqiang committed
214
                    aw.setContractTime(contractList.size());
manxiaoqiang committed
215
                } else{
manxiaoqiang committed
216 217
                    aw.setContractTime(0);
                    aw.setContractStatus("empty");
manxiaoqiang committed
218 219
                    aw.setMoney(0L);
                }
220 221 222 223 224
                if(reMap.containsKey(aw.getAccountId())){
                    aw.setRemStatus(reMap.get(aw.getAccountId()));
                } else{
                    aw.setRemStatus(true);
                }
manxiaoqiang committed
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240

                if(pressMap.containsKey(aw.getAccountId())){
                    aw.setPressStatus(true);
                    aw.setContractStatus("stop");
                } else{
                    aw.setRemStatus(false);
                }

                if(busMap.containsKey(aw.getBussinessMan())){
                    aw.setSaleName(busMap.get(aw.getBussinessMan()));
                }else{
                    aw.setSaleName("");
                }
                if(saleMap.containsKey(aw.getSaleEamil())){
                    aw.setSale(saleMap.get(aw.getSaleEamil()));
                }
manxiaoqiang committed
241 242 243 244 245
                result.add(aw);
            }
        }
        return result;
    }
manxiaoqiang committed
246 247 248 249 250 251 252 253 254 255
    @Override
    public Account4Web findOne(String email) {
        List<Reminder> reminderList = reminderRepository.findAllDistinct("tkio");
        Map<Long, Boolean> reMap = new HashMap<>();
        if(ValidateUtil.isValid(reminderList)){
            for(Reminder re : reminderList){
                reMap.put(re.getAccountId(), re.getRemindStatus());
            }
        }
        Account4Web aw = account4WebRepository.findByEmail(email);
manxiaoqiang committed
256 257 258
        if(null == aw){
            return null;
        }
manxiaoqiang committed
259 260 261 262 263 264 265 266 267 268
        List<SalesManLeader> roles = salesManLeaderRepository.findAll();
        Map<Long, String> busMap = new HashMap<>();
        for(SalesManLeader u : roles){
            busMap.put((long)u.getId(),u.getName());
        }
        List<User> users = userRepository.findAll();
        Map<String, Long> saleMap = new HashMap<>();
        for(User u : users){
            saleMap.put(u.getEmail(),u.getId());
        }
manxiaoqiang committed
269 270 271 272 273 274
        List<BackVisit> backVisitList = backVisitRepository.findAllByPlatformAndEmail("tkio", email);
        if(ValidateUtil.isValid(backVisitList)){
            aw.setBackTime(backVisitList.size());
        } else{
            aw.setBackTime(0);
        }
manxiaoqiang committed
275
        List<Contract> contractList = contractRepository.findByPlatformAndEmail("tkio", email,ContractTypeEnum.MAIN.getKey());
manxiaoqiang committed
276
        if(ValidateUtil.isValid(contractList)){
kangxiaoshan committed
277
            //aw.setMoney(contractList.get(contractList.size() - 1 ).getPayMoney());
manxiaoqiang committed
278 279 280 281 282 283 284 285 286 287 288 289
            aw.setContractStatus(contractList.get(contractList.size() - 1 ).getStatus());
            aw.setContractTime(contractList.size());
        } else{
            aw.setContractTime(0);
            aw.setContractStatus("empty");
            aw.setMoney(0L);
        }
        if(reMap.containsKey(aw.getAccountId())){
            aw.setRemStatus(reMap.get(aw.getAccountId()));
        } else{
            aw.setRemStatus(true);
        }
manxiaoqiang committed
290 291 292 293 294 295 296


        if(busMap.containsKey(aw.getBussinessMan())){
            aw.setSaleName(busMap.get(aw.getBussinessMan()));
        }else{
            aw.setSaleName("");
        }
manxiaoqiang committed
297 298
        return aw;
    }
299

manxiaoqiang committed
300 301 302 303 304
    @Override
    public List<ReminderLevel> findReminderlevel() {
        return reminderLevelRepository.findAll();
    }

305
    @Override
306 307 308 309 310
    public Reminder forbiden(User user, Reminder resource) {
        resource.setUser(user.getId());
        resource.setModifyTime(new Date());
        resource.setPlatform("tkio");
        resource.setRemindStatus(false);
311
        resource.setDs(DateUtil.getBeforeDays(0));
312 313 314 315 316 317 318 319 320
        return reminderRepository.save(resource);
    }

    @Override
    public Reminder enable(User user, Reminder resource) {
        resource.setUser(user.getId());
        resource.setModifyTime(new Date());
        resource.setPlatform("tkio");
        resource.setRemindStatus(true);
321
        resource.setDs(DateUtil.getBeforeDays(0));
322
        return reminderRepository.save(resource);
323 324
    }

manxiaoqiang committed
325
    @Override
manxiaoqiang committed
326 327 328 329 330 331 332 333 334 335 336 337 338
    public void forbidenPress(User user, PressMoney resource) {
        PressMoney pressMoney = pressMoneyRepository.findOne("tkio", resource.getAccountId());
        pressMoney.setUser(user.getId());
        pressMoney.setModifyTime(new Date());
        pressMoney.setPressStatus(false);
        pressMoney.setDs(DateUtil.getBeforeDays(0));

        Contract contract = contractRepository.findByPlatformAndEmailLimit1("tkio", resource.getEmail(), ContractTypeEnum.MAIN.getKey());
        if(null != contract){
            contract.setStatus("executing");
            contractRepository.save(contract);
        }

2  
manxiaoqiang committed
339 340 341
        Account4Web account4Web = account4WebRepository.findByEmail(resource.getEmail());
        account4Web.setStatus("已激活");
        account4WebRepository.save(account4Web);
manxiaoqiang committed
342 343 344 345 346 347 348

        Account account = accountRepository.findByEmail(resource.getEmail());
        account.setStatus(1);
        accountRepository.save(account);

        pressMoneyRepository.save(pressMoney);
        return ;
manxiaoqiang committed
349 350 351 352
    }

    @Override
    public PressMoney enablePress(User user, PressMoney resource) {
manxiaoqiang committed
353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
        PressMoney pressMoney = pressMoneyRepository.findOne("tkio", resource.getAccountId());
        if(null == pressMoney){
            resource.setUser(user.getId());
            resource.setModifyTime(new Date());
            resource.setPlatform("tkio");
            resource.setPressStatus(true);
            resource.setDs(DateUtil.getBeforeDays(0));
            pressMoneyRepository.save(resource);
        }else{
            pressMoney.setUser(user.getId());
            pressMoney.setModifyTime(new Date());
            pressMoney.setPressStatus(true);
            pressMoney.setDs(DateUtil.getBeforeDays(0));
            pressMoneyRepository.save(pressMoney);
        }


        Contract contract = contractRepository.findByPlatformAndEmailLimit1("tkio", resource.getEmail(), ContractTypeEnum.MAIN.getKey());
       if(null != contract){
           contract.setStatus("stop");
           contractRepository.save(contract);
       }

2  
manxiaoqiang committed
376 377 378
        Account4Web account4Web = account4WebRepository.findByEmail(resource.getEmail());
        account4Web.setStatus("已禁用");
        account4WebRepository.save(account4Web);
manxiaoqiang committed
379 380 381 382 383

        Account account = accountRepository.findByEmail(resource.getEmail());
        account.setStatus(0);
        accountRepository.save(account);
        return null;
manxiaoqiang committed
384 385
    }

386
    @Override
387 388 389
    public Payment pay(User user, Payment resource) {
        resource.setUser(user.getId());
        resource.setPayDate(new Date());
390
        resource.setPlatform("tkio");
391
        resource.setDs(DateUtil.getBeforeDays(0));
manxiaoqiang committed
392 393 394 395 396 397 398 399

        Reminder re = new Reminder();
        re.setUser(user.getId());
        re.setModifyTime(new Date());
        re.setPlatform("tkio");
        re.setRemindStatus(true);
        re.setDs(DateUtil.getBeforeDays(0));
        reminderRepository.save(re);
400
        return paymentRepository.save(resource);
kangxiaoshan committed
401
        
402 403
    }

404 405 406 407
    @Override
    public BackVisit visit(User user, BackVisit resource) {
        resource.setUser(user.getId());
        resource.setVisitDate(new Date());
408
        resource.setPlatform("tkio");
409
        resource.setDs(DateUtil.getBeforeDays(0));
410 411 412
        return backVisitRepository.save(resource);
    }

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 513 514 515 516 517 518 519 520 521 522
    @Override
    public Map<String, Integer> findFunTimes(Long account, String startDate, String endDate) {
        Map<String, Integer> result = new HashMap<>();
        List<Account> accountList = accountRepository.findByRootParent(account);
        List<Long> idList = new ArrayList<>();
        for(Account ac : accountList){
            idList.add(ac.getId());
        }
        List<String> appkeys = appRepository.findAppkeys(idList);
        String appkeyStr = String.join("','", appkeys);

        BigInteger numAccount = accountRepository.countByRootParent(account, startDate, endDate);
        BigInteger numApp = appRepository.countByAccount(idList, startDate, endDate);
        BigInteger numCampaign = campaignRepository.countByAccount(idList, startDate, endDate);
        BigInteger numChannel = channelRepository.countByAccount(idList, startDate, endDate);

        BigInteger event_sum = accountFlowRestrictService.getTotalNum(startDate, endDate, "'" + appkeyStr + "'", "account_io_flow_restrict", "event_sum");
        BigInteger click_sum =accountFlowRestrictService.getTotalNum(startDate, endDate, "'" + appkeyStr + "'","account_track_flow_restrict","click_sum");
        result.put("numAccount", numAccount.intValue());
        result.put("numApp", numApp.intValue());
        result.put("numCampaign", numCampaign.intValue());
        result.put("numChannel", numChannel.intValue());
        result.put("event_sum", event_sum.intValue());
        result.put("click_sum", click_sum.intValue());
        return result;
    }

    @Override
    public List<Map<String, Object>> findPv(Long account, String startDate, String endDate) {
        List<Map<String, Object>>  result = new ArrayList<>();
        List<Account> accountList = accountRepository.findByRootParent(account);
        List<Long> idList = new ArrayList<>();
        for(Account ac : accountList){
            idList.add(ac.getId());
        }
        List<String> appkeys = appRepository.findAppkeys(idList);
        String appkeyStr = String.join("','", appkeys);

        String querySql = "select menu, count(*) as pv, count(distinct(xwho)) as uv, count(*)/count(distinct(xwho)) as puv " +
                "from tkio_bigtable_view.event_f0f251af10e66a0c94d2e923d8863105 where user_appkey in ('" + appkeyStr + "') " +
                "AND ds >= '" + startDate + "' AND ds <= '" + endDate + "'  group by menu;";
        String url = Constant.reportUrl + URI_REPORT_BY_SQL;

        Map<String, String> conditions = new HashMap<>();
        conditions.put("sql", querySql);
        conditions.put("dbtype", "presto");
        conditions.put("datatype", "list");
        conditions.put("iscache", "0");

        String responseJson = HttpClientUtil.doHttpPostRequest(url, "trackingio", conditions);
        if(responseJson.contains("val")){
            try {
                JSONObject jsonObject = new JSONObject(responseJson);
                JSONArray valArr = jsonObject.getJSONArray("val");
                if(null != valArr && valArr.length() > 0){
                    for(int i = 0; i < valArr.length(); i++){
                        JSONObject val = valArr.getJSONObject(i);
                        Map<String, Object> map = new HashMap<>();
                        map.put("menu", val.getString("menu"));
                        map.put("pv", val.getInt("pv"));
                        map.put("uv", val.getInt("uv"));
                        map.put("puv", val.getInt("puv"));

                        result.add(map);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    @Override
    public List<Reminder> findRed(Long account, String startDate, String endDate) {
        List<Reminder> result = new ArrayList<>();
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
        for(User u : userList){
            userMap.put(u.getId(), u.getName());
        }
        List<Reminder> list = reminderRepository.findAll(account, startDate, endDate, "tkio");
        if (ValidateUtil.isValid(list)) {
            for(Reminder re : list){
                re.setUserName(userMap.get(re.getUser()));
                result.add(re);
            }
        }
        return result;
    }

    @Override
    public List<BackVisit> findVisit(Long account, String startDate, String endDate) {
        List<BackVisit> result = new ArrayList<>();
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
        for(User u : userList){
            userMap.put(u.getId(), u.getName());
        }
        List<BackVisit> list = backVisitRepository.findAll(account, startDate, endDate, "tkio");
        if (ValidateUtil.isValid(list)) {
            for(BackVisit re : list){
                re.setUserName(userMap.get(re.getUser()));
                result.add(re);
            }
        }
        return result;
    }

    @Override
manxiaoqiang committed
523 524
    public List<ContractMoney> findPay(String email, String startDate, String endDate) {
        List<ContractMoney> result = new ArrayList<>();
525 526 527 528 529
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
        for(User u : userList){
            userMap.put(u.getId(), u.getName());
        }
manxiaoqiang committed
530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555
        List<ContractMoney> list = contractMoneyRepository.findByDs(startDate, endDate, email,"tkio");
        if(ValidateUtil.isValid(list)){
            for(ContractMoney cm : list){
                Long user = null == cm.getModifyAccount() ? cm.getUser() : cm.getModifyAccount();
                cm.setCreateName(userMap.containsKey(user) ? userMap.get(user) : "");
                result.add(cm);
            }
        }
        return result;
    }

    @Override
    public List<Contract> findContract(String email) {
        List<Contract> result = new ArrayList<>();
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
        for(User u : userList){
            userMap.put(u.getId(), u.getName());
        }
        List<PackageType> typeList = packageTypeRepository.findAll();
        Map<Long, String> typeMap = new HashMap<>();
        if(ValidateUtil.isValid(typeList)){
            for(PackageType s: typeList){
                typeMap.put(s.getId(), s.getPackageName());
            }
        }
manxiaoqiang committed
556
        List<Contract> contractList = contractRepository.findByPlatformAndEmail("tkio", email,ContractTypeEnum.MAIN.getKey());
manxiaoqiang committed
557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
        if(ValidateUtil.isValid(contractList)){
            for(Contract cm : contractList){
                cm.setSaleName(userMap.containsKey(cm.getSale()) ? userMap.get(cm.getSale()) : "");
                cm.setPriceLevelName(typeMap.containsKey(cm.getPriceLevel()) ? typeMap.get(cm.getPriceLevel()) : "");
                result.add(cm);
            }
        }
        return result;
    }

    @Override
    public List<ContractChange> findContractChange(String email, String startDate, String endDate) {
        List<ContractChange> result = new ArrayList<>();
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
        for(User u : userList){
            userMap.put(u.getId(), u.getName());
        }
        List<PackageType> typeList = packageTypeRepository.findAll();
        Map<Long, String> typeMap = new HashMap<>();
        if(ValidateUtil.isValid(typeList)){
            for(PackageType s: typeList){
                typeMap.put(s.getId(), s.getPackageName());
            }
        }

        List<ContractChange> contractChangeList = contractChangeRepository.findByPlatformAndEmail("tkio", email, startDate, endDate);
        if(ValidateUtil.isValid(contractChangeList)){
            for(ContractChange cm : contractChangeList){
                Long user = null == cm.getModifyAccount() ? cm.getUser() : cm.getModifyAccount();
                cm.setCreateName(userMap.containsKey(user) ? userMap.get(user) : "");
                cm.setLevelName(typeMap.containsKey(cm.getLevel()) ? typeMap.get(cm.getLevel()) : "");
                result.add(cm);
590 591 592 593
            }
        }
        return result;
    }
594

manxiaoqiang committed
595 596 597 598 599
    @Override
    public void contractPay(User loginUser, ContractMoney resource) {
        Contract contract = contractRepository.findByCode(resource.getContractCode());
        //增值服务
        if(contract.getType().equals(ContractTypeEnum.INCREMENT.getKey())){
manxiaoqiang committed
600 601 602 603
            //回本分析不作操作
            if(contract.getPriceLevel().longValue() == 3L){
                return;
            }
2  
manxiaoqiang committed
604 605 606 607 608 609 610
            Crowd crowd = crowdRepository.findOne(resource.getContractCode());
            if(null != crowd){
                crowd.setPayment(1);
                crowdRepository.save(crowd);
            }
            //人群分析
            if(null == contract.getEndDate()){
2  
manxiaoqiang committed
611 612
                contract.setStatus("end");
                contractRepository.save(contract);
manxiaoqiang committed
613
            }
2  
manxiaoqiang committed
614 615


manxiaoqiang committed
616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
        }else{//基础套餐
            Account account = accountRepository.findByEmail(resource.getEmail());
            PressMoney press = pressMoneyRepository.findOnePress("tkio",account.getId());
            //如果被催款了,恢复状态
            if(press != null){
                account.setStatus(1);
                accountRepository.save(account);

                contract.setStatus("executing");
                contractRepository.save(contract);
            }

        }

    }

632

manxiaoqiang committed
633 634
    public Map<String, Integer> getBackTime(){
        Map<String, Integer> map = new HashMap<>();
635
        List<BackVisit> all = backVisitRepository.findAllByPlatform("tkio");
manxiaoqiang committed
636 637 638 639 640 641 642 643 644 645 646 647
        if (ValidateUtil.isValid(all)){
            for(BackVisit bv : all){
                if(map.containsKey(bv.getEmail())){
                    map.put(bv.getEmail(), map.get(bv.getEmail()) + 1);
                } else{
                    map.put(bv.getEmail(), 1);
                }
            }
        }
        return map;
    }

manxiaoqiang committed
648 649 650 651 652 653 654


    public Map<String, List<Contract>> getPay(){
        Map<String, List<Contract>> map = new HashMap<>();
        List<Contract> contractList = contractRepository.findByPlatform("tkio");
        if (ValidateUtil.isValid(contractList)){
            for(Contract pa : contractList){
manxiaoqiang committed
655
                if(map.containsKey(pa.getEmail())){
manxiaoqiang committed
656 657 658
                    List<Contract> list = map.get(pa.getEmail());
                    list.add(pa);
                    map.put(pa.getEmail(), list);
manxiaoqiang committed
659
                } else{
manxiaoqiang committed
660 661 662
                    List<Contract> list = new TreeList<>();
                    list.add(pa);
                    map.put(pa.getEmail(), list);
manxiaoqiang committed
663 664 665 666 667
                }
            }
        }
        return map;
    }
manxiaoqiang committed
668

manxiaoqiang committed
669
}