cgf
2025-08-23 9ec0a61f90ac2464eebc643bfe2d93ac9ba6e569
service-job/src/main/java/com/java110/job/importData/adapt/ImportCarHistoryFeeDetailQueueDataAdapt.java
@@ -1,13 +1,16 @@
package com.java110.job.importData.adapt;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.importData.ImportRoomFee;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.owner.OwnerRoomRelDto;
import com.java110.fee.api.FeeDiscountApi;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.fee.*;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
@@ -17,14 +20,17 @@
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeeDetailPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.payFee.PayFeeDetailDiscountPo;
import com.java110.utils.constant.StatusConstant;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -37,6 +43,8 @@
@Service("importCarHistoryFeeDetailQueueData")
public class ImportCarHistoryFeeDetailQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
    @Autowired
    private IPayFeeDetailDiscountNewV1InnerServiceSMO payFeeDetailDiscountNewV1InnerServiceSMOImpl;
    @Autowired
    private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl;
@@ -50,6 +58,8 @@
    @Autowired
    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
    @Autowired
    private FeeDiscountApi feeDiscountApi;
    @Autowired
    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
@@ -85,7 +95,7 @@
        importCarFeeDetails(importRoomFees.get(0).getStoreId(), importRoomFees.get(0).getUserId(), importRoomFees, importRoomFees.get(0).getBatchId());
    }
    private void importCarFeeDetails(String storeId, String userId, List<ImportRoomFee> importCarFees, String batchId) {
    public void importCarFeeDetails(String storeId, String userId, List<ImportRoomFee> importCarFees, String batchId) {
        importCarFees = ownerCarInnerServiceSMOImpl.freshCarIds(importCarFees);
        for (ImportRoomFee importCarFee : importCarFees) {
@@ -109,6 +119,19 @@
     */
    private void importCarFeeDetail(ImportRoomFee importRoomFee, String storeId, String userId, String batchId) {
        PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
        payFeeDetailPo.setPayOrderId(importRoomFee.getRoomId());
        payFeeDetailPo.setCycles(importRoomFee.getCycle());
        payFeeDetailPo.setCreateTime(importRoomFee.getCreateTime());
        payFeeDetailPo.setCommunityId(importRoomFee.getCommunityId());
        payFeeDetailPo.setPayOrderId(importRoomFee.getRoomId());
        int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo);
        if (count > 0) {
            throw new IllegalStateException("重复的缴费记录");
        }
        FeeConfigDto feeConfigDto = new FeeConfigDto();
        feeConfigDto.setFeeNameEq(importRoomFee.getFeeName().trim());
        feeConfigDto.setCommunityId(importRoomFee.getCommunityId());
@@ -126,46 +149,49 @@
        feeDto.setPayerObjId(importRoomFee.getCarId());
        feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
        List<PayFeePo> payFeePos = null;
        if (ListUtil.isNull(feeDtos)) {
            PayFeePo payFeePo = new PayFeePo();
            payFeePo.setCommunityId(importRoomFee.getCommunityId());
            payFeePo.setConfigId(feeDto.getConfigId());
            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
            payFeePo.setStartTime(importRoomFee.getStartTime());
            payFeePo.setEndTime(importRoomFee.getEndTime());
            payFeePo.setAmount(importRoomFee.getAmount());
            payFeePo.setFeeFlag(tmpFeeConfigDto.getFeeFlag());
            payFeePo.setFeeTypeCd(tmpFeeConfigDto.getFeeTypeCd());
            payFeePo.setIncomeObjId(storeId);
            payFeePo.setBatchId(batchId);
            if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeConfigDto.getFeeFlag())) {
                payFeePo.setState(FeeDto.STATE_FINISH);
            } else {
                payFeePo.setState(FeeDto.STATE_DOING);
            }
            payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
            payFeePo.setPayerObjId(importRoomFee.getCarId());
            payFeePo.setUserId(userId);
            payFeePo.setCreateTime(importRoomFee.getCreateTime());
            payFeePos = new ArrayList<>();
            payFeePos.add(payFeePo);
            feeInnerServiceSMOImpl.saveFee(payFeePos);
            List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
            //查询业主信息
            if (!FeeDto.FEE_FLAG_CYCLE.equals(tmpFeeConfigDto.getFeeFlag())) {
                feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME,
                        importRoomFee.getEndTime()));
            }
            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_ID, importRoomFee.getOwnerId()));
            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_LINK, importRoomFee.getOwnerLink()));
            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_NAME, importRoomFee.getOwnerName()));
            feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos);
            feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
            throw new IllegalArgumentException("不存在对应的缴费记录");
