ContractServiceImpl.java 96.4 KB
Newer Older
manxiaoqiang committed
1 2
package common.service.impl;

manxiaoqiang committed
3 4
import adi.model.ADIUser;
import adi.service.ADIAccountService;
manxiaoqiang committed
5 6
import common.model.*;
import common.repository.*;
kangxiaoshan committed
7
import common.service.*;
manxiaoqiang committed
8 9 10
import dic.ContractStatusEnum;
import dic.ContractTypeEnum;
import dic.RoleEnum;
kangxiaoshan committed
11
import net.sf.json.JSONArray;
kangxiaoshan committed
12
import org.apache.poi.ss.usermodel.*;
kangxiaoshan committed
13
import org.joda.time.DateTime;
14
import org.joda.time.Days;
kangxiaoshan committed
15
import org.joda.time.format.DateTimeFormat;
kangxiaoshan committed
16 17
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
manxiaoqiang committed
18
import org.springframework.beans.factory.annotation.Autowired;
kangxiaoshan committed
19
import org.springframework.beans.factory.annotation.Qualifier;
kangxiaoshan committed
20
import org.springframework.jdbc.core.JdbcTemplate;
kangxiaoshan committed
21
import org.springframework.jdbc.core.RowMapper;
manxiaoqiang committed
22
import org.springframework.stereotype.Service;
kangxiaoshan committed
23
import org.springframework.util.StringUtils;
kangxiaoshan committed
24
import org.springframework.web.multipart.MultipartFile;
manxiaoqiang committed
25 26
import tkio.model.Account;
import tkio.model.IncrementFlow;
manxiaoqiang committed
27
import tkio.model.PackageType;
manxiaoqiang committed
28 29
import tkio.repository.AccountRepository;
import tkio.repository.IncrementFlowRepository;
manxiaoqiang committed
30
import tkio.repository.PackageTypeRepository;
manxiaoqiang committed
31
import tkio.service.AccountService;
manxiaoqiang committed
32 33 34
import tkio.service.TkioAccountService;
import userio.service.AccountIOService;
import userio.service.IOAccountService;
kangxiaoshan committed
35
import util.DateUtil;
1  
kangxiaoshan committed
36
import util.*;
manxiaoqiang committed
37 38 39 40 41

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
kangxiaoshan committed
42
import java.io.InputStream;
manxiaoqiang committed
43 44
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
manxiaoqiang committed
45
import java.math.BigDecimal;
manxiaoqiang committed
46
import java.math.BigInteger;
kangxiaoshan committed
47 48
import java.sql.ResultSet;
import java.sql.SQLException;
1  
kangxiaoshan committed
49
import java.text.DateFormat;
50
import java.text.DecimalFormat;
1  
kangxiaoshan committed
51
import java.text.SimpleDateFormat;
manxiaoqiang committed
52
import java.util.*;
kangxiaoshan committed
53
import java.util.stream.Collectors;
kangxiaoshan committed
54
import java.util.stream.Stream;
manxiaoqiang committed
55 56 57 58 59

/**
 * Created by mxq on 2018/1/16.
 */
@Service
kangxiaoshan committed
60
public class ContractServiceImpl implements ContractService {
manxiaoqiang committed
61

kangxiaoshan committed
62

kangxiaoshan committed
63 64 65 66
    private static final Map<String, String> CONTRACT_TYPE = new HashMap() {{
        put("0", "首次签约");
        put("1", "续约");
        put("2", "合同变更");
kangxiaoshan committed
67 68 69
    }};
    private static final Map<String, String> CONTRACT_TYPE_NAME = new HashMap() {{
        put("首次签约", "0");
kangxiaoshan committed
70
        put("续签", "1");
kangxiaoshan committed
71
        put("补充协议", "2");
kangxiaoshan committed
72 73
    }};

kangxiaoshan committed
74 75 76 77 78
    public static final Map<String, String> FUNCTION_TYPE = new HashMap() {{
        put("1", "流量赠送");
        put("2", "合同变更记录");
        put("3", "收款/开票记录");
        put("4", "合同管理");
kangxiaoshan committed
79 80
    }};

kangxiaoshan committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
    private static final Map<String, String> SHEET_TITLE = new HashMap() {{
        put("我方签约主体", "my_body_name");
        put("客户签约主体", "customer_body");
        put("行业分类", "trade_type");
        put("合同金额", "money");
        put("客户主账号", "email");
        put("合同编号", "contract_code");
        put("签约类型", "contract_type");
        put("套餐", "price_level");
        put("合同类型", "type_id");
        put("合同开始日期", "start_date");
        put("合同结束日期", "end_date");
        put("签约销售", "sale");
    }};

1  
kangxiaoshan committed
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
    private static final Map<String, String> SHEET_TITLE_RESERVE = new HashMap() {{
        put("my_body_name", "我方签约主体");
        put("customer_body", "客户签约主体");
        put("trade_type", "行业分类");
        put("money", "合同金额");
        put("email", "客户主账号");
        put("contract_code", "合同编号");
        put("contract_type", "签约类型");
        put("price_level", "套餐");
        put("type_id", "合同类型");
        put("start_date", "合同开始日期");
        put("end_date", "合同结束日期");
        put("sale", "签约销售");
    }};

kangxiaoshan committed
111 112 113 114 115 116 117 118
    public static final String UPLOAD_TITLE = "我方签约主体,客户签约主体,行业分类,合同开始日期,合同结束日期," +
            "签约销售,客户主账号,合同编号,签约类型,套餐,合同金额";

    public static final Map<String, String> SHEET_NAMES = new HashMap() {{
        put("TrackingIO", "tkio");
        put("DMP", "dmp");
        put("防作弊卫士", "fake");
        put("ADI", "adi");
kangxiaoshan committed
119 120
        put("ADS", "ads");
        put("ABTEST", "abtest");
kangxiaoshan committed
121 122
    }};

kangxiaoshan committed
123
    public static final Map<String, String> SHEET_NAMES_RESERVE = new HashMap() {{
kangxiaoshan committed
124 125 126 127 128 129
        put("tkio", "TrackingIO");
        put("dmp", "DMP");
        put("fake", "防作弊卫士");
        put("adi", "ADI");
        put("ads", "ADS");
        put("abtest", "ABTEST");
kangxiaoshan committed
130 131
    }};

kangxiaoshan committed
132 133
    Logger logger = LoggerFactory.getLogger(ContractServiceImpl.class);

manxiaoqiang committed
134 135 136 137 138 139 140 141 142 143 144 145
    @Autowired
    ContractRepository contractRepository;
    @Autowired
    ContractBodyRepository contractBodyRepository;
    @Autowired
    Account4WebRepository account4WebRepository;
    @Autowired
    PackageTypeRepository packageTypeRepository;
    @Autowired
    PriceLevelMoneyRepository priceLevelMoneyRepository;
    @Autowired
    UserRepository userRepository;
manxiaoqiang committed
146 147 148 149
    @Autowired
    ContractChangeRepository contractChangeRepository;
    @Autowired
    ContractMoneyRepository contractMoneyRepository;
manxiaoqiang committed
150 151
    @Autowired
    AccountService accountService;
manxiaoqiang committed
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
    @Autowired
    AccountIOService accountIOService;
    @Autowired
    IOAccount4WebRepository ioAccount4WebRepository;
    @Autowired
    ContractIncrementRepository contractIncrementRepository;
    @Autowired
    TkioAccountService tkioAccountService;
    @Autowired
    IOAccountService ioAccountService;
    @Autowired
    AccountRepository accountRepository;
    @Autowired
    UserService userService;
    @Autowired
    IncrementFlowRepository incrementFlowRepository;
manxiaoqiang committed
168 169
    @Autowired
    BPUContractRepository bpuContractRepository;
170
    @Autowired
manxiaoqiang committed
171
    ADIAccountService adiAccountService;
manxiaoqiang committed
172

kangxiaoshan committed
173 174 175 176 177 178
    @Autowired
    TradeTypeRepsitory tradeTypeRepsitory;

    @Autowired
    ContractRelationRepository contractRelationRepository;

kangxiaoshan committed
179 180 181
    @Autowired
    FlowChangeRepository flowChangeRepository;

kangxiaoshan committed
182 183 184 185 186 187 188 189 190
    @Autowired
    ChangeDelDetailRepository changeDelDetailRepository;

    @Autowired
    ChangeDelInfoRepository changeDelInfoRepository;

    @Autowired
    SalesRepository salesRepository;

kangxiaoshan committed
191 192 193
    @Autowired
    PackageBaseRepository packageBaseRepository;

kangxiaoshan committed
194 195 196
    @Autowired
    AuthRepository authRepository;

kangxiaoshan committed
197 198 199
    @Autowired
    AuthService authService;

kangxiaoshan committed
200 201 202
    @Autowired
    JdbcTemplate jdbcTemplate;

kangxiaoshan committed
203

kangxiaoshan committed
204 205 206
    @Autowired
    TransactionUtils transactionUtils;

kangxiaoshan committed
207 208 209
    @Autowired
    ShareIncomeService shareIncomeService;

kangxiaoshan committed
210 211 212
    @Autowired
    QcloudAccountRepository qcloudAccountRepository;

kangxiaoshan committed
213

manxiaoqiang committed
214
    @Override
manxiaoqiang committed
215
    public Map<String, Object> checkAccount(String email, String platfrom) {
manxiaoqiang committed
216
        Map<String, Object> map = new HashMap<>();
manxiaoqiang committed
217
        Account4Web account4Web = null;
kangxiaoshan committed
218
        Account account = null;
manxiaoqiang committed
219
        IOAccount4Web ioAccount4Web = null;
kangxiaoshan committed
220
        ADIUser adiUser = null;
kangxiaoshan committed
221 222
        platfrom = "tkio";

kangxiaoshan committed
223
        if ("tkio".equals(platfrom)) {
kangxiaoshan committed
224 225
            //account4Web = account4WebRepository.findByEmail(email);
            account = accountRepository.findByEmail(email);
kangxiaoshan committed
226 227 228 229 230 231 232 233 234 235 236 237

            if (account == null) {
                QcloudAccount qcloudAccount = qcloudAccountRepository.findByEmail(email);

                if (qcloudAccount != null) {
                    account = new Account();
                    account.setId(qcloudAccount.getId());
                    account.setCompany(qcloudAccount.getCompany());
                    account.setEmail(qcloudAccount.getEmail());
                }
            }

kangxiaoshan committed
238
        } else if ("io".equals(platfrom)) {
manxiaoqiang committed
239
            ioAccount4Web = ioAccount4WebRepository.findByEmail(email);
kangxiaoshan committed
240
        } else if ("adi".equals(platfrom)) {
manxiaoqiang committed
241
            adiUser = adiAccountService.findOne(email);
manxiaoqiang committed
242
        }
kangxiaoshan committed
243
        if (null == account && null == ioAccount4Web && null == adiUser) {
manxiaoqiang committed
244
            map.put("result", 0);
kangxiaoshan committed
245 246
        } else {
            BigInteger integer = contractRepository.countNumByEmail(email, platfrom);
manxiaoqiang committed
247
            map.put("result", 1);
kangxiaoshan committed
248
            if (platfrom.equals("adi")) {
manxiaoqiang committed
249
                map.put("company", adiUser.getCompany());
kangxiaoshan committed
250
            } else {
kangxiaoshan committed
251 252
                // map.put("company", null == account4Web ? ioAccount4Web.getCompany() : account4Web.getCompany());
                map.put("company", account.getCompany());
manxiaoqiang committed
253 254
            }

manxiaoqiang committed
255
            map.put("num", integer.intValue());
manxiaoqiang committed
256
            Contract contract = contractRepository.findByPlatformAndEmailLimitVaild(platfrom, email);
kangxiaoshan committed
257
            if (null == contract) {
manxiaoqiang committed
258
                map.put("status", false);
kangxiaoshan committed
259
            } else {
manxiaoqiang committed
260 261
                map.put("status", true);
            }
manxiaoqiang committed
262
        }
manxiaoqiang committed
263

manxiaoqiang committed
264 265 266
        return map;
    }

manxiaoqiang committed
267 268 269
    @Override
    public Boolean checkTime(String email, String platfrom, String type, String product) {
        Boolean flag = false;
kangxiaoshan committed
270
        if (ContractTypeEnum.MAIN.getKey().equals(type)) {
manxiaoqiang committed
271
            Contract contract = contractRepository.findByPlatformAndEmailLimit1(platfrom, email, type);
kangxiaoshan committed
272
            if (null == contract) {
manxiaoqiang committed
273
                flag = true;
kangxiaoshan committed
274
            } else {
manxiaoqiang committed
275
                String beforeDay = DateUtil.getBeforeDays(180);
kangxiaoshan committed
276
                if (beforeDay.compareTo(contract.getEndDate()) > 0) {
manxiaoqiang committed
277 278 279
                    flag = true;
                }
            }
kangxiaoshan committed
280
        } else {
manxiaoqiang committed
281 282
            ContractIncrement increment = contractIncrementRepository.findByCode(product);
            Contract contract = contractRepository.findByPlatformAndEmailAndPricelevelLimit1(platfrom, email, type, increment.getId());
kangxiaoshan committed
283
            if (null == contract) {
manxiaoqiang committed
284
                flag = true;
kangxiaoshan committed
285
            } else {
manxiaoqiang committed
286 287
                String beforeDay = DateUtil.getBeforeDays(180);
                String endDate = contract.getEndDate() == null ? contract.getDs() : contract.getEndDate();
kangxiaoshan committed
288
                if (beforeDay.compareTo(endDate) > 0) {
manxiaoqiang committed
289 290 291 292 293 294 295
                    flag = true;
                }
            }
        }
        return flag;
    }

manxiaoqiang committed
296
    @Override
kangxiaoshan committed
297
    public List<ContractBody> findBody(String platform, User loginAccount) {
kangxiaoshan committed
298

kangxiaoshan committed
299
        if ("all".equals(platform)) {
1  
kangxiaoshan committed
300
            List<ContractBody> all = contractBodyRepository.findAllCodeDis();
kangxiaoshan committed
301
            return all;
kangxiaoshan committed
302
        } else {
kangxiaoshan committed
303 304

            List<ContractBody> common = null;
kangxiaoshan committed
305
            if (!"abtest".equals(platform) && !"ads".equals(platform)) {
kangxiaoshan committed
306 307 308
                common = contractBodyRepository.findByPlatform("common");
            }

kangxiaoshan committed
309
            List<ContractBody> byPlatform = contractBodyRepository.findByPlatform(platform);
kangxiaoshan committed
310 311 312
            if (common == null) {
                common = new ArrayList<>();
            }
kangxiaoshan committed
313
            common.addAll(byPlatform);
kangxiaoshan committed
314 315 316 317 318 319

            if (RoleEnum.FINANCE.getKey().equals(loginAccount.getRole())) {
                Map<String, Object> filter = authService.getAuthExtends(loginAccount);
                common = common.stream().filter(t -> filter.get(t.getCode()) != null).collect(Collectors.toList());
            }

kangxiaoshan committed
320 321
            return common;
        }
kangxiaoshan committed
322

manxiaoqiang committed
323 324 325 326 327 328
    }

    @Override
    public String getContractCode(String code) {
        BigInteger integer = contractRepository.countNumByDs(DateUtil.getBeforeDays(0));
        String lastCode = "";
kangxiaoshan committed
329
        if (integer.intValue() < 9) {
manxiaoqiang committed
330
            lastCode = "0" + (integer.intValue() + 1);
kangxiaoshan committed
331
        } else {
manxiaoqiang committed
332 333 334 335 336 337
            lastCode = "" + (integer.intValue() + 1);
        }
        String re = code + "-" + DateUtil.getDays2(0) + lastCode;
        return re;
    }

kangxiaoshan committed
338 339 340
    @Override
    public String getContractCode(String code, String platform, String company) {

kangxiaoshan committed
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
//        BigInteger countContract = contractRepository.findcountContract(code);
//
//        String lastCode;
//
//        if("fake".equals(platform)){
//            platform = "FZBWS";
//        }
//
//        int codeInt = countContract.intValue();
//
//        if (codeInt < 9) {
//            lastCode = "0" + (codeInt + 1);
//        } else {
//            lastCode = "" + (codeInt + 1);
//        }
//        return  code + "-" + platform.toUpperCase() + "-" + DateUtil.getDays2(0) + "-" + lastCode;
kangxiaoshan committed
357 358


kangxiaoshan committed
359
        String codeName = contractRepository.findLastCode(code, platform);
kangxiaoshan committed
360
        if ("fake".equals(platform)) {
kangxiaoshan committed
361 362 363
            platform = "FZBWS";
        }

kangxiaoshan committed
364 365
        int codeInt = 0;

kangxiaoshan committed
366 367 368
        if (!StringUtils.isEmpty(codeName)) {

            String[] codeformat = codeName.split("-");
kangxiaoshan committed
369

kangxiaoshan committed
370 371 372 373
            if (codeformat.length == 4) {
                codeInt = Integer.parseInt(codeformat[3]);
            }

kangxiaoshan committed
374 375 376
        }

        String lastCode;
kangxiaoshan committed
377

kangxiaoshan committed
378 379 380 381
        if (codeInt < 9) {
            lastCode = "0" + (codeInt + 1);
        } else {
            lastCode = "" + (codeInt + 1);
kangxiaoshan committed
382
        }
kangxiaoshan committed
383

kangxiaoshan committed
384
        return code + "-" + platform.toUpperCase() + "-" + DateUtil.getDays2(0) + "-" + lastCode;
kangxiaoshan committed
385 386


kangxiaoshan committed
387 388
    }

manxiaoqiang committed
389
    @Override
manxiaoqiang committed
390
    public List findSetmeal(String platform) {
kangxiaoshan committed
391

kangxiaoshan committed
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
//        platform = "tkio";
//
//        List list = new ArrayList();
//        if ("adi".equals(platform)) {
//            for (int i = 1; i < 3; i++) {
//                Map<String, String> packageMap = new HashMap<>();
//                packageMap.put("id", i + "");
//                if (i == 1) {
//                    packageMap.put("packageName", PackageEnum.PROBATION.getValue());
//                } else {
//                    packageMap.put("packageName", PackageEnum.FORMAL.getValue());
//                }
//                list.add(packageMap);
//            }
//        } else {
//            if ("tkio".equals(platform) || "io".equals(platform)) {
////            List<PackageType> packageTypeList = packageTypeRepository.findAll();
//                List<PackageType> packageTypeList = packageTypeRepository.findIsNewAll();
//                for (PackageType p : packageTypeList) {
//                    p.setType("main");
//                    list.add(p);
//                }
//                // 增值套餐
////                List<ContractIncrement> increments = contractIncrementRepository.findAll();
////                list.addAll(increments);
//            } else if ("userdesk".equals(platform) || "dmp".equals(platform) || "fake".equals(platform)) {
//                list = bpuContractRepository.findByProduct(platform);
//            }
//        }
kangxiaoshan committed
421

manxiaoqiang committed
422
        List list = new ArrayList();
kangxiaoshan committed
423

kangxiaoshan committed
424 425 426 427 428
        if ("tkio".equals(platform) || "io".equals(platform)) {
            List<PackageType> packageTypeList = packageTypeRepository.findIsNewAll();
            for (PackageType p : packageTypeList) {
                p.setType("main");
                list.add(p);
manxiaoqiang committed
429
            }
kangxiaoshan committed
430 431

            return list;
kangxiaoshan committed
432 433
        } else {
            List<PackageBase> packageBases = packageBaseRepository.findByPlatAndStatus(platform, 1);
kangxiaoshan committed
434
            return packageBases;
manxiaoqiang committed
435 436
        }

kangxiaoshan committed
437

manxiaoqiang committed
438 439 440 441 442
    }

    @Override
    public List<ContractIncrement> findIncrement() {
        return null;
manxiaoqiang committed
443 444 445
    }

    @Override
kangxiaoshan committed
446
    public Double getRebat(String product, Integer level, Double money) {
manxiaoqiang committed
447
        Double rebat = 1d;
kangxiaoshan committed
448
        try {
manxiaoqiang committed
449
            PriceLevelMoney levelMoney = priceLevelMoneyRepository.getOne(product, level);
kangxiaoshan committed
450 451
            rebat = money * 1.0 / levelMoney.getMoney();
        } catch (Exception e) {
manxiaoqiang committed
452 453 454
            e.printStackTrace();
        }
        return rebat;
manxiaoqiang committed
455 456 457
    }

    @Override
kangxiaoshan committed
458 459
    public List<Sales> getSales() {
        return salesRepository.findAllByStatusOn();
manxiaoqiang committed
460
    }
kangxiaoshan committed
461

manxiaoqiang committed
462 463 464
    @Override
    public Contract build(Contract contract) {
        User user = userRepository.findByEmail(contract.getSaleName());
kangxiaoshan committed
465
        if (null != user) {
manxiaoqiang committed
466 467
            contract.setSale(user.getId());
        }
2  
manxiaoqiang committed
468
        contract.setVirtual(true);
manxiaoqiang committed
469 470 471 472
        Account account = accountRepository.findByEmail(contract.getEmail());
        contract.setCustomerBody(account.getCompany());
        contract.setType("increment");
        contract.setPlatform("tkio");
2  
manxiaoqiang committed
473
        contract.setStartDate(DateUtil.getBeforeDays(0));
manxiaoqiang committed
474 475 476 477 478
        ContractIncrement contractIncrement = contractIncrementRepository.findByCode(contract.getPriceLevelName());
        contract.setPriceLevel(contractIncrement.getId());
        Contract contract1 = create(null, contract);
        return contract1;
    }
kangxiaoshan committed
479

manxiaoqiang committed
480 481
    @Override
    public Contract create(User loginUser, Contract resource) {
kangxiaoshan committed
482

kangxiaoshan committed
483
        if (resource == null) {
kangxiaoshan committed
484 485 486
            return null;
        }

kangxiaoshan committed
487 488
        if (!StringUtils.isEmpty(resource.getContractCode())
                && !ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(resource.getStatus())) {
kangxiaoshan committed
489 490 491 492 493 494 495 496
            Contract contractExist = contractRepository.findByCode(resource.getContractCode().trim());
            if (contractExist != null) {
                contractExist = new Contract();
                // 合同编号已存在
                contractExist.setId(-100L);
                contractExist.setErroMessage("合同编号已存在");
                return contractExist;
            }
kangxiaoshan committed
497 498
        }

499

kangxiaoshan committed
500 501
        resource.setInvoice(0L);
        Long extraFlow = resource.getExtraFlow();
kangxiaoshan committed
502
        if (extraFlow == null) {
kangxiaoshan committed
503 504
            extraFlow = 0L;
        }
kangxiaoshan committed
505
        if (resource.getPayMoney() == null) {
kangxiaoshan committed
506
            resource.setPayMoney(0d);
kangxiaoshan committed
507 508
        }

kangxiaoshan committed
509 510
        resource.setDs(DateUtil.getBeforeDays(0));

kangxiaoshan committed
511
        this.saveIncrementFlow(resource, extraFlow);
kangxiaoshan committed
512

kangxiaoshan committed
513
        this.dealContractStatus(resource, loginUser, "save");
kangxiaoshan committed
514

kangxiaoshan committed
515 516
        if (ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(resource.getStatus())) {
            resource.setStartDate(new DateTime().toString("yyyy-MM-dd"));
kangxiaoshan committed
517 518
        } else {
            resource.setStatus(ContractStatusEnum.NFORMAL.getKey());
kangxiaoshan committed
519 520
        }

kangxiaoshan committed
521 522 523 524 525 526 527 528 529 530 531
        DateTime[] datePoints = new DateTime[]{
                new DateTime(resource.getStartDate()),
                new DateTime(new DateTime().toString("yyyy-MM-dd"))
        };

        if (shareIncomeService.checkLateContract(new DateTime(resource.getStartDate()),
                new DateTime(new DateTime().toString("yyyy-MM-dd")))) {
            resource.setStatus(ContractStatusEnum.LATE.getKey());
        }


kangxiaoshan committed
532
        if (resource.getRelationContract() == null) {
kangxiaoshan committed
533 534 535 536 537
            resource.setRelationContract(-1L);
        }

        if (null != loginUser) {
            resource.setCreateAccount(loginUser.getId());
kangxiaoshan committed
538
            resource.setCreateName(loginUser.getName());
kangxiaoshan committed
539 540 541 542 543
        }

        resource.setCreateTime(new Date());

        //同步修改trackingio的数据
kangxiaoshan committed
544 545 546 547 548 549 550 551 552
//        if (resource.getPlatform().equals("tkio") && resource.getType().equals("main")) {
//            accountService.update(resource);
//        }
//        if (resource.getPlatform().equals("io") && resource.getType().equals("main")) {
//            accountIOService.update(resource);
//        }
//        if (resource.getPlatform().equals("adi")) {
//            adiAccountService.updateAccount(resource);
//        }
kangxiaoshan committed
553

kangxiaoshan committed
554

kangxiaoshan committed
555
        //this.calculateShareIncome(resource);//判断是否计算调整金
kangxiaoshan committed
556

1  
kangxiaoshan committed
557

kangxiaoshan committed
558 559
        resource = contractRepository.save(resource);

kangxiaoshan committed
560
        this.saveContractRelations(resource, resource.getId());
kangxiaoshan committed
561

kangxiaoshan committed
562 563 564 565 566 567 568
        List<String> codes = contractRepository.findContractBodyNames(resource.getCustomerBody(), resource.getContractCode());
        if (!codes.isEmpty()) {
            // 合同编号已存在
            resource.setCustomBodyNames(codes);
            return resource;
        }

kangxiaoshan committed
569 570 571
        return resource;
    }

572
    public void calculateShareIncome(Contract resource) {
kangxiaoshan committed
573 574 575 576 577 578 579 580


        if (!StringUtils.isEmpty(resource.getAdjustmentFundForm())) {
            //表单有输入值 则优先保存该值
            resource.setAdjustmentFund(Long.parseLong(resource.getAdjustmentFundForm()));
            return;
        }

kangxiaoshan committed
581 582 583 584 585 586 587
        DateTime formStart = new DateTime(resource.getStartDate());
        DateTime contractStart = new DateTime(resource.getStartDate());
        DateTime contractEnd = new DateTime(resource.getEndDate());
        if (formStart.getMonthOfYear() != new DateTime().getMonthOfYear()) {
            // 自动计算分摊调整金
            //当录入时间与合同开始时间不在一个月时。自动生成调分摊输入调整金。
            //分摊收入调整金 =  合同金额 * 6% / 合同总天数  *[录入日期前一月最后一日(含) - 合同开始日期]
kangxiaoshan committed
588 589 590 591
            int day1 = Days.daysBetween(contractStart, contractEnd).getDays() + 1;
            int day2 = Days.daysBetween(contractStart, new DateTime().plusMonths(-1).dayOfMonth().withMaximumValue()).getDays() + 1;
            long resultValue = new BigDecimal(resource.getMoney() * (1 - 0.06) / day1 * day2)
                    .setScale(2, BigDecimal.ROUND_HALF_UP)
1  
kangxiaoshan committed
592 593
                    .multiply(new BigDecimal(100)).longValue();
            resource.setAdjustmentFund(resultValue); // 此处为 *100的结果
1  
kangxiaoshan committed
594 595
        } else {
            resource.setAdjustmentFund(0L);
kangxiaoshan committed
596 597 598
        }
    }

kangxiaoshan committed
599

kangxiaoshan committed
600
    private void saveIncrementFlow(Contract resource, Long extraFlow) {
kangxiaoshan committed
601
        if ("main".equals(resource.getType())) {
kangxiaoshan committed
602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
            if (resource.getPlatform().equals("tkio")) {
                if (!(extraFlow.longValue() == 0)) {
                    if (resource.getPlatform().equals("tkio")) {
                        IncrementFlow flow = new IncrementFlow();
                        Account account = accountRepository.findByEmail(resource.getEmail());
                        flow.setAccount(account.getId());
                        flow.setFlow(extraFlow);
                        flow.setEndDate(resource.getEndDate());
                        flow.setStartDate(resource.getStartDate());
                        flow.setContractCode(resource.getContractCode());
                        incrementFlowRepository.save(flow);
                    }
                }
            }
        }
    }


kangxiaoshan committed
620
    private void saveContractRelations(Contract resource, Long contractId) {
kangxiaoshan committed
621 622 623 624
        if (resource.getRelationContract() != null && resource.getRelationContract() > 0) {
            //保存关联合同信息
            ContractRelation relation = new ContractRelation();
            relation.setCreateTime(new Date());
kangxiaoshan committed
625
            relation.setMainContract(contractId);
kangxiaoshan committed
626 627 628
            relation.setRelationId(resource.getRelationContract());
            relation.setPlatform(resource.getPlatform());

kangxiaoshan committed
629 630
            ContractRelation relationOrig = contractRelationRepository.findByRelationData(relation.getMainContract(), relation.getRelationId(), resource.getPlatform());
            if (relationOrig == null) {
kangxiaoshan committed
631 632
                contractRelationRepository.save(relation);
            }
kangxiaoshan committed
633

kangxiaoshan committed
634 635 636 637
            //处理被关联 合同
            Contract contract = contractRepository.findOne(resource.getRelationContract());
            if (contract.getRelationContract() == null || contract.getRelationContract() == -1) {
                contract.setRelationContract(contractId);
kangxiaoshan committed
638
                contract.setRelationCode(resource.getContractCode());
kangxiaoshan committed
639 640 641
                contractRepository.save(contract);
            }

kangxiaoshan committed
642 643
            //设置关联编号
            resource.setRelationCode(contract.getContractCode());
kangxiaoshan committed
644 645

        }
kangxiaoshan committed
646 647 648 649 650 651 652 653 654 655 656 657
    }


    public Contract create_bak(User loginUser, Contract resource) {

        if (resource == null) {
            return null;
        }

        Contract contractExist = contractRepository.findByCodePlatform(resource.getContractCode(), resource.getPlatform());

        if (contractExist != null) {
kangxiaoshan committed
658 659 660 661 662
            // 合同编号已存在
            return null;
        }

        // 老的逻辑
kangxiaoshan committed
663 664 665 666 667
        String contractCode = getContractCode(resource.getMyBodyCode());

        if (!contractCode.equals(resource.getContractCode())) {
            resource.setContractCode(contractCode);
        }
manxiaoqiang committed
668

kangxiaoshan committed
669
        resource.setPayMoney(0d);
manxiaoqiang committed
670
        resource.setInvoice(0L);
manxiaoqiang committed
671
        Long extraFlow = resource.getExtraFlow();
kangxiaoshan committed
672
        resource.setDs(DateUtil.getBeforeDays(0));
2  
manxiaoqiang committed
673

kangxiaoshan committed
674 675 676 677 678
        if (resource.getType().equals("main")) {
            if (resource.getPlatform().equals("tkio")) {
                if (!(extraFlow.longValue() == 0)) {
                    if (resource.getPlatform().equals("tkio")) {
                        IncrementFlow flow = new IncrementFlow();
2  
manxiaoqiang committed
679 680 681 682 683 684 685 686
                        Account account = accountRepository.findByEmail(resource.getEmail());
                        flow.setAccount(account.getId());
                        flow.setFlow(extraFlow);
                        flow.setEndDate(resource.getEndDate());
                        flow.setStartDate(resource.getStartDate());
                        flow.setContractCode(resource.getContractCode());
                        incrementFlowRepository.save(flow);
                    }
2  
manxiaoqiang committed
687 688
                }
            }
manxiaoqiang committed
689 690 691 692 693 694 695
            if (DateUtil.getBeforeDays(0).compareTo(resource.getStartDate()) < 0) {
                resource.setDs(DateUtil.getBeforeDays(0));
                resource.setStatus("wait");
            } else {
                resource.setDs(DateUtil.getBeforeDays(0));
                resource.setStatus("executing");
            }
kangxiaoshan committed
696 697 698 699 700
        } else {
//            resource.setDs(DateUtil.getBeforeDays(0));
//            resource.setStatus("wait");
        }

kangxiaoshan committed
701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
//        if (resource.getRebateMoney() != null) {
//            if (resource.getMoney() == null) {
//                resource.setMoney(0L);
//            }
//
//            if (resource.getRebateMoney().compareTo(BigDecimal.ZERO) < 0) {
//                //未回款
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_NONE.getKey());
//
//            }else if(resource.getRebateMoney().compareTo(new BigDecimal(resource.getMoney()+""))< 0){
//                // 部分回款
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_PART.getKey());
//            }else{
//                // 已回款
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_ALL.getKey());
//            }
//
//        } else {
//            //未回款
//            resource.setStatus(ContractStatusEnum.MONEY_BACK_NONE.getKey());
//        }
kangxiaoshan committed
722 723 724 725 726 727 728 729 730 731 732 733 734

        Double rebat = null;
        if (null != resource.getPriceLevel()) {
            rebat = getRebat(resource.getProduct(), resource.getPriceLevel().intValue(), resource.getMoney());
        } else {
            rebat = getRebat(resource.getProduct(), 0, resource.getMoney());
        }

        BigDecimal bg = new BigDecimal(rebat);
        double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        resource.setRebate(f1);

        if (null != loginUser) {
manxiaoqiang committed
735
            resource.setCreateAccount(loginUser.getId());
kangxiaoshan committed
736
            resource.setCreateName(loginUser.getName());
manxiaoqiang committed
737
        }
manxiaoqiang committed
738
        resource.setCreateTime(new Date());
manxiaoqiang committed
739 740

        //同步修改trackingio的数据
kangxiaoshan committed
741
        if (resource.getPlatform().equals("tkio") && resource.getType().equals("main")) {
manxiaoqiang committed
742 743
            accountService.update(resource);
        }
kangxiaoshan committed
744
        if (resource.getPlatform().equals("io") && resource.getType().equals("main")) {
manxiaoqiang committed
745 746
            accountIOService.update(resource);
        }
kangxiaoshan committed
747
        if (resource.getPlatform().equals("adi")) {
manxiaoqiang committed
748 749
            adiAccountService.updateAccount(resource);
        }
manxiaoqiang committed
750

kangxiaoshan committed
751 752 753 754
        if (resource.getType().equals(ContractTypeEnum.MAIN.getKey())
                || (resource.getType().equals(ContractTypeEnum.INCREMENT.getKey()) && resource.getPriceLevel().equals(1L))) {
            List<Contract> contractList = contractRepository.findByPlatformAndEmail(resource.getPlatform(), resource.getEmail(), resource.getType());
            if (ValidateUtil.isValid(contractList)) {
manxiaoqiang committed
755
                List<Contract> list = new ArrayList<>();
kangxiaoshan committed
756 757 758 759 760
                for (Contract contract : contractList) {
                    if (contract.getType().equals(ContractTypeEnum.MAIN.getKey())
                            || (contract.getType().equals(ContractTypeEnum.INCREMENT.getKey()) && contract.getPriceLevel().equals(1L))) {
                        if (contract.getStatus().equals(ContractStatusEnum.EXECUTING.getKey())
                                || contract.getStatus().equals(ContractStatusEnum.WAIT.getKey())) {
manxiaoqiang committed
761 762 763 764 765 766 767 768 769 770
                            contract.setStatus(ContractStatusEnum.CANCEL.getKey());
                        }
                        list.add(contract);
                    }

                }
                contractRepository.save(contractList);
            }
        }

kangxiaoshan committed
771
        resource = contractRepository.save(resource);
kangxiaoshan committed
772 773


kangxiaoshan committed
774
        if (resource.getRelationContract() != null && resource.getRelationContract() > 0) {
kangxiaoshan committed
775 776 777 778 779 780 781 782 783 784 785
            //保存关联合同信息
            ContractRelation relation = new ContractRelation();
            relation.setCreateTime(new Date());
            relation.setMainContract(resource.getId());
            relation.setRelationId(resource.getRelationContract());
            relation.setPlatform(resource.getPlatform());
            contractRelationRepository.save(relation);

        }

        return resource;
manxiaoqiang committed
786 787 788
    }

    @Override
kangxiaoshan committed
789
    public Contract update(User loginUser, Contract resource, String ip) {
kangxiaoshan committed
790

kangxiaoshan committed
791
        Contract contract = contractRepository.findOne(resource.getId());
kangxiaoshan committed
792

kangxiaoshan committed
793
        if (resource.getContractCode() != null && !resource.getContractCode().equals(contract.getContractCode())) {
794
            Contract contractExist = contractRepository.findByCode(resource.getContractCode().trim());
kangxiaoshan committed
795 796 797 798 799 800
            if (contractExist != null) {
                // 合同编号已存在
                contractExist = new Contract();
                contractExist.setId(-100L);
                contractExist.setErroMessage("合同编号已存在");
                return contractExist;
manxiaoqiang committed
801
            }
manxiaoqiang committed
802 803
        }

kangxiaoshan committed
804
        this.dealContractStatus(resource, loginUser, "update");
manxiaoqiang committed
805

kangxiaoshan committed
806
        this.saveContractRelations(resource, contract.getId());
kangxiaoshan committed
807

kangxiaoshan committed
808 809 810 811 812 813 814 815 816 817 818 819 820
        ChangeDelInfo delInfo = new ChangeDelInfo();

        delInfo.setModifyId(loginUser.getId());
        delInfo.setModifyAccount(loginUser.getName());
        delInfo.setEmail(contract.getEmail());
        delInfo.setDs(new DateTime().toString("yyyy-MM-dd"));
        delInfo.setModifyType(2);
        delInfo.setContractCode(contract.getContractCode());
        delInfo.setCreatTime(new Date());
        delInfo.setFunction(4);
        delInfo.setDetail("修改详情");
        delInfo.setIp(ip);

kangxiaoshan committed
821

kangxiaoshan committed
822
        List<ChangeDelDetail> updateFields = this.changeDelInfoForContract(contract, resource, delInfo.getId(), "");
kangxiaoshan committed
823 824 825 826 827 828 829 830 831 832

        if (updateFields != null && updateFields.size() > 0) {
            changeDelInfoRepository.save(delInfo);

            for (ChangeDelDetail delDetail : updateFields) {
                delDetail.setParentId(delInfo.getId());
            }

            changeDelDetailRepository.save(updateFields);
        }
kangxiaoshan committed
833

kangxiaoshan committed
834 835 836
        resource.setCreateName(contract.getCreateName());
        resource.setCreateAccount(contract.getCreateAccount());
        resource.setCreateTime(contract.getCreateTime());
kangxiaoshan committed
837
        resource.setModifyTime(new Date());
kangxiaoshan committed
838 839 840 841 842
        resource.setDs(contract.getDs());
        resource.setProduct(contract.getProduct());

        if (null != loginUser) {
            resource.setModifyAccount(loginUser.getId());
manxiaoqiang committed
843
        }
kangxiaoshan committed
844

kangxiaoshan committed
845 846 847 848 849 850 851 852
        if (ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(contract.getStatus())) {
            ContractMoney contractMoney = contractMoneyRepository.findOne(contract.getFirstBackId());
            if (contractMoney != null) {
                contractMoney.setContractCode(resource.getContractCode());
                contractMoneyRepository.save(contractMoney);
            }
        }

kangxiaoshan committed
853
        resource.setStatus(contract.getStatus());
kangxiaoshan committed
854

kangxiaoshan committed
855
        //this.calculateShareIncome(resource);
kangxiaoshan committed
856

kangxiaoshan committed
857
        resource.setId(contract.getId());
manxiaoqiang committed
858

kangxiaoshan committed
859
        return contractRepository.save(resource);
kangxiaoshan committed
860

kangxiaoshan committed
861 862
    }

kangxiaoshan committed
863
    private List<ChangeDelDetail> changeDelInfoForContract(Contract byfind, Contract resource, Long pid, String ip) {
kangxiaoshan committed
864 865

        List<ChangeDelDetail> delDetailsList = new ArrayList<>();
kangxiaoshan committed
866
        String contractCode = byfind.getContractCode();
kangxiaoshan committed
867 868 869 870 871 872
        this.dealChangeInfoDetail(byfind.getCustomerBody(), resource.getCustomerBody(),
                "客户签约主体", "customerBody", pid, delDetailsList, byfind);
        this.dealChangeInfoDetail(byfind.getCustomerShort(), resource.getCustomerShort(),
                "客户简称", "customerShort", pid, delDetailsList, byfind);
        this.dealChangeInfoDetail(byfind.getCustomerThird(), resource.getCustomerThird(),
                "第三方签约主体", "customerThird", pid, delDetailsList, byfind);
kangxiaoshan committed
873 874 875

        if (byfind.getTradeType() != resource.getTradeType()) {
            List<TradeType> types = tradeTypeRepsitory.findByTwoId(byfind.getTradeType(), resource.getTradeType());
kangxiaoshan committed
876 877 878
            Map<String, String> dataDic = new HashMap();
            for (TradeType tradeType : types) {
                dataDic.put(tradeType.getId().toString(), tradeType.getName());
kangxiaoshan committed
879
            }
kangxiaoshan committed
880 881
            String nameFind = dataDic.get(byfind.getTradeType() + "");
            String nameResource = dataDic.get(resource.getTradeType() + "");
kangxiaoshan committed
882 883
            this.dealChangeInfoDetail(nameFind == null ? "无" : nameFind, nameResource == null ? "无" : nameResource,
                    "行业分类", "tradeType", pid, delDetailsList, byfind);
kangxiaoshan committed
884 885
        }

kangxiaoshan committed
886 887
        this.dealChangeInfoDetail(byfind.getStartDate(), resource.getStartDate(),
                "合同开始日期", "startDate", pid, delDetailsList, byfind);
kangxiaoshan committed
888

kangxiaoshan committed
889 890
        this.dealChangeInfoDetail(byfind.getEndDate(), resource.getEndDate(),
                "合同结束日期", "startDate", pid, delDetailsList, byfind);
kangxiaoshan committed
891 892 893


        if (byfind.getSale() != resource.getSale()) {
kangxiaoshan committed
894 895 896
            List<Sales> sales = salesRepository.findByTwoId(byfind.getSale(), resource.getSale());
            this.dealChangeInfoDetail(sales.get(0).getName(), sales.get(1).getName(),
                    "签约销售", "sale", pid, delDetailsList, byfind);
kangxiaoshan committed
897 898
        }

kangxiaoshan committed
899 900 901
        this.dealChangeInfoDetail(byfind.getExtraFlow() == null ? "" : byfind.getExtraFlow().toString(),
                resource.getExtraFlow() == null ? "" : resource.getExtraFlow().toString(),
                "赠送流量", "extraFlow", pid, delDetailsList, byfind);
kangxiaoshan committed
902

kangxiaoshan committed
903 904
        this.dealChangeInfoDetail(byfind.getEmail(), resource.getEmail(),
                "客户主账号", "startDate", pid, delDetailsList, byfind);
kangxiaoshan committed
905 906 907

        this.dealChangeInfoDetail(CONTRACT_TYPE.get(byfind.getContractType()),
                CONTRACT_TYPE.get(resource.getContractType()),
kangxiaoshan committed
908
                "签约类型", "startDate", pid, delDetailsList, byfind);
kangxiaoshan committed
909

kangxiaoshan committed
910 911 912
        this.dealChangeInfoDetail(byfind.getDiscountTimeLong() == null ? "" : byfind.getDiscountTimeLong().toString(),
                resource.getDiscountTimeLong() == null ? "" : resource.getDiscountTimeLong().toString(),
                "赠送时长", "discountTimeLong", pid, delDetailsList, byfind);
kangxiaoshan committed
913

kangxiaoshan committed
914 915 916
        this.dealChangeInfoDetail(byfind.getRelationCode() == null ? "无" : byfind.getRelationCode(),
                resource.getRelationCode() == null ? "无" : resource.getRelationCode(),
                "关联合同", "relationCode", pid, delDetailsList, byfind);
kangxiaoshan committed
917

kangxiaoshan committed
918 919
        return delDetailsList;

kangxiaoshan committed
920 921 922

    }

kangxiaoshan committed
923 924
    private void dealChangeInfoDetail(String before, String now, String delDetailinfo, String fildeName,
                                      Long pid, List<ChangeDelDetail> delDetails, Contract contract) {
kangxiaoshan committed
925 926 927 928 929 930 931

        ChangeDelDetail delDetail = new ChangeDelDetail();
        delDetail.setFiledName(fildeName);
        delDetail.setDetail(delDetailinfo);
        delDetail.setCreatTime(new Date());
        delDetail.setItem("合同修改");
        delDetail.setParentId(pid);
kangxiaoshan committed
932 933
        delDetail.setContractCode(contract.getContractCode());
        delDetail.setEmail(contract.getEmail());
kangxiaoshan committed
934 935 936 937 938 939 940 941 942 943 944 945 946 947

        if (before != null && !before.equals(now)) {
            delDetail.setBeforeValue(before);
            delDetail.setAfterValue(now == null ? "" : now);
            delDetails.add(delDetail);
        } else {
            if (now != null && !now.equals(before)) {
                delDetail.setBeforeValue(before == null ? "" : before);
                delDetail.setAfterValue(now);
                delDetails.add(delDetail);
            }
        }
    }

