chengf
2026-03-11 b88a288f4f787b509463678e3cd9ccfa3f37014b
service-job/src/main/java/com/java110/job/importData/adapt/ImportOwnerCarQueueV2DataAdapt.java
@@ -6,6 +6,7 @@
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.dict.DictDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.importData.*;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.oweFeeCallable.OweFeeCallableDto;
@@ -16,12 +17,13 @@
import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.dto.room.RoomDto;
import com.java110.fee.dao.IApplyRoomDiscountServiceDao;
import com.java110.intf.community.ICommunityV1InnerServiceSMO;
import com.java110.intf.community.IParkingAreaV1InnerServiceSMO;
import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.community.*;
import com.java110.intf.dev.IDictV1InnerServiceSMO;
import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
import com.java110.intf.fee.IPayFeeV1InnerServiceSMO;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
import com.java110.intf.user.IOwnerV1InnerServiceSMO;
@@ -29,6 +31,8 @@
import com.java110.job.importData.IImportDataAdapt;
import com.java110.po.car.OwnerCarPo;
import com.java110.po.dict.DictPo;
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.oweFeeCallable.OweFeeCallablePo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.parking.ParkingAreaPo;
@@ -36,6 +40,7 @@
import com.java110.po.room.ApplyRoomDiscountPo;
import com.java110.po.room.LitigationInfoPo;
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 org.mybatis.spring.SqlSessionTemplate;
@@ -45,10 +50,7 @@
import java.math.BigDecimal;
import java.security.acl.Owner;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * 车辆导入 适配器
@@ -62,6 +64,13 @@
    @Autowired
    private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
    @Autowired
    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
    @Autowired
    private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMO;
    @Autowired
    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMO;
    @Autowired
    private IApplyRoomDiscountServiceDao applyRoomDiscountServiceDaoImpl;
@@ -90,10 +99,14 @@
    private IRoomInnerServiceSMO iroomInnerServiceSMOImpl;
    @Autowired
    ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
    ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
    @Autowired
    IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
    @Autowired
    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
        importDatas(assetImportLogDetailDtos);
@@ -105,11 +118,29 @@
        for (AssetImportLogDetailDto assetImportLogDetailDto : infos) {
            try {
                doImportData(assetImportLogDetailDto);
                OwnerCarDto ownerCarDto = null;
                doImportData(assetImportLogDetailDto,ownerCarDto);
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            } catch (Exception e) {
                e.printStackTrace();
                updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                if (e.getMessage().contains("for column 'end_time' at row 1")){
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "注销日期格式错误!");
                }
                else if (e.getMessage().contains("for column 'start_time' at row 1")){
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "启用日期格式错误!");
                }
//                else if (e.getMessage().contains("### Error updating database")){
//                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), "未知错误,请联系管理员");
//                }
                else {
                    updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
                }
            }
        }
