wuxw
2023-10-08 05315d023aea2d9054a5dabbefbe3dbc3f493b45
优化批量导出功能
5个文件已修改
105 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/FeeServiceDaoImplMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/report/ReportOweFeeServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/PayOweFeeCmd.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/export/adapt/DataFeeManualCollectionAdapt.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java
@@ -46,6 +46,7 @@
    private String[] payerObjIds;
    private String[] feeTypeCds;
    private String configId;
    private String[] configIds;
    //映射关系开关值
    private String val;
@@ -827,4 +828,12 @@
    public void setLogEndTime(String logEndTime) {
        this.logEndTime = logEndTime;
    }
    public String[] getConfigIds() {
        return configIds;
    }
    public void setConfigIds(String[] configIds) {
        this.configIds = configIds;
    }
}
java110-db/src/main/resources/mapper/fee/FeeServiceDaoImplMapper.xml
@@ -220,6 +220,12 @@
        <if test="configId !=null and configId != ''">
            and t.config_id= #{configId}
        </if>
        <if test="configIds != null and configIds.length > 0">
            and t.config_id in
            <foreach collection="configIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="payerObjType !=null and payerObjType != ''">
            and t.payer_obj_type = #{payerObjType}
        </if>
java110-db/src/main/resources/mapper/report/ReportOweFeeServiceDaoImplMapper.xml
@@ -314,7 +314,7 @@
            and t.config_id= #{configId}
        </if>
        <if test='hasOweFee !=null and hasOweFee == "Y"'>
            and t.amount_owed &gt; 0
            and t.amount_owed != 0
        </if>
        <if test="configIds !=null">
            and t.config_id in
service-fee/src/main/java/com/java110/fee/cmd/fee/PayOweFeeCmd.java
@@ -180,10 +180,7 @@
            getFeeReceiptDetailPo(dataFlowContext, feeObj, feeReceiptDetailPos, feeReceiptPos, userDtos.get(0), receiptCode);
        }
        //这里只是写入 收据表,暂不考虑 事务一致性问题,就算写入失败 也只是影响 收据打印,如果 贵公司对 收据要求 比较高,不能有失败的情况 请加入事务管理
//        feeReceiptDetailInnerServiceSMOImpl.saveFeeReceiptDetails(feeReceiptDetailPos);
//
//        feeReceiptInnerServiceSMOImpl.saveFeeReceipts(feeReceiptPos);
        //根据明细ID 查询收据信息
        List<String> detailIds = new ArrayList<>();
service-job/src/main/java/com/java110/job/export/adapt/DataFeeManualCollectionAdapt.java
@@ -1,14 +1,18 @@
package com.java110.job.export.adapt;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.smo.IComputeFeeSMO;
import com.java110.dto.data.ExportDataDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.fee.FeePrintSpecDto;
import com.java110.dto.reportFee.ReportOweFeeDto;
import com.java110.dto.room.RoomDto;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.community.IRoomV1InnerServiceSMO;
import com.java110.intf.fee.IFeeInnerServiceSMO;
import com.java110.intf.fee.IFeePrintSpecInnerServiceSMO;
import com.java110.intf.report.IReportOweFeeInnerServiceSMO;
import com.java110.job.export.IExportDataAdapt;
import com.java110.utils.util.*;
import com.java110.utils.util.DateUtil;
@@ -20,6 +24,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.awt.image.ImagingOpException;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -46,6 +51,9 @@
    @Autowired
    private IFeePrintSpecInnerServiceSMO feePrintSpecInnerServiceSMOImpl;
    @Autowired
    private IRoomV1InnerServiceSMO roomV1InnerServiceSMOImpl;
    private static final int MAX_ROW = 100;
@@ -55,21 +63,33 @@
        JSONObject reqJson = exportDataDto.getReqJson();
        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区");
        if (reqJson.containsKey("configIds")) {
            throw new IllegalArgumentException("未包含费用项");
        }
        JSONArray configIds = reqJson.getJSONArray("configIds");
        if (configIds == null || configIds.isEmpty()) {
            throw new IllegalArgumentException("未包含费用项");
        }
        if (reqJson.containsKey("roomIds")) {
            throw new IllegalArgumentException("未包含房屋");
        }
        JSONArray roomIds = reqJson.getJSONArray("roomIds");
        if (roomIds == null || roomIds.isEmpty()) {
            throw new IllegalArgumentException("未包含房屋");
        }
        SXSSFWorkbook workbook = null;  //工作簿
        workbook = new SXSSFWorkbook();
        workbook.setCompressTempFiles(false);
        Sheet sheet = workbook.createSheet("催缴单");
        Drawing patriarch = sheet.createDrawingPatriarch();
        RoomDto roomDto = new RoomDto();
        roomDto.setCommunityId(reqJson.getString("communityId"));
        roomDto.setRoomId(reqJson.getString("roomId"));
        roomDto.setFloorId(reqJson.getString("floorId"));
        int count = roomInnerServiceSMOImpl.queryRoomsCount(roomDto);
        if (count < 1) {
            return workbook;
        }
        FeePrintSpecDto feePrintSpecDto = new FeePrintSpecDto();
        feePrintSpecDto.setCommunityId(reqJson.getString("communityId"));
        feePrintSpecDto.setSpecCd("1010");