kangxiaoshan committed
948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015

    public Contract update_bak(User loginUser, Contract resource) {
//        Map<Long, String> packageMap = getPackageMap();
//        Map<Long, String> saleMap = getSaleMap();
//        Contract contract = contractRepository.findOne(resource.getId());
//
//        ContractChange cc = new ContractChange();
//        cc.setType("update");
//        cc.setUser(loginUser.getId());
//        cc.setDs(DateUtil.getBeforeDays(0));
//        cc.setContent("");
//        cc.setEmail(contract.getEmail());
//        cc.setCompany(contract.getCustomerBody());
//        cc.setContractCode(contract.getContractCode());
//        this.dealContractStatus(resource,loginUser,"update");


//        if (!resource.getStartDate().equals(contract.getStartDate())) {
//            cc.setContent(cc.getContent() + "开始时间变更 : " + contract.getStartDate() + "-->" + resource.getStartDate());
//            contract.setStartDate(resource.getStartDate());
////            if(DateUtil.getBeforeDays(0).compareTo(resource.getStartDate()) < 0){
////                contract.setStatus("wait");
////            }else{
////                contract.setStatus("executing");
////            }
//        }
//        if (!resource.getEndDate().equals(contract.getEndDate())) {
//            cc.setContent(cc.getContent() + "   结束时间变更 : " + contract.getEndDate() + "-->" + resource.getEndDate());
//            contract.setEndDate(resource.getEndDate());
//        }
//
//        boolean newRebat = false;
//        if (contract.getType().equals(ContractTypeEnum.MAIN.getKey()) && null != resource.getPriceLevel()) {
//            if (!resource.getPriceLevel().equals(contract.getPriceLevel())) {
//                cc.setContent(cc.getContent() + "  套餐变更:" + packageMap.get(contract.getPriceLevel()) + "-->" + packageMap.get(resource.getPriceLevel()));
//                newRebat = true;
//                contract.setPriceLevel(resource.getPriceLevel());
//            }
//        }
//
//        if (!resource.getMoney().equals(contract.getMoney())) {
//            cc.setContent(cc.getContent() + "   金额变更: " + contract.getMoney() + "-->" + resource.getMoney());
//            newRebat = true;
//            contract.setMoney(resource.getMoney());
//        }
//
//        if (!resource.getRebateMoney().equals(contract.getRebateMoney())) {
//            cc.setContent(cc.getContent() + "  回款金额变更: " + contract.getMoney() + "-->" + resource.getMoney());
//            newRebat = true;
//            contract.setMoney(resource.getMoney());
//        }
//
//        if (!resource.getSale().equals(contract.getSale())) {
//            cc.setContent(cc.getContent() + "销售变更:" + saleMap.get(contract.getSale()) + "-->" + saleMap.get(resource.getSale()));
//            contract.setSale(resource.getSale());
//        }
//
////        if (newRebat && !"adi".equals(contract.getPlatform())) {
////            Double rebat = getRebat(contract.getProduct(), contract.getPriceLevel().intValue(), contract.getMoney());
////            BigDecimal bg = new BigDecimal(rebat);
////            double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//////            contract.setRebate(f1);
////        }
//
//        if (!resource.getSale().equals(contract.getSale())) {
//            cc.setContent(cc.getContent() + "销售变更:" + saleMap.get(contract.getSale()) + "-->" + saleMap.get(resource.getSale()));
//            contract.setSale(resource.getSale());
//        }
kangxiaoshan committed
1016

kangxiaoshan committed
1017 1018
//        cc.setPlatform(contract.getPlatform());
//        contractChangeRepository.save(cc);
manxiaoqiang committed
1019

manxiaoqiang committed
1020
        //同步修改trackingio的数据
kangxiaoshan committed
1021 1022 1023 1024 1025 1026 1027 1028 1029
//        if (contract.getPlatform().equals("tkio") && resource.getType().equals("main")) {
//            accountService.update(contract);
//        }
//        if (contract.getPlatform().equals("io") && resource.getType().equals("main")) {
//            accountIOService.update(contract);
//        }
//        if (contract.getPlatform().equals("adi")) {
//            adiAccountService.updateAccount(contract);
//        }
manxiaoqiang committed
1030

kangxiaoshan committed
1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053
//        if (contract.getPlatform().equals("tkio")) {
//            if (contract.getType().equals("main")) {
//                IncrementFlow flow = incrementFlowRepository.findOne(resource.getContractCode());
//                if (null != flow) {
//                    flow.setEndDate(resource.getEndDate());
//                    flow.setStartDate(resource.getStartDate());
//                    if (contract.getExtraFlow() != resource.getExtraFlow()) {
//                        flow.setFlow(resource.getExtraFlow());
//                        incrementFlowRepository.save(flow);
//                    }
//                } else if (resource.getExtraFlow().longValue() > 0) {
//                    IncrementFlow flow1 = new IncrementFlow();
//                    Account account = accountRepository.findByEmail(contract.getEmail());
//                    flow1.setAccount(account.getId());
//                    flow1.setFlow(resource.getExtraFlow());
//                    flow1.setEndDate(resource.getEndDate());
//                    flow1.setStartDate(resource.getStartDate());
//                    flow1.setContractCode(resource.getContractCode());
//                    incrementFlowRepository.save(flow1);
//                }
//            }
//
//        }
manxiaoqiang committed
1054

kangxiaoshan committed
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072
//        contract.setStatus(resource.getStatus());
//        contract.setExtraFlow(resource.getExtraFlow());
//        contract.setTradeType(resource.getTradeType());
//        contract.setInvoiceMoney(resource.getInvoiceMoney());
//        contract.setRelationContract(resource.getRelationContract());
//        contract.setRebateMoney(resource.getRebateMoney());
//        contract.setDiscountTimeLong(resource.getDiscountTimeLong());
//
//        contract.setModifyTime(new Date());
//        if (null != loginUser) {
//            resource.setModifyAccount(loginUser.getId());
//        }
//
//
//        this.saveContractRelations(resource,contract.getId());
//
//        return contractRepository.save(contract);
        return null;
manxiaoqiang committed
1073 1074
    }

kangxiaoshan committed
1075

kangxiaoshan committed
1076
    private void dealContractStatus(Contract resource, User loginUser, String type) {
kangxiaoshan committed
1077

kangxiaoshan committed
1078 1079 1080

        ContractMoney money = new ContractMoney();

kangxiaoshan committed
1081
        if (resource.getPayMoney() != null) {
kangxiaoshan committed
1082

kangxiaoshan committed
1083
            if (resource.getMoney() == null) {
kangxiaoshan committed
1084
                resource.setMoney(0d);
kangxiaoshan committed
1085 1086
            }

kangxiaoshan committed
1087 1088
            if (ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(resource.getStatus())) {

kangxiaoshan committed
1089 1090
                resource.setStatus(ContractStatusEnum.MONEY_BACK_FIRST.getKey());
                //记录收款记录
kangxiaoshan committed
1091

kangxiaoshan committed
1092
                money.setType("pay");
kangxiaoshan committed
1093
                money = saveContractMoney(money, loginUser, resource, type);
kangxiaoshan committed
1094

kangxiaoshan committed
1095
            } else if (resource.getPayMoney().longValue() <= 0) {
kangxiaoshan committed
1096
                //未回款
kangxiaoshan committed
1097 1098
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_NONE.getKey());
                resource.setBackStatus(1);
kangxiaoshan committed
1099

kangxiaoshan committed
1100
            } else if (resource.getPayMoney().longValue() < resource.getMoney().longValue()) {
kangxiaoshan committed
1101
                // 部分回款
kangxiaoshan committed
1102 1103
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_PART.getKey());
                resource.setBackStatus(2);
kangxiaoshan committed
1104 1105 1106

                //记录收款记录
                money.setType("pay");
kangxiaoshan committed
1107
                money = saveContractMoney(money, loginUser, resource, type);
kangxiaoshan committed
1108 1109


kangxiaoshan committed
1110
            } else {
kangxiaoshan committed
1111
                // 已回款
kangxiaoshan committed
1112 1113
//                resource.setStatus(ContractStatusEnum.MONEY_BACK_ALL.getKey());
                resource.setBackStatus(3);
kangxiaoshan committed
1114
                money.setType("pay");
kangxiaoshan committed
1115
                money = saveContractMoney(money, loginUser, resource, type);
kangxiaoshan committed
1116 1117
            }

kangxiaoshan committed
1118

kangxiaoshan committed
1119 1120
        } else {
            //未回款
kangxiaoshan committed
1121 1122
            resource.setBackStatus(1);
//            resource.setStatus(ContractStatusEnum.MONEY_BACK_NONE.getKey());
kangxiaoshan committed
1123 1124
        }

kangxiaoshan committed
1125
        if (money.getId() != null) {
kangxiaoshan committed
1126
            resource.setFirstBackId(money.getId());
kangxiaoshan committed
1127
        } else {
kangxiaoshan committed
1128 1129 1130
            resource.setFirstBackId(0L);
        }

kangxiaoshan committed
1131
        if (resource.getPayMoney() == null) {
kangxiaoshan committed
1132
            resource.setPayMoney(0d);
kangxiaoshan committed
1133 1134 1135 1136
        }

        if (resource.getInvoiceMoney() == null) {
            resource.setInvoiceMoney(new BigDecimal(0));
kangxiaoshan committed
1137
        } else {
kangxiaoshan committed
1138 1139
            // 记录发票记录
            money.setType("invoice");
kangxiaoshan committed
1140
            saveContractMoney(money, loginUser, resource, type);
kangxiaoshan committed
1141 1142 1143 1144 1145 1146 1147 1148 1149
        }

        if (resource.getDiscountTimeLong() == null) {
            resource.setDiscountTimeLong(0L);
        }

        if (resource.getExtraFlow() == null) {
            resource.setExtraFlow(0L);
        }
kangxiaoshan committed
1150

kangxiaoshan committed
1151
        if (resource.getDiscountTimeLong() > 0 || resource.getExtraFlow() > 0) {
kangxiaoshan committed
1152
            //记录优惠信息
kangxiaoshan committed
1153
            saveFlowChange(resource, loginUser, type, resource.getDiscountTimeLong(), resource.getExtraFlow());
kangxiaoshan committed
1154
        }
kangxiaoshan committed
1155

kangxiaoshan committed
1156 1157 1158 1159 1160
        if (!ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(resource.getStatus())) {
            //处理合同编号
            resource.setCodeNum(Integer.parseInt(resource.getContractCode().split("-")[3]));

        }
kangxiaoshan committed
1161

kangxiaoshan committed
1162 1163 1164 1165
    }


    //保存开票收款记录
kangxiaoshan committed
1166
    private ContractMoney saveContractMoney(ContractMoney money, User loginUser, Contract contract, String type) {
kangxiaoshan committed
1167

kangxiaoshan committed
1168
        if (!"save".equals(type)) {
kangxiaoshan committed
1169
            return money;
kangxiaoshan committed
1170 1171
        }

kangxiaoshan committed
1172
        if (ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(contract.getStatus())) {
kangxiaoshan committed
1173
            money.setMoney(contract.getPayMoney());
kangxiaoshan committed
1174
        } else if (money.getType().equals("pay")) {
kangxiaoshan committed
1175
            money.setMoney(contract.getMoney());
kangxiaoshan committed
1176
        } else {
kangxiaoshan committed
1177
            money.setMoney(contract.getInvoiceMoney().doubleValue());
kangxiaoshan committed
1178 1179
        }

kangxiaoshan committed
1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191

        money.setSalse(contract.getSale());
        money.setPriceLevel(contract.getPriceLevel());

//        if(ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(contract.getStatus())){
//            money.setCompany(contract.getMyBodyName());
//        }else{
//            money.setCompany(contract.getCustomerBody());
//        }

        money.setCompany(contract.getCustomerBody());

kangxiaoshan committed
1192 1193 1194 1195 1196 1197 1198 1199 1200 1201
        money.setContractCode(contract.getContractCode());
        money.setPlatform(contract.getPlatform());
        money.setEmail(contract.getEmail());

        money.setPlatform(contract.getPlatform());
        money.setCreateAccount(loginUser.getId());
        money.setCreateTime(new Date());
        money.setUser(loginUser.getId());
        money.setCreateName(loginUser.getName());
        money.setDs(new DateTime().toString("yyyy-MM-dd"));
kangxiaoshan committed
1202
        money = contractMoneyRepository.save(money);
kangxiaoshan committed
1203
        return money;
kangxiaoshan committed
1204
    }
kangxiaoshan committed
1205

kangxiaoshan committed
1206
    // 保存优惠流量 优惠时长 记录
kangxiaoshan committed
1207
    private void saveFlowChange(Contract contract, User loginUser, String type, Long discountTimeLong, Long extraFlow) {
kangxiaoshan committed
1208

kangxiaoshan committed
1209
        if (!"save".equals(type)) {
kangxiaoshan committed
1210 1211 1212
            return;
        }

kangxiaoshan committed
1213
        FlowChange change = new FlowChange();
kangxiaoshan committed
1214 1215
        change.setDiscountFlow(extraFlow);
        change.setDiscountTimeLong(discountTimeLong);
kangxiaoshan committed
1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228
        change.setAddDate(new DateTime().toString("yyyy-MM-dd"));
        change.setAddTime(new Date());
        change.setCompany(contract.getMyBodyName());
        change.setContractCode(contract.getContractCode());
        change.setDelFlag(0);
        change.setEmail(contract.getEmail());
        change.setModifyUname(loginUser.getName());
        change.setModifyUser(loginUser.getId());
        flowChangeRepository.save(change);

    }


kangxiaoshan committed
1229 1230 1231 1232 1233
    /**
     * @param loginAccount
     * @param startDate
     * @param endDate
     * @param platform
kangxiaoshan committed
1234
     * @param contractId   用于 获取关联合同列表
kangxiaoshan committed
1235 1236
     * @return
     */
manxiaoqiang committed
1237
    @Override
kangxiaoshan committed
1238
    public List<Contract> findAll(User loginAccount, String startDate, String endDate, String platform, String contractId) {
manxiaoqiang committed
1239
        List<Contract> result = new ArrayList<>();
kangxiaoshan committed
1240

kangxiaoshan committed
1241
        List<String> platforms = new ArrayList<>();
kangxiaoshan committed
1242
        Map<String, String> idsDic = new HashMap<>();
kangxiaoshan committed
1243
        platforms.add(platform);
kangxiaoshan committed
1244

kangxiaoshan committed
1245
        if (!StringUtils.isEmpty(contractId)) {
kangxiaoshan committed
1246
            //获取 关联合同列表
kangxiaoshan committed
1247 1248
            List<String> conIds = new ArrayList<>();
            conIds.add(contractId);
kangxiaoshan committed
1249
            this.getContractRelationIds(conIds, idsDic);
kangxiaoshan committed
1250
            idsDic.remove(contractId);
kangxiaoshan committed
1251
            if ("fake".equals(platform)) {
kangxiaoshan committed
1252 1253
                platforms.add("tkio");
            }
kangxiaoshan committed
1254 1255
        }

kangxiaoshan committed
1256 1257
        List<Contract> contractList = new ArrayList<>();

kangxiaoshan committed
1258
        List<String> ids = new ArrayList<>(idsDic.keySet());
kangxiaoshan committed
1259

kangxiaoshan committed
1260
        Auth auth = authRepository.findByUser(loginAccount.getId());
manxiaoqiang committed
1261

kangxiaoshan committed
1262
        if (RoleEnum.FINANCE.getKey().equals(loginAccount.getRole())) {
kangxiaoshan committed
1263
            //财务  按签约主体查看
kangxiaoshan committed
1264
            List bodyids = JSONArray.fromObject(auth.getAuthExtend());
kangxiaoshan committed
1265

kangxiaoshan committed
1266 1267 1268
            if (!StringUtils.isEmpty(contractId)) {

                if (ids != null && ids.size() > 0) {
kangxiaoshan committed
1269
                    contractList = contractRepository.findByDsContractBody(startDate, endDate, platforms, bodyids, ids);
kangxiaoshan committed
1270 1271
                }
            } else {
kangxiaoshan committed
1272
                contractList = contractRepository.findByDsContractBody(startDate, endDate, platform, bodyids);
manxiaoqiang committed
1273 1274
            }

kangxiaoshan committed
1275
        } else if (RoleEnum.SALSEMAN.getKey().equals(loginAccount.getRole())) {
kangxiaoshan committed
1276
            //销售 按签约合同人查看
kangxiaoshan committed
1277

kangxiaoshan committed
1278
//            List salseid =  Arrays.asList(loginAccount.getAuthExtend().split(","));
kangxiaoshan committed
1279
            List salseid = JSONArray.fromObject(auth.getAuthExtend());
kangxiaoshan committed
1280

kangxiaoshan committed
1281
            if (!StringUtils.isEmpty(contractId)) {
kangxiaoshan committed
1282

kangxiaoshan committed
1283
                if (ids != null && ids.size() > 0) {
kangxiaoshan committed
1284
                    contractList = contractRepository.findByDsContractSalse(startDate, endDate, platforms, salseid, ids);
kangxiaoshan committed
1285
                }
kangxiaoshan committed
1286
            } else {
kangxiaoshan committed
1287
                contractList = contractRepository.findByDsContractSalse(startDate, endDate, platform, salseid);
kangxiaoshan committed
1288
            }
kangxiaoshan committed
1289

kangxiaoshan committed
1290
        } else {
kangxiaoshan committed
1291
            if (!StringUtils.isEmpty(contractId)) {
kangxiaoshan committed
1292

kangxiaoshan committed
1293
                if (ids != null && ids.size() > 0) {
kangxiaoshan committed
1294
                    contractList = contractRepository.findByDsRelation(startDate, endDate, platforms, ids);
kangxiaoshan committed
1295
                }
kangxiaoshan committed
1296
            } else {
kangxiaoshan committed
1297 1298
                contractList = contractRepository.findByDs(startDate, endDate, platform);
            }
manxiaoqiang committed
1299 1300
        }

kangxiaoshan committed
1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337

//        if (loginAccount.getRole().equals(RoleEnum.SOUTH_BUSSINUSS.getKey()) || loginAccount.getRole().equals(RoleEnum.NORTH_BUSSINUSS.getKey())) {
//
//            List<User> userList = userService.findAllSons(loginAccount.getId());
//            List<Long> idList = new ArrayList<>();
//            idList.add(loginAccount.getId());
//            for (User u : userList) {
//                idList.add(u.getId());
//            }
//
////            contractList = contractRepository.findByDsAndRoile(startDate, endDate, platfrom, idList);
//
//
//            if (!StringUtils.isEmpty(contractId)) {
//                //查看关联合同
//                if (ids != null && ids.size() > 0) {
//                    contractList = contractRepository.findByDsAndRoileRelation(startDate, endDate, platforms, idList, ids);
//                }
//
//            } else {
//                contractList = contractRepository.findByDsAndRoile(startDate, endDate, platform, idList);
//            }
//
//
//        } else {
////            contractList = contractRepository.findByDs(startDate, endDate, platform);
//
//            if (!StringUtils.isEmpty(contractId)) {
//                if (ids != null && ids.size() > 0) {
//                    contractList = contractRepository.findByDsRelation(startDate, endDate, platforms, ids);
//                }
//            } else {
//                contractList = contractRepository.findByDs(startDate, endDate, platform);
//            }
//
//        }

kangxiaoshan committed
1338 1339
        Map<String, String> saleMap = new HashMap();

kangxiaoshan committed
1340
        Map<String, PackageType> typeMap = new HashMap();
kangxiaoshan committed
1341 1342 1343 1344 1345 1346

        Map<String, PackageBase> packageBaseMap = new HashMap<>();

        // 获取字典数据
        this.getDicMapDatas(saleMap, typeMap, null, null, packageBaseMap, platform);

1  
kangxiaoshan committed
1347 1348
        Map<String, String> bodyMap = contractBodyRepository.findAllCodeDis().stream().collect(Collectors.toMap(ContractBody::getCode, ContractBody::getName));

1  
kangxiaoshan committed
1349
        Map<String, String> tradeTypeMap = tradeTypeRepsitory.findAll().stream().collect(Collectors.toMap(v -> v.getId().toString(), v -> v.getName()));
kangxiaoshan committed
1350

kangxiaoshan committed
1351 1352
        if (ValidateUtil.isValid(contractList)) {
            for (Contract c : contractList) {
1  
kangxiaoshan committed
1353
                c.setMyBodyName(bodyMap.get(c.getMyBodyCode()));
kangxiaoshan committed
1354
                c.setTradeName(tradeTypeMap.get(c.getTradeType() + ""));
kangxiaoshan committed
1355
                c.setDs(new DateTime(c.getCreateTime()).toString("yyyy-MM-dd"));
1  
kangxiaoshan committed
1356

kangxiaoshan committed
1357
                if ((c.getExtraFlow() != null && c.getExtraFlow() > 0) ||
kangxiaoshan committed
1358 1359 1360 1361 1362 1363 1364 1365
                        (c.getDiscountTimeLong() != null && c.getDiscountTimeLong() > 0)) {

                    c.setHasDiscount("有");

                } else {
                    c.setHasDiscount("无");
                }

kangxiaoshan committed
1366
                if (c.getRelationContract() == null) {
kangxiaoshan committed
1367 1368 1369
                    c.setRelationContract(-1L);
                }

kangxiaoshan committed
1370
                if (ContractStatusEnum.MONEY_BACK_FIRST.getKey().equals(c.getStatus())) {
kangxiaoshan committed
1371 1372 1373
                    c.setStartDate(null);
                }

kangxiaoshan committed
1374

kangxiaoshan committed
1375 1376 1377 1378 1379 1380 1381
//                if (c.getType().equals(ContractTypeEnum.MAIN.getKey()) && platform.contains("io")) {
//
//                } else if (c.getType().equals(ContractTypeEnum.MAIN.getKey())) {
//                    c.setPriceLevelName(bpuMap.containsKey(c.getPriceLevel()) ? bpuMap.get(c.getPriceLevel()) : "");
//                } else {
//                    c.setPriceLevelName(incremenMap.containsKey(c.getPriceLevel()) ? incremenMap.get(c.getPriceLevel()) : "");
//                }
manxiaoqiang committed
1382

kangxiaoshan committed
1383
                c.setSaleName(saleMap.containsKey(c.getSale()) ? saleMap.get(c.getSale()) : "");
kangxiaoshan committed
1384

kangxiaoshan committed
1385
                if ("tkio".equals(platform)) {
kangxiaoshan committed
1386
                    c.setPriceLevelName(typeMap.containsKey(c.getPriceLevel()) ? typeMap.get(c.getPriceLevel()).getPackageName() : "");
kangxiaoshan committed
1387
                } else {
kangxiaoshan committed
1388

kangxiaoshan committed
1389
                    c.setPriceLevelName(packageBaseMap.get(c.getPriceLevel()) == null ? "" : packageBaseMap.get(c.getPriceLevel()).getPackageName());
kangxiaoshan committed
1390 1391
                }

kangxiaoshan committed
1392
//                c.setCreateName(saleMap.containsKey(c.getCreateAccount()) ? saleMap.get(c.getCreateAccount()) : "");
kangxiaoshan committed
1393

manxiaoqiang committed
1394 1395 1396 1397 1398
                result.add(c);
            }
        }
        return result;
    }
manxiaoqiang committed
1399

kangxiaoshan committed
1400

kangxiaoshan committed
1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416
    public void getDicMapDatas(Map saleMap, Map typeMap, Map incremenMap, Map bpuMap, Map packageBaseMap, String platform) {


        if (saleMap != null) {
            List<Sales> salesList = salesRepository.findAllByStatusOn();
            if (ValidateUtil.isValid(salesList)) {
                for (Sales s : salesList) {
                    saleMap.put(s.getId(), s.getName());
                }
            }
        }

        if (typeMap != null) {
            List<PackageType> typeList = packageTypeRepository.findAll();
            if (ValidateUtil.isValid(typeList)) {
                for (PackageType s : typeList) {
kangxiaoshan committed
1417
                    typeMap.put(s.getId(), s);
kangxiaoshan committed
1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459
                }
            }
        }

        if (incremenMap != null) {
            List<ContractIncrement> incrementList = contractIncrementRepository.findAll();
            if (ValidateUtil.isValid(incrementList)) {
                for (ContractIncrement s : incrementList) {
                    incremenMap.put(s.getId(), s.getPackageName());
                }
            }
        }


        if (bpuMap != null) {
            List<BPUContract> bpuContractList = bpuContractRepository.findAll();
            if (ValidateUtil.isValid(bpuContractList)) {
                for (BPUContract s : bpuContractList) {
                    bpuMap.put(s.getId(), s.getPackageName());
                }
            }
        }

        if (packageBaseMap != null) {

            List<PackageBase> packageBases = packageBaseRepository.findByPlatAndStatus(platform, 1);
            for (PackageBase base : packageBases) {
                packageBaseMap.put(base.getId(), base);
            }
        }


    }


    @Override
    public Contract findOne(User loginAccount, String startDate, String endDate, String platform, String contractId) {

        Contract contract = contractRepository.findOneByCode(platform, contractId);

        Map<String, String> saleMap = new HashMap();

kangxiaoshan committed
1460
        Map<String, PackageType> typeMap = new HashMap();
kangxiaoshan committed
1461 1462 1463 1464 1465 1466 1467 1468

        Map<String, PackageBase> packageBaseMap = new HashMap<>();

        // 获取字典数据
        this.getDicMapDatas(saleMap, typeMap, null, null, packageBaseMap, platform);

        contract.setSaleName(saleMap.containsKey(contract.getSale()) ? saleMap.get(contract.getSale()) : "");
        if ("tkio".equals(platform)) {
kangxiaoshan committed
1469
            contract.setPriceLevelName(typeMap.containsKey(contract.getPriceLevel()) ? typeMap.get(contract.getPriceLevel()).getPackageName() : "");
kangxiaoshan committed
1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480
        } else {

            contract.setPriceLevelName(packageBaseMap.get(contract.getPriceLevel()) == null ? "" : packageBaseMap.get(contract.getPriceLevel()).getPackageName());
        }

        contract.setCreateName(saleMap.containsKey(contract.getCreateAccount()) ? saleMap.get(contract.getCreateAccount()) : "");

        return contract;
    }

    private void getContractRelationIds(List<String> contractId, Map<String, String> idsDic) {
kangxiaoshan committed
1481 1482 1483 1484 1485 1486 1487

        //获取 关联合同 id
        List<String> contractIds = new ArrayList<>();

        List<BigInteger> ids = contractRelationRepository.findRelationIds(contractId);

        if (ids != null && ids.size() > 0) {
kangxiaoshan committed
1488
            for (BigInteger id : ids) {
kangxiaoshan committed
1489 1490 1491 1492

                String idss = id.toString();
                if (idsDic.get(idss) == null) {
                    contractIds.add(idss);
kangxiaoshan committed
1493
                    idsDic.put(idss, "0");
kangxiaoshan committed
1494 1495 1496
                }
            }

kangxiaoshan committed
1497
            if (contractIds.size() > 0) {
kangxiaoshan committed
1498
                //递归 查询 id  查询所有相关联的合同
kangxiaoshan committed
1499
                this.getContractRelationIds(contractIds, idsDic);
kangxiaoshan committed
1500 1501 1502 1503
            }
        }
    }

kangxiaoshan committed
1504

kangxiaoshan committed
1505
    @Override
kangxiaoshan committed
1506
    public Contract contractStatusUpdate(String platform, String contractId, String status, String ip, User loginUser) {
kangxiaoshan committed
1507

kangxiaoshan committed
1508
        if (StringUtils.isEmpty(contractId)) {
kangxiaoshan committed
1509 1510 1511 1512 1513
            return null;
        }

        Contract contract = contractRepository.findOne(Long.parseLong(contractId));

kangxiaoshan committed
1514 1515 1516 1517 1518 1519
        ChangeDelInfo changeDelInfo = new ChangeDelInfo();
        changeDelInfo.setContractCode(contract.getContractCode());
        changeDelInfo.setEmail(contract.getEmail());

        changeDelInfo.setEmail(contract.getEmail());

kangxiaoshan committed
1520
        if (ContractStatusEnum.CANCEL.getKey().equals(status)) {
kangxiaoshan committed
1521
            contract.setStatus(status);
kangxiaoshan committed
1522
            changeDelInfo.setDetail("废弃合同");
kangxiaoshan committed
1523
            changeDelInfo.setSourceId(contract.getId());
kangxiaoshan committed
1524
            this.saveChangeDelInfo(changeDelInfo, 4, 2, ip, loginUser); // type 2 修改
kangxiaoshan committed
1525

kangxiaoshan committed
1526
        } else {
kangxiaoshan committed
1527
            changeDelInfo.setDetail("删除合同");
kangxiaoshan committed
1528
            changeDelInfo.setOriginal(contract.getStatus());
kangxiaoshan committed
1529
            changeDelInfo.setSourceId(contract.getId());
kangxiaoshan committed
1530
            this.saveChangeDelInfo(changeDelInfo, 4, 1, ip, loginUser);
kangxiaoshan committed
1531
            contract.setStatus(ContractStatusEnum.DELETE.getKey());
kangxiaoshan committed
1532

kangxiaoshan committed
1533 1534 1535 1536 1537
        }

        return contractRepository.save(contract);
    }

manxiaoqiang committed
1538 1539 1540 1541 1542 1543
    @Override
    public Contract findOne(String code) {

        List<Contract> result = new ArrayList<>();
        List<User> sales = userRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
1544 1545
        if (ValidateUtil.isValid(sales)) {
            for (User s : sales) {
manxiaoqiang committed
1546 1547 1548 1549 1550
                saleMap.put(s.getId(), s.getName());
            }
        }
        List<PackageType> typeList = packageTypeRepository.findAll();
        Map<Long, String> typeMap = new HashMap<>();
kangxiaoshan committed
1551 1552
        if (ValidateUtil.isValid(typeList)) {
            for (PackageType s : typeList) {
manxiaoqiang committed
1553 1554 1555
                typeMap.put(s.getId(), s.getPackageName());
            }
        }
2  
manxiaoqiang committed
1556 1557
        List<ContractIncrement> incrementList = contractIncrementRepository.findAll();
        Map<Long, String> incremenMap = new HashMap<>();
kangxiaoshan committed
1558 1559
        if (ValidateUtil.isValid(incrementList)) {
            for (ContractIncrement s : incrementList) {
2  
manxiaoqiang committed
1560 1561 1562
                incremenMap.put(s.getId(), s.getPackageName());
            }
        }
manxiaoqiang committed
1563 1564
        Contract contract = contractRepository.findByCode(code);
        contract.setSaleName(saleMap.containsKey(contract.getSale()) ? saleMap.get(contract.getSale()) : "");
kangxiaoshan committed
1565
        if (contract.getType().equals(ContractTypeEnum.MAIN.getKey())) {
2  
manxiaoqiang committed
1566
            contract.setPriceLevelName(typeMap.containsKey(contract.getPriceLevel()) ? typeMap.get(contract.getPriceLevel()) : "");
kangxiaoshan committed
1567
        } else {
2  
manxiaoqiang committed
1568 1569
            contract.setPriceLevelName(incremenMap.containsKey(contract.getPriceLevel()) ? incremenMap.get(contract.getPriceLevel()) : "");
        }
manxiaoqiang committed
1570
        contract.setCreateName(saleMap.containsKey(contract.getCreateAccount()) ? saleMap.get(contract.getCreateAccount()) : "");
manxiaoqiang committed
1571

manxiaoqiang committed
1572
        Boolean flag = null;
kangxiaoshan committed
1573
        if (!contract.getType().equals(ContractTypeEnum.MAIN.getKey())) {
2  
manxiaoqiang committed
1574 1575 1576 1577 1578 1579
            //人群分析
            if (null == contract.getEndDate()) {
                flag = checkTime(contract.getEmail(), contract.getPlatform(), contract.getType(), "black");
            } else {
                flag = checkTime(contract.getEmail(), contract.getPlatform(), contract.getType(), "analysis");
            }
manxiaoqiang committed
1580

2  
manxiaoqiang committed
1581 1582 1583 1584 1585
            if (flag) {
                contract.setContractType("0");
            } else {
                contract.setContractType("1");
            }
manxiaoqiang committed
1586
        }
manxiaoqiang committed
1587 1588 1589
        return contract;
    }

manxiaoqiang committed
1590 1591
    @Override
    public ContractMoney pay(User loginUser, ContractMoney resource) {
kangxiaoshan committed
1592 1593 1594 1595
//        Contract contract = contractRepository.findByCode(resource.getContractCode());

        Contract contract = contractRepository.findOne(resource.getId());

kangxiaoshan committed
1596
        if (resource.getType().equals("pay")) {
kangxiaoshan committed
1597
            contract.setPayMoney(contract.getPayMoney() + resource.getMoney());
kangxiaoshan committed
1598
            //判断回款状态
kangxiaoshan committed
1599
            this.dealContractStatus(contract, loginUser, "update");
manxiaoqiang committed
1600
        } else {
kangxiaoshan committed
1601
            contract.setInvoiceMoney(contract.getInvoiceMoney().add(new BigDecimal(resource.getMoney().toString())));
manxiaoqiang committed
1602
        }
2  
manxiaoqiang committed
1603

kangxiaoshan committed
1604
        if (ContractTypeEnum.INCREMENT.getKey().equals(contract.getType())) {
2  
manxiaoqiang committed
1605 1606
            contract.setStatus("end");
        }
manxiaoqiang committed
1607 1608
        contractRepository.save(contract);

kangxiaoshan committed
1609 1610 1611 1612
        resource.setPriceLevel(contract.getPriceLevel());
        resource.setSalse(contract.getSale());
        resource.setCompany(contract.getCustomerBody());
        resource.setCreateName(loginUser.getName());
2  
manxiaoqiang committed
1613 1614 1615 1616
        resource.setPlatform(contract.getPlatform());
        resource.setCreateAccount(loginUser.getId());
        resource.setCreateTime(new Date());
        resource.setUser(loginUser.getId());
kangxiaoshan committed
1617 1618
        resource.setContractCode(contract.getContractCode());
        resource.setEmail(contract.getEmail());
manxiaoqiang committed
1619

kangxiaoshan committed
1620 1621 1622 1623 1624
//        if (resource.getType().equals("pay") && contract.getPlatform().equals("tkio")) {
//            tkioAccountService.contractPay(loginUser, resource);
//        } else if (resource.getType().equals("pay") && contract.getPlatform().equals("io")) {
//            ioAccountService.contractPay(loginUser, resource);
//        }
manxiaoqiang committed
1625 1626 1627 1628
        return contractMoneyRepository.save(resource);
    }

    @Override