@@ -120,13 +151,13 @@
     *
     * @param assetImportLogDetailDto
     */
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
    private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto,OwnerCarDto ownerCarDto) throws Exception {
        JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
        String[] o = JSON.parseObject(data.getString("otherItem"), String[].class);
        String otherItem = data.getString("otherItem");
        data.put("otherItem", null);
        OwnerCarDto ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        ownerCarDto = BeanConvertUtil.covertBean(data, OwnerCarDto.class);
        if (ownerCarDto.getOwnerName() == null || "".equals(ownerCarDto.getOwnerName())) {
            RoomDto roomDto = new RoomDto();
            roomDto.setRoadName(ownerCarDto.getRoadName());
@@ -134,80 +165,150 @@
            roomDto.setCommunityId(ownerCarDto.getCommunityId());
            roomDto.setUnitNum(ownerCarDto.getUnitNum());
            roomDto.setRoomNum(ownerCarDto.getRoomNum());
            if (Vtil.defaultValue(roomDto.getRoomNum()).equals("")){
                roomDto.setPropertyType("商铺");
            }
            List<RoomDto> roomDtos = iroomInnerServiceSMOImpl.queryRooms(roomDto);
            if (roomDtos.isEmpty()) {
                throw new IllegalArgumentException("未填写业主且房屋不存在");
                ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomNum(),"空") + "未查询到");
//                throw new IllegalArgumentException("未填写业主且房屋不存在");
            } else if (roomDtos.size() > 1) {
                throw new IllegalArgumentException("该房屋存在多个业主");
                ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomName()) + "查询到多个房屋");
            }
            else {
                OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
                ownerRoomRelDto.setRoomId(roomDtos.get(0).getRoomId());
                List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
                if (ownerRoomRelDtos.isEmpty()) {
                    throw new IllegalArgumentException("未填写业主且该房屋未绑定业主");
                } else {
                    ownerCarDto.setRemark("房屋:" + roomDto.getRoadName() + "-" + roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + Vtil.defaultValue(ownerCarDto.getRoomName()) + "未查询到业主");
//                    throw new IllegalArgumentException("未填写业主且该房屋未绑定业主");
                }
                else {
                    OwnerDto ownerDto = new OwnerDto();
                    ownerDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
                    List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
                    if (ownerDtos.isEmpty()) {
                        throw new IllegalArgumentException("未知错误:00022");
                    } else {
                        ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
                        ownerCarDto.setOwnerName(ownerDtos.get(0).getName());
                    }
                }
            }
        } else {
            OwnerDto ownerDto = new OwnerDto();
            ownerDto.setName(ownerCarDto.getOwnerName());
            ownerDto.setCommunityId(ownerCarDto.getCommunityId());
            List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
            if (ownerDtos.isEmpty()) {
                ownerCarDto.setRemark("未查询到业主:" + ownerCarDto.getOwnerName());
            } else if (ownerDtos.size() > 1) {
                ownerCarDto.setRemark("存在多个业主:" + ownerCarDto.getOwnerName());
            } else {
                ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
            }
        }
        ownerCarDto.setOtherItem(o);
        ownerCarDto.setLeaseType("H");
        CommunityDto communityDto = new CommunityDto();
        Object[] os = ownerCarDto.getOtherItem();
        // 原代码
        Object[] os2 = ownerCarDto.getOtherItem();
        Object[] os = new Object[102];
// 数组复制核心代码
        if (os2.length > 101) {
            throw new IllegalArgumentException("长度超过限制(100列)");
        }
        if (os2 != null) { // 先判空,避免空指针异常
            // 参数说明:源数组、源数组起始位置、目标数组、目标数组起始位置、复制长度
            System.arraycopy(os2, 0, os, 0, os2.length);
        }
        String communityId = ownerCarDto.getCommunityId();
        JSONArray objects = JSONObject.parseArray(otherItem);
        while (objects.size() < 100) {
            objects.add(null); // 也可以填 ""、0 等自定义默认值
        }
        OwnerCarDto carDto = new OwnerCarDto();
        carDto.setCommunityId(ownerCarDto.getCommunityId());
        carDto.setCarNum(ownerCarDto.getCarNum());
        communityDto.setCommunityCode(defaultValue(os[1]));
        communityDto.setName(defaultValue(os[2]));
        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto);
        if (communityDto.getCommunityCode().equals("") && communityDto.getName().equals("")) {
            throw new IllegalArgumentException("导入失败:小区编码和小区名称都为空");
        }
        List<CommunityDto> communityDtos = communityInnerServiceSMOImpl.queryCommunitys(communityDto);
        if (communityDtos.isEmpty()) {
            throw new IllegalArgumentException("不存在小区编码为:" + communityDto.getCommunityCode() + "的小区");
            throw new IllegalArgumentException("不存在的小区:" + communityDto.getCommunityCode() + communityDto.getName() + "");
        }
        assetImportLogDetailDto.setCommunityId(communityDtos.get(0).getCommunityId());
        ownerCarDto.setCommunityId(communityDtos.get(0).getCommunityId());
        communityDto.setCommunityId(communityDtos.get(0).getCommunityId());
        //todo 导入业主信息
        importOwnerData(ownerCarDto, os);
