|
|||||||
Печать начисления замер производительности
Время создания: 08.10.2020 03:33
Раздел: INFO - JOB - rtneo - Работа над задачами
Запись: wwwlir/Tetra/master/base/1602099236o7uqdjt7gv/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
import com.haulmont.chile.core.model.MetaClass import com.haulmont.cuba.core.global.*; import com.groupstp.rtneo.entity.*; import com.groupstp.rtneo.service.AccrualService import com.groupstp.rtneo.service.CompanyService import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import com.haulmont.cuba.core.global.ViewRepository; import com.haulmont.cuba.core.global.View; def service = AppBeans.get(AccrualService.NAME) def companyService = AppBeans.get(CompanyService.NAME) ViewRepository vRep1 = AppBeans.get(ViewRepository.NAME) View viewAccrual = vRep1.getView(Accrual.class, "_local") .addProperty("contragent", vRep1.getView(Contragent.class, "_local") ) .addProperty("contractPosition", vRep1.getView(ContractPosition.class, "_local") .addProperty("contract", vRep1.getView(Contract.class, "_local") .addProperty("mainContract", vRep1.getView(Contract.class, "_local") .addProperty("company", vRep1.getView(Company.class, "_local")
) )
) )
// .addProperty("category", vRep1.getView(RealEstateCategory.class, "_local") // .addProperty("unit", vRep1.getView(Unit.class, "_local")) // ) // .addProperty("realEstate", vRep1.getView(RealEstate.class, "_local") // // ) def params =['number':2121383] long st = System.currentTimeMillis(); List<Accrual> accruals = dataManager.load(Accrual) .query('select a from rtneo$Accrual a where a.documentNumber = :documentNumber order by a.period asc') .parameter("documentNumber", params.number) .view('accrual-bill') // .view(viewAccrual) .list() long end = System.currentTimeMillis(); log.debug(end-st); if (accruals.size() == 0) { throw new RuntimeException(String.format("Начислений по номеру %s не найдено", params.number)) } Accrual accrual = accruals.get(0) Contragent contragent = accrual.getContragent() def result = new LinkedHashMap() def head = new LinkedHashMap() //Acts act = getActualAct(contragent.getInn(), contragent.getKpp(), accrual.getPeriod()) // //if(act == null){ // head['number'] = String.valueOf((int) params.number) //}else{ // head['number'] = act.getNumber() //} head['number'] = String.valueOf((int) params.number) //a.kotvinskiy /-- //head['billDate'] = getTextDate(accrual.getDocumentDate() == null ? accrual.getCreateTs() : accrual.getDocumentDate()) def monthesRP = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'] //Берем период счета Date billDate = accrual.getPeriod(); if (billDate==null){ billDate = accrual.getCreateTs() } Calendar cal = Calendar.getInstance() cal.setTime(billDate); //Устанавливаем дату на последний день предыдущего месяца //cal.add(Calendar.MONTH, -1); //Текущего месяца cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); head['billDate'] = cal.get(Calendar.DAY_OF_MONTH).toString() head['billDate']+=" "+monthesRP[cal.get(Calendar.MONTH)] head['billDate']+=" "+cal.get(Calendar.YEAR).toString()+" г." //a.kotvinskiy --/ head['name'] = contragent.getName(); head['shortName'] = contragent.getShortName(); if (head['shortName']==null){ head['shortName'] = head['name']; } head['inn'] = contragent.getInn(); head['kpp'] = contragent.getKpp(); head['legalAddress'] = contragent.getLegalAddress(); def contract = accrual.contractPosition.contract if (contract.mainContract != null) contract = contract.mainContract def company = contract.company //a.kotvinskiy /-- //def companyRequisites = companyService.getCompanyRequisites(company, contract.date) def companyRequisites = companyService.getCompanyRequisites(company, billDate) //a.kotvinskiy --/ head << ['contractNumber' : contract.number ,'contractDate' : contract.date ,'companyShortName' : company.shortName ,'companyInn':company.inn ,'companyKpp':companyRequisites.kpp ,'companyLegalAddress':companyRequisites.legalAddress ,'companyPhone':company.phone ,'companyBankName':companyRequisites.bankName ,'companyRcbic':companyRequisites.rcbic ,'companyCorrespondentAccount':companyRequisites.correspondentAccount ,'companyBankAccount':companyRequisites.bankAccount ] result['head'] = head; result['footer'] = [ 'billDate' : head['billDate'] ,'contractNumber' : contract.number ,'contractDate' : contract.date ,'shortName' : head['shortName'] ,'inn' : contragent.inn ,'kpp' : contragent.kpp ,'companyShortName' : company.shortName ,'companyInn':company.inn ,'companyKpp':companyRequisites.kpp ,'companyManager' : getShortFio(companyRequisites.getManagerName()) ,'companyManagerTitle':companyRequisites.managerTitle ,'companyAccountManager' : getShortFio(companyRequisites.managerName) ,'companyManagerDocumentR' : companyRequisites.getManagerDocumentR()] def items = new LinkedHashMap() def itemsInRent = new LinkedHashMap() // ViewRepository vRep = AppBeans.get(ViewRepository.NAME) View accrualView = vRep.getView(Accrual.class, "accrual-bill"); accrualView.addProperty("contractPosition", vRep.getView(ContractPosition.class, "_minimal").addProperty("contragentRealEstate", vRep.getView(ContragentRealEstate.class, "_minimal"))); // for (Accrual a: accruals){ //a.kotvinskiy /-- Boolean isRent = false; a = dataManager.reload(a, accrualView); ContractPosition cp = a.getContractPosition(); if(cp.getContragentRealEstate() != null){ // if(cp.getContragentRealEstate().getContragent()==contragent) isRent = true; // List<RealEstateRenter> rerList = dataManager.load(RealEstateRenter) // .query('select r from rtneo$RealEstateRenter r where r.renterRecord.id = :renterRecord and r.payOwner = true') // .parameter("renterRecord", cp.getContragentRealEstate().getId()) // .view('realEstateRenter-edit') // .list(); Integer countIsRent = dataManager.loadValue('select count(a) from rtneo$Accrual a where a.id = :accrualId and not a.contractPosition.contragent.id = a.contractPosition.contragentRealEstate.contragent.id', Integer.class) .parameter("accrualId", a.getId()) .optional().orElse(0) if(countIsRent > 0) isRent = true; } if(isRent){ fillItems(itemsInRent, a) }else{ fillItems(items, a) } //a.kotvinskiy --/ } def itemsArr = [] BigDecimal totalSum = 0 BigDecimal totalSumWoNds = 0 BigDecimal ndsSum = 0 if(items.size()==0){ itemsArr.add(['n':1, 'positionName':'Услуга Регионального оператора по обращению с ТКО за', 'month': getTextPeriod(accruals[0].getPeriod()), 'amount':getRussianNumber(BigDecimal.ZERO.setScale(5, RoundingMode.HALF_UP),5), 'price':getRussianNumber(accruals[0].getPrice()), 'priceWoNDS': getRussianNumber(BigDecimal.ZERO), 'sum': getRussianNumber(BigDecimal.ZERO), 'reductionFactor':getRussianNumber(0), 'totalSum':getRussianNumber(BigDecimal.ZERO), 'totalSumWoNds':getRussianNumber(BigDecimal.ZERO), 'ndsSum':getRussianNumber(BigDecimal.ZERO)]); } items.eachWithIndex { entry, i -> def sum = entry.value.price * entry.value.amount; itemsArr.add(['n':i+1, 'positionName':'Услуга Регионального оператора по обращению с ТКО за', 'month':entry.value.month, 'amount':getRussianNumber(entry.value.amount.setScale(5, RoundingMode.HALF_UP),5), 'price':getRussianNumber(entry.value.price), 'priceWoNDS': getRussianNumber(entry.value.price/120*100), 'sum': getRussianNumber(entry.value.sum), 'reductionFactor':getRussianNumber(entry.value.sum == 0 ? 0 : entry.value.totalSum/entry.value.sum), 'totalSum':getRussianNumber(entry.value.totalSum), 'totalSumWoNds':getRussianNumber(entry.value.totalSum/120*100), 'ndsSum':getRussianNumber(entry.value.totalSum - (entry.value.totalSum/120*100).setScale(2, RoundingMode.HALF_UP))]); totalSum+=entry.value.totalSum; totalSumWoNds+=entry.value.totalSum/120*100 ndsSum+=entry.value.totalSum - (entry.value.totalSum/120*100).setScale(2, RoundingMode.HALF_UP) } itemsInRent.eachWithIndex { entry, i -> def sum = entry.value.price * entry.value.amount; if(entry.value.sum != 0){ itemsArr.add(['n':2, 'positionName':'Услуга Регионального оператора по обращению с ТКО арендаторов за', 'month':entry.value.month, 'amount':getRussianNumber(entry.value.amount.setScale(5, RoundingMode.HALF_UP),5), 'price':getRussianNumber(entry.value.price), 'priceWoNDS': getRussianNumber(entry.value.price/120*100), 'sum': getRussianNumber(entry.value.sum), 'reductionFactor':getRussianNumber(entry.value.sum == 0 ? 0 : entry.value.totalSum/entry.value.sum), 'totalSum':getRussianNumber(entry.value.totalSum), 'totalSumWoNds':getRussianNumber(entry.value.totalSum/120*100), 'ndsSum':getRussianNumber(entry.value.totalSum - (entry.value.totalSum/120*100).setScale(2, RoundingMode.HALF_UP))]); totalSum+=entry.value.totalSum; totalSumWoNds+=entry.value.totalSum/120*100 ndsSum+=entry.value.totalSum - (entry.value.totalSum/120*100).setScale(2, RoundingMode.HALF_UP) } } result['items'] = itemsArr totalSum = totalSum.setScale(2, RoundingMode.HALF_UP) result['totals'] = ['totalSum': getRussianNumber(totalSum), 'totalNds': getRussianNumber(ndsSum), 'count': String.valueOf(itemsArr.size()), 'sumText':service.getNumberText(totalSum), 'totalSumWoNds':getRussianNumber(totalSumWoNds)] return [result] def fillItems(LinkedHashMap items, Accrual a){ String period = getTextPeriod(a.getPeriod()) if (items[period] == null) { items[period] = [ "month" : period, "amount":getNN(a.getAmountBase()), 'price': getNN(a.getPrice()), 'sum': getNN(a.getTotalSumBase()), 'totalSum': getNN(a.getTotalSum()) ] } else { items[period]['amount']+=getNN(a.getAmountBase()) items[period]['sum']+=getNN(a.getTotalSumBase()) items[period]['totalSum']+=getNN(a.getTotalSum()) } //return items; } def getRussianNumber(Double number, int precision = 2) { DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance() symbols.setGroupingSeparator((char) ' ') symbols.setDecimalSeparator((char) ',') String formatString = ''; switch(precision){ case 1: formatString = '###,###,###.#'; break; case 2: formatString = '###,###,###.##'; break; case 3: formatString = '###,###,###.###'; break; case 4: formatString = '###,###,###.####'; break; case 5: formatString = '###,###,###.######'; break; } DecimalFormat formatter = new DecimalFormat(formatString, symbols); return(formatter.format(number)); // if (precision == 2){ // DecimalFormat formatter = new DecimalFormat('###,###.##', symbols) // return(formatter.format(number)); // } else { // DecimalFormat formatter = new DecimalFormat('###,###.###', symbols) // return(formatter.format(number)); // } } 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 getTextDate(Date date) { def result='' if (date != null) { def monthesRP = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'] Calendar cal = Calendar.getInstance() cal.setTime(date); result = cal.get(Calendar.DAY_OF_MONTH).toString() result+=" "+monthesRP[cal.get(Calendar.MONTH)] result+=" "+cal.get(Calendar.YEAR).toString()+" г." } return result } def getNN(BigDecimal value) { return value == null ? BigDecimal.ZERO : value; } def getShortFio(String fio) { if (fio == null) return "" String pattern = "(\\S+\\s)(\\S{1})\\S+\\s(\\S{1})\\S+" String str = fio.replaceAll(pattern, '$1$2.$3.') return str } private Date getCorrDate(def accrual){ Date corrDate = new Date() Calendar accrualPeriod = Calendar.getInstance() accrualPeriod.setTime(accrual.getPeriod()); accrualPeriod.set(Calendar.DAY_OF_MONTH, accrualPeriod.getActualMaximum(Calendar.DAY_OF_MONTH)); Date dateContract = dataManager.loadValue('select e.contractPosition.contract.acceptanceDate from rtneo$Accrual e where e.documentNumber = :documentNumber', Date.class) .parameter("documentNumber", accrual.getDocumentNumber()) .one() if(dateContract.after(accrualPeriod.getTime())){ // _("Выводим дату контракта") corrDate = dateContract; }else{ // _("Выводим дату окончания периода начисления") Calendar cal = Calendar.getInstance() cal.setTime(accrual.getPeriod()) cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)) corrDate = cal.getTime() } return corrDate; } private Acts getActualAct(String inn, String kpp, Date period){ List<Acts> acts = dataManager.load(Acts.class) .query('select a from rtneo$Acts a where a.inn = :inn and a.kpp = :kpp and a.period = :period and a.adjustments is null') .parameter("inn", inn) .parameter("kpp", kpp) .parameter("period" ,period) .view("acts-view") .list() if(acts.size() == 0)return null return acts.get(0) } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|