kangxiaoshan committed
1629
    public Contract change(User loginUser, ContractChange resource, FlowChange flowChange) {
kangxiaoshan committed
1630

manxiaoqiang committed
1631
        Contract contract = contractRepository.findByCode(resource.getContractCode());
kangxiaoshan committed
1632
        Map<Long, String> packageMap = getPackageMap(contract);
kangxiaoshan committed
1633

kangxiaoshan committed
1634
        boolean showTip = false;
kangxiaoshan committed
1635
        if (resource.getType().equals("price")) {
manxiaoqiang committed
1636

kangxiaoshan committed
1637 1638
            resource.setContent(packageMap.get(contract.getPriceLevel()) + "改为" + packageMap.get(resource.getLevel()));
            resource.setMarke(contract.getMoney() + "元改为" + resource.getMoney() + "元");
kangxiaoshan committed
1639
            contract.setMoney(resource.getMoney());
manxiaoqiang committed
1640
            contract.setPriceLevel(resource.getLevel());
kangxiaoshan committed
1641

kangxiaoshan committed
1642
            // 处理回款状态
kangxiaoshan committed
1643
            this.dealContractStatus(contract, loginUser, "update");
kangxiaoshan committed
1644

manxiaoqiang committed
1645

kangxiaoshan committed
1646
        } else if ("give".equals(resource.getType())) {
kangxiaoshan committed
1647
            //变更优惠记录
kangxiaoshan committed
1648
            this.saveFlowChange(contract, loginUser, "save", resource.getDiscountTimeLong(), resource.getExtraFlow());
kangxiaoshan committed
1649
            // 累加 合同表中数据
kangxiaoshan committed
1650 1651
            if (resource.getExtraFlow() != null) {
                contract.setExtraFlow(contract.getExtraFlow() + resource.getExtraFlow());
kangxiaoshan committed
1652
            }
kangxiaoshan committed
1653 1654
            if (resource.getDiscountTimeLong() != null) {
                contract.setDiscountTimeLong(contract.getDiscountTimeLong() + resource.getDiscountTimeLong());
kangxiaoshan committed
1655
            }
kangxiaoshan committed
1656

kangxiaoshan committed
1657
        } else {
kangxiaoshan committed
1658 1659

            if (ContractStatusEnum.CANCEL.getKey().equals(resource.getStatus())) {
1  
kangxiaoshan committed
1660
                //合同作废
kangxiaoshan committed
1661 1662
                resource.setContent(ContractStatusEnum.CANCEL.getValue());
                contract.setStatus(ContractStatusEnum.CANCEL.getKey());
kangxiaoshan committed
1663
                showTip = true;
kangxiaoshan committed
1664
            } else if (ContractStatusEnum.SUSPEND.getKey().equals(resource.getStatus())) {
1  
kangxiaoshan committed
1665
                //合同中止
kangxiaoshan committed
1666 1667
                resource.setContent(ContractStatusEnum.SUSPEND.getValue());
                contract.setStatus(ContractStatusEnum.SUSPEND.getKey());
kangxiaoshan committed
1668
                showTip = true;
kangxiaoshan committed
1669 1670
            }

manxiaoqiang committed
1671
        }
manxiaoqiang committed
1672
        resource.setPlatform(contract.getPlatform());
manxiaoqiang committed
1673 1674
        resource.setCreateAccount(loginUser.getId());
        resource.setUser(loginUser.getId());
kangxiaoshan committed
1675

kangxiaoshan committed
1676

kangxiaoshan committed
1677
        if (ContractStatusEnum.SUSPEND.getKey().equals(resource.getStatus())) {
1  
kangxiaoshan committed
1678
            resource.setCreateTime(new Date());
kangxiaoshan committed
1679 1680 1681 1682 1683 1684
        } else {
            resource.setCreateTime(new Date());
            resource.setDs(DateUtil.getBeforeDays(0));
        }


kangxiaoshan committed
1685
        if (!"give".equals(resource.getType())) {
kangxiaoshan committed
1686 1687
            contractChangeRepository.save(resource);
        }
manxiaoqiang committed
1688

kangxiaoshan committed
1689 1690
        contractRepository.save(contract);

kangxiaoshan committed
1691
        if (showTip) {
kangxiaoshan committed
1692
            //获取相关执行合同名称
kangxiaoshan committed
1693
            List<String> codes = contractRepository.findContractBodyNames(contract.getCustomerBody(), contract.getContractCode());
kangxiaoshan committed
1694
            contract.setCustomBodyNames(codes);
kangxiaoshan committed
1695
        } else {
kangxiaoshan committed
1696
            contract.setCustomBodyNames(new ArrayList<>());
kangxiaoshan committed
1697 1698 1699
        }

        return contract;
manxiaoqiang committed
1700 1701
    }

kangxiaoshan committed
1702 1703

    @Override
kangxiaoshan committed
1704 1705 1706
    public Object changesDel(String platform, String id, String type, String ip, User loginUser) {


kangxiaoshan committed
1707
        if ("give".equals(type)) {
kangxiaoshan committed
1708 1709 1710 1711
            // 优惠流量
            FlowChange change = flowChangeRepository.findOne(Long.parseLong(id));
            change.setDelFlag(1);
            flowChangeRepository.save(change);
kangxiaoshan committed
1712 1713 1714 1715

            ChangeDelInfo changeDelInfo = new ChangeDelInfo();
            changeDelInfo.setContractCode(change.getContractCode());
            changeDelInfo.setEmail(change.getEmail());
kangxiaoshan committed
1716
            changeDelInfo.setSourceId(change.getId());
kangxiaoshan committed
1717
            changeDelInfo.setDetail("赠送时长:" + change.getDiscountTimeLong() + "天 — 赠送流量" + change.getDiscountFlow());
kangxiaoshan committed
1718

kangxiaoshan committed
1719
            this.saveChangeDelInfo(changeDelInfo, 1, 1, ip, loginUser);
kangxiaoshan committed
1720

kangxiaoshan committed
1721
            return change;
kangxiaoshan committed
1722
        } else if ("change".equals(type)) {
kangxiaoshan committed
1723 1724 1725 1726
            //套餐变更
            ContractChange contractChange = contractChangeRepository.findOne(Long.parseLong(id));
            contractChange.setDelFlag(1);
            contractChangeRepository.save(contractChange);
kangxiaoshan committed
1727

kangxiaoshan committed
1728 1729 1730 1731
            ChangeDelInfo changeDelInfo = new ChangeDelInfo();
            changeDelInfo.setContractCode(contractChange.getContractCode());
            changeDelInfo.setDetail("套餐变更");
            changeDelInfo.setEmail(contractChange.getEmail());
kangxiaoshan committed
1732
            changeDelInfo.setSourceId(contractChange.getId());
kangxiaoshan committed
1733
            this.saveChangeDelInfo(changeDelInfo, 2, 1, ip, loginUser);
kangxiaoshan committed
1734

kangxiaoshan committed
1735
            return contractChange;
kangxiaoshan committed
1736
        } else {
kangxiaoshan committed
1737

kangxiaoshan committed
1738 1739 1740
            ContractMoney contractMoney = contractMoneyRepository.findOne(Long.parseLong(id));
            contractMoney.setDelFlag(1);
            contractMoneyRepository.save(contractMoney);
kangxiaoshan committed
1741

kangxiaoshan committed
1742 1743 1744
            ChangeDelInfo changeDelInfo = new ChangeDelInfo();
            changeDelInfo.setContractCode(contractMoney.getContractCode());
            changeDelInfo.setEmail(contractMoney.getEmail());
kangxiaoshan committed
1745
            changeDelInfo.setSourceId(contractMoney.getId());
kangxiaoshan committed
1746

kangxiaoshan committed
1747
            if ("pay".equals(contractMoney.getType())) {
kangxiaoshan committed
1748

kangxiaoshan committed
1749 1750
                this.dealPayMoneyByContractMoney(contractMoney, -1);
                changeDelInfo.setDetail("收款记录-金额:" + contractMoney.getMoney());
kangxiaoshan committed
1751

kangxiaoshan committed
1752 1753
            } else {
                changeDelInfo.setDetail("开票记录-金额:" + contractMoney.getMoney());
kangxiaoshan committed
1754 1755
            }

kangxiaoshan committed
1756
            this.saveChangeDelInfo(changeDelInfo, 3, 1, ip, loginUser);
kangxiaoshan committed
1757

kangxiaoshan committed
1758 1759 1760 1761 1762
            return contractMoney;
        }

    }

kangxiaoshan committed
1763
    private void dealPayMoneyByContractMoney(ContractMoney contractMoney, int addOr) {
kangxiaoshan committed
1764 1765 1766
        // 删除收款记录 修改相应收款金额
        // 恢复收款记录 修改相应合同收款金额
        Contract contract = contractRepository.findByCode(contractMoney.getContractCode());
kangxiaoshan committed
1767
        contract.setPayMoney(contract.getPayMoney() + contractMoney.getMoney() * addOr);
kangxiaoshan committed
1768 1769 1770 1771
        contractRepository.save(contract);
    }


kangxiaoshan committed
1772
    @Override
kangxiaoshan committed
1773 1774
    public List<ChangeDelInfo> getChangeDelData(User loginAccount, String contranctCode, String startDate, String
            endDate) {
kangxiaoshan committed
1775

kangxiaoshan committed
1776
        List<ChangeDelInfo> datas = changeDelInfoRepository.findOnStartDate(startDate, endDate);
kangxiaoshan committed
1777 1778 1779 1780 1781
        return datas;
    }


    @Override
kangxiaoshan committed
1782
    public List<ChangeDelDetail> getChangeDelDetailData(User loginAccount, String pid) {
kangxiaoshan committed
1783 1784 1785 1786 1787

        List<ChangeDelDetail> datas = changeDelDetailRepository.findByPid(pid);
        return datas;
    }

kangxiaoshan committed
1788 1789

    @Override
kangxiaoshan committed
1790
    public ChangeDelInfo changesDelRecover(String id, String type, User loginAccount) {
kangxiaoshan committed
1791 1792 1793
        // 恢复删除

        ChangeDelInfo changeDelInfo = changeDelInfoRepository.findOne(Long.parseLong(id));
kangxiaoshan committed
1794
        if (changeDelInfo.getModifyType() == 1) {
kangxiaoshan committed
1795 1796 1797 1798
//            put("1","流量赠送");
//            put("2","合同变更记录");
//            put("3","收款/开票记录");
//            put("4","合同管理");
kangxiaoshan committed
1799
            if (changeDelInfo.getFunction() == 1) {
kangxiaoshan committed
1800 1801 1802
                FlowChange change = flowChangeRepository.findOne(changeDelInfo.getSourceId());
                change.setDelFlag(0);
                flowChangeRepository.save(change);
kangxiaoshan committed
1803
            } else if (changeDelInfo.getFunction() == 2) {
kangxiaoshan committed
1804 1805 1806
                ContractChange contractChange = contractChangeRepository.findOne(changeDelInfo.getSourceId());
                contractChange.setDelFlag(0);
                contractChangeRepository.save(contractChange);
kangxiaoshan committed
1807
            } else if (changeDelInfo.getFunction() == 3) {
kangxiaoshan committed
1808 1809 1810
                //
                ContractMoney money = contractMoneyRepository.findOne(changeDelInfo.getSourceId());
                String detail = changeDelInfo.getDetail();
kangxiaoshan committed
1811
                if (detail != null && detail.startsWith("收款")) {
kangxiaoshan committed
1812
                    //恢复收款记录 修改相应合同收款金额
kangxiaoshan committed
1813
                    dealPayMoneyByContractMoney(money, 1);
kangxiaoshan committed
1814 1815 1816
                }
                money.setDelFlag(0);
                contractMoneyRepository.save(money);
kangxiaoshan committed
1817
            } else if (changeDelInfo.getFunction() == 4) {
kangxiaoshan committed
1818 1819 1820 1821 1822 1823
                // 合同恢复
                Contract contract = contractRepository.findOne(changeDelInfo.getSourceId());
                contract.setStatus(changeDelInfo.getOriginal());
                contractRepository.save(contract);

            }
kangxiaoshan committed
1824 1825

            changeDelInfoRepository.delete(changeDelInfo);
kangxiaoshan committed
1826 1827 1828 1829 1830
        }

        return null;
    }

kangxiaoshan committed
1831
    public void saveChangeDelInfo(ChangeDelInfo changeDelInfo, int function, int type, String ip, User loginUser) {
kangxiaoshan committed
1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843

        changeDelInfo.setCreatTime(new Date());
        changeDelInfo.setFunction(function);// 1 赠送记录
        changeDelInfo.setModifyType(type);// 1 删除
        changeDelInfo.setIp(ip);
        changeDelInfo.setDs(new DateTime().toString("yyyy-MM-dd"));
        changeDelInfo.setModifyAccount(loginUser.getName());
        changeDelInfo.setModifyId(loginUser.getId());
        changeDelInfoRepository.save(changeDelInfo);

    }

manxiaoqiang committed
1844 1845 1846 1847
    @Override
    public List<ContractMoney> findPay(String startDate, String endDate, String code) {
        List<User> sales = userRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
1848 1849
        if (ValidateUtil.isValid(sales)) {
            for (User s : sales) {
manxiaoqiang committed
1850 1851 1852 1853
                saleMap.put(s.getId(), s.getName());
            }
        }

kangxiaoshan committed
1854 1855 1856 1857
        List<ContractMoney> result = new ArrayList<>();
        List<ContractMoney> list = contractMoneyRepository.findByDs(startDate, endDate, code);
        if (ValidateUtil.isValid(list)) {
            for (ContractMoney cm : list) {
manxiaoqiang committed
1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869
                cm.setCreateName(saleMap.containsKey(cm.getUser()) ? saleMap.get(cm.getUser()) : "");
                result.add(cm);
            }
        }
        return result;
    }

    @Override
    public List<ContractChange> findChange(String startDate, String endDate, String code) {

        List<User> sales = userRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
1870 1871
        if (ValidateUtil.isValid(sales)) {
            for (User s : sales) {
manxiaoqiang committed
1872 1873 1874 1875
                saleMap.put(s.getId(), s.getName());
            }
        }

kangxiaoshan committed
1876 1877 1878 1879
        List<ContractChange> result = new ArrayList<>();
        List<ContractChange> list = contractChangeRepository.findByDs(startDate, endDate, code);
        if (ValidateUtil.isValid(list)) {
            for (ContractChange cm : list) {
manxiaoqiang committed
1880 1881 1882 1883
                cm.setCreateName(saleMap.containsKey(cm.getUser()) ? saleMap.get(cm.getUser()) : "");
                result.add(cm);
            }
        }
kangxiaoshan committed
1884

manxiaoqiang committed
1885 1886 1887
        return result;
    }

kangxiaoshan committed
1888 1889
    @Override
    public List<FlowChange> findflowChange(String startDate, String endDate, String code) {
kangxiaoshan committed
1890
        return flowChangeRepository.findByAddDate(startDate, endDate, code);
kangxiaoshan committed
1891 1892
    }

manxiaoqiang committed
1893
    @Override