//        //todo 导入业主信息
//        importOwnerData(ownerCarDto, os);
        OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(ownerCarDto, OwnerCarPo.class);
        ownerCarPo.setStartTime(ownerCarDto.getLogStartTime());
        ownerCarPo.setEndTime(ownerCarDto.getLogEndTime());
        //获取房屋名称
        String carTypeCd = defaultValue(os[13]);
        if (!carTypeCd.equals("")){
            DictDto dictDto = new DictDto();
            dictDto.setTableName("owner_car");
            dictDto.setTableColumns("car_type_cd");
            dictDto.setName(carTypeCd);
            List<DictDto> dictDtos = dictV1InnerServiceSMOImpl.queryDicts(dictDto);
            if (dictDtos.isEmpty()) {
                dictDto.setName(null);
                List<DictDto> dictDtos1 = dictV1InnerServiceSMOImpl.queryDicts(dictDto);
                DictPo dictPo = new DictPo();
                dictPo.setTableName("owner_car");
                dictPo.setTableColumns("car_type_cd");
                dictPo.setName(carTypeCd);
                dictPo.setDescription(carTypeCd);
                dictPo.setStatusCd(dictDtos1.get(dictDtos1.size() - 1).getStatusCd() + 100);
                int i = dictV1InnerServiceSMOImpl.saveDict(dictPo);
                if (i == 0) {
                    throw new IllegalArgumentException("添加字典失败!");
                }
//        String carTypeCd = defaultValue(os[12]);
//        if (!carTypeCd.equals("")){
//            DictDto dictDto = new DictDto();
//            dictDto.setTableName("owner_car");
//            dictDto.setTableColumns("car_type_cd");
//            dictDto.setName(carTypeCd);
//            List<DictDto> dictDtos = dictV1InnerServiceSMOImpl.queryDicts(dictDto);
//            if (dictDtos.isEmpty()) {
//                dictDto.setName(null);
//                List<DictDto> dictDtos1 = dictV1InnerServiceSMOImpl.queryDicts(dictDto);
//                DictPo dictPo = new DictPo();
//                dictPo.setTableName("owner_car");
//                dictPo.setTableColumns("car_type_cd");
//                dictPo.setName(carTypeCd);
//                dictPo.setStatusCd(String.valueOf(Integer.parseInt(dictDtos1.get(dictDtos1.size() - 1).getStatusCd()) + 100));
//                int i = dictV1InnerServiceSMOImpl.saveDict(dictPo);
//                if (i == 0) {
//                    throw new IllegalArgumentException("添加字典失败!");
//                }
//            } else {
//                ownerCarPo.setCarTypeCd(dictDtos.get(0).getStatusCd());
//            }
//        }
//        else {
//            ownerCarPo.setCarTypeCd("1001"); //默认主车辆
//        }
        ownerCarPo.setCarTypeCd("1001"); //默认主车辆
        int i1 = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(carDto);
        if (i1 > 0) {
            carDto.setOwnerId(ownerCarDto.getOwnerId());
            carDto.setParkingType(Vtil.defaultValue(os[13]));
            carDto.setCarNum(null);
            carDto.setCarNumLikeRight_(ownerCarDto.getCarNum());
            carDto.setRoadName(defaultValue(os[3]));
            carDto.setFloorNum(defaultValue(os[4]));
            carDto.setUnitNum(defaultValue(os[5]));
            carDto.setRoomNum(defaultValue(os[6]));
            carDto.setCarTypeCd(ownerCarPo.getCarTypeCd());
            carDto.setUnitPricePerMonth(defaultValue(os[18]));
            int i2 = ownerCarInnerServiceSMOImpl.queryOwnerCarsCount(carDto);
            if (i2 > 0) {
                throw new IllegalArgumentException("重复的车辆:" + ownerCarDto.getCarNum());
            } else {
                ownerCarPo.setCarTypeCd(dictDtos.get(0).getStatusCd());
                ownerCarDto.setCarNum(ownerCarDto.getCarNum() + "_" + i1);
            }
        }
        else {
            ownerCarPo.setCarTypeCd("1001"); //默认主车辆
        }
        ParkingAreaDto parkingAreaDto = new ParkingAreaDto();
        parkingAreaDto.setNum(ownerCarDto.getAreaNum());
@@ -284,6 +385,9 @@
            roomDto.setFloorNum(defaultValue(os[4]));
            roomDto.setUnitNum(defaultValue(os[5]));
            roomDto.setRoomNum(defaultValue(os[6]));
            if (roomDto.getRoomNum() == null || roomDto.getRoomNum().equals("")) {
                roomDto.setPropertyType("商铺");
            }
            List<RoomDto> roomDtos = iroomInnerServiceSMOImpl.queryRooms(roomDto);
            if (ListUtil.isNull(roomDtos)) {
                throw new IllegalArgumentException("未查询到房间");
@@ -494,6 +598,14 @@
        //导入车辆
        saveFee(ownerCarPo, os, ownerCarDto, assetImportLogDetailDto);
        ownerCarPo.setParkingType(Vtil.defaultValue(os[12]));
        ownerCarPo.setRoadName(defaultValue(os[3]));
        ownerCarPo.setFloorNum(defaultValue(os[4]));
        ownerCarPo.setUnitNum(defaultValue(os[5]));
        ownerCarPo.setRoomNum(defaultValue(os[6]));
        ownerCarPo.setParkingLocation(defaultValue(os[12]));
        ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
        ParkingSpacePo parkingSpacePo = new ParkingSpacePo();
        parkingSpacePo.setPsId(psId); //车位id
@@ -501,6 +613,59 @@
        parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
    }
    public void saveFee(OwnerCarPo ownerCarPo, Object[] os, OwnerCarDto ownerCarDto, AssetImportLogDetailDto assetImportLogDetailDto) {
        List<FeeConfigDto> feeDtos = null;
        if (!ownerCarPo.getCommunityId().isEmpty()){
            FeeConfigDto feeConfigDto = new FeeConfigDto();
            feeConfigDto.setCommunityId(ownerCarPo.getCommunityId());
            feeConfigDto.setSquarePrice(Vtil.processCount(ownerCarPo.getUnitPricePerMonth(), 2, null));
            feeConfigDto.setFeeTypeCds(new String[]{"630000003","630000004","630000005"});
            if (feeConfigDto.getSquarePrice() == null) {
                throw new IllegalArgumentException("未传入收费单价");
            }
            feeDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
            if (feeDtos.isEmpty()) {
                throw new IllegalArgumentException("单价`"+ownerCarPo.getUnitPricePerMonth()+"`未查询到收费项");
            } else if (feeDtos.size() > 1) {
                switch (Vtil.defaultValue(os[12])) {
                    case "地面停车": feeConfigDto.setFeeTypeCd("630000003");break;
                    case "地下停车": feeConfigDto.setFeeTypeCd("630000004");break;
                    default: feeConfigDto.setFeeTypeCd("630000005");break;
                }
                feeDtos.removeIf(feeConfigDto1 -> !feeConfigDto1.getFeeTypeCd().equals(feeConfigDto.getFeeTypeCd()));
            }
            if (feeDtos.size() > 1) {
                throw new IllegalArgumentException("系统错误,查询到的费用项超过一个");
            }
        }
        FeeConfigDto feeDto = feeDtos.get(0);
        PayFeePo payFeePo = new PayFeePo();
        payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
        payFeePo.setbId("-1");
        payFeePo.setFeeTypeCd(feeDto.getFeeTypeCd());
        payFeePo.setSecondaryFeeTypeCd(feeDto.getSecondaryFeeTypeCd());
        payFeePo.setCommunityId(ownerCarDto.getCommunityId());
        payFeePo.setPayerObjId(ownerCarPo.getCarId());
        payFeePo.setIncomeObjId("102025062610470035");
        payFeePo.setStartTime(Vtil.processDateEnhanced(ownerCarDto.getStartTime(), null, "yyyy-MM-dd HH:mm:ss", "start", feeDto.getStartTime()));
        payFeePo.setEndTime(payFeePo.getStartTime());
        payFeePo.setUserId(ownerCarPo.getUserId());
        payFeePo.setStatusCd("0");
        payFeePo.setFeeFlag(feeDto.getFeeFlag());
        payFeePo.setConfigId(feeDto.getConfigId());
        payFeePo.setState("2008001");
        payFeePo.setPayerObjType("6666");
        payFeePo.setBatchId(assetImportLogDetailDto.getLogId());
        payFeeV1InnerServiceSMO.savePayFee(payFeePo);
        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
        feeAttrPos.add(
                new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390010" ,
                        Vtil.processDateEnhanced(ownerCarDto.getEndTime(), null, "yyyy-MM-dd HH:mm:ss", "end", feeDto.getEndTime())));
        feeAttrPos.add(new FeeAttrPo(payFeePo.getFeeId(), payFeePo.getCommunityId(), GenerateCodeFactory.getGeneratorId("11"), "390012" , "(" + ownerCarPo.getCarNum() + ")"));
        feeAttrInnerServiceSMO.saveFeeAttrs(feeAttrPos);
    }
    private String defaultValueToDate(Object o) {
        return o == null ? null : o.toString();
    }