TkioAccountServiceImpl.java 26.3 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
    //查询URI
lzxry committed
45
    private final static String URI_REPORT_BY_SQL = "/api/tkio/report/trackingio/bysql";
46

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

kangxiaoshan committed
117
        accountTkio.setBussinessman(Long.parseLong(leader.getId() + ""));
manxiaoqiang committed
118 119
        accountRepository.save(accountTkio);

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

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

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

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

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

kangxiaoshan committed
201
        if (ValidateUtil.isValid(account4WebList)) {
manxiaoqiang committed
202
            Map<String, Integer> backTimeMap = getBackTime();
manxiaoqiang committed
203
            Map<String, List<Contract>> payMap = getPay();
kangxiaoshan committed
204 205
            for (Account4Web aw : account4WebList) {
                if (backTimeMap.containsKey(aw.getEmail())) {
manxiaoqiang committed
206
                    aw.setBackTime(backTimeMap.get(aw.getEmail()));
kangxiaoshan committed
207
                } else {
manxiaoqiang committed
208 209
                    aw.setBackTime(0);
                }
kangxiaoshan committed
210
                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());
kangxiaoshan committed
215
                } else {
manxiaoqiang committed
216 217
                    aw.setContractTime(0);
                    aw.setContractStatus("empty");
manxiaoqiang committed
218 219
                    aw.setMoney(0L);
                }
kangxiaoshan committed
220
                if (reMap.containsKey(aw.getAccountId())) {
221
                    aw.setRemStatus(reMap.get(aw.getAccountId()));
kangxiaoshan committed
222
                } else {
223 224
                    aw.setRemStatus(true);
                }
manxiaoqiang committed
225

kangxiaoshan committed
226
                if (pressMap.containsKey(aw.getAccountId())) {
manxiaoqiang committed
227 228
                    aw.setPressStatus(true);
                    aw.setContractStatus("stop");
kangxiaoshan committed
229
                } else {
manxiaoqiang committed
230 231 232
                    aw.setRemStatus(false);
                }

kangxiaoshan committed
233
                if (busMap.containsKey(aw.getBussinessMan())) {
manxiaoqiang committed
234
                    aw.setSaleName(busMap.get(aw.getBussinessMan()));
kangxiaoshan committed
235
                } else {
manxiaoqiang committed
236 237
                    aw.setSaleName("");
                }
kangxiaoshan committed
238
                if (saleMap.containsKey(aw.getSaleEamil())) {
manxiaoqiang committed
239 240
                    aw.setSale(saleMap.get(aw.getSaleEamil()));
                }
manxiaoqiang committed
241 242 243 244 245
                result.add(aw);
            }
        }
        return result;
    }
kangxiaoshan committed
246