kangxiaoshan committed
1894
    public Contract updatePay(User loginUser, ContractMoney resource, String ip) {
manxiaoqiang committed
1895 1896
        ContractMoney contractMoney = contractMoneyRepository.findOne(resource.getId());
        Contract contract = contractRepository.findByCode(resource.getContractCode());
kangxiaoshan committed
1897 1898 1899 1900 1901 1902 1903

        ChangeDelInfo changeDelInfo = new ChangeDelInfo();

        ChangeDelDetail delDetail = new ChangeDelDetail();
        delDetail.setBeforeValue(contractMoney.getMoney().toString());
        delDetail.setAfterValue(resource.getMoney().toString());

kangxiaoshan committed
1904
        if (contractMoney.getType().equals("pay")) {
manxiaoqiang committed
1905
            contract.setPayMoney(contract.getPayMoney() + resource.getMoney() - contractMoney.getMoney());
kangxiaoshan committed
1906 1907 1908 1909

            delDetail.setItem("收款");
            delDetail.setDetail("收款金额");

manxiaoqiang committed
1910
        } else {
kangxiaoshan committed
1911 1912
//            contract.setInvoice(contract.getInvoice() + resource.getMoney() - contractMoney.getMoney());
            contract.setInvoiceMoney(contract.getInvoiceMoney().add(new BigDecimal(resource.getMoney())).subtract(new BigDecimal(contractMoney.getMoney())));
kangxiaoshan committed
1913 1914
            delDetail.setItem("开票");
            delDetail.setDetail("开票金额");
manxiaoqiang committed
1915
        }
kangxiaoshan committed
1916 1917 1918 1919

        changeDelInfo.setDetail("修改详情");//
        changeDelInfo.setContractCode(contractMoney.getContractCode());
        changeDelInfo.setEmail(contractMoney.getEmail());
kangxiaoshan committed
1920
        this.saveChangeDelInfo(changeDelInfo, 3, 2, ip, loginUser);
kangxiaoshan committed
1921 1922 1923 1924 1925 1926 1927 1928

        delDetail.setCreatTime(new Date());
        delDetail.setContractCode(contractMoney.getContractCode());
        delDetail.setEmail(contractMoney.getEmail());
        delDetail.setParentId(changeDelInfo.getId());

        changeDelDetailRepository.save(delDetail);

manxiaoqiang committed
1929 1930 1931 1932 1933
        Contract save = contractRepository.save(contract);

        contractMoney.setModifyAccount(loginUser.getId());
        contractMoney.setModifyTime(new Date());
        contractMoney.setMoney(resource.getMoney());
kangxiaoshan committed
1934
//        contractMoney.setDs(resource.getDs());
manxiaoqiang committed
1935 1936 1937 1938
        contractMoneyRepository.save(contractMoney);

        List<User> sales = userRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
1939 1940
        if (ValidateUtil.isValid(sales)) {
            for (User s : sales) {
manxiaoqiang committed
1941 1942 1943 1944
                saleMap.put(s.getId(), s.getName());
            }
        }

kangxiaoshan committed
1945
        Map<Long, String> typeMap = this.getPackageMap(contract);
manxiaoqiang committed
1946 1947 1948 1949 1950
        save.setSaleName(saleMap.containsKey(save.getSale()) ? saleMap.get(save.getSale()) : "");
        save.setPriceLevelName(typeMap.containsKey(save.getPriceLevel()) ? typeMap.get(save.getPriceLevel()) : "");
        save.setCreateName(saleMap.containsKey(save.getSale()) ? saleMap.get(save.getSale()) : "");
        return save;
    }
manxiaoqiang committed
1951

kangxiaoshan committed
1952

kangxiaoshan committed
1953 1954 1955 1956 1957
//    public List<ContractMoney> findPayAll(String startDate, String endDate, String platfrom) {
//
//        return this.findPayAll(startDate,endDate,platfrom,"all","all", null);
//    }

kangxiaoshan committed
1958 1959

    @Override
kangxiaoshan committed
1960 1961
    public List<ContractMoney> findPayAll(User loginAccount, String startDate, String endDate, String
            platfrom, String moneyType, String packageTypeSearch, String money_ids) {
kangxiaoshan committed
1962

kangxiaoshan committed
1963
        Map<Long, PackageType> packageTypeMap = new HashMap<>();
manxiaoqiang committed
1964
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
1965
        Map<Long, PackageBase> packageBaseMap = new HashMap<>();
kangxiaoshan committed
1966

kangxiaoshan committed
1967
        this.getDicMapDatas(saleMap, packageTypeMap, null, null, packageBaseMap, platfrom);
kangxiaoshan committed
1968

kangxiaoshan committed
1969
        List<ContractMoney> result = new ArrayList<>();
kangxiaoshan committed
1970 1971 1972

        List<ContractMoney> list;

kangxiaoshan committed
1973
        if ("-1".equals(money_ids)) {
kangxiaoshan committed
1974 1975 1976

            list = new ArrayList<>();

kangxiaoshan committed
1977 1978 1979 1980 1981 1982 1983 1984 1985
        } else if (!StringUtil.isEmpty(money_ids)) {
            list = contractMoneyRepository.findByDsAllContractMoneyIds(startDate, endDate, platfrom, Arrays.asList(money_ids.split(",")));
        } else if (!"all".equals(moneyType) && !"all".equals(packageTypeSearch)) {
            list = contractMoneyRepository.findByDsAllContractAll(startDate, endDate, platfrom, moneyType, packageTypeSearch);
        } else if (!"all".equals(moneyType)) {
            list = contractMoneyRepository.findByDsAllContractMoneyType(startDate, endDate, platfrom, moneyType);
        } else if (!"all".equals(packageTypeSearch)) {
            list = contractMoneyRepository.findByDsAllContractPkSearch(startDate, endDate, platfrom, packageTypeSearch);
        } else {
kangxiaoshan committed
1986 1987 1988
            list = contractMoneyRepository.findByDsAllContract(startDate, endDate, platfrom);
        }

kangxiaoshan committed
1989 1990 1991 1992 1993 1994
        // 权限过滤

        Map<String, Object> authdata = authService.getAuthExtends(loginAccount);

        if (authdata.get("needcheck") != null) {

1995 1996
            List<String> codesList = list.stream()
                    .filter(p -> p.getContractCode() != null).map(p -> p.getContractCode()).collect(Collectors.toList());
kangxiaoshan committed
1997 1998 1999 2000 2001

//            contract_code,my_body_code,sale,platform

            if (RoleEnum.FINANCE.getKey().equals(loginAccount.getRole())) {

kangxiaoshan committed
2002
                list = filterContractMoney(codesList, authdata, list, 1);
kangxiaoshan committed
2003

kangxiaoshan committed
2004
            } else if (RoleEnum.SALSEMAN.getKey().equals(loginAccount.getRole())) {
kangxiaoshan committed
2005

2006
                list = filterContractMoney(codesList, authdata, list, 2);
kangxiaoshan committed
2007
            } else if (RoleEnum.PM.getKey().equals(loginAccount.getRole())) {
kangxiaoshan committed
2008

kangxiaoshan committed
2009
                list = filterContractMoney(codesList, authdata, list, 3);
kangxiaoshan committed
2010 2011 2012 2013
            }

        }

kangxiaoshan committed
2014 2015
        if (ValidateUtil.isValid(list)) {
            for (ContractMoney cm : list) {
kangxiaoshan committed
2016 2017 2018 2019 2020 2021 2022

                cm.setSalseName(saleMap.get(cm.getSalse()));

                if ("tkio".equals(platfrom)) {

                    PackageType packageType = packageTypeMap.get(cm.getPriceLevel());

kangxiaoshan committed
2023 2024
                    if (packageType != null) {
                        String flow = packageType.getTrackFlow().intValue() < 0 ? "无限制" : packageType.getTrackFlow().intValue() / 10000 + "万/年";
kangxiaoshan committed
2025

kangxiaoshan committed
2026
                        cm.setPackageName(packageType.getPackageName() + ": 流量" + flow + " APP" + packageType.getAppNum() + "个");
kangxiaoshan committed
2027

kangxiaoshan committed
2028
                    } else {
kangxiaoshan committed
2029 2030 2031 2032
                        cm.setPackageName("");
                    }

                } else {
kangxiaoshan committed
2033
                    cm.setPackageName(packageBaseMap.get(cm.getPriceLevel()) == null ? "" : packageBaseMap.get(cm.getPriceLevel()).getPackageName());
kangxiaoshan committed
2034 2035
                }

manxiaoqiang committed
2036 2037
            }
        }
kangxiaoshan committed
2038
        return list;
manxiaoqiang committed
2039
    }
manxiaoqiang committed
2040

kangxiaoshan committed
2041 2042
    private List<ContractMoney> filterContractMoney
            (List<String> codesList, Map<String, Object> authdata, List<ContractMoney> list, int nextIndex) {
kangxiaoshan committed
2043

kangxiaoshan committed
2044
        if (codesList == null || codesList.size() == 0) {
2045
            return list;
kangxiaoshan committed
2046 2047
        }

kangxiaoshan committed
2048 2049
        List<Object[]> contactdata = contractRepository.findByContractCode(codesList);

kangxiaoshan committed
2050 2051 2052
        if (contactdata != null) {
            Map<String, String> dicdata = contactdata.stream().
                    collect(Collectors.toMap(p -> p[0].toString(), p -> p[nextIndex] == null ? "all" : p[nextIndex].toString(), (key1, key2) -> key1));
kangxiaoshan committed
2053

kangxiaoshan committed
2054
            return list.stream().filter(p ->
kangxiaoshan committed
2055
                    authdata.get(dicdata.get(p.getContractCode())) == null ? false : true
kangxiaoshan committed
2056
                            || "all".equals(authdata.get(dicdata.get(p.getContractCode())))).collect(Collectors.toList());
kangxiaoshan committed
2057

kangxiaoshan committed
2058
        } else {
kangxiaoshan committed
2059

kangxiaoshan committed
2060
            return list;
kangxiaoshan committed
2061

kangxiaoshan committed
2062 2063
        }

kangxiaoshan committed
2064 2065 2066

    }

kangxiaoshan committed
2067 2068 2069 2070 2071 2072
    @Override
    public List<TradeType> getTradeData(String platform) {
        return tradeTypeRepsitory.findAll();
    }

    @Override
kangxiaoshan committed
2073
    public List<Map> contractCodeAll(String platform, String contractId) {
kangxiaoshan committed
2074

kangxiaoshan committed
2075 2076 2077
        Map<String, String> data = new HashMap<>();
        data.put("id", "-1");
        data.put("contractCode", "无");
kangxiaoshan committed
2078 2079 2080

        List result = new ArrayList();
        result.add(data);
kangxiaoshan committed
2081 2082 2083 2084 2085

        List<String> plats = new ArrayList<>();

        plats.add(platform);

kangxiaoshan committed
2086
        if ("fake".equals(platform)) {
kangxiaoshan committed
2087 2088 2089 2090
            plats.add("tkio");
        }

        List<ContractRelation> ids = null;
kangxiaoshan committed
2091
        Contract contract = null;
kangxiaoshan committed
2092 2093
        if (!StringUtils.isEmpty(contractId) && !contractId.equals("null")) {
            ids = contractRelationRepository.findRelationIdsMain(contractId);
kangxiaoshan committed
2094
            contract = contractRepository.findOne(Long.parseLong(contractId));
kangxiaoshan committed
2095 2096 2097 2098
        }

        if (ids != null) {

kangxiaoshan committed
2099
            // 已关联合同 字典
kangxiaoshan committed
2100 2101
            Map<String, String> filterMap = new HashMap();
            for (ContractRelation relation : ids) {
kangxiaoshan committed
2102

kangxiaoshan committed
2103 2104
                if (contract != null && !relation.getRelationId().equals(contract.getRelationContract())) {
                    filterMap.put(relation.getRelationId() + "_", "");
kangxiaoshan committed
2105 2106
                }

kangxiaoshan committed
2107 2108
            }

kangxiaoshan committed
2109
            // 所有可关联合同
kangxiaoshan committed
2110
            List<Map> resultBefore = contractRepository.contractCodePlatform(plats);
kangxiaoshan committed
2111
            for (Map m : resultBefore) {
kangxiaoshan committed
2112 2113

                String m_id = m.get("id").toString() + "_";
kangxiaoshan committed
2114
                if (filterMap.get(m_id) == null && !m_id.equals(contractId + "_")) {
kangxiaoshan committed
2115 2116 2117 2118 2119 2120
                    result.add(m);
                }
            }
        } else {
            result.addAll(contractRepository.contractCodePlatform(plats));
        }
kangxiaoshan committed
2121 2122

        return result;
kangxiaoshan committed
2123
    }
manxiaoqiang committed
2124

kangxiaoshan committed
2125 2126 2127 2128 2129
    @Override
    public Map contractCodeCheck(String platform, String contractCode) {

        Contract contractExist = contractRepository.findByCodePlatform(contractCode, platform);

kangxiaoshan committed
2130
        Map<String, String> data = new HashMap<>();
kangxiaoshan committed
2131

kangxiaoshan committed
2132 2133 2134 2135
        if (contractExist != null) {
            data.put("exist", "true");
        } else {
            data.put("exist", "false");
kangxiaoshan committed
2136 2137 2138 2139
        }
        return data;
    }

kangxiaoshan committed
2140
    public Map<Long, String> getPackageMap(Contract contract) {
kangxiaoshan committed
2141
//        List<PackageType> typeList = packageTypeRepository.findAll();
kangxiaoshan committed
2142 2143 2144

        String platform = contract.getPlatform();

kangxiaoshan committed
2145
        if ("trackio".equals(platform)) {
kangxiaoshan committed
2146 2147 2148 2149 2150 2151
            List<PackageType> typeList = packageTypeRepository.findIsNewAll();
            Map<Long, String> typeMap = new HashMap<>();
            if (ValidateUtil.isValid(typeList)) {
                for (PackageType s : typeList) {
                    typeMap.put(s.getId(), s.getPackageName());
                }
manxiaoqiang committed
2152
            }
kangxiaoshan committed
2153 2154

            return typeMap;
kangxiaoshan committed
2155
        } else {
kangxiaoshan committed
2156

kangxiaoshan committed
2157
            List<PackageBase> packageBases = packageBaseRepository.findByPlatAndStatus(platform, 1);
kangxiaoshan committed
2158 2159 2160

            Map<Long, String> typeMap = new HashMap<>();
            for (PackageBase packageBase : packageBases) {
kangxiaoshan committed
2161
                typeMap.put(packageBase.getId(), packageBase.getPackageName());
kangxiaoshan committed
2162 2163 2164 2165

            }

            return typeMap;
manxiaoqiang committed
2166
        }
kangxiaoshan committed
2167

manxiaoqiang committed
2168 2169
    }

kangxiaoshan committed
2170
    public Map<Long, String> getSaleMap() {
manxiaoqiang committed
2171 2172
        List<User> sales = userRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
kangxiaoshan committed
2173 2174
        if (ValidateUtil.isValid(sales)) {
            for (User s : sales) {
manxiaoqiang committed
2175 2176 2177 2178 2179
                saleMap.put(s.getId(), s.getName());
            }
        }
        return saleMap;
    }
manxiaoqiang committed
2180

kangxiaoshan committed
2181

kangxiaoshan committed
2182 2183
    public static Map<String, String> convertBean(Object bean) throws
            IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
manxiaoqiang committed
2184
        Class type = bean.getClass();
kangxiaoshan committed
2185
        Map<String, String> returnMap = new HashMap<String, String>();
manxiaoqiang committed
2186 2187
        BeanInfo beanInfo = Introspector.getBeanInfo(type);

kangxiaoshan committed
2188 2189
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (int i = 0; i < propertyDescriptors.length; i++) {
manxiaoqiang committed
2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            if (!propertyName.equals("class")) {
                Method readMethod = descriptor.getReadMethod();

                Object invoke = readMethod.invoke(bean, new Object[0]);
                String result = (null == invoke ? null : invoke.toString());

                if (result != null) {
                    returnMap.put(propertyName, result);
                } else {
                    returnMap.put(propertyName, null);
                }


            }
        }
        return returnMap;
    }

kangxiaoshan committed
2210

kangxiaoshan committed
2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221
    @Override
    public ResultModel uploadBatchInfo(MultipartFile file, String platform) {
        InputStream stream = null;
        try {
            int row_length = 11;
            stream = file.getInputStream();
            Workbook workbook = WorkbookFactory.create(stream);
//            Iterator<Sheet> sheetIter = workbook.sheetIterator();
//            while (sheetIter.hasNext()) {
//                Sheet sheet = sheetIter.next();
//            }
kangxiaoshan committed
2222
            return saveDataBySheet(workbook.getSheetAt(0), row_length, platform);
kangxiaoshan committed
2223 2224

        } catch (Exception ex) {
kangxiaoshan committed
2225
            logger.error("批量上传合同错误", ex);
kangxiaoshan committed
2226
            return ResultModel.ERROR(ResultStatus.UPLOAD_ERRO);
kangxiaoshan committed
2227 2228 2229
        }
    }

kangxiaoshan committed
2230

