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 8725afb..59c8427 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 @@ -118,13 +118,21 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { //通过查询用户过滤组织下的人 allUsersOfOrg = allUsersOfOrg.stream().filter(applierId::contains).collect(Collectors.toList()); } + //从配置表中获取需要纳入统计的人员 + DynamicObject[] positionfeesstaffing = BusinessDataServiceHelper.load("zcgj_positionfeesstaffing", "zcgj_user", + new QFilter[]{new QFilter("zcgj_is_involvement",QCP.equals,true)}); + Set positionfeesstaffingList = null; + if(positionfeesstaffing!=null && positionfeesstaffing.length>0){ + positionfeesstaffingList = Arrays.stream(positionfeesstaffing).map(e -> (Long) e.getDynamicObject("zcgj_user").getLong("id")) + .collect(Collectors.toSet()); + } LocalDate localDate = dateToLocalDate(queryYear); int year = localDate.getYear(); Set userSet = new HashSet<>(); // 用 Map 来按照报销人、单据编号、费用发生日期分组 Map reportMap = new LinkedHashMap<>(); for (Long userId : allUsersOfOrg) { - //费用报销单数据 + //费用报销单数据-费用归属领导数据 DynamicObject[] dailyreimbursebillDataSet = getDailyreimbursebillDataSet(userId, year); for (DynamicObject dynamicObject : dailyreimbursebillDataSet) { String billno = dynamicObject.getString("billno");//单据编号 @@ -211,6 +219,95 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { } } } + //申请人查询 + if(positionfeesstaffingList != null && positionfeesstaffingList.contains(userId)){ + DynamicObject[] dailyreimbursebillDataSetByApplier = getDailyreimbursebillDataSetByApplier(userId, year); + for (DynamicObject dynamicObject : dailyreimbursebillDataSetByApplier) { + String billno = dynamicObject.getString("billno");//单据编号 + //判罚是否因公出国 + Boolean isBusinessForeign = dynamicObject.getBoolean(DEV_KEY+"_is_business_foreign");//单据编号 + + 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); + } + if(!isBusinessForeign){ + // 为该行添加费用 + //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); + } + }else{ + //费用明细中的所有金额因公临时出国费用 + BigDecimal abroadTravel = report.getAbroadTravel().add(expenseamount); + report.setAbroadTravel(abroadTravel); + } + } + } + } //差旅报销单数据 DynamicObject[] tripreimburseDataSet = getTripreimburseDataSet(userId, year); @@ -391,7 +488,7 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { /** - * 获取费用报销单数据 + * 获取费用报销单数据-费用归属领导 * @param userId 用户id * @param year 统计年份 * @return 数据集 @@ -426,6 +523,43 @@ public class PositionFeesRptQueryPlugin extends AbstractReportListDataPlugin { return load; } + + /** + * 获取费用报销单数据-费用归属领导 + * @param userId 用户id + * @param year 统计年份 + * @return 数据集 + */ + public DynamicObject[] getDailyreimbursebillDataSetByApplier(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_dailyreimbursebill", + "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; + } + /** * 获取差旅报销单数据 * @param userId 用户id