Advertisement
Guest User

Untitled

a guest
Dec 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 11.46 KB | None | 0 0
  1. import com.groupstp.rtneo.entity.*
  2. import java.util.*
  3. import com.haulmont.cuba.core.global.*
  4. import com.groupstp.rtneo.entity.*
  5. import com.haulmont.cuba.core.entity.FileDescriptor
  6. import com.haulmont.cuba.core.app.FileStorageAPI
  7. import java.io.InputStream
  8. import java.io.InputStreamReader
  9. import java.io.ByteArrayOutputStream    
  10. import org.apache.commons.io.IOUtils
  11. import java.nio.charset.StandardCharsets;
  12. import com.opencsv.CSVReader;
  13. import com.groupstp.rtneo.service.BillService
  14. import java.text.SimpleDateFormat
  15. import org.apache.commons.collections.CollectionUtils
  16.  
  17.  
  18. DataManager dataManager = AppBeans.get(DataManager.NAME)
  19. FileStorageAPI fileStorageAPI=AppBeans.get(FileStorageAPI.NAME);
  20. BillService billService = AppBeans.get(BillService.NAME)
  21.  
  22.  
  23. String id='6129c48c-fda9-7225-e770-4e6e9d76037b'
  24.  
  25.  
  26. FileDescriptor fd = dataManager.load(FileDescriptor.class)
  27.     .id(UuidProvider.fromString(id))
  28.         .view(View.MINIMAL)
  29.         .optional()
  30.         .orElse(null);
  31.         if (fd == null) {
  32.             throw new RuntimeException(getMessage("BigTrioContractImporterBean.fileNotFound"));
  33.         }
  34. InputStream inputStream=fileStorageAPI.openStream(fd)
  35. CSVReader reader = new CSVReader(new InputStreamReader(inputStream, "UTF-8"));
  36. List<String> listInn = [];
  37. for(row in reader)
  38. {
  39.   listInn.add(row[0])
  40. }
  41.  
  42. def period1 = '2019-01-01'
  43. def period2 = '2019-09-01'
  44.  
  45. def df1 = new SimpleDateFormat("yyyy-MM-dd")
  46. //period = df1.parse(period1)
  47. def dateView = new SimpleDateFormat("dd-MM-yyyy")
  48. Calendar periodEnd   = Calendar.getInstance();
  49. //periodStart.setTime(df1.parse(period1));
  50. periodEnd.setTime(df1.parse(period2));
  51. Calendar periodStart = Calendar.getInstance();
  52. periodStart.setTime(df1.parse(period1));
  53.  
  54. def i = 0;
  55.  
  56.  
  57. def contragents = dataManager.loadValues('select c.id, c.inn, c.kpp from rtneo$Contragent c where c.inn in :listInn order by c.id')
  58.         .properties("id", "inn", "kpp")
  59.         .parameter("listInn", listInn)
  60.         .firstResult(i*10000)
  61.         .maxResults(10000)
  62.         .list();
  63.  
  64. //def contragents = dataManager.loadValues('select c.id, c.inn, c.kpp from rtneo$Contragent c where c.inn = \'3808105761\' order by c.id')
  65. //        .properties("id", "inn", "kpp")
  66. //        .list();
  67.  
  68. //List<Accrual> accruals = null
  69. def accrualsGroup = new TreeMap<>();
  70. def contragentsGroup = new TreeMap<>();
  71.  
  72. for(def contragent : contragents){
  73.    
  74.     def payments = dataManager.load(Payment.class)
  75.                 .query('select p from rtneo$Payment p where p.inn = :inn')
  76.                 .parameter('inn', contragent.getValue('inn'))
  77.                 .view('_local')
  78.                 .list();
  79.     if(payments.size() == 0) continue;
  80.    
  81.     List<Accrual> rentAccruals = null
  82.     def isPayRent = false;
  83.     def res = dataManager.load(RealEstateRenter.class)
  84.             .query('select r from rtneo$RealEstateRenter r where r.contragentRealEstate.contragent.id = :id and r.payOwner = true')
  85.             .parameter("id", contragent.getValue('id'))
  86.             .view("realEstateRenter-changeQueryControl")
  87.             .list();
  88.     if(res.size() != 0){
  89.         isPayRent = true
  90.         log.debug("Contragent[${contragent.getValue('id')}] rent is ${res.size()}")
  91.     }
  92.     if(isPayRent){
  93.         rentAccruals = initBillsRentersTab(res)
  94.     }
  95.    
  96.     if(contragentsGroup[contragent.getValue('inn')] == null){
  97.         contragentsGroup[contragent.getValue('inn')] =[
  98.             'inn' : contragent.getValue('inn'),
  99.             'kpp' : contragent.getValue('kpp'),
  100.         ]
  101.     }
  102.    
  103.     contragentsGroup[contragent.getValue('inn')]['payments'] = [:];
  104.     for(def payment : payments){
  105.         if(contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())] == null){
  106.             contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())] = [
  107.                 'purpose' : payment.getPurpose(),
  108.                 'sum' : payment.getSum()
  109.             ]
  110.         }else{
  111.             contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())]['sum'] += payment.getSum();
  112.         }
  113.     }
  114.     contragentsGroup[contragent.getValue('inn')]['accruals'] = [:];
  115.     accrualsGroup = [:];
  116.     periodStart.set(Calendar.MONTH, 0);
  117.     periodStart.set(Calendar.YEAR, 2019);
  118.    
  119.     while(!periodStart.after(periodEnd)){
  120.        
  121.         List<Accrual> accruals = billService.getBillsOnPeriod(UUID.fromString(contragent.getValue('id').toString()), periodStart.getTime())
  122.  
  123. if(rentAccruals != null){
  124. //    log.debug("Before rent ${accruals}")
  125.     for(Accrual rentAccrual : rentAccruals){
  126. //        log.debug("rentAccrual.getPeriod() - ${rentAccrual.getPeriod()}, periodStart - ${periodStart.getTime()}")
  127.         if(rentAccrual.getPeriod() == periodStart.getTime()){
  128.             accruals.add(rentAccrual)
  129.         }
  130.     }
  131. //    log.debug("After rent ${accruals}")
  132. }
  133.  
  134.         for(def accrual : accruals){
  135.             tariffNoNDS = accrual.getPrice()*5/6;
  136.             if(accrualsGroup[dateView.format(accrual.getPeriod())]==null){
  137.                 accrualsGroup[dateView.format(accrual.getPeriod())] = [
  138.                     'period' : dateView.format(accrual.getPeriod()),
  139.                     'number' : accrual.getDocumentNumber(),
  140.                     'tariff' : tariffNoNDS,
  141.                     'amountBase' : getNN(accrual.getAmountBase()),
  142.                     'totalSumBaseNoNds' : getNN(accrual.getAmountBase())*tariffNoNDS,
  143.                     'totalSumBase' : getNN(accrual.getTotalSumBase()),
  144.                     'totalSum' : getNN(accrual.getTotalSum()),
  145.                     'done' : false
  146.                 ]
  147.             }else{
  148.                 accrualsGroup[dateView.format(accrual.getPeriod())]['amountBase'] += getNN(accrual.getAmountBase())
  149.                 accrualsGroup[dateView.format(accrual.getPeriod())]['totalSumBaseNoNds'] += getNN(accrual.getAmountBase())*tariffNoNDS
  150.                 accrualsGroup[dateView.format(accrual.getPeriod())]['totalSumBase'] += getNN(accrual.getTotalSumBase())
  151.                 accrualsGroup[dateView.format(accrual.getPeriod())]['totalSum'] += getNN(accrual.getTotalSum())
  152.             }
  153.            
  154.         }
  155.         periodStart.add(Calendar.MONTH, 1)
  156.        
  157.     }
  158.    
  159.     contragentsGroup[contragent.getValue('inn')]['accruals'] = accrualsGroup;
  160. }
  161.  
  162. def res = [:]
  163. for(def contr : contragentsGroup){
  164.     def sumPay = 0
  165.     contr.getValue()['payments'].each{p -> sumPay += p.getValue()['sum']}
  166.    
  167.     res[contr.getValue()['inn']] = [
  168.         'inn' : contr.getValue()['inn'],
  169.         'kpp' : contr.getValue()['kpp'],
  170.         'sumPayments' : sumPay,
  171.         'accruals': [:]
  172.     ]
  173. //    def accrual = []
  174.     for(def accrualFor : contr.getValue()['accruals']){
  175.         sumPay -= accrualFor.getValue()['totalSum']
  176.        
  177.         if(!(sumPay<0))accrualFor.getValue()['done'] = true else accrualFor.getValue()['done'] = false
  178.  
  179.         res[contr.getValue()['inn']]['accruals'][accrualFor.getValue()['period']]=accrualFor
  180.     }
  181.    
  182.  
  183. }
  184. Calendar endMonth   = Calendar.getInstance();
  185. endMonth.setTime(df1.parse(period1));
  186. for(def itemRes : res){
  187. //    log.debug(itemRes)
  188.     for(def item : itemRes.getValue()['accruals']){
  189. //        log.debug(item.getValue().getValue())
  190.         def total = item.getValue().getValue()
  191.        
  192.         endMonth.setTime(dateView.parse(total['period'].toString()));
  193.         endMonth.set(Calendar.DAY_OF_MONTH, endMonth.getActualMaximum(Calendar.DAY_OF_MONTH))
  194.        
  195.         def month = getTextPeriod(dateView.parse(total['period']))
  196.        
  197.         log.debug("!Услуга Регионального оператора по обращению с ТКО за ${month}!${total['number']}!${dateView.format(endMonth.getTime())}!${itemRes.getValue()['inn']}!${itemRes.getValue()['kpp']}!${total['amountBase']}!${total['tariff']}!${total['totalSumBaseNoNds']}!${total['totalSum']-total['totalSumBaseNoNds']}!${total['totalSum']}!${total['done']}")
  198.     }
  199. }
  200. return res;
  201.  
  202. def getTextPeriod(Date date) {
  203.     def result=''
  204.     if (date != null) {
  205.         def monthesRP = ['январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь']
  206.         Calendar cal = Calendar.getInstance()
  207.         cal.setTime(date);
  208.         result+=monthesRP[cal.get(Calendar.MONTH)]
  209.         result+=" "+cal.get(Calendar.YEAR).toString()+" г."
  210.     }
  211.     return result
  212. }
  213. def getNN(BigDecimal value) {
  214.     return value == null ? BigDecimal.ZERO : value;
  215. }
  216.  
  217. def initBillsRentersTab(List<RealEstateRenter> rentersRE) {
  218.         //Формируем запрос в accrualDs для получения  начислений арендаторов для которых арендотатель выбрал оплату арендотаделем
  219.         String fullSql = '';
  220.         int actual = 0;
  221. //        List<RealEstateRenter> rentersRE = getRentersRE();
  222.         if (rentersRE.size() > 0) {
  223.             for (RealEstateRenter renterRE : rentersRE) {
  224.                 List<Contract> contracts = dataManager.load(Contract.class)
  225.                         .query('select e from rtneo$Contract e where e.contragent.id = :contragent and e.accepted = true order by e.createTs desc')
  226.                         .parameter("contragent", renterRE.getContragent().getId())
  227.                         .view("_local")
  228.                         .list();
  229.                 if (contracts.size() > 0) {
  230.                     Contract lastContract = null;
  231.                     String sqlQuery = '';
  232.                     for (Contract contract : contracts) {
  233.                         if (lastContract == null) {
  234.                             lastContract = contract;
  235.                             sqlQuery = 'cast(a.contractPosition.contract.id text)=\'' + contract.getId().toString() + '\' ';
  236.                         } else {
  237.                             if (contract.getFrom().before(lastContract.getFrom())) {
  238.                                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  239.                                 String date = sdf.format(lastContract.getFrom());
  240.                                 sqlQuery = sqlQuery + ' or (cast(a.contractPosition.contract.id text)=\'' + contract.getId().toString() + '\' and a.period < \'' + date + '\' )';
  241.                                 lastContract = contract;
  242.                             }
  243.                         }
  244.                     }
  245.                     if (sqlQuery != '') {
  246.                         sqlQuery = '(cast(a.contragent.id text) = \'' + renterRE.getContragent().getId().toString() + '\' and cast(a.contractPosition.contragentRealEstate.id text)=\'' + renterRE.getRenterRecord().getId().toString() + '\' and (' + sqlQuery + ')) ';
  247.                         if (actual == 0) {
  248.                             fullSql = sqlQuery;
  249.                             actual = 1;
  250.                         } else fullSql = fullSql + ' or ' + sqlQuery;
  251.                     }
  252.                 }
  253.             }
  254.         }
  255.         if (actual == 0) {
  256.             fullSql = 'select e from rtneo$Accrual e where 1 = 0';
  257.         } else {
  258.             fullSql = 'select a from  rtneo$Accrual a where ' + fullSql + 'order by a.period';
  259.         }
  260.         List<Accrual> accruals = dataManager.load(Accrual.class)
  261.                 .query(fullSql)
  262.                 .view("accrual-edit")
  263.                 .list();
  264.         for (int l = 0; l < accruals.size(); l++) {
  265.             log.debug(accruals.get(l));
  266.         }
  267.         return accruals;
  268.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement