1. 程式人生 > >如何根據多條件限定進行查詢

如何根據多條件限定進行查詢

為了實現同行車的查詢在規定的時間段內,根據車牌號碼、車輛顏色、卡口列表是vachar型別的,還得排除不選的顏色的車輛

這裡寫圖片描述

1.

package com.ia.lhc.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util
.logging.Logger; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.ia.lhc.config.ConstantUtils; import com.ia.lhc.config.DataSourceTypeManager; import com.ia.lhc.config.DataSources; import com.ia.lhc.form.AccompanyCarForm; import com
.ia.lhc.httpclient.HttpUtils; import com.ia.lhc.model.AccompanyCarDetailEntity; import com.ia.lhc.model.AccompanyCarEntity; import com.ia.lhc.model.BasicCar; import com.ia.lhc.model.BasicTrailEntity; import com.ia.lhc.model.DevicesAreaEntity; import com.ia.lhc.model.DevicesEntity; import com.ia.lhc.model.ErrorMsgEntity; import com.ia.lhc.model.MultiSpaceTimeEntity; import com.ia.lhc.model.VehicleInfoEntity; import com.ia.lhc.response.AccompanyCarDetailResponse; import com.ia.lhc.response.AccompanyCarResponse; import com.ia.lhc.response.FreqCarDetailResponse; import com.ia.lhc.response.MultiSpaceTimeDetailResponse; import com.ia.lhc.service.AccompanyCarService; import com.ia.lhc.service.CarInfoService; import com.ia.lhc.service.DevicesService; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * @author wang.w.w * 1.哪些引數是必選的哪些是可選的 * 2.資料的查詢和排除指定顏色的車 */ @Controller public class AccompanyCarController { @Autowired private DevicesService devicesService; @Autowired private CarInfoService carInfoService; @Autowired private AccompanyCarService accompanyCarService; /** * LOG資訊 */ private Logger logger = Logger.getLogger(this.getClass().getName()); /** * 同行車分析查詢 * @param accompanyCarForm * @return response */ @RequestMapping(value = "/getPeerCar", method=RequestMethod.POST) @ResponseBody public AccompanyCarResponse getAccompanyCar(@RequestBody AccompanyCarForm accompanyCarForm){ // 返回前臺類 AccompanyCarResponse response = new AccompanyCarResponse(); // 例項化結果集 List<AccompanyCarEntity> accompanyCarEntityList = new ArrayList<AccompanyCarEntity>(); //使用者傳進來的引數 String starttime = accompanyCarForm.getStartdate(); String endtime = accompanyCarForm.getEnddate(); // String platenumber = accompanyCarForm.getPlatenumber(); // String colors = accompanyCarForm.getColors(); //車牌顏色 // String[] devicesId = accompanyCarForm.getDevicesId(); //得到卡口列表 // String[] removecartype = accompanyCarForm.getRemovecartype(); //排除的車輛顏色 //傳進來的yyyy-MM-dd轉換為yyyyMMdd try { String transferStartTime = transferFormat1(starttime); String transferEndTime = transferFormat1(endtime); accompanyCarForm.setStartdate(transferStartTime); accompanyCarForm.setEnddate(transferEndTime); } catch (ParseException e) { logger.info("時間格式轉為字串格式錯誤!"); e.printStackTrace(); } // 查詢 DataSourceTypeManager.set(DataSources.DATASOURCE2); accompanyCarEntityList = accompanyCarService.getAccompanyCarList(accompanyCarForm); if (accompanyCarEntityList.size() > 0 && accompanyCarEntityList!=null ) { //1,遍歷每一個同行車的列表 2.去獲取同行車裡面的車牌號再去獲取車輛的基本資訊 3,再去拿到獲取該車輛是不是違章和是否是強盜車 BasicCar carInfo2 = new BasicCar(); for(AccompanyCarEntity accompanyCarEntity:accompanyCarEntityList){ //這部分是把概率小數轉為%形式 String rank = accompanyCarEntity.getRank(); double parseDouble = (Double.parseDouble(rank))*100; String rankStr = String.valueOf(parseDouble)+"%"; accompanyCarEntity.setRank(rankStr); // 查詢車輛違法資訊 DataSourceTypeManager.set(DataSources.DATASOURCE1); carInfo2 = carInfoService.getCarInfo(accompanyCarEntity.getPlatenumber2()); if(carInfo2!=null){ //把根據車牌號查詢到的是否違章資訊和是否強盜車資訊儲存到實體中 accompanyCarEntity.setRobberyCarFlag(carInfo2.getRobberyCarFlag()); accompanyCarEntity.setPeccancyInfo(carInfo2.getPeccancyInfo()); } else{ accompanyCarEntity.setRobberyCarFlag(""); accompanyCarEntity.setPeccancyInfo(""); } } response.setAccompanyCarEntityList(accompanyCarEntityList); response.setCode(ConstantUtils.RETURN_RESULT_SUCCESS_CODE_0); response.setMsg("同行車查詢成功!"); }else { response.setCode(ConstantUtils.RETURN_RESULT_FAIL_CODE_1); response.setMsg("未找到同行車資訊!"); response.setAccompanyCarEntityList(new ArrayList<AccompanyCarEntity>()); } return response; }

2.service層

1,介面

package com.ia.lhc.service;

import java.util.List;
import com.ia.lhc.form.AccompanyCarForm;
import com.ia.lhc.model.AccompanyCarDetailEntity;
import com.ia.lhc.model.AccompanyCarEntity;

public interface AccompanyCarService {

    /**
     * 獲取同行車分析
     * @return List<AccompanyCarEntity>
     */
    public List<AccompanyCarEntity> getAccompanyCarList(AccompanyCarForm accompanyCarForm);


}

3.實現類

package com.ia.lhc.service.impl;

import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ia.lhc.form.AccompanyCarForm;
import com.ia.lhc.mapper.AccompanyCarMapper;
import com.ia.lhc.model.AccompanyCarEntity;
import com.ia.lhc.service.AccompanyCarService;

@Service
public class AccompanyCarServiceImpl implements AccompanyCarService{

    @Autowired
    private AccompanyCarMapper accompanyCarMapper;

    /**
     * 獲取同行車分析
     */
    @Override
    public List<AccompanyCarEntity> getAccompanyCarList(AccompanyCarForm accompanyCarForm) {

//      String str = String.join(",", accompanyCarForm.getDevicesId());
//      accompanyCarForm.setDevices(str);
        String[] devicesId = accompanyCarForm.getDevicesId();   

        List<AccompanyCarEntity> list = accompanyCarMapper.getAccompanyCarList(accompanyCarForm);   
        //為了防止報空指標,如果當陣列的第一個數等於1說明卡口列表就是為空
        if(devicesId!=null && devicesId.length > 0){
            List<AccompanyCarEntity> resultList = new ArrayList<AccompanyCarEntity>();

            for(AccompanyCarEntity accompanyCarEntity : list){
                String deviceIDs = accompanyCarEntity.getDeviceIDs();    //資料庫的字串
                String[] strArr = accompanyCarForm.getDevicesId();       //前臺傳過來的字串陣列
                int i = 0;
                for( ; i < strArr.length; i++){
                    int indexNum = deviceIDs.indexOf(strArr[i]);    
                    if(indexNum<0){
                        break;
                    }
                }
                if(i>=strArr.length){
                    resultList.add(accompanyCarEntity);
                }
            }   
            return resultList;
        }
        else{
            return list;
        }


    }
}

mapper介面類

package com.ia.lhc.mapper;

import java.util.List;
import com.ia.lhc.form.AccompanyCarForm;
import com.ia.lhc.model.AccompanyCarEntity;

public interface AccompanyCarMapper {

    /**
     * 獲取同行車分析
     * @param accompanyCarForm
     * @return
     */
    List<AccompanyCarEntity> getAccompanyCarList(AccompanyCarForm accompanyCarForm);



}

mappering對映sql

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ia.lhc.mapper.AccompanyCarMapper" >
  <resultMap id="BaseResultMap" type="com.ia.lhc.model.AccompanyCarEntity" >
    <result column="id" property="id" jdbcType="INTEGER" />
    <result column="areaId" property="areaId" jdbcType="INTEGER" />
    <result column="date" property="date" jdbcType="VARCHAR" />
    <result column="platenumber1" property="platenumber1" jdbcType="VARCHAR" />
    <result column="platecolor1" property="platecolor1" jdbcType="VARCHAR" />
    <result column="platenumber2" property="platenumber2" jdbcType="VARCHAR" />
    <result column="platecolor2" property="platecolor2" jdbcType="VARCHAR" />
    <result column="deviceIDs" property="deviceIDs" jdbcType="VARCHAR" />
    <result column="accompanyTime" property="accompanyTime" jdbcType="NUMERIC" />
    <result column="rank" property="rank" jdbcType="NUMERIC" />
    <result column="accompanyCount" property="accompanyCount" jdbcType="INTEGER" />
  </resultMap>

  <sql id="Base_Column_List">
    id,areaId,date,platenumber1,platecolor1,platenumber2,platecolor2,deviceIDs,accompanyTime,rank,accompanyCount
  </sql>

  <!-- 獲取同行車分析 -->
  <select id="getAccompanyCarList" resultMap="BaseResultMap" parameterType="com.ia.lhc.form.AccompanyCarForm">
    SELECT
    <include refid="Base_Column_List" />
    FROM
        iabc_ttr_accompanycar AC
    WHERE  
       AC.date between #{startdate} and #{enddate} 

    <if test="platenumber !=null and platenumber !=''">
        AND (AC.platenumber1 =#{platenumber})
    </if>
    <if test="colors!=null and colors!=''">
        AND (AC.platecolor1  = #{colors})
    </if>

  </select>

</mapper>