chengf
2025-09-22 e8ded5b9dbc884741d7de7a7f4d36b517db3c8db
第三张报表导出0922
13个文件已修改
184 ■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/importData/ImportRoomFee.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/payFee/PayFeeAuditDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/PayFeeAuditServiceDaoImplMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/user/MenuCatalogV1ServiceDaoImplMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/export/adapt/ReportFeeAdapt.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/export/adapt/ReportPropertyFeeAdapt.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application-debug.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/importData/ImportRoomFee.java
@@ -3,7 +3,7 @@
/**
 * 房屋费用导入对象
 */
public class ImportRoomFee {
public class ImportRoomFee implements Cloneable {
    private String payerObjName;
@@ -35,6 +35,7 @@
    private String contractId;
    private String state;
    private String cycle;
    private String remark;
    private String ownerId;
@@ -376,4 +377,16 @@
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone(); // 浅克隆,如果有引用类型字段可能需要深克隆
    }
}
java110-bean/src/main/java/com/java110/dto/payFee/PayFeeAuditDto.java
@@ -37,7 +37,15 @@
    private String bId;
    private String detailId;
    private String payOrderId;
    private String auditId;
    public String getAuditId() {
        return auditId;
    }
    public void setAuditId(String auditId) {
        this.auditId = auditId;
    }
    private Date createTime;
java110-db/src/main/resources/mapper/fee/PayFeeAuditServiceDaoImplMapper.xml
@@ -16,7 +16,7 @@
        select pf.payer_obj_id payerObjId,pf.payer_obj_type payerObjType,pfc.fee_name feeName,
        pfd.cycles,pfd.start_time startTime,pfd.end_time endTime,pfd.receivable_amount receivableAmount,
        pfd.received_amount receivedAmount,pfd.create_time createTime,pfa.state,pfa.message,pfd.remark,
        pfa.audit_user_name auditUserName,pfd.b_id bId,pf.fee_id feeId,pf.community_id communityId,pfd.detail_id
        pfa.audit_id auditId,pfa.audit_user_name auditUserName,pfd.b_id bId,pf.fee_id feeId,pf.community_id communityId,pfd.detail_id
        detailId,
        case
        when pfd.pay_order_id like '80%'
@@ -41,7 +41,7 @@
        where 1=1
        and pfd.community_id = #{communityId}
        and pfd.status_cd = '0'
        and pfd.state = '1400'
        and pfd.state in ('1000','1200','1400','1600')
        <if test="roomId !=null and roomId != ''">
            and pf.payer_obj_id = #{roomId}
            and pf.payer_obj_type = '3333'
@@ -113,7 +113,7 @@
        where 1=1
        and pfd.community_id = #{communityId}
        and pfd.status_cd = '0'
        and pfd.state = '1400'
        and pfd.state in ('1000','1200','1400','1600')
        <if test="roomId !=null and roomId != ''">
            and pf.payer_obj_id = #{roomId}
            and pf.payer_obj_type = '3333'
java110-db/src/main/resources/mapper/user/MenuCatalogV1ServiceDaoImplMapper.xml
@@ -135,7 +135,7 @@
        </if>
        WHERE
        mmg.group_type = #{groupType}
        and mmg.store_type= #{domain}
        and mmg.store_type= #{domain} and mm.is_show != 'N'
        <if test="caId !=null and caId != ''">
            and mgc.ca_id = #{caId}
        </if>
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java
@@ -364,13 +364,13 @@
                linkedList.add(feeDto1);
                reportFeeDtoLists.add(linkedList);
            }
            if (ind == 3){
            if (ind == 2){
//                fee.setCurYear("停车费合计(3+...+7)");
//                fee.setReport(colByCar);
//                carFeeList.add(fee);
                reportFeeDtoLists.add(carFeeList);
            }
            if (ind == 8){
            if (ind == 7){
//                fee2.setCurYear("其他类合计(8+...+22)");
//                fee2.setReport(colByOther);
//                otherFeeList.add(fee2);
service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java
@@ -25,6 +25,7 @@
import com.java110.core.factory.CommunitySettingFactory;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.fee.*;
import com.java110.dto.payFee.PayFeeAuditDto;
import com.java110.dto.room.RoomDto;
import com.java110.dto.account.AccountDto;
import com.java110.dto.wechat.OnlinePayDto;
@@ -52,6 +53,7 @@
import com.java110.po.fee.FeeReceiptPo;
import com.java110.po.fee.FeeReceiptDetailPo;
import com.java110.po.onlinePayRefund.OnlinePayRefundPo;
import com.java110.po.payFee.PayFeeAuditPo;
import com.java110.po.wechat.OnlinePayPo;
import com.java110.po.payFee.PayFeeDetailDiscountPo;
import com.java110.po.payFee.ReturnPayFeePo;
@@ -155,6 +157,9 @@
    @Autowired
    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
    @Autowired
    private IPayFeeAuditInnerServiceSMO payFeeAuditInnerServiceSMOImpl;
    private static final String SPEC_RATE = "89002020980015"; //赠送月份
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -170,9 +170,9 @@
        payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
        // todo 费用已经结束
        if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
            return;
        }
//        if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
//            return;
//        }
        List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
        // todo 处理 开始时间和结束时间
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
@@ -226,7 +226,7 @@
    private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) {
        //todo 处理已经交过费的记录处理
//        payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto, feePrice);
        payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto, feePrice);
        //todo 处理 endTime 到 deadlineTime 的费用
service-job/src/main/java/com/java110/job/export/adapt/ReportFeeAdapt.java
@@ -117,7 +117,7 @@
                    // cell.setCellStyle(dateStyle);
                } else {
                    // 其他类型转为字符串
                    cell.setCellValue(value != null ? value.toString() : "");
                    cell.setCellValue(((Number) 0).doubleValue());
                }
            }
        }
@@ -286,13 +286,57 @@
    private Object[][] createArr(ExportDataDto exportDataDto) {
        JSONObject reqJson = exportDataDto.getReqJson();
        lastInd = 24 + (endYear - startYear);
        Object[][] arr = new Object[100 + 23 * (endYear - startYear)][lastInd];
        Object[][] arr = new Object[19 * (endYear - startYear + 4) + 14][lastInd];
        builderLine1(arr[0]);
        builderLine2(arr[1]);
        builderDun(arr);
        List<List<FeeDto>> reportFeeDtoLists = new LinkedList<>();
        queryFee(reportFeeDtoLists ,reqJson);
        int ind = 0;
        for (int j = 0; j < reportFeeDtoLists.size(); j++) {
            List<FeeDto> reportFeeDtoList = reportFeeDtoLists.get(j);
            // 先判断列表是否为null,再判断列表是否为空
            if (reportFeeDtoList == null || reportFeeDtoList.isEmpty()) {
                continue;
            }
//            if (j > 4 && reportFeeDtoList.size() == 1 && reportFeeDtoLists.get(j - 1).size() == 1){
//                ind++;
//            }
            FeeDto firstFeeDto = reportFeeDtoList.get(0);
            // 判断第一个元素和其report属性是否为null
            if (firstFeeDto == null || firstFeeDto.getReport() == null) {
                continue;
            }
            // 安全访问report数组
            double[] reportArray = firstFeeDto.getReport();
            for (int i = 0; i < reportArray.length; i++) {
                // 确保arr的索引有效(避免数组越界)
                if (j + ind + 2 < arr.length && i + 3 < arr[j + ind + 2].length) {
                    arr[j + ind + 2][i + 3] = reportArray[i];
                }
            }
            if (reportFeeDtoList.size() > 1) {
                for (int jj = 1; jj < reportFeeDtoList.size(); jj++) {
                    FeeDto feeDto = reportFeeDtoList.get(jj - 1);
                    if (feeDto == null || feeDto.getReport() == null) {
                        continue;
                    }
                    // 安全访问report数组
                    reportArray = feeDto.getReport();
                    for (int i = 0; i < reportArray.length; i++) {
                        // 确保arr的索引有效(避免数组越界)
                        if (j + ind + 2 < arr.length && i + 3 < arr[j + ind + 2].length) {
                            arr[j + ind + 2][i + 3] = reportArray[i];
                        }
                    }
                    ind ++;
                }
            }
        }
        return arr;
    }
