chengf
2025-07-25 ee4d1b668d1666cdec803b037ce8181763154bb6
费用导入逻辑变更2025/07/25
8个文件已修改
1个文件已添加
401 ■■■■■ 已修改文件
java110-interface/src/main/java/com/java110/intf/fee/IFeeInnerServiceSMO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/ExceptionUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportRoomFeeDataCleaningAdapt.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/smo/assetImport/impl/AssetImportSMOImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/SaveRoomCreateFeeCmd.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/cmd/ImportSaveRoomCreateFeeCmd.java 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomFeeQueueDataAdapt.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/fee/IFeeInnerServiceSMO.java
@@ -208,4 +208,5 @@
     */
    @RequestMapping(value = "/deleteFeesByBatch", method = RequestMethod.POST)
    int deleteFeesByBatch(@RequestBody PayFeePo payFeePo);
}
java110-utils/src/main/java/com/java110/utils/util/ExceptionUtil.java
@@ -2,6 +2,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Field;
/**
 * 异常工具类
@@ -14,7 +15,20 @@
        try {
            throwable.printStackTrace(pw);
            return sw.toString();
            Field detailMessageField = Throwable.class.getDeclaredField("detailMessage");
            // 2. 设置字段可访问(突破私有访问限制)
            detailMessageField.setAccessible(true);
            // 3. 获取字段值(即异常的详细消息)
            String detailMessage = (String) detailMessageField.get(throwable);
            return detailMessage;
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } finally {
            pw.close();
        }
service-api/pom.xml
@@ -56,6 +56,12 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>com.java110</groupId>
            <artifactId>service-fee</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
service-api/src/main/java/com/java110/api/importData/adapt/ImportRoomFeeDataCleaningAdapt.java
@@ -68,7 +68,6 @@
            importRoomFee.setStoreId(paramIn.getString("storeId"));
            importRoomFee.setCommunityId(paramIn.getString("communityId"));
//            importRoomFee.setFeeTypeCd(paramIn.getString("feeTypeCd"));
            importRoomFee.setObjType(paramIn.getString("objType"));
        }
        return importRoomFees;
    }
@@ -84,16 +83,9 @@
            if (osIndex == 0) { // 第一行是 头部信息 直接跳过
                continue;
            }
            if (os[2] == null) {
                continue;
            if (os == null ||(os[0] == null && os[1] == null && os[2] == null)) {
                break;
            }
            if ((StringUtil.isNullOrNone(os[0]) && StringUtil.isNullOrNone(os[1])) || (!StringUtil.isNullOrNone(os[0]) && !StringUtil.isNullOrNone(os[1]))) {
                Assert.hasValue(os[2], (osIndex + 1) + "行请写入费用主体和车牌号其中一列");
                continue;
            }
            Assert.hasValue(os[2], (osIndex + 1) + "行费用类型不能为空");
            Assert.hasValue(os[3], (osIndex + 1) + "行费用项目不能为空");
            String startTime = handleExcelDateString(os[4].toString());
            String endTime = handleExcelDateString(os[5].toString());
            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行开始时间格式错误 请填写YYYY/MM/DD 文本格式");
@@ -102,17 +94,22 @@
            importRoomFee = new ImportRoomFee();
            importRoomFee.setPayerObjName(os[0]==null?os[1].toString():os[0].toString());
//            importRoomFee.set
            importRoomFee.setFeeTypeCd(os[2].toString());
            importRoomFee.setFeeName(os[3].toString());
            importRoomFee.setObjType(os[0] == null ? "6666" : "3333");
            importRoomFee.setFeeTypeCd(os[2] == null ? null : os[2].toString());
            importRoomFee.setFeeName(os[3] == null ? null : os[3].toString());
            if(startTime != null){
                importRoomFee.setStartTime(startTime);
            }
            if(endTime != null){
                importRoomFee.setEndTime(endTime);
            }
            importRoomFee.setAmount(os[7].toString());
            if (os.length > 6){
                importRoomFee.setCreateTime(os[6] == null ? null : os[6].toString());
                importRoomFee.setAmount(os[7] == null ? null : os[7].toString());
            }else{
                importRoomFee.setCreateTime(null);
                importRoomFee.setAmount("0");
            }
            importRoomFees.add(importRoomFee);
        }
    }
service-api/src/main/java/com/java110/api/smo/assetImport/impl/AssetImportSMOImpl.java
@@ -45,7 +45,7 @@
    /**
     * 导入最大行数
     */
    public static final int MAX_LINE = 2000;
    public static final int MAX_LINE = 5000;
    /**
     * 导入最大行数
service-fee/src/main/java/com/java110/fee/cmd/fee/SaveRoomCreateFeeCmd.java
@@ -128,9 +128,7 @@
        }
        dealRoomFee(roomDtos.get(0), cmdDataFlowContext, reqJson, event);
    }
    private void dealRoomFee(RoomDto roomDto, ICmdDataFlowContext context, JSONObject reqJson, CmdEvent event) {
    public void dealRoomFee(RoomDto roomDto, ICmdDataFlowContext context, JSONObject reqJson, CmdEvent event) {
        //todo 房屋刷入业主信息
        OwnerDto ownerDto = new OwnerDto();
        ownerDto.setCommunityId(roomDto.getCommunityId());
@@ -215,7 +213,6 @@
        payFeeMonthImpl.doGeneratorOweFees(feeIds, feePos.get(0).getCommunityId());
        return flag;
    }
    /**
     * 生成批次号
service-job/pom.xml
@@ -42,6 +42,12 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>com.java110</groupId>
            <artifactId>service-fee</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
service-job/src/main/java/com/java110/job/cmd/ImportSaveRoomCreateFeeCmd.java
New file
@@ -0,0 +1,242 @@
package com.java110.job.cmd;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.room.RoomDto;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.payFee.PayFeeBatchDto;
import com.java110.dto.user.UserDto;
import com.java110.fee.bmo.fee.IFeeBMO;
import com.java110.fee.feeMonth.IPayFeeMonth;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.fee.*;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.payFee.PayFeeBatchPo;
import com.java110.utils.constant.CommonConstant;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import java.util.ArrayList;
import java.util.List;
/**
 * 创建费用
 */
@Java110Cmd(serviceCode = "fee.saveRoomCreateFee")
public class ImportSaveRoomCreateFeeCmd extends Cmd {
    private static final int DEFAULT_ADD_FEE_COUNT = 200;
    @Autowired
    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
    @Autowired
    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
    @Autowired
    private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
    @Autowired
    private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
    @Autowired
    private IUserInnerServiceSMO userInnerServiceSMOImpl;
    @Autowired
    private IFeeBMO feeBMOImpl;
    @Autowired
    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
    @Autowired
    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
    @Autowired
    private IPayFeeMonth payFeeMonthImpl;
    @Autowired
    private IRuleGeneratorPayFeeBillV1InnerServiceSMO ruleGeneratorPayFeeBillV1InnerServiceSMOImpl;
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
        // super.validatePageInfo(pd);
        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
        Assert.hasKeyAndValue(reqJson, "locationObjId", "未包含收费对象");
        Assert.hasKeyAndValue(reqJson, "configId", "未包含收费项目");
        Assert.hasKeyAndValue(reqJson, "storeId", "未包含商户ID");
        Assert.hasKeyAndValue(reqJson, "startTime", "未包含计费起始时间");
        Assert.hasKeyAndValue(reqJson, "endTime", "未包含计费结束时间");
        String endTime = reqJson.getString("endTime");
        if (!endTime.contains(":")) {
            endTime += " 23:59:59";
            reqJson.put("endTime", endTime);
        }
        FeeConfigDto feeConfigDto = new FeeConfigDto();
        feeConfigDto.setCommunityId(reqJson.getString("communityId"));
        feeConfigDto.setConfigId(reqJson.getString("configId"));
        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
        Assert.listOnlyOne(feeConfigDtos, "当前费用项ID不存在或存在多条" + reqJson.getString("configId"));
        reqJson.put("feeTypeCd", feeConfigDtos.get(0).getFeeTypeCd());
        reqJson.put("feeFlag", feeConfigDtos.get(0).getFeeFlag());
        reqJson.put("configEndTime", feeConfigDtos.get(0).getEndTime());
        if (FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeConfigDtos.get(0).getComputingFormula())) {
            Assert.hasKeyAndValue(reqJson, "rateCycle", "未包含递增周期");
            Assert.hasKeyAndValue(reqJson, "rate", "未包含递增率");
            Assert.hasKeyAndValue(reqJson, "rateStartTime", "未包含递增开始时间");
            reqJson.put("configComputingFormula", feeConfigDtos.get(0).getComputingFormula());
        }
    }
    @Override
    public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
        String userId = cmdDataFlowContext.getReqHeaders().get(CommonConstant.USER_ID);
        reqJson.put("userId", userId);
        List<RoomDto> roomDtos = null;
        //todo 生成批次号
        generatorBatch(reqJson);
        RoomDto roomDto = new RoomDto();
        //roomDto.setRoomType(reqJson.getString("roomType"));
        roomDto.setCommunityId(reqJson.getString("communityId"));
        roomDto.setRoomId(reqJson.getString("locationObjId"));
        roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
        if (ListUtil.isNull(roomDtos)) {
            throw new IllegalArgumentException("未查到需要付费的房屋或未绑定业主");
        }
        dealRoomFee(roomDtos.get(0), cmdDataFlowContext, reqJson, event);
    }
    public void dealRoomFee(RoomDto roomDto, ICmdDataFlowContext context, JSONObject reqJson, CmdEvent event) {
        //todo 房屋刷入业主信息
        OwnerDto ownerDto = new OwnerDto();
        ownerDto.setCommunityId(roomDto.getCommunityId());
        ownerDto.setRoomId(roomDto.getRoomId());
        List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
        if (!ListUtil.isNull(ownerDtos)) {
            roomDto.setOwnerId(ownerDtos.get(0).getOwnerId());
            roomDto.setOwnerName(ownerDtos.get(0).getName());
            roomDto.setLink(ownerDtos.get(0).getLink());
        }
        List<PayFeePo> feePos = new ArrayList<>();
        List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
        ResponseEntity<String> responseEntity = null;
        //todo 加入 房屋费用
        feePos.add(BeanConvertUtil.covertBean(feeBMOImpl.addRoomFee(roomDto, reqJson, context), PayFeePo.class));
        //todo 走账单模式
        String billModal = ruleGeneratorPayFeeBillV1InnerServiceSMOImpl.needGeneratorBillData(feePos);
        if ("Y".equals(billModal)) {
            JSONObject paramOut = new JSONObject();
            paramOut.put("totalRoom", 1);
            paramOut.put("successRoom", 1);
            paramOut.put("errorRoom", 0);
            responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
            context.setResponseEntity(responseEntity);
            return;
        }
        feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson,
                context,
                FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME,
                reqJson.getString("endTime")));
        if (!StringUtil.isEmpty(roomDto.getOwnerId())) {
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_ID, roomDto.getOwnerId()));
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_LINK, roomDto.getLink()));
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_NAME, roomDto.getOwnerName()));
        }
        //todo 定制开发 加入
        //1、对合同约定的租金递增比例、递增年限各不相同的问题,支持按合同到期日期设租金递增比例。
        //2、能自动设置递增的租金实行自动计算当月的租金。
        if (reqJson.containsKey("configComputingFormula") && FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(reqJson.getString("configComputingFormula"))) {
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_CYCLE, reqJson.getString("rateCycle")));
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE, reqJson.getString("rate")));
            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_START_TIME, reqJson.getString("rateStartTime")));
        }
        //付费对象名称
        feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME, roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + roomDto.getRoomNum()));
        int saveFlag = saveFeeAndAttrs(feePos, feeAttrsPos);
        JSONObject paramOut = new JSONObject();
        paramOut.put("totalRoom", 1);
        paramOut.put("successRoom", 1);
        paramOut.put("errorRoom", 0);
        responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
        context.setResponseEntity(responseEntity);
    }
    private int saveFeeAndAttrs(List<PayFeePo> feePos, List<FeeAttrPo> feeAttrsPos) {
        if (feePos == null || feePos.size() < 1) {
            return 1;
        }
        int flag = feeInnerServiceSMOImpl.saveFee(feePos);
        if (flag < 1) {
            return flag;
        }
        flag = feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos);
        // todo 这里异步的方式计算 月数据 和欠费数据
        List<String> feeIds = new ArrayList<>();
        for (PayFeePo feePo : feePos) {
            feeIds.add(feePo.getFeeId());
        }
        payFeeMonthImpl.doGeneratorFeeMonths(feeIds, feePos.get(0).getCommunityId());
        payFeeMonthImpl.doGeneratorOweFees(feeIds, feePos.get(0).getCommunityId());
        return flag;
    }
    /**
     * 生成批次号
     *
     * @param reqJson
     */
    private void generatorBatch(JSONObject reqJson) {
        PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
        payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
        payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
        payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
        UserDto userDto = new UserDto();
        userDto.setUserId(reqJson.getString("userId"));
        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
        Assert.listOnlyOne(userDtos, "用户不存在");
        payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
        payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
        payFeeBatchPo.setMsg("正常");
        int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
        if (flag < 1) {
            throw new IllegalArgumentException("生成批次失败");
        }
        reqJson.put("batchId", payFeeBatchPo.getBatchId());
    }
}
service-job/src/main/java/com/java110/job/importData/adapt/ImportRoomFeeQueueDataAdapt.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.dict.DictDto;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDto;
@@ -9,26 +10,35 @@
import com.java110.dto.importData.ImportFeeDto;
import com.java110.dto.importData.ImportRoomFee;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.menu.MenuDto;
import com.java110.dto.menu.MenuUserDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.payFee.PayFeeBatchDto;
import com.java110.dto.payFee.PayFeeDetailRefreshFeeMonthDto;
import com.java110.dto.room.RoomDto;
import com.java110.dto.user.UserDto;
import com.java110.fee.cmd.fee.SaveRoomCreateFeeCmd;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.dev.IDictV1InnerServiceSMO;
import com.java110.intf.fee.*;
import com.java110.intf.user.IMenuUserV1InnerServiceSMO;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.job.cmd.ImportSaveRoomCreateFeeCmd;
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.importFee.ImportFeePo;
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 com.java110.po.payFee.PayFeeBatchPo;
import com.java110.utils.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@@ -65,6 +75,12 @@
    @Autowired
    private IImportFeeInnerServiceSMO importFeeInnerServiceSMOImpl;
    @Autowired
    private IDictV1InnerServiceSMO iDictV1InnerServiceSMO;
    @Autowired
    private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
    //    @Autowired
//    private IPayFeeMonth payFeeMonthImpl;
    @Override
@@ -106,6 +122,15 @@
            return;
        }
        List<ImportRoomFee> rooms = new ArrayList<>();
        DictDto dictDto = new DictDto();
        dictDto.setName(importRoomFee.getFeeTypeCd());
        List<DictDto> dictDtos = iDictV1InnerServiceSMO.queryDicts(dictDto);
        try {
            importRoomFee.setFeeTypeCd(dictDtos.get(0).getStatusCd());
        }catch (Exception e){
            throw new IllegalArgumentException("查询费用类型异常");
        }
        String[] objNames;
        objNames = importRoomFee.getPayerObjName().split("-", 3);
@@ -186,6 +211,7 @@
            feeConfigDto.setFeeNameEq(importRoomFee.getFeeName());
        }
        feeConfigDto.setComputingFormula(FeeConfigDto.COMPUTING_FORMULA_DYNAMIC);
        feeConfigDto.setComputingFormula(null);
        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
        if (ListUtil.isNull(feeConfigDtos)) {
            throw new IllegalArgumentException("费用项不存在,或者费用项公式不是动态费用");
@@ -206,18 +232,55 @@
            payFeePo.setPayerObjId(importRoomFee.getRoomId());
            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        }
        FeeDto feeDto = new FeeDto();
        feeDto.setFeeTypeCd(importRoomFee.getFeeTypeCd());
        feeDto.setCommunityId(importRoomFee.getCommunityId());
        String dateStr = importRoomFee.getStartTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            feeDto.setStartTime(sdf.parse(importRoomFee.getStartTime()));
            feeDto.setEndTime(sdf.parse(importRoomFee.getEndTime()));
        } catch (ParseException e) {
            throw new RuntimeException("导入起始时间异常");
        }
        feeDto.setPayerObjId(payFeePo.getPayerObjId());
        int feeDtos = feeInnerServiceSMOImpl.queryFeesCount(feeDto);
        if(feeDtos > 0){
//            throw new IllegalArgumentException("重复的费用");
        }
        payFeePo.setUserId(importRoomFee.getUserId());
        payFeePo.setIncomeObjId(importRoomFee.getStoreId());
        FeeConfigDto payFeePo1 = new FeeConfigDto();
        payFeePo1.setFeeTypeCd(importRoomFee.getFeeTypeCd());
        List<FeeConfigDto> feeConfigDtos1 = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(payFeePo1);
        payFeePo.setFeeTypeCd(feeConfigDtos.get(0).getFeeTypeCd());
        payFeePo.setFeeTypeCd(importRoomFee.getFeeTypeCd());
        payFeePo.setFeeFlag(feeConfigDtos.get(0).getFeeFlag());
        payFeePo.setAmount(importRoomFee.getAmount());
        payFeePo.setBatchId(batchId);
        payFeePo.setEndTime(importRoomFee.getStartTime());
        payFeePo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        payFeePo.setStartTime(importRoomFee.getStartTime());
        if(payFeePo.getAmount() == null && importRoomFee.getFeeName() == null){
            throw new IllegalArgumentException("收费内容和收费金额不能同时为空");
        }
        if(payFeePo.getAmount() == null){
            if(importRoomFee.getFeeName() == null){
                throw new IllegalArgumentException("收费内容为空");
            }
            else if (importRoomFee.getStartTime() == null){
                throw new IllegalArgumentException("收费起始时间为空");
            }
            else if (importRoomFee.getEndTime() == null){
                throw new IllegalArgumentException("收费结束时间为空");
            }
            else{
            }
        }
        payFeePos.add(payFeePo);
        FeeAttrPo feeAttrPo = new FeeAttrPo();
@@ -361,4 +424,25 @@
        importFeeDetailInnerServiceSMOImpl.saveImportFeeDetails(importFeeDetailPos);
    }
    private void generatorBatch(JSONObject reqJson) {
        PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
        payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
        payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
        payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
        UserDto userDto = new UserDto();
        userDto.setUserId(reqJson.getString("userId"));
        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
        Assert.listOnlyOne(userDtos, "用户不存在");
        payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
        payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
        payFeeBatchPo.setMsg("正常");
        int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
        if (flag < 1) {
            throw new IllegalArgumentException("生成批次失败");
        }
        reqJson.put("batchId", payFeeBatchPo.getBatchId());
    }
}