chengf
2026-02-25 64b14b0549344f13b191e2c26ed199f62655c43f
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -22,6 +22,7 @@
import com.java110.fee.api.FeeDiscountApi;
import com.java110.fee.cmd.fee.PayFeeCmd;
import com.java110.fee.cmd.fee.PayFeePreCmd;
import com.java110.fee.feeMonth.IPayFeeMonth;
import com.java110.intf.IImportPropertyWhiteListfFlowServiceSMO;
import com.java110.intf.common.ICarInoutInnerServiceSMO;
import com.java110.intf.community.ICommunityInnerServiceSMO;
@@ -288,9 +289,10 @@
                importRoomFee.setContractId(data.getString("licensePlate"));
                importRoomFee.setInvoiceNo(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N");
                importRoomFee.setObjType("7777");
                LocalDateTime startDate = LocalDateTime.parse(importRoomFee.getStartTime(), formatter);
                LocalDateTime endDate = LocalDateTime.parse(importRoomFee.getEndTime(), formatter);
                importRoomFee.setCycle(String.valueOf(ChronoUnit.MONTHS.between(startDate, endDate)));
                importRoomFee.setCycle((DateUtil.dayCompare(
                        DateUtil.getDateFromStringA(importRoomFee.getStartTime()),
                        DateUtil.getDateFromStringA(importRoomFee.getEndTime())
                )) + "");
                if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){
                    importRoomFee.setCycle("-"+importRoomFee.getCycle());
                }
@@ -311,9 +313,10 @@
                importRoomFee.setOpenInv(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N");
//            if(importRoomFee.getPayerObjName())
                importRoomFee.setObjType("6666");
                LocalDateTime startDate = LocalDateTime.parse(importRoomFee.getStartTime(), formatter);
                LocalDateTime endDate = LocalDateTime.parse(importRoomFee.getEndTime(), formatter);
                importRoomFee.setCycle(String.valueOf(ChronoUnit.MONTHS.between(startDate, endDate)));
                importRoomFee.setCycle((DateUtil.dayCompare(
                        DateUtil.getDateFromStringA(importRoomFee.getStartTime()),
                        DateUtil.getDateFromStringA(importRoomFee.getEndTime())
                )) + "");
                if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){
                    importRoomFee.setCycle("-"+importRoomFee.getCycle());
                }
@@ -330,6 +333,13 @@
                importRoomFee.setAmount(data.getString("chargeAmount"));
                importRoomFee.setStaffName(data.getString("charger"));
                importRoomFee.setOpenInv(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N");
                importRoomFee.setCycle((DateUtil.dayCompare(
                        DateUtil.getDateFromStringA(importRoomFee.getStartTime()),
                        DateUtil.getDateFromStringA(importRoomFee.getEndTime())
                )) + "");
                if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){
                    importRoomFee.setCycle("-"+importRoomFee.getCycle());
                }
//            if(importRoomFee.getPayerObjName())
                importRoomFees.add(importRoomFee);
            }
@@ -340,6 +350,9 @@
        }
        try{
            if(assetImportLogDetailDto.getOutTime() == null) {
                assetImportLogDetailDto.setOutTime("2050-01-01 23:59:59");
            }
            if(!(ListUtil.isNull(importRoomFees))){
                if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){
                    ImportRoomFee original = importRoomFees.get(0);
@@ -369,19 +382,45 @@
                    importRoomFees.add(importRoomFee1);
                    importRoomFees.add(importRoomFee2);
                }
//                ImportRoomFee importRoomFeeLast = importRoomFees.get(importRoomFees.size()-1);
//                if (DateUtil.getDateFromStringB(data.getString("chargeEnd").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300"))
                if (DateUtil.getDateFromStringB(data.getString("chargeEnd").split(" ")[0]).getTime() > DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime().split(" ")[0]).getTime()
                        && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){
                    ImportRoomFee importRoomFeeLast = importRoomFees.get(importRoomFees.size()-1);
                    double cycle = Double.parseDouble(importRoomFeeLast.getCycle());
                    double amount = Double.parseDouble(importRoomFeeLast.getAmount());
                    ImportRoomFee importRoomFeeEnd = (ImportRoomFee) importRoomFeeLast.clone();
                    importRoomFeeLast.setEndTime(assetImportLogDetailDto.getOutTime() + " 23:59:59");
                    double cycle1 = (DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFeeLast.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFeeLast.getEndTime())
                    ));
                    double amount1 = amount/cycle * cycle1;
                    importRoomFeeEnd.setStartTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime()),1) + " 00:00:00");
                    importRoomFeeEnd.setCycle(DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFeeEnd.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFeeEnd.getEndTime())
                    ) + "");
                    importRoomFeeEnd.setAmount(amount - amount1 + "");
                    importRoomFeeEnd.setState("1900");
                    importRoomFees.add(importRoomFeeEnd);
                }
                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 = importCarFees;
                if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){
                    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");
                    double cycle = Double.parseDouble(importRoomFee1.getCycle());
                    double amount = Double.parseDouble(importRoomFee1.getAmount());
                    importRoomFee1.setCycle((DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFee1.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFee1.getEndTime())
@@ -398,11 +437,32 @@
                    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());
                if (DateUtil.getDateFromStringB(data.getString("chargeEnd").split(" ")[0]).getTime() > DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime().split(" ")[0]).getTime()
                        && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){
                    ImportRoomFee importRoomFeeLast = importRoomFees.get(importRoomFees.size()-1);
                    double cycle = Double.parseDouble(importRoomFeeLast.getCycle());
                    double amount = Double.parseDouble(importRoomFeeLast.getAmount());
                    ImportRoomFee importRoomFeeEnd = (ImportRoomFee) importRoomFeeLast.clone();
                    importRoomFeeLast.setEndTime(assetImportLogDetailDto.getOutTime() + " 23:59:59");
                    double cycle1 = (DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFeeLast.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFeeLast.getEndTime())
                    ));
                    double amount1 = amount/cycle * cycle1;
                    importRoomFeeEnd.setStartTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime()),1) + " 00:00:00");
                    importRoomFeeEnd.setCycle(DateUtil.dayCompare(
                            DateUtil.getDateFromStringA(importRoomFeeEnd.getStartTime()),
                            DateUtil.getDateFromStringA(importRoomFeeEnd.getEndTime())
                    ) + "");
                    importRoomFeeEnd.setAmount(amount - amount1 + "");
                    importRoomFeeEnd.setState("1900");
                    importRoomFees.add(importRoomFeeEnd);
                }
                importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importRoomFees, importCarFees.get(0).getBatchId());
            }
        }catch (IllegalStateException e){
            throw new IllegalArgumentException(e.getMessage());
@@ -508,6 +568,11 @@
     *
     * @param importRoomFee
     */
    @Autowired
    private IPayFeeMonth payFeeMonthImpl;
    private void importFeeDetail(ImportRoomFee importRoomFee, String storeId, String userId, String batchId) {
        if (importRoomFee.getState() == null){
@@ -576,7 +641,7 @@
            }
        }
        feeDto2.setCommunityId(importRoomFee.getCommunityId());
        if (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300") || importRoomFee.getState().equals("1600")) {
        if (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300") || importRoomFee.getState().equals("1600") || importRoomFee.getState().equals("1900")) {
        }
        else {
@@ -588,7 +653,7 @@
        if (!(importRoomFee.getFrequency().equals("退费"))) {
            feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState()));
        }
        if(feeDtos.size() == 0 && (importRoomFee.getState() == null || !importRoomFee.getState().equals("1600"))){
        if(feeDtos.size() == 0 && (importRoomFee.getState() == null || !importRoomFee.getState().equals("1600")|| importRoomFee.getState().equals("1900"))){
            updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在"));
            throw new IllegalArgumentException("费用记录"+importRoomFee.getFeeName()+"不存在");
@@ -685,11 +750,15 @@
//            feeInnerServiceSMOImpl.updateFee(payFeePo);
//            return;
//        } else
            if (importRoomFee.getState() != null && importRoomFee.getState().equals("1600")){
        if (importRoomFee.getState() != null && (importRoomFee.getState().equals("1600") || importRoomFee.getState().equals("1900"))){
            payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
            payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+"");
            payFeeDetailPo.setDiscountAmount("0");
            int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
            payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            return;
        }
@@ -751,6 +820,9 @@
        }
        if (saved < 1) {
            payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            return;
        }
@@ -762,7 +834,9 @@
//        int i = feeInnerServiceSMOImpl.updateFee(feeInfo);
        if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringA(importRoomFee.getEndTime()).getTime()  + 2000 || (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300"))) {
            payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            return;
        }
@@ -825,6 +899,10 @@
                int i = feeInnerServiceSMOImpl.updateFee(payFee);
            }
        }
        payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
        payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
    }
    private double computeFee(FeeDto fee,ImportRoomFee importRoomFee) {