java110
2020-11-22 85fb76049712a9f670a54fafc25c9235e86decea
优化代码
10个文件已修改
279 ■■■■ 已修改文件
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/fee/IMeterWaterInnerServiceSMO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/api/MeterWaterApi.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/meterWater/IQueryPreMeterWater.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/meterWater/impl/QueryPreMeterWaterImpl.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/IMeterWaterServiceDao.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/impl/MeterWaterServiceDaoImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/smo/impl/MeterWaterInnerServiceSMOImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-front/src/main/java/com/java110/front/smo/assetExport/impl/ExportMeterWaterSMOImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-front/src/main/java/com/java110/front/smo/assetImport/impl/ImportRoomFeeSMOImpl.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/MeterWaterServiceDaoImplMapper.xml
@@ -19,7 +19,8 @@
    <!-- 查询水电费信息(Business) add by wuxw 2018-07-03 -->
    <select id="getBusinessMeterWaterInfo" parameterType="Map" resultType="Map">
        select t.remark,t.cur_reading_time,t.cur_reading_time curReadingTime,t.water_id,t.water_id
        waterId,t.cur_degrees,t.cur_degrees curDegrees,t.operate,t.meter_type,t.meter_type meterType,t.pre_degrees,t.pre_degrees preDegrees,t.obj_id,t.obj_id
        waterId,t.cur_degrees,t.cur_degrees curDegrees,t.operate,t.meter_type,t.meter_type
        meterType,t.pre_degrees,t.pre_degrees preDegrees,t.obj_id,t.obj_id
        objId,t.pre_reading_time,t.pre_reading_time preReadingTime,t.b_id,t.b_id bId,t.community_id,t.community_id
        communityId,t.obj_type,t.obj_type objType,t.fee_id,t.fee_id feeId,t.obj_name,t.obj_name objName
        from business_meter_water t
