Преглед изворни кода

优化报表中欠费明细导出失败问题

Signed-off-by: java110 <928255095@qq.com>
java110 пре 11 месеци
родитељ
комит
591c46465e

+ 115 - 0
service-job/src/main/java/com/java110/job/export/adapt/ReportOweFeeDetailAdapt.java

@@ -0,0 +1,115 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.reportFee.ReportFeeMonthStatisticsDto;
+import com.java110.intf.report.IReportFeeMonthStatisticsInnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ListUtil;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component("reportOweFeeDetail")
+public class ReportOweFeeDetailAdapt implements IExportDataAdapt {
+
+    @Autowired
+    private IReportFeeMonthStatisticsInnerServiceSMO reportFeeMonthStatisticsInnerServiceSMOImpl;
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) throws ParseException {
+
+        JSONObject paramIn = exportDataDto.getReqJson();
+        SXSSFWorkbook workbook = null;  //工作簿
+        //工作表
+        workbook = new SXSSFWorkbook();
+        workbook.setCompressTempFiles(false);
+        Sheet sheet = workbook.createSheet("欠费明细表");
+        Row row = sheet.createRow(0);
+        row.createCell(0).setCellValue("费用编号");
+        row.createCell(1).setCellValue("房号");
+        row.createCell(2).setCellValue("业主");
+        row.createCell(3).setCellValue("业主电话");
+        row.createCell(4).setCellValue("面积");
+        row.createCell(5).setCellValue("费用项");
+        row.createCell(6).setCellValue("开始时间");
+        row.createCell(7).setCellValue("结束时间");
+        row.createCell(8).setCellValue("欠费时长(天)");
+        row.createCell(9).setCellValue("欠费时长(月)");
+        row.createCell(10).setCellValue("欠费金额");
+
+        List<ReportFeeMonthStatisticsDto> rooms = this.getReportOweFeeDetail(paramIn);
+        if (ListUtil.isNull(rooms)) {
+            return workbook;
+        }
+        ReportFeeMonthStatisticsDto dataObj = null;
+        BigDecimal monthDec = null;
+        for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + 1);
+            dataObj = rooms.get(roomIndex);
+            row.createCell(0).setCellValue(roomIndex + 1);
+            row.createCell(1).setCellValue(dataObj.getObjName());
+            row.createCell(2).setCellValue(dataObj.getOwnerName());
+            row.createCell(3).setCellValue(dataObj.getOwnerTel());
+            row.createCell(4).setCellValue(dataObj.getBuiltUpArea());
+            row.createCell(5).setCellValue(dataObj.getFeeName());
+            row.createCell(6).setCellValue(dataObj.getStartTime());
+            row.createCell(7).setCellValue(dataObj.getEndTime());
+            row.createCell(8).setCellValue(dataObj.getOweDay());
+            monthDec = new BigDecimal(dataObj.getOweDay());
+            monthDec = monthDec.divide(new BigDecimal("30"), 2, BigDecimal.ROUND_HALF_UP);
+            row.createCell(9).setCellValue(monthDec.doubleValue());
+            row.createCell(10).setCellValue(dataObj.getOweAmount());
+        }
+        return workbook;
+    }
+
+    private List<ReportFeeMonthStatisticsDto> getReportOweFeeDetail(JSONObject paramIn) {
+
+        ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto = BeanConvertUtil.covertBean(paramIn, ReportFeeMonthStatisticsDto.class);
+        reportFeeMonthStatisticsDto.setPage(1);
+        reportFeeMonthStatisticsDto.setRow(10000);
+        int count = reportFeeMonthStatisticsInnerServiceSMOImpl.queryOweFeeDetailCount(reportFeeMonthStatisticsDto);
+        List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos = null;
+        if (count > 0) {
+            reportFeeMonthStatisticsDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryOweFeeDetail(reportFeeMonthStatisticsDto);
+            ReportFeeMonthStatisticsDto tmpReportFeeMonthStatisticsDto = reportFeeMonthStatisticsInnerServiceSMOImpl.queryOweFeeDetailMajor(reportFeeMonthStatisticsDto);
+            if (!ListUtil.isNull(reportFeeMonthStatisticsDtos)) {
+                for (ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto1 : reportFeeMonthStatisticsDtos) {
+//                    reportFeeMonthStatisticsDto1.setAllReceivableAmount(tmpReportFeeMonthStatisticsDto.getAllReceivableAmount());
+//                    reportFeeMonthStatisticsDto1.setAllReceivedAmount(tmpReportFeeMonthStatisticsDto.getAllReceivedAmount());
+                    reportFeeMonthStatisticsDto1.setAllOweAmount(tmpReportFeeMonthStatisticsDto.getOweAmount());
+                }
+            }
+            freshReportOweDay(reportFeeMonthStatisticsDtos);
+        } else {
+            reportFeeMonthStatisticsDtos = new ArrayList<>();
+        }
+
+        return reportFeeMonthStatisticsDtos;
+
+
+    }
+
+    private void freshReportOweDay(List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos) {
+        int day = 0;
+        for (ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto : reportFeeMonthStatisticsDtos) {
+            try {
+                day = DateUtil.daysBetween(DateUtil.getDateFromStringB(reportFeeMonthStatisticsDto.getEndTime()),
+                        DateUtil.getDateFromStringB(reportFeeMonthStatisticsDto.getStartTime()));
+                reportFeeMonthStatisticsDto.setOweDay(day);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 213 - 0
service-job/src/main/java/com/java110/job/export/adapt/ReportRepairDetailAdapt.java

@@ -0,0 +1,213 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.repair.RepairUserDto;
+import com.java110.intf.report.IReportFeeMonthStatisticsInnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.ListUtil;
+import com.java110.utils.util.StringUtil;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component("reportRepairDetail")
+public class ReportRepairDetailAdapt implements IExportDataAdapt {
+
+    @Autowired
+    private IReportFeeMonthStatisticsInnerServiceSMO reportFeeMonthStatisticsInnerServiceSMOImpl;
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) throws ParseException {
+        JSONObject paramIn = exportDataDto.getReqJson();
+        SXSSFWorkbook workbook = null;  //工作簿
+        //工作表
+        workbook = new SXSSFWorkbook();
+        workbook.setCompressTempFiles(false);
+        Sheet sheet = workbook.createSheet("报修汇总表");
+        Row row = sheet.createRow(0);
+        row.createCell(0).setCellValue("员工ID");
+        row.createCell(1).setCellValue("员工姓名");
+        row.createCell(2).setCellValue("处理中条数");
+        row.createCell(3).setCellValue("派单条数");
+        row.createCell(4).setCellValue("转单条数");
+        row.createCell(5).setCellValue("退单条数");
+        row.createCell(6).setCellValue("已回访条数");
+        row.createCell(7).setCellValue("已完结条数");
+        row.createCell(8).setCellValue("员工评分");
+        RepairUserDto repairUserDto = BeanConvertUtil.covertBean(paramIn,RepairUserDto.class);
+        if (!StringUtil.isEmpty(repairUserDto.getBeginStartTime())) {
+            repairUserDto.setBeginStartTime(repairUserDto.getBeginStartTime() + " 00:00:00");
+        }
+        if (!StringUtil.isEmpty(repairUserDto.getBeginEndTime())) {
+            repairUserDto.setBeginEndTime(repairUserDto.getBeginEndTime() + " 23:59:59");
+        }
+        if (!StringUtil.isEmpty(repairUserDto.getFinishStartTime())) {
+            repairUserDto.setFinishStartTime(repairUserDto.getFinishStartTime() + " 00:00:00");
+        }
+        if (!StringUtil.isEmpty(repairUserDto.getFinishEndTime())) {
+            repairUserDto.setFinishEndTime(repairUserDto.getFinishEndTime() + " 23:59:59");
+        }
+        List<RepairUserDto> repairs = this.queryRepair(repairUserDto);
+        if (ListUtil.isNull(repairs)) {
+            return workbook;
+        }
+        RepairUserDto dataObj = null;
+        for (int roomIndex = 0; roomIndex < repairs.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + 1);
+            dataObj = repairs.get(roomIndex);
+            row.createCell(0).setCellValue(dataObj.getStaffId());
+            row.createCell(1).setCellValue(dataObj.getStaffName());
+            row.createCell(2).setCellValue(dataObj.getDealAmount());
+            row.createCell(3).setCellValue(dataObj.getDispatchAmount());
+            row.createCell(4).setCellValue(dataObj.getTransferOrderAmount());
+            row.createCell(5).setCellValue(dataObj.getChargebackAmount());
+            row.createCell(6).setCellValue(dataObj.getReturnAmount());
+            row.createCell(7).setCellValue(dataObj.getStatementAmount());
+            row.createCell(8).setCellValue(dataObj.getScore());
+        }
+        return workbook;
+    }
+
+    public List<RepairUserDto> queryRepair(RepairUserDto repairUserDto) {
+        //查询员工报修表员工信息
+        List<RepairUserDto> repairUsers = reportFeeMonthStatisticsInnerServiceSMOImpl.queryRepairForStaff(repairUserDto);
+        int count = repairUsers.size();
+        //获取员工id和姓名集合
+        List<RepairUserDto> staffs;
+        if (StringUtil.isEmpty(repairUserDto.getStaffId())) {
+            repairUserDto.setPage(-1);
+            staffs = reportFeeMonthStatisticsInnerServiceSMOImpl.queryRepairForStaff(repairUserDto);
+        } else {
+            repairUserDto.setPage(-1);
+            repairUserDto.setStaffId(null);
+            staffs = reportFeeMonthStatisticsInnerServiceSMOImpl.queryRepairForStaff(repairUserDto);
+        }
+        List<RepairUserDto> repairUserList = new ArrayList<>();
+        //处理中总数量
+        int dealNumber = 0;
+        //结单总数量
+        int statementNumber = 0;
+        //退单总数量
+        int chargebackNumber = 0;
+        //转单总数量
+        int transferOrderNumber = 0;
+        //派单总数量
+        int dispatchNumber = 0;
+        //已回访总数量
+        int returnNumber = 0;
+        if (count > 0) {
+            for (RepairUserDto repairUser : repairUsers) {
+                RepairUserDto repairUserInfo = new RepairUserDto();
+                //员工id
+                repairUserDto.setStaffId(repairUser.getStaffId());
+                List<RepairUserDto> repairUserDtoList = reportFeeMonthStatisticsInnerServiceSMOImpl.queryRepairWithOutPage(repairUserDto);
+                if (ListUtil.isNull(repairUserDtoList)) {
+                    continue;
+                }
+                //处理中数量
+                int dealAmount = 0;
+                //结单数量
+                int statementAmount = 0;
+                //退单数量
+                int chargebackAmount = 0;
+                //转单数量
+                int transferOrderAmount = 0;
+                //派单数量
+                int dispatchAmount = 0;
+                //回访数量
+                int returnAmount = 0;
+                //评分
+                String score = "";
+                for (RepairUserDto repair : repairUserDtoList) {
+                    //处理中状态
+                    if (repair.getState().equals("10001")) {
+                        //获取数量
+                        int amount = Integer.parseInt(repair.getAmount());
+                        dealAmount = dealAmount + amount;
+                    } else if (repair.getState().equals("10002")) {  //结单状态
+                        //获取数量
+                        int amount = Integer.parseInt(repair.getAmount());
+                        statementAmount = statementAmount + amount;
+                    } else if (repair.getState().equals("10003")) {  //退单状态
+                        //获取数量
+                        int amount = Integer.parseInt(repair.getAmount());
+                        chargebackAmount = chargebackAmount + amount;
+                    } else if (repair.getState().equals("10004")) {  //转单状态
+                        //获取数量
+                        int amount = Integer.parseInt(repair.getAmount());
+                        transferOrderAmount = transferOrderAmount + amount;
+                    } else if (repair.getState().equals("10006")) {  //派单状态
+                        int amount = Integer.parseInt(repair.getAmount());
+                        dispatchAmount = dispatchAmount + amount;
+                    } else if (repair.getState().equals("10008")) {  //已回访状态
+                        int amount = Integer.parseInt(repair.getAmount());
+                        returnAmount = returnAmount + amount;
+                    }
+                    if (!StringUtil.isEmpty(repair.getScore())) {
+                        score = repair.getScore();
+                    }
+                }
+                //员工id
+                repairUserInfo.setStaffId(repairUser.getStaffId());
+                //员工姓名
+                repairUserInfo.setStaffName(repairUser.getStaffName());
+                //处理中报修数量
+                repairUserInfo.setDealAmount(Integer.toString(dealAmount));
+                //处理中报修总数量
+                repairUserInfo.setDealNumber(Integer.toString(dealNumber));
+                //结单报修数量
+                repairUserInfo.setStatementAmount(Integer.toString(statementAmount));
+                //结单报修总数量
+                repairUserInfo.setStatementNumber(Integer.toString(statementNumber));
+                //退单报修数量
+                repairUserInfo.setChargebackAmount(Integer.toString(chargebackAmount));
+                //退单报修总数量
+                repairUserInfo.setChargebackNumber(Integer.toString(chargebackNumber));
+                //转单报修数量
+                repairUserInfo.setTransferOrderAmount(Integer.toString(transferOrderAmount));
+                //转单报修总数量
+                repairUserInfo.setTransferOrderNumber(Integer.toString(transferOrderNumber));
+                //派单报修数量
+                repairUserInfo.setDispatchAmount(Integer.toString(dispatchAmount));
+                //派单报修总数量
+                repairUserInfo.setDispatchNumber(Integer.toString(dispatchNumber));
+                //回访数量
+                repairUserInfo.setReturnAmount(Integer.toString(returnAmount));
+                //回访总数量
+                repairUserInfo.setReturnNumber(Integer.toString(returnNumber));
+                //员工id和姓名信息集合
+                repairUserInfo.setRepairList(staffs);
+                //员工评分
+                repairUserInfo.setScore(score);
+                repairUserList.add(repairUserInfo);
+
+                dealNumber = Integer.parseInt(repairUserInfo.getDealAmount()) + dealNumber;
+                statementNumber = Integer.parseInt(repairUserInfo.getStatementAmount()) + statementNumber;
+                chargebackNumber = Integer.parseInt(repairUserInfo.getChargebackAmount()) + chargebackNumber;
+                transferOrderNumber = Integer.parseInt(repairUserInfo.getTransferOrderAmount()) + transferOrderNumber;
+                dispatchNumber = Integer.parseInt(repairUserInfo.getDispatchAmount()) + dispatchNumber;
+                returnNumber = Integer.parseInt(repairUserInfo.getReturnAmount()) + returnNumber;
+            }
+        } else {
+            repairUserList = new ArrayList<>();
+        }
+
+        RepairUserDto repairUser = new RepairUserDto();
+        repairUser.setDealNumber(Integer.toString(dealNumber));
+        repairUser.setStatementNumber(Integer.toString(statementNumber));
+        repairUser.setChargebackNumber(Integer.toString(chargebackNumber));
+        repairUser.setTransferOrderNumber(Integer.toString(transferOrderNumber));
+        repairUser.setDispatchNumber(Integer.toString(dispatchNumber));
+        repairUser.setReturnNumber(Integer.toString(returnNumber));
+
+        return repairUserList;
+    }
+}