manxiaoqiang committed
247 248 249 250
    @Override
    public Account4Web findOne(String email) {
        List<Reminder> reminderList = reminderRepository.findAllDistinct("tkio");
        Map<Long, Boolean> reMap = new HashMap<>();
kangxiaoshan committed
251 252
        if (ValidateUtil.isValid(reminderList)) {
            for (Reminder re : reminderList) {
manxiaoqiang committed
253 254 255
                reMap.put(re.getAccountId(), re.getRemindStatus());
            }
        }
kangxiaoshan committed
256 257 258 259 260 261

        Account account = accountRepository.findByEmail(email);

        //Account4Web aw = account4WebRepository.findByEmail(email);
        Account4Web aw = null;
        if (null == account) {
manxiaoqiang committed
262
            return null;
kangxiaoshan committed
263 264 265 266
        } else {
            aw = new Account4Web();
            aw.setAccountId(account.getId());
            aw.setBussinessMan(account.getBussinessman());
kangxiaoshan committed
267

manxiaoqiang committed
268
        }
manxiaoqiang committed
269 270
        List<SalesManLeader> roles = salesManLeaderRepository.findAll();
        Map<Long, String> busMap = new HashMap<>();
kangxiaoshan committed
271 272
        for (SalesManLeader u : roles) {
            busMap.put((long) u.getId(), u.getName());
manxiaoqiang committed
273 274 275
        }
        List<User> users = userRepository.findAll();
        Map<String, Long> saleMap = new HashMap<>();
kangxiaoshan committed
276 277
        for (User u : users) {
            saleMap.put(u.getEmail(), u.getId());
manxiaoqiang committed
278
        }
manxiaoqiang committed
279
        List<BackVisit> backVisitList = backVisitRepository.findAllByPlatformAndEmail("tkio", email);
kangxiaoshan committed
280
        if (ValidateUtil.isValid(backVisitList)) {
manxiaoqiang committed
281
            aw.setBackTime(backVisitList.size());
kangxiaoshan committed
282
        } else {
manxiaoqiang committed
283 284
            aw.setBackTime(0);
        }
kangxiaoshan committed
285 286
        List<Contract> contractList = contractRepository.findByPlatformAndEmail("tkio", email, ContractTypeEnum.MAIN.getKey());
        if (ValidateUtil.isValid(contractList)) {
kangxiaoshan committed
287
            //aw.setMoney(contractList.get(contractList.size() - 1 ).getPayMoney());
kangxiaoshan committed
288
            aw.setContractStatus(contractList.get(contractList.size() - 1).getStatus());
manxiaoqiang committed
289
            aw.setContractTime(contractList.size());
kangxiaoshan committed
290
        } else {
manxiaoqiang committed
291 292 293 294
            aw.setContractTime(0);
            aw.setContractStatus("empty");
            aw.setMoney(0L);
        }
kangxiaoshan committed
295
        if (reMap.containsKey(aw.getAccountId())) {
manxiaoqiang committed
296
            aw.setRemStatus(reMap.get(aw.getAccountId()));
kangxiaoshan committed
297
        } else {
manxiaoqiang committed
298 299
            aw.setRemStatus(true);
        }
manxiaoqiang committed
300 301


kangxiaoshan committed
302
        if (busMap.containsKey(aw.getBussinessMan())) {
manxiaoqiang committed
303
            aw.setSaleName(busMap.get(aw.getBussinessMan()));
kangxiaoshan committed
304
        } else {
manxiaoqiang committed
305 306
            aw.setSaleName("");
        }
manxiaoqiang committed
307 308
        return aw;
    }
309

manxiaoqiang committed
310 311 312 313 314
    @Override
    public List<ReminderLevel> findReminderlevel() {
        return reminderLevelRepository.findAll();
    }

315
    @Override
316 317 318 319 320
    public Reminder forbiden(User user, Reminder resource) {
        resource.setUser(user.getId());
        resource.setModifyTime(new Date());
        resource.setPlatform("tkio");
        resource.setRemindStatus(false);
321
        resource.setDs(DateUtil.getBeforeDays(0));
322 323 324 325 326 327 328 329 330
        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);
331
        resource.setDs(DateUtil.getBeforeDays(0));
332
        return reminderRepository.save(resource);
333 334
    }

manxiaoqiang committed
335
    @Override
manxiaoqiang committed
336 337 338 339 340 341 342 343
    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());
kangxiaoshan committed
344
        if (null != contract) {
manxiaoqiang committed
345 346 347 348
            contract.setStatus("executing");
            contractRepository.save(contract);
        }

2  
manxiaoqiang committed
349 350 351
        Account4Web account4Web = account4WebRepository.findByEmail(resource.getEmail());
        account4Web.setStatus("已激活");
        account4WebRepository.save(account4Web);
manxiaoqiang committed
352 353 354 355 356 357

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

        pressMoneyRepository.save(pressMoney);
kangxiaoshan committed
358
        return;
manxiaoqiang committed
359 360 361 362
    }

    @Override
    public PressMoney enablePress(User user, PressMoney resource) {
manxiaoqiang committed
363
        PressMoney pressMoney = pressMoneyRepository.findOne("tkio", resource.getAccountId());
kangxiaoshan committed
364
        if (null == pressMoney) {
manxiaoqiang committed
365 366 367 368 369 370
            resource.setUser(user.getId());
            resource.setModifyTime(new Date());
            resource.setPlatform("tkio");
            resource.setPressStatus(true);
            resource.setDs(DateUtil.getBeforeDays(0));
            pressMoneyRepository.save(resource);
kangxiaoshan committed
371
        } else {
manxiaoqiang committed
372 373 374 375 376 377 378 379 380
            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());
kangxiaoshan committed
381 382 383 384
        if (null != contract) {
            contract.setStatus("stop");
            contractRepository.save(contract);
        }
manxiaoqiang committed
385

2  
manxiaoqiang committed
386 387 388
        Account4Web account4Web = account4WebRepository.findByEmail(resource.getEmail());
        account4Web.setStatus("已禁用");
        account4WebRepository.save(account4Web);
manxiaoqiang committed
389 390 391 392 393

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

396
    @Override
397 398 399
    public Payment pay(User user, Payment resource) {
        resource.setUser(user.getId());
        resource.setPayDate(new Date());
400
        resource.setPlatform("tkio");
401
        resource.setDs(DateUtil.getBeforeDays(0));
manxiaoqiang committed
402 403 404 405 406 407 408 409

        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);
410
        return paymentRepository.save(resource);
kangxiaoshan committed
411

412 413
    }

