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() : "");
|
}
|
}
|
}
|
}
|