package com.doumee.service.business.impl.hksync.fhk; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.config.DataSyncConfig; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.BaseListPageResponse; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.TimeRangeListRequest; 
 | 
import com.doumee.core.haikang.model.param.respose.VehicleInfoResponse; 
 | 
import com.doumee.core.haikang.model.param.respose.VehicleTimeRangeInfoResponse; 
 | 
import com.doumee.core.haikang.service.HKService; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.dao.CompanyMapper; 
 | 
import com.doumee.dao.business.dao.MemberMapper; 
 | 
import com.doumee.dao.business.model.Cars; 
 | 
import com.doumee.dao.business.model.Member; 
 | 
import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 拉取海康车辆信息通过步Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class HkSyncVehicleFromHKServiceImpl extends HkSyncBaseServiceImpl { 
 | 
    @Autowired 
 | 
    private CompanyMapper companyMapper; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private ParksMapper parksMapper; 
 | 
    @Autowired 
 | 
    private CarsMapper carsMapper; 
 | 
    @Autowired 
 | 
    private DataSyncConfig dataSyncConfig; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public   void syncVehicleData(){ 
 | 
        try { 
 | 
            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ 
 | 
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~"); 
 | 
            } 
 | 
            TimeRangeListRequest param =  new TimeRangeListRequest(); 
 | 
            //获取ERP组织信息(全量同步) 
 | 
            boolean hasNext = true; 
 | 
            int curTotal = 0; 
 | 
            int curPage = 1; 
 | 
  
 | 
            List<Cars>  allHkList = new ArrayList<>(); 
 | 
            while (hasNext){ 
 | 
                //分页遍历循环查询所有门禁设备数据 
 | 
                param.setPageNo(curPage); 
 | 
                param.setPageSize(100); 
 | 
                BaseResponse<BaseListPageResponse<VehicleInfoResponse>> response = HKService.vehicleList(param); 
 | 
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){ 
 | 
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
                } 
 | 
                if(response.getData() == null || response.getData().getTotal() ==0){ 
 | 
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!"); 
 | 
                } 
 | 
                BaseListPageResponse<VehicleInfoResponse> r = response.getData(); 
 | 
                curTotal += 100; 
 | 
                if(curTotal >= r.getTotal()){ 
 | 
                    hasNext = false; 
 | 
                } 
 | 
                if(r.getList() == null || r.getList().size()==0){ 
 | 
                    hasNext =false; 
 | 
                }else{ 
 | 
                    allHkList.addAll(getNewModelBYList(r.getList())); 
 | 
                } 
 | 
                curPage++; 
 | 
            } 
 | 
            if(allHkList .size() == 0){ 
 | 
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何组织信息!"); 
 | 
            } 
 | 
            //清空原有的数据 
 | 
            carsMapper.delete(new UpdateWrapper<>()); 
 | 
            carsMapper.insert(allHkList);//插入新数据 
 | 
        }catch (BusinessException e){ 
 | 
            throw  e; 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    @Transactional 
 | 
    public   void syncVehicleUpdateData(Date date){ 
 | 
        try { 
 | 
            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ 
 | 
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~"); 
 | 
            } 
 | 
            TimeRangeListRequest param =  new TimeRangeListRequest(); 
 | 
            //获取ERP组织信息(全量同步) 
 | 
            boolean hasNext = true; 
 | 
            int curTotal = 0; 
 | 
            int curPage = 1; 
 | 
            Date start =Utils.Date.getStart(date); 
 | 
            Date end = new Date(); 
 | 
            if(DateUtil.daysBetweenDates(end,start) >1){ 
 | 
                end =  Utils.Date.getEnd(date); 
 | 
            } 
 | 
            param.setStartTime(DateUtil.getISO8601Timestamp2( start)); 
 | 
            param.setEndTime(DateUtil.getISO8601Timestamp2( end)); 
 | 
            while (hasNext){ 
 | 
                //分页遍历循环查询所有门禁设备数据 
 | 
                param.setPageNo(curPage); 
 | 
                param.setPageSize(100); 
 | 
                BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> response = HKService.vehicleTimeRangeList(param); 
 | 
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){ 
 | 
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); 
 | 
                } 
 | 
                if(response.getData() == null || response.getData().getTotal() ==0){ 
 | 
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!"); 
 | 
                } 
 | 
                BaseListPageResponse<VehicleTimeRangeInfoResponse> r = response.getData(); 
 | 
                curTotal += 100; 
 | 
                if(curTotal >= r.getTotal()){ 
 | 
                    hasNext = false; 
 | 
                } 
 | 
                if(r.getList() == null || r.getList().size()==0){ 
 | 
                    hasNext =false; 
 | 
                }else{ 
 | 
                     dealUpdateByList(r.getList()); 
 | 
                } 
 | 
                curPage++; 
 | 
            } 
 | 
        }catch (BusinessException e){ 
 | 
            throw  e; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void dealUpdateByList(List<VehicleTimeRangeInfoResponse> list) { 
 | 
        List<Cars> newList = new ArrayList<>(); 
 | 
        if(list == null || list.size()==0){ 
 | 
            return   ; 
 | 
        } 
 | 
        for(VehicleTimeRangeInfoResponse model :list){ 
 | 
            if(Constants.formatIntegerNum(model.getStatus()) <0){ 
 | 
                //如果已删除 
 | 
                carsMapper.update(null,new UpdateWrapper<Cars>().lambda() 
 | 
                        .eq(Cars::getHkId,model.getVehicleId()) 
 | 
                        .set(Cars::getIsdeleted,Constants.ONE )); 
 | 
            }else{ 
 | 
                Cars c = new Cars(); 
 | 
                c.setHkId(model.getVehicleId()); 
 | 
                c.setCode(model.getPlateNo()); 
 | 
                c.setRemark(JSONObject.toJSONString(model)); 
 | 
                c.setHkStatus(Constants.ONE); 
 | 
                c.setHkDate(new Date()); 
 | 
                c.setIsdeleted(Constants.ZERO); 
 | 
                c.setStatus(Constants.ZERO); 
 | 
                c.setCreateDate(DateUtil.getISO8601DateByStr(model.getCreateTime())); 
 | 
                c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime())); 
 | 
                if(StringUtils.isNotBlank(model.getPersonId())){ 
 | 
                    //被访问人 
 | 
                    Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); 
 | 
                    c.setMemberId(member!=null?member.getId():null); 
 | 
                } 
 | 
                Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda().eq(Cars::getHkId,model.getVehicleId()).last("limit 1")); 
 | 
                if(cars!=null){ 
 | 
                    //更新 
 | 
                    c.setId(cars.getId()); 
 | 
                    carsMapper.updateById(c); 
 | 
                }else{ 
 | 
                    //新增 
 | 
                    carsMapper.insert(c); 
 | 
                } 
 | 
  
 | 
            } 
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    private List<Cars> getNewModelBYList(List<VehicleInfoResponse> list ) { 
 | 
        List<Cars> newList = new ArrayList<>(); 
 | 
        if(list == null || list.size()==0){ 
 | 
            return  newList; 
 | 
        } 
 | 
        for(VehicleInfoResponse model :list){ 
 | 
            Cars c = new Cars(); 
 | 
            c.setHkId(model.getVehicleId()); 
 | 
            c.setCode(model.getPlateNo()); 
 | 
            c.setRemark(JSONObject.toJSONString(model)); 
 | 
            c.setHkStatus(Constants.ONE); 
 | 
            c.setHkDate(new Date()); 
 | 
            c.setIsdeleted(Constants.ZERO); 
 | 
            c.setCreateDate(c.getHkDate()); 
 | 
            c.setCreateDate(DateUtil.getISO8601DateByStr(model.getCreateTime())); 
 | 
            c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime())); 
 | 
            if(StringUtils.isNotBlank(model.getPersonId())){ 
 | 
                //被访问人 
 | 
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); 
 | 
                c.setMemberId(member!=null?member.getId():null); 
 | 
            } 
 | 
            newList.add(c); 
 | 
        } 
 | 
        return newList; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |