chengf
2025-09-02 ce53a4e81781025ae4f87a7b0aaabb0b87c7347f
暂存0829
1个文件已添加
162 ■■■■■ 已修改文件
service-job/src/main/java/com/java110/job/export/adapt/ReportFeeWriteOrderAdapt.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/export/adapt/ReportFeeWriteOrderAdapt.java
New file
@@ -0,0 +1,162 @@
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() : "");
            }
        }
    }
}