kangxiaoshan committed
2231
    public ResultModel saveDataBySheet(Sheet sheet, int row_length, String platformexcl) {
kangxiaoshan committed
2232 2233 2234 2235 2236
        String sheetName = sheet.getSheetName();
        if (!SHEET_NAMES.containsKey(sheetName)) {
            return ResultModel.ERROR("模板标签页名称错误");
        }

kangxiaoshan committed
2237
        if (!sheetName.equalsIgnoreCase(SHEET_NAMES_RESERVE.get(platformexcl))) {
kangxiaoshan committed
2238 2239 2240
            return ResultModel.ERROR("请上传对应项目模板处理的数据");
        }

kangxiaoshan committed
2241
        String platform = SHEET_NAMES.get(sheetName);
kangxiaoshan committed
2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255
        Map<String, Long> tradTypeMap = tradeTypeRepsitory.findAll()
                .stream().collect(Collectors.toMap(TradeType::getName, TradeType::getId));
        Map<String, Long> salseMap = salesRepository.findSaleByStatus(0)
                .stream().collect(Collectors.toMap(Sales::getName, Sales::getId));
        Map<String, Long> packageMap = null;

        if ("tkio".equals(platform) || "io".equals(platform)) {
            packageMap = packageTypeRepository.findIsNewAll()
                    .stream().collect(Collectors.toMap(PackageType::getPackageName, PackageType::getId));
        } else {
            packageMap = packageBaseRepository.findByPlatAndStatus(platform, 1)
                    .stream().collect(Collectors.toMap(PackageBase::getPackageName, PackageBase::getId));
        }

kangxiaoshan committed
2256 2257 2258 2259 2260 2261
        Map<String, String> cBodyMap = null;
        if ("abtest".equals(platform) || "ads".equals(platform)) {
            cBodyMap = contractBodyRepository.findByPlatform(platform)
                    .stream().collect(Collectors.toMap(ContractBody::getName, ContractBody::getCode));
        } else {
            cBodyMap = contractBodyRepository.findAllDis()
kangxiaoshan committed
2262
                    .stream().collect(Collectors.toMap(ContractBody::getName, ContractBody::getCode, (v1, v2) -> v1));
kangxiaoshan committed
2263
        }
kangxiaoshan committed
2264 2265

        Row row = sheet.getRow(0);
kangxiaoshan committed
2266 2267
        List<String> titleKey = new ArrayList<>();
        if (!parseRowData(row, row_length, null, titleKey)) {
kangxiaoshan committed
2268 2269 2270
            return ResultModel.ERROR(ResultStatus.FORMAT_FILE_ERRO);
        }

kangxiaoshan committed
2271
        int row_already = titleKey.size();
kangxiaoshan committed
2272
        String extend_row_sql = "platform,product,my_body_code,create_time,code_num,type,status,back_status,ds," +
kangxiaoshan committed
2273 2274 2275
                "create_account,create_name,extra_flow,relation_contract,invoice_money,first_back_id";

        int extend_size = extend_row_sql.split(",").length;
kangxiaoshan committed
2276

kangxiaoshan committed
2277 2278 2279 2280
        DataFormatter formatter = new DataFormatter();
        int rowNumber = sheet.getLastRowNum();
        List<Object[]> args_data = new ArrayList<>();

2281
        Map<String, String> codeUniqueDic = new HashMap<>();
kangxiaoshan committed
2282
        List<String> accountsEmail = new ArrayList<>();
kangxiaoshan committed
2283 2284
        for (int j = 1; j <= rowNumber; j++) {
            Row row_data = sheet.getRow(j);
kangxiaoshan committed
2285
            Object[] s_data = new Object[titleKey.size() + extend_size];
kangxiaoshan committed
2286
            String bodyCode = null;
kangxiaoshan committed
2287
            String ds = null;
1  
kangxiaoshan committed
2288 2289 2290
            if (row_data == null) {
                continue;
            }
kangxiaoshan committed
2291 2292 2293

            for (int w = 0; w < titleKey.size(); w++) {
                String sheetTitle = titleKey.get(w);
kangxiaoshan committed
2294
                Cell cell = row_data.getCell(w);
1  
kangxiaoshan committed
2295
                int line_num = j + 1;
kangxiaoshan committed
2296
                if (null == cell || cell.getCellTypeEnum().equals(CellType.BLANK)) {
kangxiaoshan committed
2297 2298
                    return ResultModel.ERROR("第" + line_num + "行【" +
                            SHEET_TITLE_RESERVE.get(sheetTitle) + "】不能为空,请重新上传");
kangxiaoshan committed
2299
                } else {
1  
kangxiaoshan committed
2300
                    String dataSTR = formatter.formatCellValue(cell).trim();
2301 2302 2303 2304 2305 2306
                    //校验合同编号
                    if ("contract_code".equals(sheetTitle)) {
                        if (!codeUniqueDic.containsKey(dataSTR)) {
                            codeUniqueDic.put(dataSTR, "1");
                        } else {
                            return ResultModel.ERROR(ResultStatus.CCODE_EXITS.getCode(),
kangxiaoshan committed
2307
                                    "合同编号【" + dataSTR + "】已存在,请重新上传");
2308 2309
                        }

kangxiaoshan committed
2310 2311
                        Contract contractExist = contractRepository.checkByCode(dataSTR);
                        if (contractExist != null) {
2312
                            return ResultModel.ERROR(ResultStatus.CCODE_EXITS.getCode(),
kangxiaoshan committed
2313
                                    "合同编号【" + dataSTR + "】已存在,请重新上传");
2314 2315
                        }
                    }
kangxiaoshan committed
2316

kangxiaoshan committed
2317
                    if ("my_body_name".equals(sheetTitle)) {
kangxiaoshan committed
2318
                        if (!cBodyMap.containsKey(dataSTR)) {
kangxiaoshan committed
2319
                            return ResultModel.ERROR("第" + line_num + "行【我方签约主体】错误");
kangxiaoshan committed
2320 2321 2322 2323 2324
                        } else {
                            s_data[w] = dataSTR;
                            bodyCode = cBodyMap.get(dataSTR);
                        }

kangxiaoshan committed
2325
                    } else if ("trade_type".equals(sheetTitle)) {
kangxiaoshan committed
2326
                        if (!tradTypeMap.containsKey(dataSTR)) {
kangxiaoshan committed
2327
                            return ResultModel.ERROR("第" + line_num + "行【行业分类】错误");
kangxiaoshan committed
2328 2329 2330
                        } else {
                            s_data[w] = tradTypeMap.get(dataSTR);
                        }
kangxiaoshan committed
2331
                    } else if ("sale".equals(sheetTitle)) {
kangxiaoshan committed
2332
                        if (!salseMap.containsKey(dataSTR)) {
kangxiaoshan committed
2333
                            return ResultModel.ERROR("第" + line_num + "行【签约销售】错误");
kangxiaoshan committed
2334 2335 2336
                        } else {
                            s_data[w] = salseMap.get(dataSTR);
                        }
kangxiaoshan committed
2337 2338
                    } else if ("contract_type".equals(sheetTitle)) {
                        if (!CONTRACT_TYPE_NAME.containsKey(dataSTR)) {
kangxiaoshan committed
2339
                            return ResultModel.ERROR("第" + line_num + "行【签约类型】错误");
kangxiaoshan committed
2340
                        } else {
kangxiaoshan committed
2341
                            s_data[w] = CONTRACT_TYPE_NAME.get(dataSTR);
kangxiaoshan committed
2342
                        }
kangxiaoshan committed
2343
                    } else if ("price_level".equals(sheetTitle)) {
kangxiaoshan committed
2344
                        if (packageMap != null && !packageMap.containsKey(dataSTR)) {
kangxiaoshan committed
2345
                            return ResultModel.ERROR("第" + line_num + "行【套餐】错误");
kangxiaoshan committed
2346 2347 2348
                        } else {
                            s_data[w] = packageMap.get(dataSTR);
                        }
kangxiaoshan committed
2349 2350
                    } else if ("start_date".equals(sheetTitle) || "end_date".equals(sheetTitle)) {
                        String dfmate = cell.getCellStyle().getDataFormatString();
1  
kangxiaoshan committed
2351 2352 2353 2354 2355 2356 2357 2358

                        if (!"yyyy/mm;@".equals(dfmate)
                                && !"m/d/yy".equals(dfmate)
                                && !"yy/m/d".equals(dfmate)
                                && !"mm/dd/yy".equals(dfmate)
                                && !"dd-mmm-yy".equals(dfmate)
                                && !"yyyy/m/d".equals(dfmate)
                        ) {
kangxiaoshan committed
2359
                            return ResultModel.ERROR("第" + line_num + "行【日期单元格】错误");
kangxiaoshan committed
2360
                        }
kangxiaoshan committed
2361

1  
kangxiaoshan committed
2362 2363 2364 2365 2366 2367 2368 2369
                        if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
                            // 用于转化为日期格式
                            Date d = cell.getDateCellValue();
                            DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
                            s_data[w] = formater.format(d);
                        } else {
                            s_data[w] = cell.toString();
                        }
kangxiaoshan committed
2370

1  
kangxiaoshan committed
2371 2372
                        if ("start_date".equals(sheetTitle)) {
                            ds = s_data[w].toString();
kangxiaoshan committed
2373
                        }
1  
kangxiaoshan committed
2374

kangxiaoshan committed
2375 2376
                    } else if ("money".equals(sheetTitle)) {

2377
                        s_data[w] = dataSTR.replace(",", "");
kangxiaoshan committed
2378 2379
                    } else {
                        s_data[w] = dataSTR;
kangxiaoshan committed
2380 2381 2382 2383

                        if ("email".equals(sheetTitle) && !StringUtils.isEmpty(dataSTR) && "tkio".equals(platformexcl)) {
                            accountsEmail.add(dataSTR.trim());
                        }
kangxiaoshan committed
2384
                    }
kangxiaoshan committed
2385 2386 2387
                }
            }

kangxiaoshan committed
2388 2389 2390 2391 2392 2393 2394
            if (!accountsEmail.isEmpty()) {
                List<String> emails = accountRepository.findEmailByEmails(accountsEmail);
                Map<String, String> emailDic;
                try (Stream<String> emailStream = emails.stream()) {
                    emailDic = emailStream.collect(Collectors.toMap(v -> v, v -> v, (v1, v2) -> v1));
                }

kangxiaoshan committed
2395
                /*//查询腾讯云 服务器上的账号
kangxiaoshan committed
2396 2397
                String emailQ = String.join(",", accountsEmail).replace(",", "','");
                jdbcTemplateqCloud.query("select email from account where is_super_user is true and  email in (?) ", new String[]{"'" + emailQ + "'"}, new RowMapper<Map>() {
kangxiaoshan committed
2398 2399 2400 2401 2402
                    @Override
                    public Map mapRow(ResultSet resultSet, int i) throws SQLException {
                        emailDic.put(resultSet.getString("email"), resultSet.getString("email"));
                        return null;
                    }
kangxiaoshan committed
2403
                });*/
kangxiaoshan committed
2404

kangxiaoshan committed
2405
                List<QcloudAccount> qcloudAccounts = qcloudAccountRepository.findAll();
kangxiaoshan committed
2406
                qcloudAccounts.forEach(v -> emailDic.put(v.getEmail(), ""));
kangxiaoshan committed
2407

kangxiaoshan committed
2408 2409 2410 2411 2412 2413 2414
                for (int i = 0; i < accountsEmail.size(); i++) {
                    String e = accountsEmail.get(i);
                    if (!emailDic.containsKey(e)) {
                        return ResultModel.ERROR("第" + (i + 1) + "行 客户主账号【" + e + "】在Office运营后台未找到,请重新上传");
                    }
                }
            }
kangxiaoshan committed
2415

kangxiaoshan committed
2416
            //platform,product,my_body_code,create_time,code_num,type,status,back_status,ds,
kangxiaoshan committed
2417 2418 2419 2420
            s_data[row_already] = platform;
            s_data[row_already + 1] = platform;
            s_data[row_already + 2] = bodyCode;
            s_data[row_already + 3] = new Date();
kangxiaoshan committed
2421 2422
            s_data[row_already + 4] = 0;
            s_data[row_already + 5] = "main";
kangxiaoshan committed
2423 2424 2425
            s_data[row_already + 6] = ContractStatusEnum.NFORMAL.getKey(); //常规合同
            s_data[row_already + 7] = 1; //未回款
            s_data[row_already + 8] = ds;
kangxiaoshan committed
2426
//            create_account,create_name,extra_flow,relation_contract,invoice_money,first_back_id
kangxiaoshan committed
2427 2428 2429 2430
            s_data[row_already + 9] = 0;
            s_data[row_already + 10] = "导入";
            s_data[row_already + 11] = 0;
            s_data[row_already + 12] = -1;
kangxiaoshan committed
2431
            s_data[row_already + 13] = 0;
kangxiaoshan committed
2432
            s_data[row_already + 14] = 0;
kangxiaoshan committed
2433
            //批量添加数据
kangxiaoshan committed
2434 2435 2436
            args_data.add(s_data);
        }

kangxiaoshan committed
2437 2438 2439 2440
        StringBuffer sql = new StringBuffer("insert into contract (");
        titleKey.forEach(v -> sql.append(v + ","));
        sql.append(extend_row_sql);
        sql.append(") values (");
kangxiaoshan committed
2441

kangxiaoshan committed
2442 2443 2444
        for (
                int ed = 0, s = row_already + extend_size;
                ed < s; ed++) {
kangxiaoshan committed
2445 2446
            if (ed == 0) {
                sql.append("?");
kangxiaoshan committed
2447
            } else {
kangxiaoshan committed
2448
                sql.append(",?");
kangxiaoshan committed
2449 2450
            }
        }
kangxiaoshan committed
2451 2452
        sql.append(")");
        logger.info("sql[{}]", sql.toString());
kangxiaoshan committed
2453

kangxiaoshan committed
2454
//        TransactionStatus transactionStatus = transactionUtils.begin();
kangxiaoshan committed
2455
        jdbcTemplate.batchUpdate(sql.toString(), args_data);
kangxiaoshan committed
2456
//        transactionUtils.commit(transactionStatus);
kangxiaoshan committed
2457 2458

        return ResultModel.OK();
kangxiaoshan committed
2459 2460 2461 2462

    }


kangxiaoshan committed
2463
    private boolean parseRowData(Row row, int length, StringBuffer content, List<String> titleKey) {
kangxiaoshan committed
2464 2465

        if (row == null) {
kangxiaoshan committed
2466
            return false;
kangxiaoshan committed
2467 2468 2469 2470 2471 2472 2473 2474
        }
        if (content == null) {
            content = new StringBuffer();
        }
        DataFormatter formatter = new DataFormatter();
        for (int i = 0; i < length; i++) {
            Cell cell = row.getCell(i);
            if (null != cell && !cell.getCellTypeEnum().equals(CellType.BLANK)) {
kangxiaoshan committed
2475
                String cnValue = formatter.formatCellValue(cell).trim();
kangxiaoshan committed
2476
                if (content.length() == 0) {
kangxiaoshan committed
2477
                    content.append(cnValue);
kangxiaoshan committed
2478
                } else {
kangxiaoshan committed
2479 2480 2481 2482 2483
                    content.append("," + cnValue);
                }

                if (!SHEET_TITLE.containsKey(cnValue)) {
                    return false;
kangxiaoshan committed
2484
                }
kangxiaoshan committed
2485
                titleKey.add(SHEET_TITLE.get(cnValue));
kangxiaoshan committed
2486 2487 2488
            }
        }

kangxiaoshan committed
2489
        return true;
kangxiaoshan committed
2490
    }
kangxiaoshan committed
2491

2492

kangxiaoshan committed
2493
    public static void main(String[] args) {
2494 2495 2496 2497 2498 2499 2500
//        String dateStr1 = "2019-04-30";
//        String dateStr2 = "2019-04-01";
//
//        System.out.println(new DateTime(dateStr2).compareTo(new DateTime(dateStr1)));
//        System.out.println(Days.daysBetween(new DateTime(dateStr2), new DateTime(dateStr1)).getDays());

        System.out.println(10023L * 1.0 / 100);
kangxiaoshan committed
2501
        System.out.println((129 * 100 / 111) * 1.0 / 100);
2502 2503
        System.out.println();

kangxiaoshan committed
2504
    }
manxiaoqiang committed
2505
}