@@ -579,9 +623,7 @@
        dictDto.setTableColumns("fee_type_cd");
        List<DictDto> dictDtos = dictV1InnerServiceSMO.queryDicts(dictDto);
        for (DictDto dictDto1 : dictDtos) {//类型
            List<FeeDto> reportFeeDtos = new LinkedList<>();//该类型的数组
            FeeDto feeDto = new FeeDto();
            LinkedList<FeeDto> feeDtos = new LinkedList<>();//总的
            int kg = 0;
            for (Map map : result){
                if(map.get("费用所属年份").equals("类型总计") && map.containsKey("fee_type_cd") && map.get("fee_type_cd").equals(dictDto1.getStatusCd())){
@@ -723,13 +765,13 @@
                linkedList.add(feeDto1);
                reportFeeDtoLists.add(linkedList);
            }
            if (ind == 3){
            if (ind == 2){
//                fee.setCurYear("停车费合计(3+...+7)");
//                fee.setReport(colByCar);
//                carFeeList.add(fee);
                reportFeeDtoLists.add(carFeeList);
            }
            if (ind == 8){
            if (ind == 7){
//                fee2.setCurYear("其他类合计(8+...+22)");
//                fee2.setReport(colByOther);
//                otherFeeList.add(fee2);
service-job/src/main/java/com/java110/job/export/adapt/ReportPropertyFeeAdapt.java
@@ -288,7 +288,7 @@
            String[] rowData = new String[arrLength];
            // 设置基础信息
            rowData[0] = String.valueOf(row * (page - 1) + i + 1);
            rowData[0] = String.valueOf(i + 1);
            rowData[1] = String.valueOf(room.getOrDefault("property_type", ""));
            rowData[2] = String.valueOf(room.getOrDefault("floor_num", ""));
            rowData[3] = String.valueOf(room.getOrDefault("unit_num", ""));
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -145,14 +145,13 @@
        List<ImportRoomFee> importRoomFees = new ArrayList<>();
        List<ImportRoomFee> importCarFees = new ArrayList<>();
        List<ImportRoomFee> importContractFees = new ArrayList<>();
        List<CarInoutPo> carInoutPos = new ArrayList<>();
        String communityId = assetImportLogDetailDto.getCommunityId();
        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
        ImportRoomFee importRoomFee = BeanConvertUtil.covertBean(data, ImportRoomFee.class);
        if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){
            throw new IllegalStateException("该费用为起始时间小于小区接管时间不进行导入");
        }
//        if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){
//            throw new IllegalStateException("该费用为起始时间小于小区接管时间不进行导入");
//        }
        if (importRoomFee.getEndTime() != null){
            String[] split = importRoomFee.getEndTime().split(" ");
            importRoomFee.setEndTime(split[0] + " 23:59:59");
@@ -285,11 +284,66 @@
        try{
            if(!(ListUtil.isNull(importRoomFees))){
                if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){
                    ImportRoomFee original = importRoomFees.get(0);
                    ImportRoomFee importRoomFee1 = (ImportRoomFee) original.clone(); // 克隆新对象
                    ImportRoomFee importRoomFee2 = (ImportRoomFee) original.clone(); // 克隆另一个新对象
                    double cycle = (DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee1.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee1.getEndTime())
                    )) ;
                    double amount = Double.parseDouble(importRoomFee1.getAmount());
                    importRoomFees = new ArrayList<>();
                    importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59");
                    importRoomFee1.setCycle((DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee1.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee1.getEndTime())
                    )) + "");
                    importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + "");
                    importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00");
                    importRoomFee2.setCycle((DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee2.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee2.getEndTime())
                    )) + "");
                    importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + "");
                    importRoomFee1.setState("1600");
                    importRoomFee2.setState("1400");
                    importRoomFees.add(importRoomFee1);
                    importRoomFees.add(importRoomFee2);
                }
                importFeeDetails(importRoomFees.get(0).getStoreId(), importRoomFees.get(0).getUserId(), importRoomFees, importRoomFees.get(0).getBatchId());
            }
            if(!(ListUtil.isNull(importCarFees))){
                if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){
                    importRoomFees = importCarFees;
                    ImportRoomFee importRoomFee1 = importRoomFees.get(0);
                    ImportRoomFee importRoomFee2 = importRoomFees.get(0);
                    importRoomFees = new ArrayList<>();
                    importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59");
                    double cycle = Double.parseDouble(importRoomFee1.getCycle());
                    double amount = Double.parseDouble(importRoomFee1.getAmount());
                    importRoomFee1.setCycle((DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee1.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee1.getEndTime())
                    )) + "");
                    importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + "");
                    importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00");
                    importRoomFee2.setCycle((DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee2.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee2.getEndTime())
                    )) + "");
                    importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + "");
                    importRoomFee1.setState("1600");
                    importRoomFee2.setState("1400");
                importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importCarFees, importCarFees.get(0).getBatchId());
                    importRoomFees.add(importRoomFee1);
                    importRoomFees.add(importRoomFee2);
                    importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importRoomFees, importCarFees.get(0).getBatchId());
                }
                else{
                    importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importCarFees, importCarFees.get(0).getBatchId());
                }
            }
        }catch (IllegalStateException e){
            throw new IllegalArgumentException(e.getMessage());
@@ -459,7 +513,7 @@
            }
        }
        feeDto2.setCommunityId(importRoomFee.getCommunityId());
        if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0){
        if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0 && !importRoomFee.getState().equals("1600")){
            feeDto2.setStatusCd("0");
            feeDto2.setUseStart(DateUtil.getDateFromStringA(importRoomFee.getStartTime()));
            feeDto2.setUseEnd(DateUtil.getDateFromStringA(importRoomFee.getEndTime()));
@@ -468,7 +522,7 @@
        if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0) {
            feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState()));
        }
        if(feeDtos.size() == 0){
        if(feeDtos.size() == 0 && !importRoomFee.getState().equals("1600")){
            updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在"));
            throw new IllegalArgumentException("费用记录"+importRoomFee.getFeeName()+"不存在");
@@ -575,6 +629,9 @@
            cycle = cycle - cycle - cycle;
            payFeeDetailPo.setState("1300");
        }
        if (importRoomFee.getState() != null){
            payFeeDetailPo.setState(importRoomFee.getState());
        }
        int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo);
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
@@ -599,6 +656,12 @@
            payFeeDetailPo.setState("1300");
            int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
            return;
        } else if (importRoomFee.getState().equals("1600")){
            payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
            payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+"");
            payFeeDetailPo.setDiscountAmount("0");
            int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
            return;
        }
        PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo();
springboot/src/main/resources/application-debug.yml
@@ -33,7 +33,6 @@
      max-idle: 50
      min-idle: 20
      timeout: 0
    password: redis2020
  activiti:
    database-schema-update: false
  datasource:
springboot/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: debug
    active: devlocal
import:
  line: