java110-bean/src/main/java/com/java110/dto/data/ExportDataDto.java
New file @@ -0,0 +1,38 @@ package com.java110.dto.data; import com.alibaba.fastjson.JSONObject; import java.io.Serializable; public class ExportDataDto implements Serializable{ private String businessAdapt; private JSONObject reqJson; private String fileName; public String getBusinessAdapt() { return businessAdapt; } public void setBusinessAdapt(String businessAdapt) { this.businessAdapt = businessAdapt; } public JSONObject getReqJson() { return reqJson; } public void setReqJson(JSONObject reqJson) { this.reqJson = reqJson; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } java110-core/src/main/java/com/java110/core/client/CosUploadTemplate.java
@@ -110,6 +110,22 @@ } return fileName; } /* *文件上传工具方法 */ public String upload(InputStream inputStream, String ftpPath) { COSClient cosClient = null; try { cosClient = COSUtil.getCOSClient(); COSUtil.uploadByInputStream(cosClient, inputStream, ftpPath ); } catch (Exception e) { // logger.error("上传文件失败", e); throw new IllegalArgumentException("上传文件失败"); } finally { } return ftpPath; } /* *文件下载工具方法 java110-core/src/main/java/com/java110/core/client/FileUploadTemplate.java
New file @@ -0,0 +1,48 @@ package com.java110.core.client; import com.java110.utils.cache.MappingCache; import com.java110.utils.util.COSUtil; import com.java110.utils.util.OSSUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.InputStream; @Component public class FileUploadTemplate { @Autowired private FtpUploadTemplate ftpUploadTemplate; @Autowired private JSchFtpUploadTemplate jSchFtpUploadTemplate; @Autowired private OssUploadTemplate ossUploadTemplate; @Autowired private CosUploadTemplate cosUploadTemplate; public String saveFile(InputStream inputStream,String fileName){ String ossSwitch = MappingCache.getValue(OSSUtil.DOMAIN, OSSUtil.OSS_SWITCH); if (OSSUtil.OSS_SWITCH_OSS.equals(ossSwitch)) { fileName = ossUploadTemplate.upload(inputStream, fileName); } else if (COSUtil.COS_SWITCH_COS.equals(ossSwitch)) { fileName = cosUploadTemplate.upload(inputStream, fileName); } else { String ftpServer = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_SERVER); int ftpPort = Integer.parseInt(MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_PORT)); String ftpUserName = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERNAME); String ftpUserPassword = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERPASSWORD); fileName = ftpUploadTemplate.upload(inputStream, ftpServer, ftpPort, ftpUserName, ftpUserPassword, fileName); } return fileName; } } java110-core/src/main/java/com/java110/core/client/FtpUploadTemplate.java
@@ -167,6 +167,59 @@ } /* *文件上传工具方法 */ public String upload(InputStream inputStream, String server, int port, String userName, String userPassword, String fileName) { FTPClient ftpClient = null; String ftpPath = "/"; if(fileName.contains("/")){ ftpPath = fileName.substring(0,fileName.lastIndexOf("/")); } try { // request.setCharacterEncoding("utf-8"); ftpClient = new FTPClient(); if (!ftpClient.isConnected()) { ftpClient.connect(server, port); } ftpClient.login(userName, userPassword); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); mkDir(ftpClient, ftpPath);// 创建目录 // 设置上传目录 must ftpClient.changeWorkingDirectory(ftpPath); if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK). LOCAL_CHARSET = "UTF-8"; } //fileName = new String(uploadFile.getOriginalFilename().getBytes(LOCAL_CHARSET), SERVER_CHARSET); /*fileName = id + "-" + fileName;// 构建上传到服务器上的文件名 20-文件名.后缀*/ FTPFile[] fs = ftpClient.listFiles(fileName); if (fs.length == 0) { System.out.println("this file not exist ftp"); } else if (fs.length == 1) { System.out.println("this file exist ftp"); ftpClient.deleteFile(fs[0].getName()); } boolean saveFlag = ftpClient.storeFile(fileName, inputStream); if (!saveFlag) { throw new IllegalArgumentException("存储文件失败"); } } catch (Exception e) { logger.error("上传文件失败", e); throw new IllegalArgumentException("上传文件失败"); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } return fileName; } /* *文件下载工具方法 */ public byte[] downFileByte(String remotePath, String fileName, String server, int port, String userName, String userPassword) { java110-core/src/main/java/com/java110/core/client/OssUploadTemplate.java
@@ -111,6 +111,20 @@ return fileName; } public String upload(InputStream inputStream, String ftpPath) { String fileName = ""; OSSClient ossClient = null; try { ossClient = OSSUtil.getOSSClient(); OSSUtil.uploadByInputStream(ossClient, inputStream, ftpPath); } catch (Exception e) { // logger.error("上传文件失败", e); throw new IllegalArgumentException("上传文件失败"); } finally { } return fileName; } /* *文件下载工具方法 */ java110-interface/src/main/java/com/java110/intf/report/IQueryPayFeeDetailInnerServiceSMO.java
New file @@ -0,0 +1,17 @@ package com.java110.intf.report; import com.java110.config.feign.FeignConfiguration; import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto; import com.java110.vo.ResultVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "${java110.report-service}", configuration = {FeignConfiguration.class}) @RequestMapping("/queryPayFeeDetailInnerServiceSMOApi") public interface IQueryPayFeeDetailInnerServiceSMO { @RequestMapping(value = "/query", method = RequestMethod.POST) ResultVo query(@RequestBody ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto); } service-job/src/main/java/com/java110/job/JobServiceApplication.java
@@ -4,6 +4,7 @@ import com.java110.core.trace.Java110RestTemplateInterceptor; import com.java110.core.client.RestTemplate; import com.java110.core.event.service.BusinessServiceDataFlowEventPublishing; import com.java110.job.export.ExportDataExecutor; import com.java110.service.init.ServiceStartInit; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; @@ -91,5 +92,9 @@ ServiceStartInit.initSystemConfig(context); //加载业务侦听 // SystemStartLoadBusinessConfigure.initSystemConfig(LISTENER_PATH); //启动导出数据线程处理器 ExportDataExecutor.startExportDataExecutor(); } } service-job/src/main/java/com/java110/job/export/ExportDataExecutor.java
New file @@ -0,0 +1,100 @@ package com.java110.job.export; import com.java110.core.client.*; import com.java110.core.log.LoggerFactory; import com.java110.dto.data.ExportDataDto; import com.java110.utils.cache.MappingCache; import com.java110.utils.factory.ApplicationContextFactory; import com.java110.utils.util.COSUtil; import com.java110.utils.util.OSSUtil; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 导出数据执行器 */ public class ExportDataExecutor implements Runnable{ private static final Logger log = LoggerFactory.getLogger(ExportDataQueue.class); //默认线程大小 private static final int DEFAULT_EXPORT_POOL = 4; @Override public void run() { try { doExportData(); }catch (Exception e){ log.error("处理消息异常",e); e.printStackTrace(); } } private void doExportData() throws Exception { ExportDataDto exportDataDto = ExportDataQueue.getData(); if(exportDataDto == null){ return; } String businessAdapt = exportDataDto.getBusinessAdapt(); IExportDataAdapt exportDataAdaptImpl = ApplicationContextFactory.getBean(businessAdapt, IExportDataAdapt.class); if(exportDataAdaptImpl == null){ return ; } SXSSFWorkbook workbook= exportDataAdaptImpl.exportData(exportDataDto); //保存文件路径到 文件下载表 FileUploadTemplate fileUploadTemplate = ApplicationContextFactory.getBean("fileUploadTemplate", FileUploadTemplate.class); ByteArrayInputStream inputStream = null; ByteArrayOutputStream os = null; try { os = new ByteArrayOutputStream(); workbook.write(os); inputStream = new ByteArrayInputStream(os.toByteArray()); fileUploadTemplate.saveFile(inputStream,exportDataDto.getFileName()); }finally { try { workbook.close(); }catch (Exception e){ } try { inputStream.close(); }catch (Exception e){ } try { os.close(); }catch (Exception e){ } } } /** * 线程启动器 */ public static void startExportDataExecutor(){ ExecutorService executorService = Executors.newFixedThreadPool(DEFAULT_EXPORT_POOL); executorService.execute(new ExportDataExecutor()); } } service-job/src/main/java/com/java110/job/export/ExportDataQueue.java
New file @@ -0,0 +1,40 @@ package com.java110.job.export; import com.java110.core.log.LoggerFactory; import com.java110.dto.data.ExportDataDto; import org.slf4j.Logger; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class ExportDataQueue { private static final Logger log = LoggerFactory.getLogger(ExportDataQueue.class); private static final BlockingQueue<ExportDataDto> msgs = new LinkedBlockingQueue<ExportDataDto>(100); /** * 添加导出数据消息 * * @param exportDataDto */ public static void addMsg(ExportDataDto exportDataDto) { try { msgs.offer(exportDataDto,3, TimeUnit.MILLISECONDS); } catch (Exception e) { log.error("写入队列失败", e); e.printStackTrace(); } } public static ExportDataDto getData() { try { return msgs.take(); } catch (InterruptedException e) { e.printStackTrace(); } return null; } } service-job/src/main/java/com/java110/job/export/IExportDataAdapt.java
New file @@ -0,0 +1,16 @@ package com.java110.job.export; import com.java110.dto.data.ExportDataDto; import org.apache.poi.xssf.streaming.SXSSFWorkbook; /** * 导出数据适配器 */ public interface IExportDataAdapt { /** * 导出数据 excel * @param exportDataDto */ SXSSFWorkbook exportData(ExportDataDto exportDataDto); } service-job/src/main/java/com/java110/job/export/adapt/ReportPayFeeDetailAdapt.java
New file @@ -0,0 +1,134 @@ package com.java110.job.export.adapt; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.dto.data.ExportDataDto; import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto; import com.java110.intf.report.IQueryPayFeeDetailInnerServiceSMO; import com.java110.job.export.IExportDataAdapt; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; 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.Service; import java.io.ByteArrayOutputStream; import java.util.List; /** * 缴费明细导出 */ @Service("reportPayFeeDetail") public class ReportPayFeeDetailAdapt implements IExportDataAdapt{ @Autowired private IQueryPayFeeDetailInnerServiceSMO queryPayFeeDetailInnerServiceSMOImpl; private static final int MAX_ROW = 100; @Override public SXSSFWorkbook exportData(ExportDataDto exportDataDto) { SXSSFWorkbook workbook = null; //工作簿 String userId = ""; //工作表 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("应收金额"); row.createCell(11).setCellValue("实收金额"); row.createCell(12).setCellValue("优惠金额"); row.createCell(13).setCellValue("减免金额"); row.createCell(14).setCellValue("赠送金额"); row.createCell(15).setCellValue("滞纳金"); row.createCell(16).setCellValue("空置房打折金额"); row.createCell(17).setCellValue("空置房减免金额"); row.createCell(18).setCellValue("面积"); row.createCell(19).setCellValue("车位"); JSONObject reqJson = exportDataDto.getReqJson(); ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto = BeanConvertUtil.covertBean(reqJson,ReportFeeMonthStatisticsDto.class); if(reqJson.containsKey("roomName") && !StringUtil.isEmpty(reqJson.getString("roomName"))){ String[] roomNameArray = reqJson.getString("roomName").split("-",3); reportFeeMonthStatisticsDto.setFloorNum(roomNameArray[0]); reportFeeMonthStatisticsDto.setUnitNum(roomNameArray[1]); reportFeeMonthStatisticsDto.setRoomNum(roomNameArray[2]); } //查询数据 getRepairPayFeeDetail(sheet, reportFeeMonthStatisticsDto); return workbook; } private void getRepairPayFeeDetail(Sheet sheet, ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto) { reportFeeMonthStatisticsDto.setPage(1); reportFeeMonthStatisticsDto.setRow(MAX_ROW); ResultVo resultVo = queryPayFeeDetailInnerServiceSMOImpl.query(reportFeeMonthStatisticsDto); appendData(resultVo,sheet,0); if(resultVo.getRecords() < 2){ return ; } for(int page = 2;page <= resultVo.getRecords(); page++){ reportFeeMonthStatisticsDto.setPage(page); reportFeeMonthStatisticsDto.setRow(MAX_ROW); resultVo = queryPayFeeDetailInnerServiceSMOImpl.query(reportFeeMonthStatisticsDto); appendData(resultVo,sheet,(page-1)*MAX_ROW); } } private void appendData(ResultVo resultVo,Sheet sheet,int step) { List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos = (List<ReportFeeMonthStatisticsDto>)resultVo.getData(); Row row = null; JSONObject dataObj = null; for (int roomIndex = 0; roomIndex < reportFeeMonthStatisticsDtos.size(); roomIndex++) { row = sheet.createRow(roomIndex +step + 1); dataObj = JSONObject.parseObject(JSONObject.toJSONString(reportFeeMonthStatisticsDtos.get(roomIndex))); row.createCell(0).setCellValue(dataObj.getString("oId")); if (!StringUtil.isEmpty(dataObj.getString("payerObjType")) && dataObj.getString("payerObjType").equals("3333")) { //房屋 row.createCell(1).setCellValue(dataObj.getString("floorNum") + "-" + dataObj.getString("unitNum") + "-" + dataObj.getString("roomNum")); } else { row.createCell(1).setCellValue(dataObj.getString("objName")); } row.createCell(2).setCellValue(dataObj.getString("ownerName")); row.createCell(3).setCellValue(dataObj.getString("feeName")); row.createCell(4).setCellValue(dataObj.getString("feeTypeCdName")); row.createCell(5).setCellValue(dataObj.getString("stateName")); row.createCell(6).setCellValue(dataObj.getString("primeRate")); row.createCell(7).setCellValue(dataObj.getString("startTime")); row.createCell(8).setCellValue(dataObj.getString("endTime")); row.createCell(9).setCellValue(dataObj.getString("createTime")); row.createCell(10).setCellValue(dataObj.getDouble("receivableAmount")); row.createCell(11).setCellValue(dataObj.getDouble("receivedAmount")); row.createCell(12).setCellValue(dataObj.getDouble("preferentialAmount")); row.createCell(13).setCellValue(dataObj.getDouble("deductionAmount")); row.createCell(14).setCellValue(dataObj.getDouble("giftAmount")); row.createCell(15).setCellValue(dataObj.getDouble("lateFee")); row.createCell(16).setCellValue(dataObj.getDouble("vacantHousingDiscount")); row.createCell(17).setCellValue(dataObj.getDouble("vacantHousingReduction")); row.createCell(18).setCellValue(dataObj.getString("builtUpArea")); row.createCell(19).setCellValue(dataObj.getString("psName")); } } } service-report/src/main/java/com/java110/report/bmo/reportFeeMonthStatistics/impl/GetReportFeeMonthStatisticsBMOImpl.java
@@ -17,6 +17,7 @@ import com.java110.intf.community.IRepairInnerServiceSMO; import com.java110.intf.fee.IFeeConfigInnerServiceSMO; import com.java110.intf.fee.IFeeDetailInnerServiceSMO; import com.java110.intf.report.IQueryPayFeeDetailInnerServiceSMO; import com.java110.intf.report.IReportFeeMonthStatisticsInnerServiceSMO; import com.java110.intf.user.IOwnerInnerServiceSMO; import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO; @@ -65,6 +66,9 @@ @Autowired private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl; @Autowired private IQueryPayFeeDetailInnerServiceSMO queryPayFeeDetailInnerServiceSMOImpl; /** * @param reportFeeMonthStatisticsDto @@ -401,310 +405,14 @@ return responseEntity; } /** * 前台查询分页查询 * @param reportFeeMonthStatisticsDto * @return */ @Override public ResponseEntity<String> queryPayFeeDetail(ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto) { JSONObject countInfo = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetailCount(reportFeeMonthStatisticsDto); int count = Integer.parseInt(countInfo.get("count").toString()); List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos = null; ReportFeeMonthStatisticsTotalDto reportFeeMonthStatisticsTotalDto = new ReportFeeMonthStatisticsTotalDto(); List<ReportFeeMonthStatisticsDto> reportList = new ArrayList<>(); //查询该小区下的费用项目 FeeConfigDto feeConfigDto = new FeeConfigDto(); feeConfigDto.setCommunityId(reportFeeMonthStatisticsDto.getCommunityId()); List<FeeConfigDto> feeConfigDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); //应收总金额(大计) Double allReceivableAmount = 0.0; //实收金额(大计) Double allReceivedAmount = 0.0; //优惠金额(大计) Double allPreferentialAmount = 0.0; //减免金额(大计) Double allDeductionAmount = 0.0; //滞纳金(大计) Double allLateFee = 0.0; //空置房打折(大计) Double allVacantHousingDiscount = 0.0; //空置房减免(大计) Double allVacantHousingReduction = 0.0; //赠送金额(大计) Double allGiftAmount = 0.0; //吴学文 注释 感觉和上面的369 功能重复 //int size = 0; if (count > 0) { //查询缴费明细 reportFeeMonthStatisticsDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetail(reportFeeMonthStatisticsDto); //吴学文 注释 感觉和上面的369 功能重复 // if (reportFeeMonthStatisticsDtos != null && reportFeeMonthStatisticsDtos.size() > 0) { // //查询所有缴费明细记录 // ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto1 = BeanConvertUtil.covertBean(reportFeeMonthStatisticsDto, ReportFeeMonthStatisticsDto.class); // reportFeeMonthStatisticsDto1.setPage(PageDto.DEFAULT_PAGE); // List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos1 = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetail(reportFeeMonthStatisticsDto1); // size = reportFeeMonthStatisticsDtos1.size(); // } //查询应收、实收总金额(大计) List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsList = reportFeeMonthStatisticsInnerServiceSMOImpl.queryAllPayFeeDetail(reportFeeMonthStatisticsDto); //查询(优惠、减免、滞纳金、空置房打折、空置房减免金额等)大计总金额 List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsSum = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetailSum(reportFeeMonthStatisticsDto); allReceivableAmount = Double.valueOf(reportFeeMonthStatisticsList.get(0).getAllReceivableAmount()); allReceivedAmount = Double.valueOf(reportFeeMonthStatisticsList.get(0).getAllReceivedAmount()); for (ReportFeeMonthStatisticsDto reportFeeMonthStatistics : reportFeeMonthStatisticsSum) { //这里是查询出的金额总和 String discountPrice = reportFeeMonthStatistics.getDiscountPrice(); //优惠金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("1")) { allPreferentialAmount = Double.valueOf(discountPrice); } //减免金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("2")) { allDeductionAmount = Double.valueOf(discountPrice); } //滞纳金(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("3")) { allLateFee = Double.valueOf(discountPrice); } //空置房打折金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("4")) { allVacantHousingDiscount = Double.valueOf(discountPrice); } //空置房减免金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("5")) { allVacantHousingReduction = Double.valueOf(discountPrice); } //赠送金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("6")) { allGiftAmount = Double.valueOf(discountPrice); } } //应收总金额(小计) Double totalReceivableAmount = 0.0; //实收总金额(小计) Double totalReceivedAmount = 0.0; //优惠金额(小计) Double totalPreferentialAmount = 0.0; //减免金额(小计) Double totalDeductionAmount = 0.0; //空置房打折金额(小计) Double totalVacantHousingDiscount = 0.0; //空置房减免金额(小计) Double totalVacantHousingReduction = 0.0; //赠送金额(小计) Double totalGiftAmount = 0.0; //滞纳金(小计) Double totalLateFee = 0.0; List<String> ownerIds = new ArrayList<>(); for (ReportFeeMonthStatisticsDto reportFeeMonthStatistics : reportFeeMonthStatisticsDtos) { FeeDetailDto feeDetailDto = new FeeDetailDto(); feeDetailDto.setDetailId(reportFeeMonthStatistics.getDetailId()); List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto); Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误"); reportFeeMonthStatistics.setReceivableAmount(feeDetailDtos.get(0).getReceivableAmount()); reportFeeMonthStatistics.setPayableAmount(feeDetailDtos.get(0).getPayableAmount()); //应收金额 Double receivableAmount = Double.valueOf(reportFeeMonthStatistics.getReceivableAmount()); //实收金额 Double receivedAmount = Double.valueOf(reportFeeMonthStatistics.getReceivedAmount()); totalReceivableAmount = totalReceivableAmount + receivableAmount; totalReceivedAmount = totalReceivedAmount + receivedAmount; if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(reportFeeMonthStatistics.getPayerObjType())) { ownerIds.add(reportFeeMonthStatistics.getOwnerId()); } // 最大记录时 就去刷新 //如果是车位刷房屋信息 if (ownerIds.size() == MAX_ROWS) { refreshReportFeeMonthStatistics(ownerIds, reportFeeMonthStatisticsDtos); ownerIds = new ArrayList<>(); } //优惠金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("1")) { //获取优惠金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalPreferentialAmount = totalPreferentialAmount + discountPrice; //优惠金额 reportFeeMonthStatistics.setPreferentialAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setPreferentialAmount("0"); } //减免金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("2")) { //获取减免金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalDeductionAmount = totalDeductionAmount + discountPrice; //减免金额 reportFeeMonthStatistics.setDeductionAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setDeductionAmount("0"); } //滞纳金 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("3")) { //获取滞纳金金额 Double discountPrice = (Double.valueOf(reportFeeMonthStatistics.getDiscountPrice())); totalLateFee = totalLateFee + discountPrice; //滞纳金 reportFeeMonthStatistics.setLateFee(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setLateFee("0"); } //空置房打折 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("4")) { //空置房打折金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalVacantHousingDiscount = totalVacantHousingDiscount + discountPrice; //空置房打折 reportFeeMonthStatistics.setVacantHousingDiscount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setVacantHousingDiscount("0"); } //空置房减免 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("5")) { //空置房减免金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalVacantHousingReduction = totalVacantHousingReduction + discountPrice; //空置房减免 reportFeeMonthStatistics.setVacantHousingReduction(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setVacantHousingReduction("0"); } //赠送金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("6")) { //赠送金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalGiftAmount = totalGiftAmount + discountPrice; //赠送金额 reportFeeMonthStatistics.setGiftAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setGiftAmount("0"); } if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reportFeeMonthStatistics.getPayerObjType())) { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getFloorNum() + "栋" + reportFeeMonthStatistics.getUnitNum() + "单元" + reportFeeMonthStatistics.getRoomNum() + "室"); } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(reportFeeMonthStatistics.getPayerObjType())) { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getCarNum()); } else { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getContractCode()); } if (!StringUtil.isEmpty(reportFeeMonthStatistics.getImportFeeName())) { reportFeeMonthStatistics.setFeeName(reportFeeMonthStatistics.getImportFeeName()); } //费用项目 reportFeeMonthStatistics.setFeeConfigDtos(feeConfigDtos); if (!StringUtil.isEmpty(reportFeeMonthStatistics.getRepairId())) { RepairDto repairDto = new RepairDto(); repairDto.setRepairId(reportFeeMonthStatistics.getRepairId()); //查询报修单 List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto); //Assert.listOnlyOne(repairDtos, "查询报修单错误!"); if (repairDtos != null && repairDtos.size() == 1) { if (!StringUtil.isEmpty(repairDtos.get(0).getRepairObjType()) && repairDtos.get(0).getRepairObjType().equals("004")) { OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto(); ownerRoomRelDto.setRoomId(repairDtos.get(0).getRepairObjId()); List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto); if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() == 0) { //查询条数为0条 OwnerRoomRelDto ownerRoomRel = new OwnerRoomRelDto(); ownerRoomRel.setRoomId(repairDtos.get(0).getRepairObjId()); ownerRoomRel.setStatusCd("1"); //看看业主房屋关系数据是否删除了 List<OwnerRoomRelDto> ownerRoomRels = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRel); Assert.listOnlyOne(ownerRoomRels, "查询业主房屋关系表错误!"); OwnerDto owner = new OwnerDto(); owner.setOwnerId(ownerRoomRels.get(0).getOwnerId()); owner.setOwnerTypeCd("1001"); //业主本人 List<OwnerDto> owners = ownerInnerServiceSMOImpl.queryOwners(owner); if (owners != null && owners.size() == 0) { //查出条数为0条 //判断业主是否删除了 OwnerDto newOwner = new OwnerDto(); newOwner.setOwnerId(ownerRoomRels.get(0).getOwnerId()); newOwner.setOwnerTypeCd("1001"); //业主本人 newOwner.setStatusCd("1"); List<OwnerDto> newOwners = ownerInnerServiceSMOImpl.queryOwners(newOwner); Assert.listOnlyOne(newOwners, "查询业主信息错误!"); reportFeeMonthStatistics.setOwnerName(newOwners.get(0).getName()); } else if (owners != null && owners.size() == 1) { //查出条数为1条 reportFeeMonthStatistics.setOwnerName(owners.get(0).getName()); } else { throw new IllegalArgumentException("查询业主信息错误!"); } } else if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() == 1) { //查询条数为1条 OwnerDto ownerDto = new OwnerDto(); ownerDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId()); ownerDto.setOwnerTypeCd("1001"); //业主本人 List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto); if (ownerDtos != null && ownerDtos.size() == 0) { //业主查询条数为0条 //判断业主是否删除了 OwnerDto newOwner = new OwnerDto(); newOwner.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId()); newOwner.setOwnerTypeCd("1001"); //业主本人 newOwner.setStatusCd("1"); List<OwnerDto> newOwners = ownerInnerServiceSMOImpl.queryOwners(newOwner); Assert.listOnlyOne(newOwners, "查询业主信息错误!"); reportFeeMonthStatistics.setOwnerName(newOwners.get(0).getName()); } else if (ownerDtos != null || ownerDtos.size() == 1) { reportFeeMonthStatistics.setOwnerName(ownerDtos.get(0).getName()); } else { throw new IllegalArgumentException("查询业主信息错误!"); } } else { throw new IllegalArgumentException("查询业主房屋关系表错误!"); } } } } if (!hasInReportListAndMerge(reportList, reportFeeMonthStatistics)) { reportList.add(reportFeeMonthStatistics); } } //如果是车位刷房屋信息 if (ownerIds.size() > 0) { refreshReportFeeMonthStatistics(ownerIds, reportFeeMonthStatisticsDtos); } //应收总金额(小计) reportFeeMonthStatisticsTotalDto.setTotalReceivableAmount(String.format("%.2f", totalReceivableAmount)); //实收金额(小计) reportFeeMonthStatisticsTotalDto.setTotalReceivedAmount(String.format("%.2f", totalReceivedAmount)); //优惠金额(小计) reportFeeMonthStatisticsTotalDto.setTotalPreferentialAmount(String.format("%.2f", totalPreferentialAmount)); //减免金额(小计) reportFeeMonthStatisticsTotalDto.setTotalDeductionAmount(String.format("%.2f", totalDeductionAmount)); //滞纳金(小计) reportFeeMonthStatisticsTotalDto.setTotalLateFee(String.format("%.2f", totalLateFee)); //空置房打折(小计) reportFeeMonthStatisticsTotalDto.setTotalVacantHousingDiscount(String.format("%.2f", totalVacantHousingDiscount)); //空置房减免(小计) reportFeeMonthStatisticsTotalDto.setTotalVacantHousingReduction(String.format("%.2f", totalVacantHousingReduction)); //赠送规则金额(小计) reportFeeMonthStatisticsTotalDto.setTotalGiftAmount(String.format("%.2f", totalGiftAmount)); //应收金额(大计) reportFeeMonthStatisticsTotalDto.setAllReceivableAmount(String.format("%.2f", allReceivableAmount)); //实收金额(大计) reportFeeMonthStatisticsTotalDto.setAllReceivedAmount(String.format("%.2f", allReceivedAmount)); //优惠金额(大计) reportFeeMonthStatisticsTotalDto.setAllPreferentialAmount(String.format("%.2f", allPreferentialAmount)); //减免金额(大计) reportFeeMonthStatisticsTotalDto.setAllDeductionAmount(String.format("%.2f", allDeductionAmount)); //滞纳金(大计) reportFeeMonthStatisticsTotalDto.setAllLateFee(String.format("%.2f", allLateFee)); //空置房打折金额(大计) reportFeeMonthStatisticsTotalDto.setAllVacantHousingDiscount(String.format("%.2f", allVacantHousingDiscount)); //空置房减免金额(大计) reportFeeMonthStatisticsTotalDto.setAllVacantHousingReduction(String.format("%.2f", allVacantHousingReduction)); //赠送规则金额(大计) reportFeeMonthStatisticsTotalDto.setAllGiftAmount(String.format("%.2f", allGiftAmount)); } else { reportFeeMonthStatisticsDtos = new ArrayList<>(); reportList.addAll(reportFeeMonthStatisticsDtos); reportFeeMonthStatisticsTotalDto = new ReportFeeMonthStatisticsTotalDto(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reportFeeMonthStatisticsDto.getRow()), count, reportList, reportFeeMonthStatisticsTotalDto); ResultVo resultVo = queryPayFeeDetailInnerServiceSMOImpl.query(reportFeeMonthStatisticsDto); ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK); return responseEntity; service-report/src/main/java/com/java110/report/smo/impl/QueryPayFeeDetailInnerServiceSMOImpl.java
New file @@ -0,0 +1,423 @@ package com.java110.report.smo.impl; import com.alibaba.fastjson.JSONObject; import com.java110.core.smo.IComputeFeeSMO; import com.java110.dto.fee.FeeConfigDto; import com.java110.dto.fee.FeeDetailDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.owner.OwnerDto; import com.java110.dto.owner.OwnerRoomRelDto; import com.java110.dto.repair.RepairDto; import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto; import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsTotalDto; import com.java110.intf.community.IRepairInnerServiceSMO; import com.java110.intf.fee.IFeeDetailInnerServiceSMO; import com.java110.intf.report.IQueryPayFeeDetailInnerServiceSMO; import com.java110.intf.report.IReportFeeMonthStatisticsInnerServiceSMO; import com.java110.intf.user.IOwnerInnerServiceSMO; import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO; import com.java110.utils.util.Assert; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; /** * 查询缴费明细 * */ @RestController public class QueryPayFeeDetailInnerServiceSMOImpl implements IQueryPayFeeDetailInnerServiceSMO{ private int MAX_ROWS = 500; // 最大行数 @Autowired private IReportFeeMonthStatisticsInnerServiceSMO reportFeeMonthStatisticsInnerServiceSMOImpl; @Autowired private IRepairInnerServiceSMO repairInnerServiceSMOImpl; @Autowired private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl; @Autowired private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl; @Autowired private IComputeFeeSMO computeFeeSMOImpl; @Autowired private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl; @Override public ResultVo query(@RequestBody ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto) { JSONObject countInfo = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetailCount(reportFeeMonthStatisticsDto); int count = Integer.parseInt(countInfo.get("count").toString()); List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos = null; ReportFeeMonthStatisticsTotalDto reportFeeMonthStatisticsTotalDto = new ReportFeeMonthStatisticsTotalDto(); List<ReportFeeMonthStatisticsDto> reportList = new ArrayList<>(); //查询该小区下的费用项目 FeeConfigDto feeConfigDto = new FeeConfigDto(); feeConfigDto.setCommunityId(reportFeeMonthStatisticsDto.getCommunityId()); List<FeeConfigDto> feeConfigDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); //应收总金额(大计) Double allReceivableAmount = 0.0; //实收金额(大计) Double allReceivedAmount = 0.0; //优惠金额(大计) Double allPreferentialAmount = 0.0; //减免金额(大计) Double allDeductionAmount = 0.0; //滞纳金(大计) Double allLateFee = 0.0; //空置房打折(大计) Double allVacantHousingDiscount = 0.0; //空置房减免(大计) Double allVacantHousingReduction = 0.0; //赠送金额(大计) Double allGiftAmount = 0.0; //吴学文 注释 感觉和上面的369 功能重复 //int size = 0; if (count > 0) { //查询缴费明细 reportFeeMonthStatisticsDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetail(reportFeeMonthStatisticsDto); //吴学文 注释 感觉和上面的369 功能重复 // if (reportFeeMonthStatisticsDtos != null && reportFeeMonthStatisticsDtos.size() > 0) { // //查询所有缴费明细记录 // ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto1 = BeanConvertUtil.covertBean(reportFeeMonthStatisticsDto, ReportFeeMonthStatisticsDto.class); // reportFeeMonthStatisticsDto1.setPage(PageDto.DEFAULT_PAGE); // List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos1 = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetail(reportFeeMonthStatisticsDto1); // size = reportFeeMonthStatisticsDtos1.size(); // } //查询应收、实收总金额(大计) List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsList = reportFeeMonthStatisticsInnerServiceSMOImpl.queryAllPayFeeDetail(reportFeeMonthStatisticsDto); //查询(优惠、减免、滞纳金、空置房打折、空置房减免金额等)大计总金额 List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsSum = reportFeeMonthStatisticsInnerServiceSMOImpl.queryPayFeeDetailSum(reportFeeMonthStatisticsDto); allReceivableAmount = Double.valueOf(reportFeeMonthStatisticsList.get(0).getAllReceivableAmount()); allReceivedAmount = Double.valueOf(reportFeeMonthStatisticsList.get(0).getAllReceivedAmount()); for (ReportFeeMonthStatisticsDto reportFeeMonthStatistics : reportFeeMonthStatisticsSum) { //这里是查询出的金额总和 String discountPrice = reportFeeMonthStatistics.getDiscountPrice(); //优惠金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("1")) { allPreferentialAmount = Double.valueOf(discountPrice); } //减免金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("2")) { allDeductionAmount = Double.valueOf(discountPrice); } //滞纳金(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("3")) { allLateFee = Double.valueOf(discountPrice); } //空置房打折金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("4")) { allVacantHousingDiscount = Double.valueOf(discountPrice); } //空置房减免金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("5")) { allVacantHousingReduction = Double.valueOf(discountPrice); } //赠送金额(大计) if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("6")) { allGiftAmount = Double.valueOf(discountPrice); } } //应收总金额(小计) Double totalReceivableAmount = 0.0; //实收总金额(小计) Double totalReceivedAmount = 0.0; //优惠金额(小计) Double totalPreferentialAmount = 0.0; //减免金额(小计) Double totalDeductionAmount = 0.0; //空置房打折金额(小计) Double totalVacantHousingDiscount = 0.0; //空置房减免金额(小计) Double totalVacantHousingReduction = 0.0; //赠送金额(小计) Double totalGiftAmount = 0.0; //滞纳金(小计) Double totalLateFee = 0.0; List<String> ownerIds = new ArrayList<>(); for (ReportFeeMonthStatisticsDto reportFeeMonthStatistics : reportFeeMonthStatisticsDtos) { FeeDetailDto feeDetailDto = new FeeDetailDto(); feeDetailDto.setDetailId(reportFeeMonthStatistics.getDetailId()); List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto); Assert.listOnlyOne(feeDetailDtos, "查询费用明细表错误"); reportFeeMonthStatistics.setReceivableAmount(feeDetailDtos.get(0).getReceivableAmount()); reportFeeMonthStatistics.setPayableAmount(feeDetailDtos.get(0).getPayableAmount()); //应收金额 Double receivableAmount = Double.valueOf(reportFeeMonthStatistics.getReceivableAmount()); //实收金额 Double receivedAmount = Double.valueOf(reportFeeMonthStatistics.getReceivedAmount()); totalReceivableAmount = totalReceivableAmount + receivableAmount; totalReceivedAmount = totalReceivedAmount + receivedAmount; if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(reportFeeMonthStatistics.getPayerObjType())) { ownerIds.add(reportFeeMonthStatistics.getOwnerId()); } // 最大记录时 就去刷新 //如果是车位刷房屋信息 if (ownerIds.size() == MAX_ROWS) { refreshReportFeeMonthStatistics(ownerIds, reportFeeMonthStatisticsDtos); ownerIds = new ArrayList<>(); } //优惠金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("1")) { //获取优惠金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalPreferentialAmount = totalPreferentialAmount + discountPrice; //优惠金额 reportFeeMonthStatistics.setPreferentialAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setPreferentialAmount("0"); } //减免金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("2")) { //获取减免金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalDeductionAmount = totalDeductionAmount + discountPrice; //减免金额 reportFeeMonthStatistics.setDeductionAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setDeductionAmount("0"); } //滞纳金 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("3")) { //获取滞纳金金额 Double discountPrice = (Double.valueOf(reportFeeMonthStatistics.getDiscountPrice())); totalLateFee = totalLateFee + discountPrice; //滞纳金 reportFeeMonthStatistics.setLateFee(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setLateFee("0"); } //空置房打折 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("4")) { //空置房打折金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalVacantHousingDiscount = totalVacantHousingDiscount + discountPrice; //空置房打折 reportFeeMonthStatistics.setVacantHousingDiscount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setVacantHousingDiscount("0"); } //空置房减免 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("5")) { //空置房减免金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalVacantHousingReduction = totalVacantHousingReduction + discountPrice; //空置房减免 reportFeeMonthStatistics.setVacantHousingReduction(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setVacantHousingReduction("0"); } //赠送金额 if (!StringUtil.isEmpty(reportFeeMonthStatistics.getDiscountSmallType()) && reportFeeMonthStatistics.getDiscountSmallType().equals("6")) { //赠送金额 Double discountPrice = Double.valueOf(reportFeeMonthStatistics.getDiscountPrice()); totalGiftAmount = totalGiftAmount + discountPrice; //赠送金额 reportFeeMonthStatistics.setGiftAmount(reportFeeMonthStatistics.getDiscountPrice()); } else { reportFeeMonthStatistics.setGiftAmount("0"); } if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reportFeeMonthStatistics.getPayerObjType())) { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getFloorNum() + "栋" + reportFeeMonthStatistics.getUnitNum() + "单元" + reportFeeMonthStatistics.getRoomNum() + "室"); } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(reportFeeMonthStatistics.getPayerObjType())) { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getCarNum()); } else { reportFeeMonthStatistics.setObjName(reportFeeMonthStatistics.getContractCode()); } if (!StringUtil.isEmpty(reportFeeMonthStatistics.getImportFeeName())) { reportFeeMonthStatistics.setFeeName(reportFeeMonthStatistics.getImportFeeName()); } //费用项目 reportFeeMonthStatistics.setFeeConfigDtos(feeConfigDtos); if (!StringUtil.isEmpty(reportFeeMonthStatistics.getRepairId())) { RepairDto repairDto = new RepairDto(); repairDto.setRepairId(reportFeeMonthStatistics.getRepairId()); //查询报修单 List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto); //Assert.listOnlyOne(repairDtos, "查询报修单错误!"); if (repairDtos != null && repairDtos.size() == 1) { if (!StringUtil.isEmpty(repairDtos.get(0).getRepairObjType()) && repairDtos.get(0).getRepairObjType().equals("004")) { OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto(); ownerRoomRelDto.setRoomId(repairDtos.get(0).getRepairObjId()); List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto); if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() == 0) { //查询条数为0条 OwnerRoomRelDto ownerRoomRel = new OwnerRoomRelDto(); ownerRoomRel.setRoomId(repairDtos.get(0).getRepairObjId()); ownerRoomRel.setStatusCd("1"); //看看业主房屋关系数据是否删除了 List<OwnerRoomRelDto> ownerRoomRels = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRel); Assert.listOnlyOne(ownerRoomRels, "查询业主房屋关系表错误!"); OwnerDto owner = new OwnerDto(); owner.setOwnerId(ownerRoomRels.get(0).getOwnerId()); owner.setOwnerTypeCd("1001"); //业主本人 List<OwnerDto> owners = ownerInnerServiceSMOImpl.queryOwners(owner); if (owners != null && owners.size() == 0) { //查出条数为0条 //判断业主是否删除了 OwnerDto newOwner = new OwnerDto(); newOwner.setOwnerId(ownerRoomRels.get(0).getOwnerId()); newOwner.setOwnerTypeCd("1001"); //业主本人 newOwner.setStatusCd("1"); List<OwnerDto> newOwners = ownerInnerServiceSMOImpl.queryOwners(newOwner); Assert.listOnlyOne(newOwners, "查询业主信息错误!"); reportFeeMonthStatistics.setOwnerName(newOwners.get(0).getName()); } else if (owners != null && owners.size() == 1) { //查出条数为1条 reportFeeMonthStatistics.setOwnerName(owners.get(0).getName()); } else { throw new IllegalArgumentException("查询业主信息错误!"); } } else if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() == 1) { //查询条数为1条 OwnerDto ownerDto = new OwnerDto(); ownerDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId()); ownerDto.setOwnerTypeCd("1001"); //业主本人 List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto); if (ownerDtos != null && ownerDtos.size() == 0) { //业主查询条数为0条 //判断业主是否删除了 OwnerDto newOwner = new OwnerDto(); newOwner.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId()); newOwner.setOwnerTypeCd("1001"); //业主本人 newOwner.setStatusCd("1"); List<OwnerDto> newOwners = ownerInnerServiceSMOImpl.queryOwners(newOwner); Assert.listOnlyOne(newOwners, "查询业主信息错误!"); reportFeeMonthStatistics.setOwnerName(newOwners.get(0).getName()); } else if (ownerDtos != null || ownerDtos.size() == 1) { reportFeeMonthStatistics.setOwnerName(ownerDtos.get(0).getName()); } else { throw new IllegalArgumentException("查询业主信息错误!"); } } else { throw new IllegalArgumentException("查询业主房屋关系表错误!"); } } } } if (!hasInReportListAndMerge(reportList, reportFeeMonthStatistics)) { reportList.add(reportFeeMonthStatistics); } } //如果是车位刷房屋信息 if (ownerIds.size() > 0) { refreshReportFeeMonthStatistics(ownerIds, reportFeeMonthStatisticsDtos); } //应收总金额(小计) reportFeeMonthStatisticsTotalDto.setTotalReceivableAmount(String.format("%.2f", totalReceivableAmount)); //实收金额(小计) reportFeeMonthStatisticsTotalDto.setTotalReceivedAmount(String.format("%.2f", totalReceivedAmount)); //优惠金额(小计) reportFeeMonthStatisticsTotalDto.setTotalPreferentialAmount(String.format("%.2f", totalPreferentialAmount)); //减免金额(小计) reportFeeMonthStatisticsTotalDto.setTotalDeductionAmount(String.format("%.2f", totalDeductionAmount)); //滞纳金(小计) reportFeeMonthStatisticsTotalDto.setTotalLateFee(String.format("%.2f", totalLateFee)); //空置房打折(小计) reportFeeMonthStatisticsTotalDto.setTotalVacantHousingDiscount(String.format("%.2f", totalVacantHousingDiscount)); //空置房减免(小计) reportFeeMonthStatisticsTotalDto.setTotalVacantHousingReduction(String.format("%.2f", totalVacantHousingReduction)); //赠送规则金额(小计) reportFeeMonthStatisticsTotalDto.setTotalGiftAmount(String.format("%.2f", totalGiftAmount)); //应收金额(大计) reportFeeMonthStatisticsTotalDto.setAllReceivableAmount(String.format("%.2f", allReceivableAmount)); //实收金额(大计) reportFeeMonthStatisticsTotalDto.setAllReceivedAmount(String.format("%.2f", allReceivedAmount)); //优惠金额(大计) reportFeeMonthStatisticsTotalDto.setAllPreferentialAmount(String.format("%.2f", allPreferentialAmount)); //减免金额(大计) reportFeeMonthStatisticsTotalDto.setAllDeductionAmount(String.format("%.2f", allDeductionAmount)); //滞纳金(大计) reportFeeMonthStatisticsTotalDto.setAllLateFee(String.format("%.2f", allLateFee)); //空置房打折金额(大计) reportFeeMonthStatisticsTotalDto.setAllVacantHousingDiscount(String.format("%.2f", allVacantHousingDiscount)); //空置房减免金额(大计) reportFeeMonthStatisticsTotalDto.setAllVacantHousingReduction(String.format("%.2f", allVacantHousingReduction)); //赠送规则金额(大计) reportFeeMonthStatisticsTotalDto.setAllGiftAmount(String.format("%.2f", allGiftAmount)); } else { reportFeeMonthStatisticsDtos = new ArrayList<>(); reportList.addAll(reportFeeMonthStatisticsDtos); reportFeeMonthStatisticsTotalDto = new ReportFeeMonthStatisticsTotalDto(); } ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reportFeeMonthStatisticsDto.getRow()), count, reportList, reportFeeMonthStatisticsTotalDto); return resultVo; } /** * @param ownerIds * @param reportFeeMonthStatisticsDtos */ private void refreshReportFeeMonthStatistics(List<String> ownerIds, List<ReportFeeMonthStatisticsDto> reportFeeMonthStatisticsDtos) { if (ownerIds == null || ownerIds.size() < 1) { return; } OwnerDto ownerDto = new OwnerDto(); ownerDto.setOwnerIds(ownerIds.toArray(new String[ownerIds.size()])); List<OwnerDto> ownerDtos = reportFeeMonthStatisticsInnerServiceSMOImpl.queryRoomAndParkingSpace(ownerDto); String objName = ""; for (ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto : reportFeeMonthStatisticsDtos) { if (!FeeDto.PAYER_OBJ_TYPE_CAR.equals(reportFeeMonthStatisticsDto.getPayerObjType())) { continue; } for (OwnerDto ownerDto1 : ownerDtos) { if (!StringUtil.isEmpty(reportFeeMonthStatisticsDto.getOwnerId()) && !reportFeeMonthStatisticsDto.getOwnerId().equals(ownerDto1.getOwnerId())) { continue; } objName = reportFeeMonthStatisticsDto.getObjName() + "(" + ownerDto1.getFloorNum() + "栋" + ownerDto1.getUnitNum() + "单元" + ownerDto1.getRoomNum() + "室)"; reportFeeMonthStatisticsDto.setObjName(objName); } } } private boolean hasInReportListAndMerge(List<ReportFeeMonthStatisticsDto> reportList, ReportFeeMonthStatisticsDto reportFeeMonthStatistics) { for (ReportFeeMonthStatisticsDto reportFeeMonthStatisticsDto : reportList) { if (reportFeeMonthStatisticsDto.getDetailId().equals(reportFeeMonthStatistics.getDetailId())) { combineSydwCore(reportFeeMonthStatistics, reportFeeMonthStatisticsDto); return true; } } return false; } //针对所用对象 private static ReportFeeMonthStatisticsDto combineSydwCore(ReportFeeMonthStatisticsDto sourceBean, ReportFeeMonthStatisticsDto targetBean) { Class sourceBeanClass = sourceBean.getClass(); Class targetBeanClass = targetBean.getClass(); Field[] sourceFields = sourceBeanClass.getDeclaredFields(); Field[] targetFields = sourceBeanClass.getDeclaredFields(); for (int i = 0; i < sourceFields.length; i++) { Field sourceField = sourceFields[i]; Field targetField = targetFields[i]; sourceField.setAccessible(true); targetField.setAccessible(true); try { if (!(sourceField.get(sourceBean) == null)) { targetField.set(targetBean, sourceField.get(sourceBean)); } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } return targetBean; } }