From c11b58c1b7003e05ccf515a7ffb98ee36d964fcc Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Tue, 5 Aug 2025 11:37:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8C=E5=8A=A1=E6=B6=88=E8=B4=B9=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E5=A2=9E=E5=8A=A0=E8=B4=B9=E7=94=A8=E5=BD=92=E5=B1=9E?= =?UTF-8?q?=E9=A2=86=E5=AF=BC=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/PositionFeesRptQueryPlugin.java | 121 +++++++++++++++++- 1 file changed, 119 insertions(+), 2 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java index dc13d80..e00fd59 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/report/PositionFeesRptQueryPlugin.java @@ -134,6 +134,7 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { for (Long userId : allUsersOfOrg) { //费用报销单数据-费用归属领导数据 DynamicObject[] dailyreimbursebillDataSet = getDailyreimbursebillDataSet(userId, year); + for (DynamicObject dynamicObject : dailyreimbursebillDataSet) { String billno = dynamicObject.getString("billno");//单据编号 //判罚是否因公出国 @@ -219,7 +220,86 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { } } } - //申请人查询 + + //对公报销单-费用归属领导查询 + DynamicObject[] publicreimburDataSet = getPublicreimburDataSet(userId, year); + for (DynamicObject dynamicObject : publicreimburDataSet) { + String billno = dynamicObject.getString("billno");//单据编号 + DynamicObjectCollection entrys = dynamicObject.getDynamicObjectCollection("expenseentryentity"); + for (DynamicObject entry : entrys) { + DynamicObject zcgjCostmangerEntity = entry.getDynamicObject("zcgj_costmanger_entity"); + if(zcgjCostmangerEntity == null){ + continue; + } + DynamicObject expenseitemObj = entry.getDynamicObject("expenseitem"); //费用项目 + if(expenseitemObj == null){ + continue; + } + Date happendate = entry.getDate("happendate");//费用发生日期 + String itemNumber = expenseitemObj.getString("number");//费用项目编码 + if(!itemSet.contains(itemNumber)){ + continue; + } + String happendateStr = dateFormat.format(happendate);//费用发生日期str + BigDecimal expenseamount = BigDecimal.ZERO; + if(istax){ + expenseamount = entry.getBigDecimal("expenseamount");//报销金额 + }else{ + expenseamount = entry.getBigDecimal("orientryamount");//不含税金额 + } + + + // 生成唯一的键:报销人 + 单据编号 + 费用发生日期 + String key = userId + "-" + billno + "-" + happendateStr; + userSet.add(userId); + // 根据键获取报表对象 + ExpenseReport report = reportMap.get(key); + if (report == null) { + report = new ExpenseReport(userId, billno, happendateStr); + reportMap.put(key, report); + } + // 为该行添加费用 + //report.addExpense(expenseType, amount); + if(itemNumber.startsWith(FYF)){//防疫费 + BigDecimal health = report.getHealth().add(expenseamount); + report.setHealth(health); + }else if(itemNumber.startsWith(TXF)){//日常费用-通信费用 + BigDecimal correspondence = report.getCorrespondence().add(expenseamount); + report.setCorrespondence(correspondence); + }else if(itemNumber.startsWith(PXF)){//日常费用-培训费用 + BigDecimal training = report.getTraining().add(expenseamount); + report.setTraining(training); + }else if(itemNumber.startsWith(YWZD_SWZD)){//日常费用-业务招待费-商务招待 + //businessEntertainment + BigDecimal businessEntertainment = report.getBusinessEntertainment().add(expenseamount); + report.setBusinessEntertainment(businessEntertainment); + }else if(itemNumber.startsWith(YWZD_WSZD)){//日常费用-业务招待费-外事招待 + //foreignEntertainment + BigDecimal foreignEntertainment = report.getForeignEntertainment().add(expenseamount); + report.setForeignEntertainment(foreignEntertainment); + } + else if(itemNumber.startsWith(YWZD_ZYGW)){//日常费用-业务招待费-重要公务 + //importantOfficial + BigDecimal importantOfficial = report.getImportantOfficial().add(expenseamount); + report.setImportantOfficial(importantOfficial); + } + else if(itemNumber.startsWith(YWZD_ZS)){//日常费用-业务招待费-住宿 + //accommodation + BigDecimal accommodation = report.getAccommodation().add(expenseamount); + report.setAccommodation(accommodation); + } + else if(itemNumber.startsWith(YWZD_JNP)){//日常费用-业务招待费-纪念品 + //souvenirs + BigDecimal souvenirs = report.getSouvenirs().add(expenseamount); + report.setSouvenirs(souvenirs); + }else if(itemNumber.startsWith(YWZD_QT)){//日常费用-业务招待费-其他 + //other + BigDecimal other = report.getOther().add(expenseamount); + report.setOther(other); + } + } + } + //费用报销单申请人查询 if(positionfeesstaffingList != null && positionfeesstaffingList.contains(userId)){ DynamicObject[] dailyreimbursebillDataSetByApplier = getDailyreimbursebillDataSetByApplier(userId, year); for (DynamicObject dynamicObject : dailyreimbursebillDataSetByApplier) { @@ -525,7 +605,7 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { /** - * 获取费用报销单数据-费用归属领导 + * 获取费用报销单数据-申请人查询 * @param userId 用户id * @param year 统计年份 * @return 数据集 @@ -594,6 +674,43 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { return load; } + + /** + * 获对公报销单数据-费用归属领导 + * @param userId 用户id + * @param year 统计年份 + * @return 数据集 + */ + public DynamicObject[] getPublicreimburDataSet(Long userId, Integer year){ + LocalDate firstDay = getFirstDayOfYear(year); + LocalDate lastDay = getLastDayOfYear(year); + List billStatuslist = new ArrayList<>(); + //billStatuslist.add("A"); //暂存 + //billStatuslist.add("B"); //已提交 + //billStatuslist.add("C"); //审核中 + //billStatuslist.add("D"); //审核未通过 + billStatuslist.add("E"); //审核通过 + billStatuslist.add("F"); //等待付款 + billStatuslist.add("G"); //已付款 + //billStatuslist.add("H"); //废弃 + billStatuslist.add("I"); //关闭 + List searchFilterList = new ArrayList<>(); + //searchFilterList.add(new QFilter("applier", QCP.equals, userId)); + searchFilterList.add(new QFilter("expenseentryentity.zcgj_costmanger_entity", QCP.equals, userId));//根据费用归属领导查询 + searchFilterList.add(new QFilter("expenseentryentity.happendate", QCP.large_equals, firstDay)); //费用发生日期 + searchFilterList.add(new QFilter("expenseentryentity.happendate", QCP.less_equals, lastDay)); + searchFilterList.add(new QFilter("billstatus", QCP.in, billStatuslist));//增加过滤 + DynamicObject[] load = BusinessDataServiceHelper.load("er_publicreimbursebill", + "id,description,billno,expenseentryentity,zcgj_costmanger_entity," + + DEV_KEY+"_is_business_foreign,"+ + "expenseentryentity.happendate," + //费用发生日期 + "expenseentryentity.expenseitem," + //费用项目 + "expenseentryentity.expenseamount, "+//报销金额(含税) + "expenseentryentity.orientryamount " //不含税金额 + , searchFilterList.toArray(new QFilter [] {})); + return load; + } + // 获取某年份的第一天 public static LocalDate getFirstDayOfYear(int year) { return LocalDate.of(year, 1, 1);