@@ -270,4 +271,17 @@
    </select>
    <!-- 批量插入费用 -->
    <insert id="insertMeterWaters" parameterType="Map">
        insert into meter_water
        (remark,status_cd,cur_reading_time,water_id,cur_degrees,meter_type,pre_degrees,obj_id,pre_reading_time,b_id,
        community_id,obj_type,fee_id,obj_name)
        VALUES
        <foreach collection="meterWaterPos" item="item" separator=",">
            (#{item.remark},'0',#{item.curReadingTime},#{item.waterId},#{item.curDegrees},#{item.meterType},#{item.preDegrees},
            '-1',#{item.objId},#{item.preReadingTime},'-1',#{item.communityId},#{item.objType},#{item.feeId},#{item.objName})
        </foreach>
    </insert>
</mapper>
java110-interface/src/main/java/com/java110/intf/fee/IMeterWaterInnerServiceSMO.java
@@ -2,6 +2,7 @@
import com.java110.config.feign.FeignConfiguration;
import com.java110.dto.meterWater.MeterWaterDto;
import com.java110.po.meterWater.MeterWaterPo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +25,6 @@
    /**
     * <p>查询小区楼信息</p>
     *
     *
     * @param meterWaterDto 数据对象分享
     * @return MeterWaterDto 对象数据
     */
@@ -39,4 +39,14 @@
     */
    @RequestMapping(value = "/queryMeterWatersCount", method = RequestMethod.POST)
    int queryMeterWatersCount(@RequestBody MeterWaterDto meterWaterDto);
    /**
     * <p>添加抄表对象</p>
     *
     * @param meterWaterPos 抄表对象
     * @return MeterWaterDto 对象数据
     */
    @RequestMapping(value = "/saveMeterWaters", method = RequestMethod.POST)
    int saveMeterWaters(@RequestBody List<MeterWaterPo> meterWaterPos);
}
service-fee/src/main/java/com/java110/fee/api/MeterWaterApi.java
@@ -1,13 +1,12 @@
package com.java110.fee.api;
import com.alibaba.fastjson.JSONObject;
import com.java110.dto.meterWater.MeterWaterDto;
import com.java110.fee.bmo.meterWater.IQueryPreMeterWater;
import com.java110.utils.util.Assert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/meterWater")
@@ -53,6 +52,26 @@
    @RequestMapping(value = "/queryExportRoomAndMeterWater", method = RequestMethod.GET)
    public ResponseEntity<String> queryExportRoomAndMeterWater(@RequestParam(value = "communityId") String communityId,
                                                               @RequestParam(value = "meterType") String meterType) {
        return  queryPreMeterWaterImpl.queryExportRoomAndMeterWater(communityId,meterType);
        return queryPreMeterWaterImpl.queryExportRoomAndMeterWater(communityId, meterType);
    }
    /**
     * 导入水电抄表
     *
     * @param reqJson 请求报文
     * @return
     * @serviceCode /meterWater/importMeterWater
     * @path /app/meterWater/importMeterWater
     */
    @RequestMapping(value = "/importMeterWater", method = RequestMethod.POST)
    public ResponseEntity<String> importMeterWater(@RequestBody String reqJson) {
        Assert.hasKeyAndValue(reqJson, "communityId", "请求信息中未包含小区信息");
        Assert.hasKeyAndValue(reqJson, "configId", "请求信息中未包含费用项");
        Assert.hasKeyAndValue(reqJson, "storeId", "请求信息中未包含商户信息");
        Assert.hasKeyAndValue(reqJson, "feeTypeCd", "请求信息中未包含费用类型");
        return queryPreMeterWaterImpl.importMeterWater(JSONObject.parseObject(reqJson));
    }
}
service-fee/src/main/java/com/java110/fee/bmo/meterWater/IQueryPreMeterWater.java
@@ -1,5 +1,6 @@
package com.java110.fee.bmo.meterWater;
import com.alibaba.fastjson.JSONObject;
import com.java110.dto.meterWater.MeterWaterDto;
import org.springframework.http.ResponseEntity;
@@ -24,4 +25,13 @@
     * @return
     */
    ResponseEntity<String> queryExportRoomAndMeterWater(String communityId, String meterType);
    /**
     * 导入
     *
     * @param reqJson 请求报文
     * @return
     */
    ResponseEntity<String> importMeterWater(JSONObject reqJson);
}
service-fee/src/main/java/com/java110/fee/bmo/meterWater/impl/QueryPreMeterWaterImpl.java
@@ -1,7 +1,10 @@
package com.java110.fee.bmo.meterWater.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.RoomDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.meterWater.ImportExportMeterWaterDto;
import com.java110.dto.meterWater.MeterWaterDto;
@@ -9,7 +12,11 @@
import com.java110.fee.bmo.meterWater.IQueryPreMeterWater;
import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.fee.IFeeInnerServiceSMO;
import com.java110.intf.fee.IMeterWaterInnerServiceSMO;
import com.java110.po.fee.PayFeePo;
import com.java110.po.meterWater.MeterWaterPo;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
@@ -39,6 +46,9 @@
    @Autowired
    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
    @Autowired
    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
    @Override
@@ -78,6 +88,95 @@
        return ResultVo.createResponseEntity(1, importExportMeterWaterDtos.size(), importExportMeterWaterDtos);
    }
    @Override
    public ResponseEntity<String> importMeterWater(JSONObject reqJson) {
        String communityId = reqJson.getString("communityId");
        String storeId = reqJson.getString("storeId");
        String configId = reqJson.getString("configId");
        String userId = reqJson.getString("userId");
        String feeTypeCd = reqJson.getString("feeTypeCd");
        JSONArray importMeteWaterFees = reqJson.getJSONArray("importMeteWaterFees");
        JSONObject meteWaterJson = null;
        ImportExportMeterWaterDto importExportMeterWaterDto = null;
        List<PayFeePo> fees = new ArrayList<>();
        List<MeterWaterPo> meterWaterPos = new ArrayList<>();
        for (int meteWaterIndex = 0; meteWaterIndex < importMeteWaterFees.size(); meteWaterIndex++) {
            meteWaterJson = importMeteWaterFees.getJSONObject(meteWaterIndex);
            importExportMeterWaterDto = BeanConvertUtil.covertBean(meteWaterJson, ImportExportMeterWaterDto.class);
            dealImportExportMeterWater(importExportMeterWaterDto,
                    communityId,
                    storeId,
                    configId,
                    userId,
                    feeTypeCd,
                    fees,
                    meterWaterPos
            );
        }
        if (fees.size() < 1 || meterWaterPos.size() < 1) {
            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "批量抄表失败");
        }
        feeInnerServiceSMOImpl.saveFee(fees);
        meterWaterInnerServiceSMOImpl.saveMeterWaters(meterWaterPos);
        return ResultVo.success();
    }
    private void dealImportExportMeterWater(ImportExportMeterWaterDto importExportMeterWaterDto, String communityId,
                                            String storeId, String configId, String userId, String feeTypeCd,
                                            List<PayFeePo> fees, List<MeterWaterPo> meterWaterPos) {
        RoomDto roomDto = new RoomDto();
        roomDto.setCommunityId(communityId);
        roomDto.setFloorNum(importExportMeterWaterDto.getFloorNum());
        roomDto.setUnitNum(importExportMeterWaterDto.getUnitNum());
        roomDto.setRoomNum(importExportMeterWaterDto.getRoomNum());
        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
        Assert.listOnlyOne(roomDtos, "房屋未找到或找到多条" + importExportMeterWaterDto.getFloorNum() + "-" + importExportMeterWaterDto.getUnitNum() + "-" + importExportMeterWaterDto.getRoomNum());
        if (FeeConfigDto.FEE_TYPE_CD_WATER.equals(feeTypeCd)) {
            importExportMeterWaterDto.setMeterType("1010");
        } else {
            importExportMeterWaterDto.setMeterType("2020");
        }
        PayFeePo payFeePo = new PayFeePo();
        payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
        payFeePo.setIncomeObjId(storeId);
        payFeePo.setAmount("-1");
        payFeePo.setStartTime(importExportMeterWaterDto.getPreReadingTime());
        payFeePo.setEndTime(importExportMeterWaterDto.getPreReadingTime());
        payFeePo.setPayerObjId(roomDtos.get(0).getRoomId());
        //payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
        payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
        payFeePo.setState(FeeDto.STATE_DOING);
        payFeePo.setUserId(userId);
        payFeePo.setFeeTypeCd(feeTypeCd);
        payFeePo.setConfigId(configId);
        fees.add(payFeePo);
        MeterWaterPo meterWaterPo = new MeterWaterPo();
        meterWaterPo.setCommunityId(communityId);
        meterWaterPo.setCurDegrees(importExportMeterWaterDto.getCurDegrees());
        meterWaterPo.setCurReadingTime(importExportMeterWaterDto.getCurReadingTime());
        meterWaterPo.setFeeId(payFeePo.getFeeId());
        meterWaterPo.setMeterType(importExportMeterWaterDto.getMeterType());
        meterWaterPo.setObjId(roomDtos.get(0).getRoomId());
        meterWaterPo.setObjName(importExportMeterWaterDto.getFloorNum() + "栋" + importExportMeterWaterDto.getUnitNum() + "单元" + importExportMeterWaterDto.getRoomNum() + "室");
        meterWaterPo.setObjType(MeterWaterDto.OBJ_TYPE_ROOM);
        meterWaterPo.setPreDegrees(importExportMeterWaterDto.getPreDegrees());
        meterWaterPo.setPreReadingTime(importExportMeterWaterDto.getPreReadingTime());
        meterWaterPo.setWaterId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_waterId));
        meterWaterPos.add(meterWaterPo);
    }
    private boolean freshFeeDtoParam(MeterWaterDto meterWaterDto, String roomNum) {
        if (StringUtil.isEmpty(roomNum)) {
service-fee/src/main/java/com/java110/fee/dao/IMeterWaterServiceDao.java
@@ -10,23 +10,24 @@
 * 水电费组件内部之间使用,没有给外围系统提供服务能力
 * 水电费服务接口类,要求全部以字符串传输,方便微服务化
 * 新建客户,修改客户,删除客户,查询客户等功能
 *
 * <p>
 * Created by wuxw on 2016/12/27.
 */
public interface IMeterWaterServiceDao {
    /**
     * 保存 水电费信息
     *
     * @param businessMeterWaterInfo 水电费信息 封装
     * @throws DAOException 操作数据库异常
     */
    void saveBusinessMeterWaterInfo(Map businessMeterWaterInfo) throws DAOException;
    /**
     * 查询水电费信息(business过程)
     * 根据bId 查询水电费信息
     *
     * @param info bId 信息
     * @return 水电费信息
     * @throws DAOException DAO异常
@@ -34,21 +35,19 @@
    List<Map> getBusinessMeterWaterInfo(Map info) throws DAOException;
    /**
     * 保存 水电费信息 Business数据到 Instance中
     *
     * @param info
     * @throws DAOException DAO异常
     */
    void saveMeterWaterInfoInstance(Map info) throws DAOException;
    /**
     * 查询水电费信息(instance过程)
     * 根据bId 查询水电费信息
     *
     * @param info bId 信息
     * @return 水电费信息
     * @throws DAOException DAO异常
@@ -56,9 +55,9 @@
    List<Map> getMeterWaterInfo(Map info) throws DAOException;
    /**
     * 修改水电费信息
     *
     * @param info 修改信息
     * @throws DAOException DAO异常
     */
@@ -73,4 +72,6 @@
     */
    int queryMeterWatersCount(Map info);
    int insertMeterWaters(Map info);
}
service-fee/src/main/java/com/java110/fee/dao/impl/MeterWaterServiceDaoImpl.java
@@ -125,5 +125,13 @@
        return Integer.parseInt(businessMeterWaterInfos.get(0).get("count").toString());
    }
    @Override
    public int insertMeterWaters(Map info) {
        int saveFlag = sqlSessionTemplate.insert("meterWaterServiceDaoImpl.insertMeterWaters", info);
        return saveFlag;
    }
}
service-fee/src/main/java/com/java110/fee/smo/impl/MeterWaterInnerServiceSMOImpl.java
@@ -8,13 +8,17 @@
import com.java110.dto.meterWater.MeterWaterDto;
import com.java110.dto.user.UserDto;
import com.java110.fee.dao.IMeterWaterServiceDao;
import com.java110.po.fee.PayFeePo;
import com.java110.po.meterWater.MeterWaterPo;
import com.java110.utils.util.BeanConvertUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @ClassName FloorInnerServiceSMOImpl
@@ -94,6 +98,18 @@
        return meterWaterServiceDaoImpl.queryMeterWatersCount(BeanConvertUtil.beanCovertMap(meterWaterDto));
    }
    @Override
    public int saveMeterWaters(@RequestBody List<MeterWaterPo> meterWaterPos) {
        List<Map> fees = new ArrayList<>();
        for (MeterWaterPo payFeePo : meterWaterPos) {
            fees.add(BeanConvertUtil.beanCovertMap(payFeePo));
        }
        Map info = new HashMap();
        info.put("meterWaterPos", fees);
        return meterWaterServiceDaoImpl.insertMeterWaters(info);
    }
    public IMeterWaterServiceDao getMeterWaterServiceDaoImpl() {
        return meterWaterServiceDaoImpl;
    }