//            PayFeePo payFeePo = new PayFeePo();
//            payFeePo.setCommunityId(importRoomFee.getCommunityId());
//            payFeePo.setConfigId(feeDto.getConfigId());
//            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
//            payFeePo.setStartTime(importRoomFee.getStartTime());
//            payFeePo.setEndTime(importRoomFee.getEndTime());
//            payFeePo.setAmount(importRoomFee.getAmount());
//            payFeePo.setFeeFlag(tmpFeeConfigDto.getFeeFlag());
//            payFeePo.setFeeTypeCd(tmpFeeConfigDto.getFeeTypeCd());
//            payFeePo.setIncomeObjId(storeId);
//            payFeePo.setBatchId(batchId);
//            if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeConfigDto.getFeeFlag())) {
//                payFeePo.setState(FeeDto.STATE_FINISH);
//            } else {
//                payFeePo.setState(FeeDto.STATE_DOING);
//            }
//            payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
//            payFeePo.setPayerObjId(importRoomFee.getCarId());
//            payFeePo.setUserId(userId);
//            payFeePo.setCreateTime(importRoomFee.getCreateTime());
//            payFeePos = new ArrayList<>();
//            payFeePos.add(payFeePo);
//            feeInnerServiceSMOImpl.saveFee(payFeePos);
//            List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
//            //查询业主信息
//            if (!FeeDto.FEE_FLAG_CYCLE.equals(tmpFeeConfigDto.getFeeFlag())) {
//                feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME,
//                        importRoomFee.getEndTime()));
//            }
//            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_ID, importRoomFee.getOwnerId()));
//            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_LINK, importRoomFee.getOwnerLink()));
//            feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_NAME, importRoomFee.getOwnerName()));
//            feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos);
//            feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
        }
        for (FeeDto tmpFeeDto : feeDtos) {
//            if(tmpFeeDto.getEndTime() < importRoomFee.){
//
//            }
            doImportFeeDetail(tmpFeeDto, importRoomFee);
        }
@@ -191,6 +217,7 @@
        payFeeDetailPo.setPrimeRate("1.0");
        payFeeDetailPo.setFeeId(tmpFeeDto.getFeeId());
        payFeeDetailPo.setStartTime(importRoomFee.getStartTime());
        importRoomFee.setPayObjId(payFeeDetailPo.getPayOrderId() != null ? importRoomFee.getPayObjId() : importRoomFee.getRoomId());
        String endTime = importRoomFee.getEndTime();
        //todo 周期性费用时时间自动加一天,因为物业统计的Excel 一般少一天
        if (!FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) {
@@ -207,7 +234,52 @@
        payFeeDetailPo.setState("1400");
        payFeeDetailPo.setCashierName(importRoomFee.getStaffName());
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
        payFeeDetailPo.setPayOrderId(payFeeDetailPo.getPayOrderId() !=null ? payFeeDetailPo.getPayOrderId() : importRoomFee.getRoomId());
        payFeeDetailPo.setbId(importRoomFee.getBatchId());
        PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo();
        ResponseEntity<String> resultVo = null;
        try {
            resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), 105, importRoomFee.getPayObjId(),
                    tmpFeeDto.getPayerObjType(), importRoomFee.getEndTime(), importRoomFee.getEndTime(), importRoomFee.getStartTime(), 1, 20);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
// 2. 从 ResultVo 中获取 data 并强转为目标类型
        if (resultVo != null) {
            // 假设 data 字段存储的是 List<ComputeDiscountDto>
            JSONArray data = (JSONArray) JSONObject.parseObject(resultVo.getBody()).get("data");
            if(data.size() > 0) {
                JSONObject o = (JSONObject) data.get(0);
                String discountPrice = o.get("discountPrice").toString();
                String discountId =  o.get("discountId").toString();
                payFeeDetailPo.setDiscountAmount(discountPrice);
                payFeeDetailPo.setReceivableAmount((Double.parseDouble(payFeeDetailPo.getReceivedAmount()) + Double.parseDouble(payFeeDetailPo.getDiscountAmount()))+"");
                payFeeDetailDiscount.setDiscountId(discountId);
                payFeeDetailDiscount.setDiscountPrice(discountPrice);
            }
        }
        int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
        FeeDetailDto feeDetailDto = new FeeDetailDto();
        feeDetailDto.setDetailId(payFeeDetailPo.getDetailId());
        List<FeeDetailDto> feeDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
        if (payFeeDetailDiscount.getDiscountId() != null) {
            payFeeDetailDiscount.setDetailId(payFeeDetailPo.getDetailId());
            payFeeDetailDiscount.setStatusCd("0");
            payFeeDetailDiscount.setCommunityId(feeDtos.get(0).getCommunityId());
            payFeeDetailDiscount.setFeeId(feeDtos.get(0).getFeeId());
            payFeeDetailDiscount.setDetailDiscountId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_discountId));
        }
        payFeeDetailDiscountNewV1InnerServiceSMOImpl.savePayFeeDetailDiscountNew(payFeeDetailDiscount);
        if (saved < 1) {
            return;
@@ -216,7 +288,6 @@
        if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime()) {
            return;
        }
        //如果结束时间小于 缴费结束时间则延期
        PayFeePo payFeePo = new PayFeePo();
        payFeePo.setCommunityId(importRoomFee.getCommunityId());
@@ -226,9 +297,6 @@
        if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) {
            payFeePo.setState(FeeDto.STATE_FINISH);
        }
        feeInnerServiceSMOImpl.updateFee(payFeePo);
    }
}