Gia han hop dong ============= > config precondition init api ```sql INSERT INTO jupviecnoibo.`system` (name, value) VALUES ('pre-condition-extend-contract-config', '{ "isNeedConfirm": true, "messageConfirm": "Nếu hài lòng nhân viên đang làm, bạn có thể tiếp tục chọn nhân viên này đến làm nhà bạn.", "maxSuggestionMaid": 2 }'); ``` > added table | Tabe | Description | | -------- | -------- | | contract_pre_order | lưu lại thông tin đặt dịch vụ của khách hàng cho hợp đồng | | contract_period_info | Thông tin cơ bạn của hợp đồng định kỳ | | contract_period_extend_history | lịch sử gia hạn hợp đồng | > Thông tin các Bảng được thêm > contract_period_info | Column | Comment | | -------- | -------- | | contract_id | Mã hợp đồng định kỳ | | from_date | Thời gian bắt đầu. thời gian này sẽ được tính bởi hợp của các hợp đồng gia hạn của hợp đồng | | to_date | Thời gian kết thúc. thời gian này sẽ được tính bởi hợp của các hợp đồng gia hạn của hợp đồng | | customer_id | khách hàng | | address_id | địa chỉ | | is_extended_contract | hợp đồng gia hạn không | > contract_period_extend_history | Column | Comment | | -------- | -------- | | origin_contract_id | hợp đồng gốc | | extended_contract_id | hợp đồng extend | > contract_pre_order | Column | Comment | | -------- | -------- | | contract_id | Mã hợp đồng | | maid_ids | Danh sách yêu cầu nhân viên | ### Define contract period --------- ### Migrate data - Đã tạo function migrate data trên customer service. - Sẽ tính toán lại để migrate data cho toàn bộ khách hàng. ```java= @Override public void migrateContractPeriod(int customerId) { List<Contracts> contractsList = contractsRepository.findAllByCustomerId(customerId); for (Contracts c : contractsList) { if(c.getProductPackageId() != Constants.CONTRACT_PRODUCT_PACKAGE_PERIOD) continue; Optional<ContractPeriodInfo> contractPeriodInfoOptional = contractPeriodInfoRepository.findByContractId(c.getId()); if(!contractPeriodInfoOptional.isPresent()) { log.info("migrate contract {}", c.getId()); ContractPeriodInfo contractPeriodInfo = new ContractPeriodInfo() .contractId(c.getId()) .fromDate(c.getFromDate()) .toDate(c.getToDate()) .createdBy(Constants.SYSTEM_CREATOR) .lastModifiedBy(Constants.SYSTEM_CREATOR) .customerId(c.getCustomerId()) .addressId(c.getAddressId()) .isExtendedContract(c.getExtendFromContractId() != 0); contractPeriodInfoRepository.save(contractPeriodInfo); ContractPeriodExtendHistory contractPeriodExtendHistory = new ContractPeriodExtendHistory() .originContractId(c.getExtendFromContractId() != 0 ? c.getExtendFromContractId() : c.getId()) .extendedContractId(c.getId()) .createdBy(Constants.SYSTEM_CREATOR) .lastModifiedBy(Constants.SYSTEM_CREATOR); contractPeriodExtendHistoryRepository.save(contractPeriodExtendHistory); if(c.getExtendFromContractId() != 0) { Optional<ContractPeriodInfo> oContractOptional = contractPeriodInfoRepository.findByContractId(c.getExtendFromContractId()); if(oContractOptional.isPresent()) { ContractPeriodInfo oContractPeriodInfo = oContractOptional.get(); oContractPeriodInfo.setToDate(oContractPeriodInfo.getToDate() > contractPeriodInfo.getToDate() ? oContractPeriodInfo.getToDate() : contractPeriodInfo.getToDate()); contractPeriodInfoRepository.save(oContractPeriodInfo); } } } } } ``` ### Deploy 1. deploy jv_customer_svc: branch feature/extend_contract_phase2 2. deploy jv_contract_svc: branch feature/extend_contract_phase2 3. deploy jv_customer_svc: branch hotfix/add_rule_item_extend_contract 4. call api: /migrate-period-contract migrate all data.