@@ -77,32 +97,36 @@
        feePrintSpecDto.setRow(1);
        List<FeePrintSpecDto> feePrintSpecDtos = feePrintSpecInnerServiceSMOImpl.queryFeePrintSpecs(feePrintSpecDto);
        if (feePrintSpecDtos == null || feePrintSpecDtos.size() < 1) {
        if (feePrintSpecDtos == null || feePrintSpecDtos.isEmpty()) {
            feePrintSpecDto = null;
        } else {
            feePrintSpecDto = feePrintSpecDtos.get(0);
        }
        int maxPage = (int) Math.ceil((double) count / (double) MAX_ROW);
        List<RoomDto> roomDtos = null;
        int line = 0;
        double totalPageHeight = 0;
        for (int page = 1; page <= maxPage; page++) {
            roomDto.setPage(page);
            roomDto.setRow(MAX_ROW);
            roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
            for (RoomDto roomDto1 : roomDtos) {
                getTmpRoomDtos(roomDto1);
            }
            for (int roomIndex = 0; roomIndex < roomDtos.size(); roomIndex++) {
                //todo 有可能房屋下没有欠费
                if (roomDtos.get(roomIndex).getFees() == null) {
                    continue;
                }
                Map<String, Object> info = generatorRoomOweFee(sheet, workbook, roomDtos.get(roomIndex), line, totalPageHeight, patriarch, feePrintSpecDto);
                line = Integer.parseInt(info.get("line").toString()) + 1;
                totalPageHeight = Double.parseDouble(info.get("totalPageHeight").toString());
            }
        RoomDto roomDto = new RoomDto();
        roomDto.setRoomIds(roomIds.toArray(new String[roomIds.size()]));
        roomDto.setCommunityId(reqJson.getString("communityId"));
        List<RoomDto> roomDtos = roomV1InnerServiceSMOImpl.queryRooms(roomDto);
        if (roomDtos == null || roomDtos.isEmpty()) {
            throw new IllegalArgumentException("未包含房屋");
        }
        for (RoomDto roomDto1 : roomDtos) {
            getTmpRoomDtos(roomDto1,configIds);
        }
        for (int roomIndex = 0; roomIndex < roomDtos.size(); roomIndex++) {
            //todo 有可能房屋下没有欠费
            if (roomDtos.get(roomIndex).getFees() == null) {
                continue;
            }
            Map<String, Object> info = generatorRoomOweFee(sheet, workbook, roomDtos.get(roomIndex), line, totalPageHeight, patriarch, feePrintSpecDto);
            line = Integer.parseInt(info.get("line").toString()) + 1;
            totalPageHeight = Double.parseDouble(info.get("totalPageHeight").toString());
        }
        return workbook;
    }
@@ -350,13 +374,14 @@
        return info;
    }
    private RoomDto getTmpRoomDtos(RoomDto tmpRoomDto) {
    private RoomDto getTmpRoomDtos(RoomDto tmpRoomDto,JSONArray configIds) {
        FeeDto tmpFeeDto = null;
        tmpFeeDto = new FeeDto();
        tmpFeeDto.setArrearsEndTime(DateUtil.getCurrentDate());
        tmpFeeDto.setState(FeeDto.STATE_DOING);
        tmpFeeDto.setPayerObjId(tmpRoomDto.getRoomId());
        tmpFeeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        tmpFeeDto.setConfigIds(configIds.toArray(new String[configIds.size()]));
        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.querySimpleFees(tmpFeeDto);
        if (feeDtos == null || feeDtos.size() < 1) {
@@ -369,7 +394,7 @@
            computeFeeSMOImpl.computeEveryOweFee(tempFeeDto, tmpRoomDto);//计算欠费金额
            //如果金额为0 就排除
            //if (tempFeeDto.getFeePrice() > 0 && tempFeeDto.getEndTime().getTime() <= DateUtil.getCurrentDate().getTime()) {
            if (tempFeeDto.getFeePrice() > 0) {
            if (tempFeeDto.getFeePrice() != 0) {
                tmpFeeDtos.add(tempFeeDto);
            }
        }