Bläddra i källkod

优化批量导出功能

wuxw 2 år sedan
förälder
incheckning
05315d023a

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java

@@ -46,6 +46,7 @@ public class FeeDto extends PageDto implements Serializable {
     private String[] payerObjIds;
     private String[] feeTypeCds;
     private String configId;
+    private String[] configIds;
 
     //映射关系开关值
     private String val;
@@ -827,4 +828,12 @@ public class FeeDto extends PageDto implements Serializable {
     public void setLogEndTime(String logEndTime) {
         this.logEndTime = logEndTime;
     }
+
+    public String[] getConfigIds() {
+        return configIds;
+    }
+
+    public void setConfigIds(String[] configIds) {
+        this.configIds = configIds;
+    }
 }

+ 6 - 0
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>

+ 1 - 1
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

+ 1 - 4
service-fee/src/main/java/com/java110/fee/cmd/fee/PayOweFeeCmd.java

@@ -180,10 +180,7 @@ public class PayOweFeeCmd extends Cmd {
             getFeeReceiptDetailPo(dataFlowContext, feeObj, feeReceiptDetailPos, feeReceiptPos, userDtos.get(0), receiptCode);
         }
 
-        //这里只是写入 收据表,暂不考虑 事务一致性问题,就算写入失败 也只是影响 收据打印,如果 贵公司对 收据要求 比较高,不能有失败的情况 请加入事务管理
-//        feeReceiptDetailInnerServiceSMOImpl.saveFeeReceiptDetails(feeReceiptDetailPos);
-//
-//        feeReceiptInnerServiceSMOImpl.saveFeeReceipts(feeReceiptPos);
+
 
         //根据明细ID 查询收据信息
         List<String> detailIds = new ArrayList<>();

+ 53 - 28
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.apache.poi.xssf.usermodel.XSSFWorkbook;
 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 @@ public class DataFeeManualCollectionAdapt implements IExportDataAdapt {
     @Autowired
     private IFeePrintSpecInnerServiceSMO feePrintSpecInnerServiceSMOImpl;
 
+    @Autowired
+    private IRoomV1InnerServiceSMO roomV1InnerServiceSMOImpl;
+
 
     private static final int MAX_ROW = 100;
 
@@ -55,21 +63,33 @@ public class DataFeeManualCollectionAdapt implements IExportDataAdapt {
         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,33 +97,37 @@ public class DataFeeManualCollectionAdapt implements IExportDataAdapt {
         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 @@ public class DataFeeManualCollectionAdapt implements IExportDataAdapt {
         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 @@ public class DataFeeManualCollectionAdapt implements IExportDataAdapt {
             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);
             }
         }