service-front/src/main/java/com/java110/front/smo/assetExport/impl/ExportMeterWaterSMOImpl.java
@@ -59,7 +59,7 @@
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        MultiValueMap headers = new HttpHeaders();
        headers.add("content-type", "application/octet-stream;charset=UTF-8");
        headers.add("Content-Disposition", "attachment;filename=feeImport_" + DateUtil.getyyyyMMddhhmmssDateString() + ".xlsx");
        headers.add("Content-Disposition", "attachment;filename=meteWaterImport_" + DateUtil.getyyyyMMddhhmmssDateString() + ".xlsx");
        headers.add("Pargam", "no-cache");
        headers.add("Cache-Control", "no-cache");
        //headers.add("Content-Disposition", "attachment; filename=" + outParam.getString("fileName"));
service-front/src/main/java/com/java110/front/smo/assetImport/impl/ImportRoomFeeSMOImpl.java
@@ -5,7 +5,7 @@
import com.java110.core.component.BaseComponentSMO;
import com.java110.core.context.IPageData;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.entity.assetImport.ImportRoomFee;
import com.java110.dto.meterWater.ImportExportMeterWaterDto;
import com.java110.entity.component.ComponentValidateResult;
import com.java110.front.smo.assetImport.IImportRoomFeeSMO;
import com.java110.utils.constant.ServiceConstant;
@@ -58,7 +58,7 @@
            Workbook workbook = ImportExcelUtils.createWorkbook(uploadFile);  //工作簿
            List<ImportRoomFee> rooms = new ArrayList<ImportRoomFee>();
            List<ImportExportMeterWaterDto> rooms = new ArrayList<ImportExportMeterWaterDto>();
            //获取楼信息
            getRooms(workbook, rooms);
