| New file |
| | |
| | | package com.java110.fee.cmd.fee; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.annotation.Java110Cmd; |
| | | import com.java110.core.context.ICmdDataFlowContext; |
| | | import com.java110.core.event.cmd.Cmd; |
| | | import com.java110.core.event.cmd.CmdEvent; |
| | | import com.java110.dto.fee.FeeDetailDto; |
| | | import com.java110.intf.community.ICommunityInnerServiceSMO; |
| | | import com.java110.intf.dev.IDictV1InnerServiceSMO; |
| | | import com.java110.intf.fee.IReportFeeInnerServiceSMO; |
| | | import com.java110.fee.smo.impl.FeeDetailInnerServiceSMOImpl; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.vo.FeeQueryParams; |
| | | 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.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | |
| | | import java.text.ParseException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Java110Cmd(serviceCode = "fee.whiteOrderReportFeeCmd") |
| | | public class ReportFeeWriteOrderAdapt extends Cmd { |
| | | |
| | | @Autowired |
| | | private IReportFeeInnerServiceSMO reportFeeInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private ICommunityInnerServiceSMO communityInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IDictV1InnerServiceSMO dictV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private FeeDetailInnerServiceSMOImpl feeDetailInnerServiceSMOImpl; |
| | | |
| | | private static final int MAX_ROW = 60000; |
| | | |
| | | @Override |
| | | public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { |
| | | Assert.hasKey(reqJson, "communityId", "请求报文中未包含小区编号"); |
| | | } |
| | | |
| | | @Override |
| | | public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { |
| | | // 判断是否为导出操作 |
| | | if (reqJson.containsKey("export") && reqJson.getBoolean("export")) { |
| | | SXSSFWorkbook workbook = exportData(reqJson); |
| | | try { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.add("Content-Disposition", "attachment;filename=whiteOrderFeeReport.xlsx"); |
| | | ResponseEntity<byte[]> responseEntity = new ResponseEntity<>( |
| | | workbook.toByteArray(), |
| | | headers, |
| | | HttpStatus.OK |
| | | ); |
| | | context.setResponseEntity(responseEntity); |
| | | } catch (Exception e) { |
| | | throw new CmdException("导出报表失败:" + e.getMessage()); |
| | | } finally { |
| | | workbook.dispose(); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | // 原查询逻辑保持不变 |
| | | FeeQueryParams feeQueryParams = new FeeQueryParams(); |
| | | feeQueryParams.setCommunityId(reqJson.getString("communityId")); |
| | | feeQueryParams.setRow(reqJson.containsKey("row") ? Integer.valueOf(reqJson.getString("row")) : 20); |
| | | feeQueryParams.setPage(reqJson.containsKey("page") ? Integer.valueOf(reqJson.get("page").toString()) : 1); |
| | | feeQueryParams.setPage(feeQueryParams.getPage() * feeQueryParams.getRow() - feeQueryParams.getRow()); |
| | | |
| | | List<Map> result = reportFeeInnerServiceSMOImpl.repostPaidInFeeByWhiteOrder(feeQueryParams); |
| | | String[][] reportList = new String[feeQueryParams.getRow() != null ? feeQueryParams.getRow() : 100][]; |
| | | for (int i = 0; i < result.size(); i++) { |
| | | Map map = result.get(i); |
| | | String[] strings = new String[29]; |
| | | for (int j = 1; j <= 27; j++) { |
| | | if (map.containsKey("row" + j)) { |
| | | strings[j - 1] = map.get("row" + j).toString(); |
| | | } |
| | | } |
| | | reportList[i] = strings; |
| | | } |
| | | FeeDetailDto feeDetailDto = new FeeDetailDto(); |
| | | feeDetailDto.setCommunityId(reqJson.getString("communityId")); |
| | | int c = feeDetailInnerServiceSMOImpl.queryFeeDetailsCount(feeDetailDto); |
| | | |
| | | ResultVo resultVo = new ResultVo(reportList); |
| | | resultVo.setTotal(Integer.parseInt(result.get(0).get("count").toString())); |
| | | ResponseEntity<String> responseEntity = new ResponseEntity<>(resultVo.toString(), HttpStatus.OK); |
| | | context.setResponseEntity(responseEntity); |
| | | } |
| | | |
| | | /** |
| | | * 导出数据,类似ReportProficientAdapt的exportData方法 |
| | | */ |
| | | private SXSSFWorkbook exportData(JSONObject reqJson) { |
| | | SXSSFWorkbook workbook = new SXSSFWorkbook(); |
| | | workbook.setCompressTempFiles(false); |
| | | |
| | | // 创建工作表 |
| | | Sheet sheet = workbook.createSheet("白单缴费报表"); |
| | | // 创建表头 |
| | | createHeaderRow(sheet); |
| | | |
| | | // 查询数据 |
| | | FeeQueryParams feeQueryParams = new FeeQueryParams(); |
| | | feeQueryParams.setCommunityId(reqJson.getString("communityId")); |
| | | feeQueryParams.setPage(1); |
| | | feeQueryParams.setRow(MAX_ROW); |
| | | |
| | | List<Map> result = reportFeeInnerServiceSMOImpl.repostPaidInFeeByWhiteOrder(feeQueryParams); |
| | | |
| | | // 填充数据 |
| | | appendData(result, sheet); |
| | | |
| | | return workbook; |
| | | } |
| | | |
| | | /** |
| | | * 创建表头行 |
| | | */ |
| | | private void createHeaderRow(Sheet sheet) { |
| | | Row row = sheet.createRow(0); |
| | | String[] headers = { |
| | | "小区名称", "业主姓名", "房屋信息", "费用类型", "缴费周期", |
| | | "应收金额", "已收金额", "欠费金额", "缴费状态", "缴费时间", |
| | | "操作人", "备注", "收费项1", "收费项2", "收费项3", |
| | | "收费项4", "收费项5", "收费项6", "收费项7", "收费项8", |
| | | "收费项9", "收费项10", "收费项11", "收费项12", "收费项13", |
| | | "收费项14", "收费项15" |
| | | }; |
| | | |
| | | for (int i = 0; i < headers.length; i++) { |
| | | row.createCell(i).setCellValue(headers[i]); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 填充数据到工作表 |
| | | */ |
| | | private void appendData(List<Map> result, Sheet sheet) { |
| | | for (int index = 0; index < result.size(); index++) { |
| | | Map<String, Object> dataMap = result.get(index); |
| | | Row row = sheet.createRow(index + 1); // 从第2行开始填充(第1行为表头) |
| | | |
| | | for (int j = 1; j <= 27; j++) { |
| | | String key = "row" + j; |
| | | Object value = dataMap.get(key); |
| | | row.createCell(j - 1).setCellValue(value != null ? value.toString() : ""); |
| | | } |
| | | } |
| | | } |
| | | } |