414 415 416 417
    @Override
    public BackVisit visit(User user, BackVisit resource) {
        resource.setUser(user.getId());
        resource.setVisitDate(new Date());
418
        resource.setPlatform("tkio");
419
        resource.setDs(DateUtil.getBeforeDays(0));
420 421 422
        return backVisitRepository.save(resource);
    }

423 424 425 426 427
    @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<>();
kangxiaoshan committed
428
        for (Account ac : accountList) {
429 430 431 432 433 434 435 436 437 438 439
            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");
kangxiaoshan committed
440
        BigInteger click_sum = accountFlowRestrictService.getTotalNum(startDate, endDate, "'" + appkeyStr + "'", "account_track_flow_restrict", "click_sum");
441 442 443 444 445 446 447 448 449 450 451
        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) {
kangxiaoshan committed
452
        List<Map<String, Object>> result = new ArrayList<>();
453 454
        List<Account> accountList = accountRepository.findByRootParent(account);
        List<Long> idList = new ArrayList<>();
kangxiaoshan committed
455
        for (Account ac : accountList) {
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
            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);
kangxiaoshan committed
473
        if (responseJson.contains("val")) {
474 475 476
            try {
                JSONObject jsonObject = new JSONObject(responseJson);
                JSONArray valArr = jsonObject.getJSONArray("val");
kangxiaoshan committed
477 478
                if (null != valArr && valArr.length() > 0) {
                    for (int i = 0; i < valArr.length(); i++) {
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
                        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<>();
kangxiaoshan committed
501
        for (User u : userList) {
502 503 504 505
            userMap.put(u.getId(), u.getName());
        }
        List<Reminder> list = reminderRepository.findAll(account, startDate, endDate, "tkio");
        if (ValidateUtil.isValid(list)) {
kangxiaoshan committed
506
            for (Reminder re : list) {
507 508 509 510 511 512 513 514 515 516 517 518
                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<>();
kangxiaoshan committed
519
        for (User u : userList) {
520 521 522 523
            userMap.put(u.getId(), u.getName());
        }
        List<BackVisit> list = backVisitRepository.findAll(account, startDate, endDate, "tkio");
        if (ValidateUtil.isValid(list)) {
kangxiaoshan committed
524
            for (BackVisit re : list) {
525 526 527 528 529 530 531 532
                re.setUserName(userMap.get(re.getUser()));
                result.add(re);
            }
        }
        return result;
    }

    @Override
manxiaoqiang committed
533 534
    public List<ContractMoney> findPay(String email, String startDate, String endDate) {
        List<ContractMoney> result = new ArrayList<>();
535 536
        List<User> userList = userRepository.findAll();
        Map<Long, String> userMap = new HashMap<>();
kangxiaoshan committed
537
        for (User u : userList) {
538 539
            userMap.put(u.getId(), u.getName());
        }
kangxiaoshan committed
540 541 542
        List<ContractMoney> list = contractMoneyRepository.findByDs(startDate, endDate, email, "tkio");
        if (ValidateUtil.isValid(list)) {
            for (ContractMoney cm : list) {
manxiaoqiang committed
543 544 545 546 547 548 549 550 551 552 553 554 555
                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<>();
kangxiaoshan committed
556
        for (User u : userList) {
manxiaoqiang committed
557 558 559 560
            userMap.put(u.getId(), u.getName());
        }
        List<PackageType> typeList = packageTypeRepository.findAll();
        Map<Long, String> typeMap = new HashMap<>();
kangxiaoshan committed
561 562
        if (ValidateUtil.isValid(typeList)) {
            for (PackageType s : typeList) {
manxiaoqiang committed
563 564 565
                typeMap.put(s.getId(), s.getPackageName());
            }
        }
kangxiaoshan committed
566 567 568
        List<Contract> contractList = contractRepository.findByPlatformAndEmail("tkio", email, ContractTypeEnum.MAIN.getKey());
        if (ValidateUtil.isValid(contractList)) {
            for (Contract cm : contractList) {
manxiaoqiang committed
569 570 571 572 573 574 575 576 577 578 579 580 581
                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<>();
kangxiaoshan committed
582
        for (User u : userList) {
manxiaoqiang committed
583 584 585 586
            userMap.put(u.getId(), u.getName());
        }
        List<PackageType> typeList = packageTypeRepository.findAll();
        Map<Long, String> typeMap = new HashMap<>();
kangxiaoshan committed
587 588
        if (ValidateUtil.isValid(typeList)) {
            for (PackageType s : typeList) {
manxiaoqiang committed
589 590 591 592 593
                typeMap.put(s.getId(), s.getPackageName());
            }
        }

        List<ContractChange> contractChangeList = contractChangeRepository.findByPlatformAndEmail("tkio", email, startDate, endDate);
kangxiaoshan committed
594 595
        if (ValidateUtil.isValid(contractChangeList)) {
            for (ContractChange cm : contractChangeList) {
manxiaoqiang committed
596 597 598 599
                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);
600 601 602 603
            }
        }
        return result;
    }
604

manxiaoqiang committed
605 606 607 608
    @Override
    public void contractPay(User loginUser, ContractMoney resource) {
        Contract contract = contractRepository.findByCode(resource.getContractCode());
        //增值服务
kangxiaoshan committed
609
        if (contract.getType().equals(ContractTypeEnum.INCREMENT.getKey())) {
manxiaoqiang committed
610
            //回本分析不作操作
kangxiaoshan committed
611
            if (contract.getPriceLevel().longValue() == 3L) {
manxiaoqiang committed
612 613
                return;
            }
2  
manxiaoqiang committed
614
            Crowd crowd = crowdRepository.findOne(resource.getContractCode());
kangxiaoshan committed
615
            if (null != crowd) {
2  
manxiaoqiang committed
616 617 618 619
                crowd.setPayment(1);
                crowdRepository.save(crowd);
            }
            //人群分析
kangxiaoshan committed
620
            if (null == contract.getEndDate()) {
2  
manxiaoqiang committed
621 622
                contract.setStatus("end");
                contractRepository.save(contract);
manxiaoqiang committed
623
            }
2  
manxiaoqiang committed
624 625


kangxiaoshan committed
626
        } else {//基础套餐
manxiaoqiang committed
627
            Account account = accountRepository.findByEmail(resource.getEmail());
kangxiaoshan committed
628
            PressMoney press = pressMoneyRepository.findOnePress("tkio", account.getId());
manxiaoqiang committed
629
            //如果被催款了,恢复状态
kangxiaoshan committed
630
            if (press != null) {
manxiaoqiang committed
631 632 633 634 635 636 637 638 639 640 641
                account.setStatus(1);
                accountRepository.save(account);

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

        }

    }

642

kangxiaoshan committed
643
    public Map<String, Integer> getBackTime() {
manxiaoqiang committed
644
        Map<String, Integer> map = new HashMap<>();
645
        List<BackVisit> all = backVisitRepository.findAllByPlatform("tkio");
kangxiaoshan committed
646 647 648
        if (ValidateUtil.isValid(all)) {
            for (BackVisit bv : all) {
                if (map.containsKey(bv.getEmail())) {
manxiaoqiang committed
649
                    map.put(bv.getEmail(), map.get(bv.getEmail()) + 1);
kangxiaoshan committed
650
                } else {
manxiaoqiang committed
651 652 653 654 655 656 657
                    map.put(bv.getEmail(), 1);
                }
            }
        }
        return map;
    }

manxiaoqiang committed
658

kangxiaoshan committed
659
    public Map<String, List<Contract>> getPay() {
manxiaoqiang committed
660 661
        Map<String, List<Contract>> map = new HashMap<>();
        List<Contract> contractList = contractRepository.findByPlatform("tkio");
kangxiaoshan committed
662 663 664
        if (ValidateUtil.isValid(contractList)) {
            for (Contract pa : contractList) {
                if (map.containsKey(pa.getEmail())) {
manxiaoqiang committed
665 666 667
                    List<Contract> list = map.get(pa.getEmail());
                    list.add(pa);
                    map.put(pa.getEmail(), list);
kangxiaoshan committed
668
                } else {
manxiaoqiang committed
669 670 671
                    List<Contract> list = new TreeList<>();
                    list.add(pa);
                    map.put(pa.getEmail(), list);
manxiaoqiang committed
672 673 674 675 676
                }
            }
        }
        return map;
    }
manxiaoqiang committed
677

manxiaoqiang committed
678
}