chengf
2026-02-25 64b14b0549344f13b191e2c26ed199f62655c43f
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -6,6 +6,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.smo.IComputeFeeSMO;
import com.java110.core.smo.impl.ComputeFeeSMOImpl;
import com.java110.dto.PropertyWhiteListFlowDto;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.contract.ContractDto;
@@ -21,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;
@@ -122,15 +124,65 @@
    @Autowired
    private ICommunityInnerServiceSMO communityInnerServiceSMO;
    @Autowired
    private ComputeFeeSMOImpl calculateFeeSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        String communityId = assetImportLogDetailDtos.get(0).getCommunityId();
        CommunityDto communityDto = new CommunityDto();
        communityDto.setCommunityId(communityId);
        List<CommunityDto> communityDtos = communityInnerServiceSMO.queryCommunitys(communityDto);
        Set<String> invoiceObjects = new HashSet<>();
        for (AssetImportLogDetailDto obj : assetImportLogDetailDtos) {
            String context = obj.getContent();
            if (context != null && context.contains("frequency")) {
                invoiceObjects.add(JSONObject.parseObject(context).getString("frequency"));
            }
        }
        for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) {
            if (!assetImportLogDetailDto.getMessage().equals("待导入")){
                continue;
            }
            JSONObject jsonObject = JSONObject.parseObject(assetImportLogDetailDto.getContent());
            if (jsonObject.containsKey("frequency")){
                if (jsonObject.getString("frequency").contains("退费-") && !jsonObject.getString("frequency").contains("被退费-")){
                    String invoce =  jsonObject.getString("frequency").split("-")[1];
                    for (AssetImportLogDetailDto ass : assetImportLogDetailDtos){
                        if (JSONObject.parseObject(ass.getContent()).getString("invoiceReceiptNo").equals(invoce)){
                            try {
                                assetImportLogDetailDto.setTakeTime(communityDtos.get(0).getTakeTime());
                                assetImportLogDetailDto.setOutTime(communityDtos.get(0).getOutTime());
                                assetImportLogDetailDto.setState("1300");
                                importDatas(assetImportLogDetailDto);
                                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
                            } catch (Exception e) {
                                e.printStackTrace();
                                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                            }
                            try {
                                ass.setTakeTime(communityDtos.get(0).getTakeTime());
                                ass.setOutTime(communityDtos.get(0).getOutTime());
                                ass.setState("1100");
                                importDatas(ass);
                                updateImportLogDetailState(ass.getDetailId());
                            } catch (Exception e) {
                                e.printStackTrace();
                                updateImportLogDetailState(ass.getDetailId(), e);
                            }
                            break;
                        }
                    }
                    continue;
                }
            }
            try {
                assetImportLogDetailDto.setTakeTime(communityDtos.get(0).getTakeTime());
                assetImportLogDetailDto.setOutTime(communityDtos.get(0).getOutTime());
                String invoce = "退费-"+JSONObject.parseObject(assetImportLogDetailDto.getContent()).getString("invoiceReceiptNo");
                if (invoiceObjects.contains(invoce)){
                    continue;
                }
                importDatas(assetImportLogDetailDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
            } catch (Exception e) {
@@ -145,14 +197,19 @@
        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 (assetImportLogDetailDto.getState().equals("1100") || assetImportLogDetailDto.getState().equals("1300")) {
            importRoomFee.setState(assetImportLogDetailDto.getState());
        }
        if (importRoomFee.getFrequency()==null) {
            importRoomFee.setFrequency("正常费用");
        }
//        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");
@@ -161,13 +218,14 @@
        List<String> carTypes = Arrays.asList("临时停车费", "业主产权过道停车费", "小业主产权车辆管理费","地下停车费","地面停车费");
        List<String> contractTypes = Arrays.asList("垃圾清运费","其他收入","补贴费用","场地使用费","电梯广告(业委会)","快递柜","电梯广告(联讯)","房产中介","非机动车管理费","其他广告");
        FeeConfigDto feeConfigDto = new FeeConfigDto();
        feeConfigDto.setFeeName(data.getString("secondaryFeeTypeCd"));
        feeConfigDto.setFeeTypeCds(new String[]{"630000007","630000017"});
        feeConfigDto.setCommunityId(importRoomFee.getCommunityId());
        feeConfigDto.setFeeNameEq(data.getString("secondaryFeeTypeCd"));
//        feeConfigDto.setFeeTypeCds(new String[]{"630000007","630000017"});
        importRoomFee.setInvoiceNo(data.getString("invoiceReceiptNo"));
        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
        if(feeConfigDtos.size() > 0){
            for(FeeConfigDto feeConfigDto1 : feeConfigDtos){
                if(feeConfigDto1.getSecondaryFeeTypeCdName() != null && (feeConfigDto1.getSecondaryFeeTypeCdName().equals("电费及管理费-合同") || feeConfigDto1.getSecondaryFeeTypeCdName().equals("代收水费-合同"))){
                if(feeConfigDto1.getIsContractFee() != null && feeConfigDto1.getIsContractFee().equals("true")){
                    importRoomFee.setObjType("7777");
                }
            }
@@ -228,11 +286,16 @@
                importRoomFee.setAmount(data.getString("chargeAmount"));
                importRoomFee.setStaffName(data.getString("charger"));
                importRoomFee.setIsContractFee("O");
                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());
                }
//            if(importRoomFee.getPayerObjName())
                importCarFees.add(importRoomFee);
            }
@@ -250,9 +313,13 @@
                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());
                }
                importCarFees.add(importRoomFee);
            }
            else{
@@ -266,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);
            }
@@ -276,12 +350,119 @@
        }
        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);
                    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);
                }
                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))){
                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");
                    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);
                }
                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());
@@ -387,7 +568,16 @@
     *
     * @param importRoomFee
     */
    @Autowired
    private IPayFeeMonth payFeeMonthImpl;
    private void importFeeDetail(ImportRoomFee importRoomFee, String storeId, String userId, String batchId) {
        if (importRoomFee.getState() == null){
            importRoomFee.setState("1400");
        }
        FeeDto feeDto2 = new FeeDto();
        feeDto2.setUseFeeName(importRoomFee.getFeeName());
@@ -439,75 +629,38 @@
                contractDto.setCommunityId(importRoomFee.getCommunityId());
                contractDto.setContractCode(importRoomFee.getContractId());
                List<ContractDto> contractDtos = contractInnerServiceSMOImpl.queryContracts(contractDto);
                if (contractDtos.size() == 0) {
                if (contractDtos.size() == 1) {
                    importRoomFee.setContractId(contractDtos.get(0).getContractId());
                    feeDto2.setContractFee(contractDtos.get(0).getContractId());
                }
                feeDto2.setPayerObjId(contractPartyaDtos.get(0).getPartyaId());
                importRoomFee.setRoomId(contractPartyaDtos.get(0).getPartyaId());
                importRoomFee.setPayObjId(importRoomFee.getRoomId());
            } else {
                throw new IllegalArgumentException("导入失败,为查询到该主体");
                throw new IllegalArgumentException("导入失败,未查询到该主体");
            }
        }
        feeDto2.setCommunityId(importRoomFee.getCommunityId());
        feeDto2.setStatusCd("0");
        feeDto2.setUseStart(DateUtil.getDateFromStringA(importRoomFee.getStartTime()));
        feeDto2.setUseEnd(DateUtil.getDateFromStringA(importRoomFee.getEndTime()));
        if (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300") || importRoomFee.getState().equals("1600") || importRoomFee.getState().equals("1900")) {
        }
        else {
            feeDto2.setStatusCd("0");
            feeDto2.setUseStart(DateUtil.getDateFromStringA(importRoomFee.getStartTime()));
            feeDto2.setUseEnd(DateUtil.getDateFromStringA(importRoomFee.getEndTime()));
        }
        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto2);
        feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState()));
        if(feeDtos.size() == 0){
        if (!(importRoomFee.getFrequency().equals("退费"))) {
            feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState()));
        }
        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()+"不存在");
        }else if(feeDtos.size() > 1){
            throw new IllegalArgumentException("存在多条记录");
        }
//        if (ListUtil.isNull(feeDtos)) {
//            throw new IllegalArgumentException("查询不到该记录的费用项:"+importRoomFee.getFeeName());
//            List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
//            PayFeePo payFeePo = new PayFeePo();
//            payFeePo.setCommunityId(importRoomFee.getCommunityId());
//            payFeePo.setConfigId(feeDto.getConfigId());
//            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
//            payFeePo.setStartTime(importRoomFee.getStartTime());
//            payFeePo.setEndTime(DateUtil.getNextSecTime(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.getRoomId());
//            payFeePo.setUserId(userId);
//            payFeePo.setCreateTime(importRoomFee.getCreateTime());
//            payFeePos = new ArrayList<>();
//            payFeePos.add(payFeePo);
//            feeInnerServiceSMOImpl.saveFee(payFeePos);
//
//            //查询业主信息
//            OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
//            ownerRoomRelDto.setRoomId(importRoomFee.getRoomId());
//            List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelV1InnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
//            if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() > 0) {
//                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, ownerRoomRelDtos.get(0).getOwnerId()));
//                feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_LINK, ownerRoomRelDtos.get(0).getLink()));
//                feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_NAME, ownerRoomRelDtos.get(0).getOwnerName()));
//                feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos);
//            }
//
//
//            feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
//        }
        if(feeDtos.size() > 1){
            throw new IllegalArgumentException(importRoomFee.getDoorRoomNum() +importRoomFee.getFeeName() + "+" + importRoomFee.getStartTime() + "-" + importRoomFee.getEndTime() + "未匹配到收费项");
        }
        for (FeeDto tmpFeeDto : feeDtos) {
            if(DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime() > tmpFeeDto.getMaxEndTime().getTime()){
                throw new IllegalArgumentException("该费用记录结束时间大于费用记录最大缴费时间");
@@ -534,6 +687,12 @@
        PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
        if(importRoomFee.getInvoiceNo() != null){
            payFeeDetailPo.setInvoiceNo(importRoomFee.getInvoiceNo());
            payFeeDetailPo.setOpenInvoice("Y");
        }else{
            payFeeDetailPo.setOpenInvoice("N");
        }
        payFeeDetailPo.setCommunityId(importRoomFee.getCommunityId());
        payFeeDetailPo.setReceivedAmount(importRoomFee.getAmount());
        payFeeDetailPo.setPrimeRate("1.0");
@@ -545,10 +704,23 @@
        payFeeDetailPo.setCashierName(importRoomFee.getStaffName());
        payFeeDetailPo.setPayOrderId(importRoomFee.getPayObjId());
        payFeeDetailPo.setB("T");
        double cycle = (DateUtil.dayCompare(
                DateUtil.getDateFromStringA(payFeeDetailPo.getStartTime()),
                DateUtil.getDateFromStringA(importRoomFee.getEndTime())
        ));
        double cycle = 0;
        if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())){
            cycle = 1;
        }
        else{
            cycle = (DateUtil.dayCompare(
                    DateUtil.getDateFromStringA(payFeeDetailPo.getStartTime()),
                    DateUtil.getDateFromStringA(importRoomFee.getEndTime())
            ));
        }
        if (importRoomFee.getState() != null){
            payFeeDetailPo.setState(importRoomFee.getState());
        }
        if (importRoomFee.getState().equals("1300")){
            cycle = 0 - cycle;
        }
        int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo);
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
@@ -558,16 +730,45 @@
        payFeeDetailPo.setCycles(cycle+"");
        payFeeDetailPo.setEndTime(importRoomFee.getEndTime());
        if (count > 0) {
            throw new IllegalStateException("重复的缴费记录");
        }
//        if (importRoomFee.getFrequency().equals("退费")) {
//            payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
//            double v = computeFeeByCycle(tmpFeeDto, importRoomFee);
//            if (v > 0) {
//                v = v - 2 * v;
//            }
//            payFeeDetailPo.setReceivableAmount(v+"");
//            payFeeDetailPo.setDiscountAmount("0");
//            payFeeDetailPo.setState("1300");
//            int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
//
//            PayFeePo payFeePo = new PayFeePo();
//            payFeePo.setFeeId(payFeeDetailPo.getFeeId());
//            payFeePo.setEndTime(importRoomFee.getStartTime());
//            feeInnerServiceSMOImpl.updateFee(payFeePo);
//            return;
//        } else
        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;
        }
        PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo();
        try {
            Map feePriceAll = computeFeeSMOImpl.getFeePrice(tmpFeeDto);
//            Map feePriceAll = computeFeeSMOImpl.getFeePrice(tmpFeeDto);
            FeeDto feeDto = new FeeDto();
            feeDto.setFeeId(tmpFeeDto.getFeeId());
            feeDto.setCommunityId(tmpFeeDto.getCommunityId());
            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
//            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
            payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+"");
            ResponseEntity<String> resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), 105, importRoomFee.getPayObjId(),
                    tmpFeeDto.getPayerObjType(), importRoomFee.getEndTime(), importRoomFee.getEndTime(), importRoomFee.getStartTime(), 1, 20);
@@ -595,8 +796,9 @@
        payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
        if(importRoomFee.getInvoiceNo() != null){
            payFeeDetailPo.setOpenInvoice(importRoomFee.getInvoiceNo());
        if (importRoomFee.getState() != null && importRoomFee.getState().equals("1300")){
            payFeeDetailPo.setReceivableAmount("-"+payFeeDetailPo.getReceivableAmount());
        }
        int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
@@ -618,8 +820,12 @@
        }
        if (saved < 1) {
            payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId());
            return;
        }
        FeeDto fee = new FeeDto();
        fee.setFeeId(tmpFeeDto.getFeeId());
        FeeDto feeInfo = feeInnerServiceSMOImpl.queryFees(fee).get(0);
@@ -627,8 +833,10 @@
//        int i = feeInnerServiceSMOImpl.updateFee(feeInfo);
        if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringA(importRoomFee.getEndTime()).getTime()  + 2000) {
        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;
        }
@@ -672,6 +880,11 @@
        feeInnerServiceSMOImpl.updateFee(payFeePo);
        feeInfo = feeInnerServiceSMOImpl.queryFees(fee).get(0);
        if (importRoomFee.getEndTime().split(" ")[0].equals(DateUtil.getFormatTimeStringB(feeInfo.getMaxEndTime()))) {
//            Date deadlineTime = feeInfo.getDeadlineTime();
//            feeInfo.setDeadlineTime(DateUtil.getDateFromStringA(importRoomFee.getEndTime()));
//            calculateFeeSMOImpl.computeOweFee(feeInfo);
//            feeInfo.setDeadlineTime(deadlineTime);
//            double computeFee = Double.parseDouble(feeInfo.getAmountOwed());
            double computeFee = computeFee(feeInfo,importRoomFee);
            if(computeFee <= 1 && computeFee >= -1){
                PayFeePo payFee = new PayFeePo();
@@ -686,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) {
@@ -702,6 +919,9 @@
                fee.getStartTime(),
                DateUtil.getDateFromStringA(DateUtil.getFormatTimeStringB(fee.getMaxEndTime()).split(" ")[0]+" 23:59:59")
        ));
        if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){
            month = 1;
        }
        Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto);
        //todo 计算应收
        BigDecimal receivableAmount = new BigDecimal(feePriceAll.get("feePrice").toString());
@@ -735,7 +955,13 @@
                DateUtil.getDateFromStringA(importRoomFee.getStartTime()),
                DateUtil.getDateFromStringA(importRoomFee.getEndTime().split(" ")[0] + " 23:59:59")
        ));
        if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){
            month = 1;
        }
        Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto);
//        if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){
//            return Double.parseDouble(feePriceAll.get("feePrice").toString());
//        }
        //todo 计算应收
        BigDecimal receivableAmount = new BigDecimal(feePriceAll.get("feePrice").toString());
        BigDecimal cycles = new BigDecimal(month);