Bläddra i källkod

优化自定义费用创建

Your Name 3 år sedan
förälder
incheckning
2417d53232

+ 39 - 0
java110-bean/src/main/java/com/java110/dto/importData/ImportCustomCreateFeeDto.java

@@ -19,11 +19,18 @@ public class ImportCustomCreateFeeDto implements Serializable {
     private String configName;
     private String createTime;
     private String startTime;
+    private String endTime;
     private String communityId;
     private String ownerId;
     private String ownerName;
     private String ownerLink;
 
+    private String batchId;
+
+    private String userId;
+
+    private String storeId;
+
     public String getPayObjId() {
         return payObjId;
     }
@@ -143,4 +150,36 @@ public class ImportCustomCreateFeeDto implements Serializable {
     public void setCarNum(String carNum) {
         this.carNum = carNum;
     }
+
+    public String getBatchId() {
+        return batchId;
+    }
+
+    public void setBatchId(String batchId) {
+        this.batchId = batchId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
 }

+ 107 - 0
service-api/src/main/java/com/java110/api/importData/adapt/ImportCustomFeeDataCleaningAdapt.java

@@ -0,0 +1,107 @@
+package com.java110.api.importData.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.importData.DefaultImportDataAdapt;
+import com.java110.api.importData.IImportDataCleaningAdapt;
+import com.java110.dto.importData.ImportCustomCreateFeeDto;
+import com.java110.dto.system.ComponentValidateResult;
+import com.java110.intf.fee.IPayFeeBatchV1InnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ImportExcelUtils;
+import com.java110.utils.util.StringUtil;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 自定义创建费用
+ * 方式1
+ */
+@Service("importCustomFeeDataCleaning")
+public class ImportCustomFeeDataCleaningAdapt extends DefaultImportDataAdapt implements IImportDataCleaningAdapt {
+
+    @Autowired
+    private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Override
+    public List analysisExcel(Workbook workbook, JSONObject paramIn, ComponentValidateResult result) throws Exception {
+        List<ImportCustomCreateFeeDto> importCustomCreateFeeDtos = new ArrayList<ImportCustomCreateFeeDto>();
+        //获取楼信息
+        getImportCustomCreateFeeDtos(workbook, importCustomCreateFeeDtos, result);
+        generatorBatch(paramIn);
+        for (ImportCustomCreateFeeDto importRoomFee : importCustomCreateFeeDtos) {
+            importRoomFee.setBatchId(paramIn.getString("batchId"));
+            importRoomFee.setUserId(paramIn.getString("userId"));
+            importRoomFee.setStoreId(paramIn.getString("storeId"));
+            importRoomFee.setCommunityId(paramIn.getString("communityId"));
+
+        }
+        return importCustomCreateFeeDtos;
+    }
+
+    /**
+     * 获取 房屋信息
+     *
+     * @param workbook
+     * @param importCustomCreateFeeDtos
+     */
+    private void getImportCustomCreateFeeDtos(Workbook workbook, List<ImportCustomCreateFeeDto> importCustomCreateFeeDtos, ComponentValidateResult result) {
+        Sheet sheet = null;
+        sheet = ImportExcelUtils.getSheet(workbook, "创建费用");
+        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
+        ImportCustomCreateFeeDto importRoomFee = null;
+        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
+            Object[] os = oList.get(osIndex);
+            if (osIndex == 0 || osIndex == 1) { // 第一行是 头部信息 直接跳过
+                continue;
+            }
+            if (StringUtil.isNullOrNone(os[0])) {
+                continue;
+            }
+
+            //费用名称没有填写,默认跳过
+            if (StringUtil.isNullOrNone(os[5])) {
+                continue;
+            }
+            Assert.hasValue(os[0], (osIndex + 1) + "行房号/车牌号不能为空");
+            Assert.hasValue(os[1], (osIndex + 1) + "行类型不能为空");
+            Assert.hasValue(os[2], (osIndex + 1) + "行费用项ID不能为空");
+            Assert.hasValue(os[3], (osIndex + 1) + "行收费项目不能为空");
+            Assert.hasValue(os[4], (osIndex + 1) + "行建账时间不能为空");
+            Assert.hasValue(os[5], (osIndex + 1) + "行计费起始时间不能为空");
+
+            String createTime = excelDoubleToDate(os[4].toString());
+            String startTime = excelDoubleToDate(os[5].toString());
+            Assert.isDate(createTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行建账时间格式错误 请填写YYYY-MM-DD 文本格式");
+            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行计费起始时间格式错误 请填写YYYY-MM-DD 文本格式");
+            String endTime = "";
+            if(os.length > 6){
+                endTime = excelDoubleToDate(os[6].toString());
+                Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行计费结束时间格式错误 请填写YYYY-MM-DD 文本格式");
+            }
+
+
+            importRoomFee = new ImportCustomCreateFeeDto();
+            importRoomFee.setObjName(os[0].toString());
+            importRoomFee.setObjType(os[1].toString());
+            importRoomFee.setConfigId(os[2].toString());
+            importRoomFee.setConfigName(os[3].toString());
+            importRoomFee.setStartTime(startTime);
+            importRoomFee.setCreateTime(createTime);
+            importRoomFee.setCommunityId(result.getCommunityId());
+            importRoomFee.setEndTime(endTime);
+            importCustomCreateFeeDtos.add(importRoomFee);
+        }
+    }
+
+
+}

+ 9 - 5
service-api/src/main/java/com/java110/api/smo/assetExport/impl/ExportRoomSMOImpl.java

@@ -173,8 +173,9 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
         Row row = sheet.createRow(0);
         Cell cell0 = row.createCell(0);
         cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
-                "计费起始时间时间,格式为YYYY-MM-DD;\n建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
-                "\n注意:所有单元格式为文本");
+                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
+                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
+                "\n注意:所有单元格式为文本,计费结束时间只有一次性费用和间接性费用时需要填写");
         CellStyle cs = workbook.createCellStyle();
         cs.setWrapText(true);  //关键
         cell0.setCellStyle(cs);
@@ -186,6 +187,7 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
         row.createCell(3).setCellValue("收费项目");
         row.createCell(4).setCellValue("建账时间");
         row.createCell(5).setCellValue("计费起始时间");
+        row.createCell(6).setCellValue("计费结束时间");
 
         ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
         parkingSpaceDto.setCommunityId(paramIn.getString("communityId"));
@@ -258,8 +260,9 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
         Row row = sheet.createRow(0);
         Cell cell0 = row.createCell(0);
         cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
-                "计费起始时间时间,格式为YYYY-MM-DD;\n建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
-                "\n注意:所有单元格式为文本");
+                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
+                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
+                "\n注意:所有单元格式为文本,计费结束时间只有一次性费用和间接性费用时需要填写");
         CellStyle cs = workbook.createCellStyle();
         cs.setWrapText(true);  //关键
         cell0.setCellStyle(cs);
@@ -271,7 +274,8 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
         row.createCell(3).setCellValue("收费项目");
         row.createCell(4).setCellValue("建账时间");
         row.createCell(5).setCellValue("计费起始时间");
-        row.createCell(6).setCellValue("房屋状态");
+        row.createCell(6).setCellValue("计费结束时间");
+        row.createCell(7).setCellValue("房屋状态");
 
 
         RoomDto roomDto = new RoomDto();

+ 275 - 0
service-job/src/main/java/com/java110/job/importData/adapt/ImportCustomFeeQueueDataAdapt.java

@@ -0,0 +1,275 @@
+package com.java110.job.importData.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.contract.ContractRoomDto;
+import com.java110.dto.fee.FeeAttrDto;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.importData.ImportCustomCreateFeeDto;
+import com.java110.dto.log.AssetImportLogDetailDto;
+import com.java110.dto.meter.ImportExportMeterWaterDto;
+import com.java110.dto.meter.MeterWaterDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.payFee.PayFeeDetailRefreshFeeMonthDto;
+import com.java110.dto.room.RoomDto;
+import com.java110.dto.system.ComponentValidateResult;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.*;
+import com.java110.intf.store.IContractRoomInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IOwnerInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.job.importData.DefaultImportData;
+import com.java110.job.importData.IImportDataAdapt;
+import com.java110.po.fee.FeeAttrPo;
+import com.java110.po.fee.PayFeePo;
+import com.java110.po.importFee.ImportFeeDetailPo;
+import com.java110.po.meter.MeterWaterPo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("importCustomFeeQueueData")
+public class ImportCustomFeeQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeMonthInnerServiceSMO payFeeMonthInnerServiceSMOImpl;
+
+    //    @Autowired
+//    private IPayFeeMonth payFeeMonthImpl;
+    @Override
+    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
+
+        for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) {
+
+            try {
+                doImportData(assetImportLogDetailDto);
+                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
+            } catch (Exception e) {
+                e.printStackTrace();
+                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
+            }
+        }
+    }
+
+    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
+        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
+        ImportCustomCreateFeeDto importExportMeterWaterDto = BeanConvertUtil.covertBean(data, ImportCustomCreateFeeDto.class);
+
+        String communityId = importExportMeterWaterDto.getCommunityId();
+        String batchId = importExportMeterWaterDto.getCommunityId();
+
+        doImportRoomCreateFee(importExportMeterWaterDto, batchId);
+        doImportCarCreateFee(importExportMeterWaterDto, batchId);
+
+
+    }
+
+    /**
+     * 房屋创建费用
+     *
+     * @param importCustomCreateFeeDto
+     * @param batchId
+     */
+    private void doImportRoomCreateFee(ImportCustomCreateFeeDto importCustomCreateFeeDto, String batchId) {
+        if (!ImportCustomCreateFeeDto.TYPE_ROOM.equals(importCustomCreateFeeDto.getObjType())) {
+            return;
+        }
+        List<ImportCustomCreateFeeDto> rooms = new ArrayList<>();
+        String[] objNames;
+        objNames = importCustomCreateFeeDto.getObjName().split("-", 3);
+        if (objNames.length != 3) {
+            throw new IllegalArgumentException("收费对象格式错误:" + importCustomCreateFeeDto.getObjName());
+        }
+        importCustomCreateFeeDto.setFloorNum(objNames[0]);
+        importCustomCreateFeeDto.setUnitNum(objNames[1]);
+        importCustomCreateFeeDto.setRoomNum(objNames[2]);
+        rooms.add(importCustomCreateFeeDto);
+
+
+        List<ImportCustomCreateFeeDto> importCustomCreateFeeDtos = roomInnerServiceSMOImpl.freshRoomIdsByImportCustomCreateFee(rooms);
+        List<String> roomIds = new ArrayList<>();
+        for (ImportCustomCreateFeeDto importRoomFee : importCustomCreateFeeDtos) {
+            roomIds.add(importRoomFee.getPayObjId());
+        }
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setCommunityId(importCustomCreateFeeDtos.get(0).getCommunityId());
+        ownerDto.setRoomIds(roomIds.toArray(new String[roomIds.size()]));
+        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
+        for (ImportCustomCreateFeeDto importRoomFee : importCustomCreateFeeDtos) {
+            for (OwnerDto tmpOwnerDto : ownerDtos) {
+                if (importRoomFee.getPayObjId().equals(tmpOwnerDto.getRoomId())) {
+                    importRoomFee.setOwnerId(tmpOwnerDto.getOwnerId());
+                    importRoomFee.setOwnerName(tmpOwnerDto.getName());
+                    importRoomFee.setOwnerLink(tmpOwnerDto.getLink());
+                }
+            }
+        }
+        doCreateFeeAndAttrs(importCustomCreateFeeDtos.get(0), batchId);
+    }
+
+
+    /**
+     * 创建车辆费用
+     *
+     * @param importCustomCreateFeeDto
+     * @param batchId
+     */
+    private void doImportCarCreateFee(ImportCustomCreateFeeDto importCustomCreateFeeDto, String batchId) {
+        if (!ImportCustomCreateFeeDto.TYPE_CAR.equals(importCustomCreateFeeDto.getObjType())) {
+            return;
+        }
+        List<ImportCustomCreateFeeDto> cars = new ArrayList<>();
+
+
+        importCustomCreateFeeDto.setCarNum(importCustomCreateFeeDto.getObjName());
+
+        cars.add(importCustomCreateFeeDto);
+
+
+        List<ImportCustomCreateFeeDto> importCustomCreateFeeDtos = ownerCarInnerServiceSMOImpl.freshCarIdsByImportCustomCreateFee(cars);
+
+        doCreateFeeAndAttrs(importCustomCreateFeeDtos.get(0), batchId);
+    }
+
+
+    private void doCreateFeeAndAttrs(ImportCustomCreateFeeDto importCustomCreateFeeDto, String batchId) {
+        List<PayFeePo> payFeePos = new ArrayList<>();
+        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
+        PayFeePo payFeePo = null;
+        ImportFeeDetailPo importFeeDetailPo = null;
+
+        if (StringUtil.isEmpty(importCustomCreateFeeDto.getPayObjId())) {
+            throw new IllegalArgumentException("收费对象不存在");
+        }
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+        feeConfigDto.setConfigId(importCustomCreateFeeDto.getConfigId());
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
+            throw new IllegalArgumentException("费用项不存在");
+        }
+        payFeePo = new PayFeePo();
+        payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId, true));
+        payFeePo.setEndTime(importCustomCreateFeeDto.getStartTime());
+        payFeePo.setState(FeeDto.STATE_DOING);
+        payFeePo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+        payFeePo.setConfigId(importCustomCreateFeeDto.getConfigId());
+        payFeePo.setPayerObjId(importCustomCreateFeeDto.getPayObjId());
+        if ("3003".equals(importCustomCreateFeeDto.getObjType())) {
+            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CONTRACT);
+        } else if ("2002".equals(importCustomCreateFeeDto.getObjType())) {
+            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
+        } else {
+            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+        }
+        payFeePo.setUserId(importCustomCreateFeeDto.getUserId());
+        payFeePo.setIncomeObjId(importCustomCreateFeeDto.getStoreId());
+        payFeePo.setFeeTypeCd(feeConfigDtos.get(0).getFeeTypeCd());
+        payFeePo.setFeeFlag(feeConfigDtos.get(0).getFeeFlag());
+        payFeePo.setAmount("-1");
+        payFeePo.setBatchId(batchId);
+        payFeePo.setEndTime(importCustomCreateFeeDto.getStartTime());
+        payFeePo.setStartTime(importCustomCreateFeeDto.getCreateTime());
+
+        payFeePos.add(payFeePo);
+
+        FeeAttrPo feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_IMPORT_FEE_NAME);
+        feeAttrPo.setValue(feeConfigDtos.get(0).getFeeName());
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+
+        feeAttrPo = new FeeAttrPo();
+        feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+        feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+        feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME);
+        feeAttrPo.setValue(importCustomCreateFeeDto.getObjName());
+        feeAttrPo.setFeeId(payFeePo.getFeeId());
+        feeAttrPos.add(feeAttrPo);
+
+        //todo 不是周期性费用的场景需要写入结束时间
+        if(!FeeDto.FEE_FLAG_CYCLE.equals(feeConfigDtos.get(0).getFeeFlag())
+                && !StringUtil.isEmpty(importCustomCreateFeeDto.getEndTime())){
+            feeAttrPo = new FeeAttrPo();
+            feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME);
+            feeAttrPo.setValue(importCustomCreateFeeDto.getEndTime());
+            feeAttrPo.setFeeId(payFeePo.getFeeId());
+            feeAttrPos.add(feeAttrPo);
+        }
+
+
+        if (!StringUtil.isEmpty(importCustomCreateFeeDto.getOwnerId())) {
+            feeAttrPo = new FeeAttrPo();
+            feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
+            feeAttrPo.setValue(importCustomCreateFeeDto.getOwnerId());
+            feeAttrPo.setFeeId(payFeePo.getFeeId());
+            feeAttrPos.add(feeAttrPo);
+
+            feeAttrPo = new FeeAttrPo();
+            feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
+            feeAttrPo.setValue(importCustomCreateFeeDto.getOwnerName());
+            feeAttrPo.setFeeId(payFeePo.getFeeId());
+            feeAttrPos.add(feeAttrPo);
+
+            feeAttrPo = new FeeAttrPo();
+            feeAttrPo.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
+            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
+            feeAttrPo.setValue(importCustomCreateFeeDto.getOwnerLink());
+            feeAttrPo.setFeeId(payFeePo.getFeeId());
+            feeAttrPos.add(feeAttrPo);
+        }
+
+
+        if (payFeePos.size() < 1) {
+            return;
+        }
+
+        feeInnerServiceSMOImpl.saveFee(payFeePos);
+
+        feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrPos);
+
+        // todo 这里异步的方式计算 月数据 和欠费数据
+
+        PayFeeDetailRefreshFeeMonthDto payFeeDetailRefreshFeeMonthDto = new PayFeeDetailRefreshFeeMonthDto();
+        payFeeDetailRefreshFeeMonthDto.setCommunityId(importCustomCreateFeeDto.getCommunityId());
+        payFeeDetailRefreshFeeMonthDto.setFeeId(payFeePos.get(0).getFeeId());
+        payFeeMonthInnerServiceSMOImpl.doGeneratorOrRefreshFeeMonth(payFeeDetailRefreshFeeMonthDto);    }
+}