wuxw
2024-05-23 d5793ebefee467832adf83118472eb5f1a30744d
支持车辆导入 自动创建业主信息功能
2个文件已删除
2个文件已修改
3个文件已添加
764 ■■■■■ 已修改文件
service-api/src/main/java/com/java110/api/importData/adapt/ImportOwnerCarDataCleaningAdapt.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueDataAdapt.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/java/com/java110/boot/components/assetImport/ImportOwnerCarComponent.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/java/com/java110/boot/importData/adapt/ImportOwnerCarDataCleaningAdapt.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/java/com/java110/boot/smo/assetImport/IImportOwnerCarSMO.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportOwnerCarSMOImpl.java 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application-debug.yml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-api/src/main/java/com/java110/api/importData/adapt/ImportOwnerCarDataCleaningAdapt.java
New file
@@ -0,0 +1,116 @@
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.owner.OwnerCarDto;
import com.java110.dto.system.ComponentValidateResult;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
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.text.ParseException;
import java.util.ArrayList;
import java.util.List;
@Service("importOwnerCarDataCleaning")
public class ImportOwnerCarDataCleaningAdapt extends DefaultImportDataAdapt implements IImportDataCleaningAdapt {
    @Autowired
    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
    @Override
    public List analysisExcel(Workbook workbook, JSONObject paramIn,  ComponentValidateResult result) throws Exception{
        List<OwnerCarDto> ownerCars = new ArrayList<OwnerCarDto>();
        //封装对象
        getOwnerCars(workbook, ownerCars, result);
        //数据格式校验
        validateCarInfo(ownerCars);
        return ownerCars;
    }
    /**
     * 获取业主车辆信息
     *
     * @param workbook
     * @param ownerCars
     */
    private void getOwnerCars(Workbook workbook, List<OwnerCarDto> ownerCars,  ComponentValidateResult result) throws ParseException {
        Sheet sheet = null;
        sheet = ImportExcelUtils.getSheet(workbook, "业主车辆信息");
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        OwnerCarDto importOwnerCar = 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;
            }
            Assert.hasValue(os[0], (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) + "停车场不能为空");
            Assert.hasValue(os[7], (osIndex + 1) + "车位不能为空");
            Assert.hasValue(os[8], (osIndex + 1) + "起租时间不能为空");
            Assert.hasValue(os[9], (osIndex + 1) + "截止时间不能为空");
            Assert.hasValue(os[10], (osIndex + 1) + "停车场类型不能为空");
            Assert.hasValue(os[11], (osIndex + 1) + "车位类型不能为空");
            String startTime = excelDoubleToDate(os[8].toString());
            String endTime = excelDoubleToDate(os[9].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文本格式");
            importOwnerCar = new OwnerCarDto();
            importOwnerCar.setCarNum(os[0].toString().trim());
            importOwnerCar.setOwnerName(os[1].toString().trim());
            importOwnerCar.setLink(os[2].toString().trim());
            importOwnerCar.setCarBrand(os[3].toString().trim());
            importOwnerCar.setCarType(os[4].toString().trim());
            importOwnerCar.setCarColor(os[5].toString().trim());
            importOwnerCar.setAreaNum(os[6].toString().trim());
            //获取车位
            String parkingLot = os[7].toString().trim();
            importOwnerCar.setNum(parkingLot);
            importOwnerCar.setLogStartTime(startTime);
            importOwnerCar.setLogEndTime(endTime);
            importOwnerCar.setTypeCd(os[10].toString().trim());
            importOwnerCar.setSpaceSate(os[11].toString().trim());
            importOwnerCar.setCommunityId(result.getCommunityId());
            importOwnerCar.setUserId(result.getUserId());
            ownerCars.add(importOwnerCar);
        }
    }
    /**
     * 数据格式校验
     *
     * @param ownerCars
     */
    private void validateCarInfo(List<OwnerCarDto> ownerCars) {
        for (OwnerCarDto ownerCarDto : ownerCars) {
            if (!"1001".equals(ownerCarDto.getTypeCd()) && !"2001".equals(ownerCarDto.getTypeCd())) {
                throw new IllegalArgumentException(ownerCarDto.getCarNum() + "停车场类型应填写 1001(地上停车场)或者 2001 (地下停车场)");
            }
            if (!"H".equals(ownerCarDto.getSpaceSate()) && !"S".equals(ownerCarDto.getSpaceSate())) {
                throw new IllegalArgumentException(ownerCarDto.getCarNum() + "车位状态应填写 S(出售)或者 H (出租)");
            }
        }
    }
}
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueDataAdapt.java
New file
@@ -0,0 +1,192 @@
package com.java110.job.importData.adapt;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.owner.OwnerCarDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.parking.ParkingAreaDto;
import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.intf.community.IParkingAreaV1InnerServiceSMO;
import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
import com.java110.job.importData.DefaultImportData;
import com.java110.job.importData.IImportDataAdapt;
import com.java110.po.car.OwnerCarPo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.parking.ParkingAreaPo;
import com.java110.po.parking.ParkingSpacePo;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.ListUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 车辆导入 适配器
 * 前端请求 时 必须传入
 * param.append('importAdapt', "importRoomOwner");
 */
