MyTetra Share
Делитесь знаниями!
Выгрузка для УПД по файлу
Время создания: 06.07.2020 12:22
Раздел: INFO - JOB - rtneo - Выгрузки - УПД
Запись: wwwlir/Tetra/master/base/1594009357g9gfxo4wck/text.html на raw.githubusercontent.com

import com.groupstp.rtneo.entity.*

import java.util.*

import com.haulmont.cuba.core.global.*

import com.groupstp.rtneo.entity.*

import com.haulmont.cuba.core.entity.FileDescriptor

import com.haulmont.cuba.core.app.FileStorageAPI

import java.io.InputStream

import java.io.InputStreamReader

import java.io.ByteArrayOutputStream

import org.apache.commons.io.IOUtils

import java.nio.charset.StandardCharsets;

import com.opencsv.CSVReader;

import com.groupstp.rtneo.service.BillService

import java.text.SimpleDateFormat

import org.apache.commons.collections.CollectionUtils



DataManager dataManager = AppBeans.get(DataManager.NAME)

FileStorageAPI fileStorageAPI=AppBeans.get(FileStorageAPI.NAME);

BillService billService = AppBeans.get(BillService.NAME)



String id='08bd1e2f-a512-2d12-a388-19176597c7f7'



FileDescriptor fd = dataManager.load(FileDescriptor.class)

.id(UuidProvider.fromString(id))

.view(View.MINIMAL)

.optional()

.orElse(null);

if (fd == null) {

throw new RuntimeException(getMessage("BigTrioContractImporterBean.fileNotFound"));

}

InputStream inputStream=fileStorageAPI.openStream(fd)

CSVReader reader = new CSVReader(new InputStreamReader(inputStream, "UTF-8"));

List<String> listInn = [];

for(row in reader)

{

listInn.add(row[0])

}


def period1 = '2019-01-01'

def period2 = '2019-12-01'


def df1 = new SimpleDateFormat("yyyy-MM-dd")

//period = df1.parse(period1)

def dateView = new SimpleDateFormat("dd-MM-yyyy")

Calendar periodEnd = Calendar.getInstance();

//periodStart.setTime(df1.parse(period1));

periodEnd.setTime(df1.parse(period2));

Calendar periodStart = Calendar.getInstance();

periodStart.setTime(df1.parse(period1));


def i = 0;


//def contragents = dataManager.load(Contragent)

// .query('select c.inn, c.kpp from rtneo$Contragent c where not c.notDoingBusiness = true or c.notDoingBusiness is null order by c.id')

// .view("_local")

// .firstResult(i*200)

// .maxResults(200)

// .list();


def contragents = dataManager.loadValues('select c.id, c.inn, c.kpp from rtneo$Contragent c where c.inn in :listInn order by c.id')

.properties("id", "inn", "kpp")

.parameter("listInn", listInn)

.firstResult(i*10000)

.maxResults(10000)

.list();

//List<Accrual> accruals = null

def accrualsGroup = new TreeMap<>();

def contragentsGroup = new TreeMap<>();


for(def contragent : contragents){

def payments = dataManager.load(Payment.class)

.query('select p from rtneo$Payment p where p.inn = :inn')

.parameter('inn', contragent.getValue('inn'))

.view('_local')

.list();

if(payments.size() == 0) continue;

if(contragentsGroup[contragent.getValue('inn')] == null){

contragentsGroup[contragent.getValue('inn')] =[

'inn' : contragent.getValue('inn'),

'kpp' : contragent.getValue('kpp'),

]

}

contragentsGroup[contragent.getValue('inn')]['payments'] = [:];

for(def payment : payments){

if(contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())] == null){

contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())] = [

'purpose' : payment.getPurpose(),

'sum' : payment.getSum()

]

}else{

contragentsGroup[contragent.getValue('inn')]['payments'][dateView.format(payment.getDate())]['sum'] += payment.getSum();

}

}

contragentsGroup[contragent.getValue('inn')]['accruals'] = [:];

accrualsGroup = [:];

periodStart.set(Calendar.MONTH, 0);

periodStart.set(Calendar.YEAR, 2019);

while(!periodStart.after(periodEnd)){

List<Accrual> accruals = billService.getBillsOnPeriod(UUID.fromString(contragent.getValue('id').toString()), periodStart.getTime())


for(def accrual : accruals){

tariffNoNDS = accrual.getPrice()*5/6;

if(accrualsGroup[dateView.format(accrual.getPeriod())]==null){

accrualsGroup[dateView.format(accrual.getPeriod())] = [

'period' : dateView.format(accrual.getPeriod()),

'number' : accrual.getDocumentNumber(),

'tariff' : tariffNoNDS,

'amountBase' : getNN(accrual.getAmountBase()),

'totalSumBaseNoNds' : getNN(accrual.getAmountBase())*tariffNoNDS,

'totalSumBase' : getNN(accrual.getTotalSumBase()),

'totalSum' : getNN(accrual.getTotalSum()),

'done' : false

]

}else{

accrualsGroup[dateView.format(accrual.getPeriod())]['amountBase'] += getNN(accrual.getAmountBase())

accrualsGroup[dateView.format(accrual.getPeriod())]['totalSumBaseNoNds'] += getNN(accrual.getAmountBase())*tariffNoNDS

accrualsGroup[dateView.format(accrual.getPeriod())]['totalSumBase'] += getNN(accrual.getTotalSumBase())

accrualsGroup[dateView.format(accrual.getPeriod())]['totalSum'] += getNN(accrual.getTotalSum())

}

}

periodStart.add(Calendar.MONTH, 1)

}

contragentsGroup[contragent.getValue('inn')]['accruals'] = accrualsGroup;

}


def res = [:]

for(def contr : contragentsGroup){

def sumPay = 0

contr.getValue()['payments'].each{p -> sumPay += p.getValue()['sum']}

res[contr.getValue()['inn']] = [

'inn' : contr.getValue()['inn'],

'kpp' : contr.getValue()['kpp'],

'sumPayments' : sumPay,

'accruals': [:]

]

// def accrual = []

for(def accrualFor : contr.getValue()['accruals']){

sumPay -= accrualFor.getValue()['totalSum']

if(!(sumPay<0))accrualFor.getValue()['done'] = true else accrualFor.getValue()['done'] = false


res[contr.getValue()['inn']]['accruals'][accrualFor.getValue()['period']]=accrualFor

}


}

Calendar endMonth = Calendar.getInstance();

endMonth.setTime(df1.parse(period1));

for(def itemRes : res){

// log.debug(itemRes)

for(def item : itemRes.getValue()['accruals']){

// log.debug(item.getValue().getValue())

def total = item.getValue().getValue()

endMonth.setTime(dateView.parse(total['period'].toString()));

endMonth.set(Calendar.DAY_OF_MONTH, endMonth.getActualMaximum(Calendar.DAY_OF_MONTH))

def month = getTextPeriod(dateView.parse(total['period']))

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']}")

}

}

return res;


def getTextPeriod(Date date) {

def result=''

if (date != null) {

def monthesRP = ['январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь']

Calendar cal = Calendar.getInstance()

cal.setTime(date);

result+=monthesRP[cal.get(Calendar.MONTH)]

result+=" "+cal.get(Calendar.YEAR).toString()+" г."

}

return result

}

def getNN(BigDecimal value) {

return value == null ? BigDecimal.ZERO : value;

}

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования