EqpDaoImpl.java 14.1 KB
package com.zteits.park.dao.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

import com.zteits.clouds.api.dto.park.dto.*;
import com.zteits.clouds.api.dto.pda.param.QueryEqpByPlNoAndOrtherRequest;
import com.zteits.park.constant.ParkConstant;
import com.zteits.park.service.telecomiot.deviceManagement.DeleteDirectlyConnectedDevice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.util.CollectionUtil;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.park.param.QueryEqpRequest;
import com.zteits.park.constant.EqpConstant;
import com.zteits.park.dao.EqpDao;
import com.zteits.park.domain.TpPEqp;
import com.zteits.park.domain.TpPEqpExample;
import com.zteits.park.domain.TpPEqpExample.Criteria;
import com.zteits.park.mapper.TpPEqpMapper;
import com.zteits.park.mapper.smapper.TpPEqpSMapper;
import org.springframework.transaction.annotation.Transactional;

@Component
public class EqpDaoImpl implements EqpDao {

    @Autowired
    private TpPEqpMapper tpPEqpMapper;
    @Autowired
    private TpPEqpSMapper tpPEqpSMapper;
    @Override
    public List<TpPEqp> selectEqpByEqpNo(String eqpNo) {
        if(StringUtils.isBlank(eqpNo)){
            return null;
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andEqpNoEqualTo(eqpNo)
            .andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        return tpPEqpMapper.selectByExample(example );
    }

    @Override
    public List<TpPEqp> selectEqpByEqpNo(Long orgId, String eqpNo) {
        if(StringUtils.isBlank(eqpNo)){
            return null;
        }
        if(null == orgId){
            return null;
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andEqpNoEqualTo(eqpNo)
            .andOrgIdEqualTo(orgId)
            .andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        return tpPEqpMapper.selectByExample(example );
    }

    @Override
    public TpPEqp selectEqpByBerthNo(String berthNo, String plNo,int eqpType,Integer usedType) {
        TpPEqpExample example = new TpPEqpExample();
        Criteria sql = example.createCriteria();
        sql.andBerthNoEqualTo(berthNo)
            .andPlNoEqualTo(plNo)
            .andEqpTypeEqualTo(eqpType)
            .andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        if(usedType!=null){
            sql.andUsedTypeEqualTo(usedType);
        }
        List<TpPEqp> tpPEqps = tpPEqpMapper.selectByExample(example );
        if(CollectionUtils.isEmpty(tpPEqps)){
            return null;
        }
        return tpPEqps.get(0);
    }

    @Override
    public TpPEqp selectEqpByEqpNoAndFactory(String eqpNo, String factoryNo) {
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andEqpNoEqualTo(eqpNo)
            .andFactoryNoEqualTo(factoryNo)
            .andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        List<TpPEqp> tpPEqps = tpPEqpMapper.selectByExample(example );
        if(CollectionUtils.isEmpty(tpPEqps)){
            return null;
        }
        if(tpPEqps.size()>1){
            throw new BizException(ErrorType.BIZ_ERROR,"根据厂家编号["+factoryNo+"]和设备编号["+eqpNo+"]查询到多条设备信息");
        }
        return tpPEqps.get(0);
    }

    @Override
    public int updateEqpStatusById(String eqpIsOnline, String electricity, String voltag, Date inoutTime,
        Long id,String gatewayNo,Integer magRssi) {
        TpPEqp record = new TpPEqp();
        record.setElectricity(electricity);
        record.setEqpIsOnline(eqpIsOnline);
        record.setVoltag(voltag);
        record.setHeartbeatTime(inoutTime==null?new Date():inoutTime);
        record.setInOutTime(inoutTime);
        record.setId(id);
        record.setGatewayNo(gatewayNo);
        record.setRssi(magRssi);
        record.setModifyTime(new Date());
        return tpPEqpMapper.updateByPrimaryKeySelective(record );
    }



    @Override
    public int updateEqpStatusByEqpNo(String eqpIsOnline, Date heartbeatTime, List<String> eqpNo,Integer eqpType) {
        TpPEqpExample example = new TpPEqpExample();
        Criteria sql = example.createCriteria();
        sql.andEqpNoIn(eqpNo);
        sql.andEqpTypeEqualTo(eqpType);
        sql.andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());

        TpPEqp record = new TpPEqp();
        record.setEqpIsOnline(eqpIsOnline);
        record.setHeartbeatTime(heartbeatTime==null?new Date():heartbeatTime);
        record.setModifyTime(new Date());
        return tpPEqpMapper.updateByExampleSelective(record, example);
    }

    @Override
    public Integer batchUpdateEqpStateForFault(String plNo,Integer eqpType) {
        if(StringUtils.isBlank(plNo)){
            return 0;
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andPlNoEqualTo(plNo)
            .andEqpTypeEqualTo(eqpType)
            .andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
        TpPEqp record = new TpPEqp();
        record.setEqpIsOnline(EqpConstant.IS_ONLINE.OFF_LINE);
        record.setModifyTime(new Date());
        return tpPEqpMapper.updateByExampleSelective(record, example);
    }

    @Override
    public int updateEqpStatusByBerthsNo(String eqpIsOnline, List<String> berthNos, String plNo,
        Integer eqpType) {
        TpPEqpExample example = new TpPEqpExample();
        Criteria sql = example.createCriteria();
        sql.andBerthNoIn(berthNos)
            .andPlNoEqualTo(plNo)
            .andEqpTypeEqualTo(eqpType);
        sql.andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());

        TpPEqp record = new TpPEqp();
        record.setEqpIsOnline(eqpIsOnline);
        record.setHeartbeatTime(new Date());
        record.setModifyTime(new Date());
        return tpPEqpMapper.updateByExampleSelective(record, example);
    }

    @Override
    public Map<String, List<Integer>> queryEqpTypeByPlNos(List<String> plNos) {
        Map<String, List<Integer>> listMap = new HashMap<>();
        if (CollectionUtil.isEmpty(plNos)) {
            return listMap;
        }
        List<Map<String, Object>> mapResult = tpPEqpSMapper.queryEqpTypeByPlNos(plNos);
        for (Map<String, Object> tempMap : mapResult) {
            String plNo = (String)tempMap.get("key");
            List<Integer> eqpTypesIds = new ArrayList<>();
            String[] temps = ((String)tempMap.get("value")).split(",");
            for (String temp : temps) {
                eqpTypesIds.add(Integer.valueOf(temp));
            }
            listMap.put(plNo, eqpTypesIds);
        }
        return listMap;
    }

    @Override
    public PageInfo<TpPEqp> queryEqpsForPage(QueryEqpRequest request) {
        //设置分页信息
        PageHelper.startPage(request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize());
//        TpPEqpExample example = new TpPEqpExample();
//        Criteria sql = example.createCriteria();
//        Criteria sql2 = example.createCriteria();
//        if(CollectionUtil.isNotEmpty(request.getPlNos())){
//        	sql.andPlNoIn(request.getPlNos());
//        	sql2.andPlNoIn(request.getPlNos());
//        }
//
//        if(!StringUtils.isBlank(request.getBerthNo())){
//            sql.andBerthNoLike('%'+request.getBerthNo()+'%');
//            sql2.andBerthNoLike('%'+request.getBerthNo()+'%');
//        }
//        if(!StringUtils.isBlank(request.getEqpIsOnline())){
//            sql.andEqpIsOnlineEqualTo(request.getEqpIsOnline());
//            sql2.andEqpIsOnlineEqualTo(request.getEqpIsOnline());
//        }
//        if(!StringUtils.isBlank(request.getEqpNo())){
//            sql.andEqpNoLike('%'+request.getEqpNo()+'%');
//            sql2.andEqpNoLike('%'+request.getEqpNo()+'%');
//        }
//        if(CollectionUtils.isNotEmpty(request.getFactoryNos())){
//            sql.andFactoryNoIn(request.getFactoryNos());
//            sql2.andFactoryNoIn(request.getFactoryNos());
//        }
//        if(null != request.getOrgId()){
//            sql.andOrgIdEqualTo(request.getOrgId());
//            sql2.andOrgIdEqualTo(request.getOrgId());
//        }
//        if(null != request.getHeartbeatTime()){
//        	sql.andHeartbeatTimeLessThanOrEqualTo(request.getHeartbeatTime());
//        	sql2.andHeartbeatTimeLessThanOrEqualTo(request.getHeartbeatTime());
//        }
//        if(null != request.getInOutTime()){
//        	sql.andInOutTimeLessThanOrEqualTo(request.getInOutTime());
//        	sql2.andInOutTimeLessThanOrEqualTo(request.getInOutTime());
//        }
//
//        sql.andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
//        sql2.andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value());
//        if(request.getUsedType()!=null){
//            if(request.getUsedType() == 20){
//                sql.andUsedTypeEqualTo(request.getUsedType());
//            }
//            if(request.getUsedType() == 10){
//                sql.andUsedTypeIsNull();
//                sql2.andUsedTypeNotEqualTo(20);
//                example.or(sql2);
//            }
//        }
//        example.setOrderByClause("create_time DESC");
//        List<TpPEqp> tpPEqps = tpPEqpMapper.selectByExample(example );
    	List<TpPEqp> tpPEqps = tpPEqpSMapper.queryEqpsForPage(request);
        return (tpPEqps != null && tpPEqps.size() >0) ? new PageInfo<TpPEqp>(tpPEqps) : new PageInfo<TpPEqp>(new ArrayList<TpPEqp>());
    }

    @Override
    public void insertEqpInfo(TpPEqp tpPEqp) {
        tpPEqpMapper.insertSelective(tpPEqp);
    }

    @Override
    public void deleteEqpsByIds(List<Long> ids,Long opId) {
        if(CollectionUtils.isEmpty(ids)){
            return;
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andIdIn(ids);
        TpPEqp record = new TpPEqp();
        record.setDataState(DataStatusEnum.DATA_STATUS_NO_VALID.value());
        record.setModifyOp(opId);
        record.setModifyTime(new Date());
        record.setOptFlg(ParkConstant.OptFlag.DELETE);
        tpPEqpMapper.updateByExampleSelective(record , example );
    }

    @Override
    @Transactional
    public void deleteEqpById(TpPEqpDTO eqpDTO, Long opId,String appId,String secret,String baseUrl) {
        //判断是否为电信IOT
        if(eqpDTO.getJoinMethod()==null || eqpDTO.getJoinMethod()== ParkConstant.JoinMethod.DEVICE_JOIN){

        }else if(eqpDTO.getJoinMethod()==ParkConstant.JoinMethod.TELECOM_IOT){
            //调用电信删除接口
            DeleteDirectlyConnectedDevice.execute(eqpDTO.getDeviceId(),appId,secret,baseUrl);
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andIdEqualTo(eqpDTO.getId());
        TpPEqp record = new TpPEqp();
        record.setDataState(DataStatusEnum.DATA_STATUS_NO_VALID.value());
        record.setModifyOp(opId);
        record.setModifyTime(new Date());
        tpPEqpMapper.updateByExampleSelective(record , example );

    }

    @Override
    public void updateEqpInfoById(TpPEqp tpPEqp) {
        tpPEqpMapper.updateByPrimaryKeySelective(tpPEqp);
    }

	@Override
	public Map<Integer, StatisticEqpCountByEqpTypeDTO> statisticEqpCountGroupByEqpType(QueryEqpRequest request) {
		List<StatisticEqpCountByEqpTypeDTO> byEqpTypeDTOs = tpPEqpSMapper.statisticEqpCountGroupByEqpType(request);
		if(CollectionUtil.isEmpty(byEqpTypeDTOs)){
			return null;
		}
		return byEqpTypeDTOs.stream().collect(Collectors.toMap(StatisticEqpCountByEqpTypeDTO::getEqpType, Function.identity()));
	}

	@Override
	public Map<String, List<StatisticEqpCountByPlNoDTO>> statisticEqpCountGroupByPlNo(QueryEqpRequest request) {
		List<StatisticEqpCountByPlNoDTO> byplNoDTOs = tpPEqpSMapper.statisticEqpCountGroupByPlNo(request);
		if(CollectionUtil.isEmpty(byplNoDTOs)){
			return null;
		}
		return byplNoDTOs.stream().collect(Collectors.groupingBy(StatisticEqpCountByPlNoDTO::getPlNo));
	}

	@Override
	public Map<Long, List<StatisticEqpCountByCountryDTO>> statisticEqpCountGroupByCountry(QueryEqpRequest request) {
		List<StatisticEqpCountByCountryDTO> byplNoDTOs = tpPEqpSMapper.statisticEqpCountGroupByCountry(request);
		if(CollectionUtil.isEmpty(byplNoDTOs)){
			return null;
		}
		return byplNoDTOs.stream().collect(Collectors.groupingBy(StatisticEqpCountByCountryDTO::getPlCountryId));
	}

    /**
     * 批量插入地磁信息.<br/>
     * @param tpPEqp
     * @return
     */
    @Override
    public int batchInsertEqp(List<TpPEqp> tpPEqp) {
        int bactInsetCount = tpPEqpSMapper.batchInsertEqp(tpPEqp);
        return bactInsetCount;
    }

    @Override
    public int bindEqpHostByIds(List<Long> ids,String hostNo,Long opId) {
        if(CollectionUtils.isEmpty(ids)){
            return 0;
        }
        TpPEqpExample example = new TpPEqpExample();
        example.createCriteria().andIdIn(ids);
        TpPEqp record = new TpPEqp();
        record.setModifyOp(opId);
        record.setModifyTime(new Date());
        record.setGatewayNo(hostNo);
        return tpPEqpMapper.updateByExampleSelective(record , example );
    }

    @Override
    public int updateEqpById(TpPEqp tpPEqp) {
        return tpPEqpMapper.updateByPrimaryKeySelective(tpPEqp);
    }

    @Override
    public Long queryEqpCountByPlNo(String plNo, Integer eqpType,Integer userType,String isOnline) {
        TpPEqpExample example = new TpPEqpExample();

        example.createCriteria().andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value())
        .andEqpIsOnlineEqualTo(isOnline).andPlNoEqualTo(plNo)
        .andEqpTypeEqualTo(eqpType).andUsedTypeEqualTo(userType);

        return tpPEqpMapper.countByExample(example);
    }

    @Override
    public List<BerthsDTO> queryEqpInfoByPlNoAndOther(QueryEqpByPlNoAndOrtherRequest request) {
        return tpPEqpSMapper.queryEqpInfoByPlNoAndOther(request);
    }
}