@@ -72,16 +72,14 @@
    /**
     * 处理ExcelData数据
     *
     * @param roomFees 房屋费用
     */
    private ResponseEntity<String> dealExcelData(IPageData pd,
                                                 List<ImportRoomFee> roomFees,
                                                 List<ImportExportMeterWaterDto> rooms,
                                                 ComponentValidateResult result) {
        ResponseEntity<String> responseEntity = null;
        //保存单元信息 和 楼栋信息
        responseEntity = savedRoomFees(pd, roomFees, result);
        responseEntity = savedRoomFees(pd, rooms, result);
        if (responseEntity == null || responseEntity.getStatusCode() != HttpStatus.OK) {
            return responseEntity;
@@ -90,9 +88,10 @@
        return responseEntity;
    }
    private ResponseEntity<String> savedRoomFees(IPageData pd, List<ImportRoomFee> roomFees, ComponentValidateResult result) {
    private ResponseEntity<String> savedRoomFees(IPageData pd, List<ImportExportMeterWaterDto> rooms, ComponentValidateResult result) {
        if (roomFees.size() < 1) {
        JSONObject reqJson = JSONObject.parseObject(pd.getReqData());
        if (rooms.size() < 1) {
            throw new IllegalArgumentException("没有数据需要处理");
        }
@@ -100,12 +99,14 @@
        data.put("importFeeId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
        data.put("storeId", result.getStoreId());
        data.put("userId", result.getUserId());
        data.put("configId", reqJson.getString("configId"));
        data.put("feeTypeCd", reqJson.getString("feeTypeCd"));
        data.put("communityId", result.getCommunityId());
        List<ImportRoomFee> tmpImportRoomFees = new ArrayList<>();
        for (int roomIndex = 0; roomIndex < roomFees.size(); roomIndex++) {
        List<ImportExportMeterWaterDto> tmpImportRoomFees = new ArrayList<>();
        for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
            tmpImportRoomFees.add(roomFees.get(roomIndex));
            tmpImportRoomFees.add(rooms.get(roomIndex));
            if (roomIndex % DEFAULT_ADD_FEE_COUNT == 0 && roomIndex != 0) {
@@ -125,14 +126,14 @@
     * 创建费用
     *
     * @param pd
     * @param tmpImportRoomFee
     * @param tmpImportRoomFees
     */
    private void createRoomFee(IPageData pd, List<ImportRoomFee> tmpImportRoomFee, JSONObject data) {
    private void createRoomFee(IPageData pd, List<ImportExportMeterWaterDto> tmpImportRoomFees, JSONObject data) {
        JSONArray importRoomFees = JSONArray.parseArray(JSONObject.toJSONString(tmpImportRoomFee));
        data.put("importRoomFees", importRoomFees);
        JSONArray importRoomFees = JSONArray.parseArray(JSONObject.toJSONString(tmpImportRoomFees));
        data.put("importMeteWaterFees", importRoomFees);
        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feeApi/importRoomFees";
        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/meterWater/importMeterWater";
        this.callCenterService(restTemplate, pd, data.toJSONString(), apiUrl, HttpMethod.POST);
    }
@@ -144,11 +145,11 @@
     * @param workbook
     * @param rooms
     */
    private void getRooms(Workbook workbook, List<ImportRoomFee> rooms) {
    private void getRooms(Workbook workbook, List<ImportExportMeterWaterDto> rooms) {
        Sheet sheet = null;
        sheet = ImportExcelUtils.getSheet(workbook, "房屋费用信息");
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        ImportRoomFee importRoomFee = null;
        ImportExportMeterWaterDto importRoomFee = null;
        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
            Object[] os = oList.get(osIndex);
            if (osIndex == 0 || osIndex == 1) { // 第一行是 头部信息 直接跳过
@@ -157,34 +158,29 @@
            if (StringUtil.isNullOrNone(os[0])) {
                continue;
            }
            //费用名称没有填写,默认跳过
            if (StringUtil.isNullOrNone(os[4])) {
                continue;
            }
            Assert.hasValue(os[1], (osIndex + 1) + "行单元编号不能为空");
            Assert.hasValue(os[2], (osIndex + 1) + "行房屋编号不能为空");
            Assert.hasValue(os[3], (osIndex + 1) + "行费用名称不能为空");
            Assert.hasValue(os[4], (osIndex + 1) + "行开始时间不能为空");
            Assert.hasValue(os[5], (osIndex + 1) + "行结束时间不能为空");
            Assert.hasValue(os[6], (osIndex + 1) + "行费用不能为空");
            Assert.hasValue(os[1], (osIndex + 1) + "单元编号不能为空");
            Assert.hasValue(os[2], (osIndex + 1) + "房屋编号不能为空");
            Assert.hasValue(os[3], (osIndex + 1) + "上期度数不能为空");
            Assert.hasValue(os[4], (osIndex + 1) + "上期度数时间不能为空");
            Assert.hasValue(os[5], (osIndex + 1) + "本期度数不能为空");
            Assert.hasValue(os[6], (osIndex + 1) + "本期度数时间不能为空");
//
            String startTime = excelDoubleToDate(os[4].toString());
            String endTime = excelDoubleToDate(os[5].toString());
            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行开始时间格式错误 请填写YYYY-MM-DD 文本格式");
            Assert.isDate(endTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行结束时间格式错误 请填写YYYY-MM-DD 文本格式");
            String startTime = excelDoubleToDate(os[5].toString());
            String endTime = excelDoubleToDate(os[6].toString());
            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_A, (osIndex + 1) + "行开始时间格式错误 请填写YYYY-MM-DD hh:mm:ss 文本格式");
            Assert.isDate(endTime, DateUtil.DATE_FORMATE_STRING_A, (osIndex + 1) + "行结束时间格式错误 请填写YYYY-MM-DD hh:mm:ss 文本格式");
            importRoomFee = new ImportRoomFee();
            importRoomFee = new ImportExportMeterWaterDto();
            importRoomFee.setFloorNum(os[0].toString());
            importRoomFee.setUnitNum(os[1].toString());
            importRoomFee.setRoomNum(os[2].toString());
            importRoomFee.setFeeName(os[3].toString());
            importRoomFee.setStartTime(startTime);
            importRoomFee.setEndTime(endTime);
            importRoomFee.setAmount(os[6].toString());
            importRoomFee.setPreDegrees(os[3].toString());
            importRoomFee.setPreReadingTime(startTime);
            importRoomFee.setCurDegrees(endTime);
            importRoomFee.setCurReadingTime(os[6].toString());
            rooms.add(importRoomFee);
        }
    }