|
|||||||
Выгрузка для УПД по файлу
Время создания: 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; } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|