@Service("importOwnerCarQueueData")
public class ImportOwnerCarQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
    @Autowired
    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
    @Autowired
    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
    @Autowired
    private IParkingSpaceV1InnerServiceSMO parkingSpaceV1InnerServiceSMOImpl;
    @Autowired
    private IParkingAreaV1InnerServiceSMO parkingAreaV1InnerServiceSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        importDatas(assetImportLogDetailDtos);
    }
    private void importDatas(List<AssetImportLogDetailDto> infos) {
        String state = "";
        String msg = "";
        for (AssetImportLogDetailDto assetImportLogDetailDto : infos) {
            try {
                doImportData(assetImportLogDetailDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
            } catch (Exception e) {
                e.printStackTrace();
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
            }
        }
    }
    /**
     * 导入数据
     *
     * @param assetImportLogDetailDto
     */
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
        OwnerCarDto ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        //todo 导入业主信息
        importOwnerData(ownerCarDto);
        OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(ownerCarDto, OwnerCarPo.class);
        ownerCarPo.setStartTime(ownerCarDto.getLogStartTime());
        ownerCarPo.setEndTime(ownerCarDto.getLogEndTime());
        //获取房屋名称
        ownerCarPo.setCarTypeCd("1001"); //主车辆
        ParkingAreaDto parkingAreaDto = new ParkingAreaDto();
        parkingAreaDto.setNum(ownerCarDto.getAreaNum());
        parkingAreaDto.setTypeCd(ownerCarDto.getTypeCd());
        parkingAreaDto.setCommunityId(ownerCarDto.getCommunityId());
        //查询停车场
        List<ParkingAreaDto> parkingAreaDtos = parkingAreaV1InnerServiceSMOImpl.queryParkingAreas(parkingAreaDto);
        //Assert.listOnlyOne(parkingAreaDtos, "查询停车场错误!");
        String paId = "";
        if (ListUtil.isNull(parkingAreaDtos)) {
            paId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_paId);
            ParkingAreaPo parkingAreaPo = new ParkingAreaPo();
            parkingAreaPo.setCommunityId(ownerCarDto.getCommunityId());
            parkingAreaPo.setNum(ownerCarDto.getAreaNum());
            parkingAreaPo.setPaId(paId);
            parkingAreaPo.setTypeCd(ownerCarDto.getTypeCd());
            parkingAreaPo.setRemark("导入数据");
            parkingAreaV1InnerServiceSMOImpl.saveParkingArea(parkingAreaPo);
        } else {
            paId = parkingAreaDtos.get(0).getPaId();
        }
        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
        parkingSpaceDto.setNum(ownerCarDto.getNum());
        parkingSpaceDto.setPaId(paId);
        parkingSpaceDto.setCommunityId(ownerCarDto.getCommunityId());
        //查询停车位
        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceV1InnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
        String state = "";
        String psId = "";
        if (ListUtil.isNull(parkingSpaceDtos)) {
            psId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_psId);
            ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
            parkingSpacePo.setCommunityId(ownerCarDto.getCommunityId());
            parkingSpacePo.setNum(ownerCarDto.getNum());
            parkingSpacePo.setPaId(paId);
            parkingSpacePo.setParkingType(ParkingSpaceDto.TYPE_CD_COMMON);
            parkingSpacePo.setState(ParkingSpaceDto.STATE_FREE);
            parkingSpacePo.setArea("1");
            parkingSpacePo.setPsId(psId);
            parkingSpacePo.setRemark("导入数据");
            parkingSpaceV1InnerServiceSMOImpl.saveParkingSpace(parkingSpacePo);
            state = ParkingSpaceDto.STATE_FREE;
        } else {
            psId = parkingSpaceDtos.get(0).getPsId();
            //获取停车位状态(出售 S,出租 H ,空闲 F)
            state = parkingSpaceDtos.get(0).getState();
        }
        if (!StringUtil.isEmpty(state) && !state.equals("F")) {
            throw new IllegalArgumentException(ownerCarDto.getAreaNum() + "停车场-" + ownerCarDto.getNum() + "停车位不是空闲状态!");
        }
        ownerCarPo.setPsId(psId);
        ownerCarPo.setOwnerId(ownerCarDto.getOwnerId());
        ownerCarPo.setCommunityId(ownerCarDto.getCommunityId());
        ownerCarPo.setCarId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
        ownerCarPo.setMemberId(ownerCarPo.getCarId());
        ownerCarPo.setState("1001"); //1001 正常状态,2002 车位释放欠费状态,3003 车位释放
        ownerCarPo.setLeaseType(ownerCarDto.getSpaceSate());
        ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
        ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
        parkingSpacePo.setPsId(psId); //车位id
        parkingSpacePo.setState(ownerCarDto.getSpaceSate());
        parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
    }
    private void importOwnerData(OwnerCarDto ownerCarDto) {
        OwnerDto ownerDto = new OwnerDto();
        ownerDto.setName(ownerCarDto.getOwnerName());
        ownerDto.setLink(ownerCarDto.getLink());
        ownerDto.setCommunityId(ownerCarDto.getCommunityId());
        //查询业主
        List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
        //Assert.listOnlyOne(ownerDtos, ownerCarDto.getCarNum() + "查询业主信息错误!");
        if (ListUtil.isNull(ownerDtos)) {
            OwnerPo ownerPo = new OwnerPo();
            ownerPo.setUserId("-1");
            ownerPo.setAge("1");
            ownerPo.setCommunityId(ownerCarDto.getCommunityId());
            ownerPo.setIdCard("");
            ownerPo.setLink(ownerCarDto.getLink());
            ownerPo.setSex("1");
            ownerPo.setMemberId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ownerId));
            ownerPo.setName(ownerCarDto.getOwnerName());
            ownerPo.setOwnerId(ownerPo.getMemberId()); //业主 所以和成员ID需要一样
            ownerPo.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_OWNER);
            ownerPo.setRemark("导入车辆导入");
            ownerPo.setState(OwnerDto.STATE_FINISH);
            ownerPo.setAddress("无");
            ownerPo.setOwnerFlag(OwnerDto.OWNER_FLAG_TRUE);
            int flag = ownerV1InnerServiceSMOImpl.saveOwner(ownerPo);
            if (flag < 1) {
                throw new IllegalArgumentException("保存业主失败");
            }
            ownerCarDto.setOwnerId(ownerPo.getOwnerId());
        }else{
            ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
        }
    }
}
springboot/src/main/java/com/java110/boot/components/assetImport/ImportOwnerCarComponent.java
@@ -1,7 +1,6 @@
package com.java110.boot.components.assetImport;
import com.java110.boot.smo.assetExport.IExportOwnerCarSMO;
import com.java110.boot.smo.assetImport.impl.ImportOwnerCarSMOImpl;
import com.java110.core.context.IPageData;
import com.java110.core.context.PageData;
import com.java110.core.log.LoggerFactory;
@@ -24,20 +23,9 @@
    private final static Logger logger = LoggerFactory.getLogger(ImportOwnerCarComponent.class);
    @Autowired
    private ImportOwnerCarSMOImpl importOwnerCarSMOImpl;
    @Autowired
    private IExportOwnerCarSMO exportOwnerCarSMOImpl;
    /**
     * 添加应用数据
     *
     * @param pd 页面数据封装
     * @return ResponseEntity 对象
     */
    public ResponseEntity<String> importData(IPageData pd, MultipartFile uploadFile) throws Exception {
        return importOwnerCarSMOImpl.importExcelData(pd, uploadFile);
    }
    /**
     * 添加应用数据
springboot/src/main/java/com/java110/boot/importData/adapt/ImportOwnerCarDataCleaningAdapt.java
New file
@@ -0,0 +1,117 @@
package com.java110.boot.importData.adapt;
import com.alibaba.fastjson.JSONObject;
import com.java110.boot.importData.DefaultImportDataAdapt;
import com.java110.boot.importData.IImportDataCleaningAdapt;
import com.java110.dto.owner.OwnerCarDto;
import com.java110.dto.system.ComponentValidateResult;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
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.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@Service("importOwnerCarDataCleaning")
public class ImportOwnerCarDataCleaningAdapt extends DefaultImportDataAdapt implements IImportDataCleaningAdapt {
    @Autowired
    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
    @Override
    public List analysisExcel(Workbook workbook, JSONObject paramIn,  ComponentValidateResult result) throws Exception{
        List<OwnerCarDto> ownerCars = new ArrayList<OwnerCarDto>();
        //封装对象
        getOwnerCars(workbook, ownerCars, result);
        //数据格式校验
        validateCarInfo(ownerCars);
        return ownerCars;
    }
    /**
     * 获取业主车辆信息
     *
     * @param workbook
     * @param ownerCars
     */
    private void getOwnerCars(Workbook workbook, List<OwnerCarDto> ownerCars,  ComponentValidateResult result) throws ParseException {
        Sheet sheet = null;
        sheet = ImportExcelUtils.getSheet(workbook, "业主车辆信息");
        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
        OwnerCarDto importOwnerCar = 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;
            }
            Assert.hasValue(os[0], (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) + "停车场不能为空");
            Assert.hasValue(os[7], (osIndex + 1) + "车位不能为空");
            Assert.hasValue(os[8], (osIndex + 1) + "起租时间不能为空");
            Assert.hasValue(os[9], (osIndex + 1) + "截止时间不能为空");
            Assert.hasValue(os[10], (osIndex + 1) + "停车场类型不能为空");
            Assert.hasValue(os[11], (osIndex + 1) + "车位类型不能为空");
            String startTime = excelDoubleToDate(os[8].toString());
            String endTime = excelDoubleToDate(os[9].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文本格式");
            importOwnerCar = new OwnerCarDto();
            importOwnerCar.setCarNum(os[0].toString().trim());
            importOwnerCar.setOwnerName(os[1].toString().trim());
            importOwnerCar.setLink(os[2].toString().trim());
            importOwnerCar.setCarBrand(os[3].toString().trim());
            importOwnerCar.setCarType(os[4].toString().trim());
            importOwnerCar.setCarColor(os[5].toString().trim());
            importOwnerCar.setAreaNum(os[6].toString().trim());
            //获取车位
            String parkingLot = os[7].toString().trim();
            importOwnerCar.setNum(parkingLot);
            importOwnerCar.setLogStartTime(startTime);
            importOwnerCar.setLogEndTime(endTime);
            importOwnerCar.setTypeCd(os[10].toString().trim());
            importOwnerCar.setSpaceSate(os[11].toString().trim());
            importOwnerCar.setCommunityId(result.getCommunityId());
            importOwnerCar.setUserId(result.getUserId());
            ownerCars.add(importOwnerCar);
        }
    }
    /**
     * 数据格式校验
     *
     * @param ownerCars
     */
    private void validateCarInfo(List<OwnerCarDto> ownerCars) {
        for (OwnerCarDto ownerCarDto : ownerCars) {
            if (!"1001".equals(ownerCarDto.getTypeCd()) && !"2001".equals(ownerCarDto.getTypeCd())) {
                throw new IllegalArgumentException(ownerCarDto.getCarNum() + "停车场类型应填写 1001(地上停车场)或者 2001 (地下停车场)");
            }
            if (!"H".equals(ownerCarDto.getSpaceSate()) && !"S".equals(ownerCarDto.getSpaceSate())) {
                throw new IllegalArgumentException(ownerCarDto.getCarNum() + "车位状态应填写 S(出售)或者 H (出租)");
            }
        }
    }
}
springboot/src/main/java/com/java110/boot/smo/assetImport/IImportOwnerCarSMO.java
File was deleted
springboot/src/main/java/com/java110/boot/smo/assetImport/impl/ImportOwnerCarSMOImpl.java
File was deleted
springboot/src/main/resources/application-debug.yml
@@ -29,15 +29,15 @@
  activiti:
    database-schema-update: false
  datasource:
    url: jdbc:mysql://116.147.38.39:63306/tt_new?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: huanfa@2024#mysql
    url: jdbc:mysql://192.168.100.108:3306/TT?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
    username: TT
    password: hc12345678
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      initial-size: 20
      max-active: 50
      min-idle: 20
      initial-size: 5
      max-active: 10
      min-idle: 5
      max-wait: 60000