fllmoyu 4 vuotta sitten
vanhempi
commit
31d3ebd05c
21 muutettua tiedostoa jossa 674 lisäystä ja 54 poistoa
  1. 19 0
      common/src/main/java/com/jpsoft/bus/config/BaiduConfig.java
  2. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/ShiftInfoDAO.java
  3. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/dao/StationInfoDAO.java
  4. 11 3
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/DriverRecordInfo.java
  5. 1 1
      common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.java
  6. 11 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/BaiduService.java
  7. 6 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/ShiftInfoService.java
  8. 2 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/StationInfoService.java
  9. 47 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/BaiduServiceImpl.java
  10. 35 0
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java
  11. 12 6
      common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationInfoServiceImpl.java
  12. 8 4
      common/src/main/java/com/jpsoft/bus/modules/common/utils/BaiduAuthUtil.java
  13. 101 18
      common/src/main/java/com/jpsoft/bus/modules/common/utils/CommonUtil.java
  14. 22 2
      common/src/main/resources/mapper/bus/DriverRecordInfo.xml
  15. 6 6
      common/src/main/resources/mapper/bus/GpsDataInfo.xml
  16. 9 0
      common/src/main/resources/mapper/bus/ShiftInfo.xml
  17. 11 2
      common/src/main/resources/mapper/bus/StationInfo.xml
  18. 2 0
      web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java
  19. 212 9
      web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java
  20. 148 2
      web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java
  21. 7 1
      web/src/main/resources/application.yml

+ 19 - 0
common/src/main/java/com/jpsoft/bus/config/BaiduConfig.java

@@ -0,0 +1,19 @@
+package com.jpsoft.bus.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-4-6 10:17
+ */
+@Data
+@ConfigurationProperties(prefix = "baidu")
+@Component
+public class BaiduConfig {
+
+    private String key;
+
+    private String secret;
+}

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/ShiftInfoDAO.java

@@ -17,4 +17,6 @@ public interface ShiftInfoDAO {
 	List<ShiftInfo> search(Map<String,Object> searchParams,List<Sort> sortList);
 
     List<ShiftInfo> findByDriverIdAndStatus(Long driverId, String status);
+
+    List<ShiftInfo> findByVehicleIdAndStatus(String vehicleId, String status);
 }

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dao/StationInfoDAO.java

@@ -16,4 +16,6 @@ public interface StationInfoDAO {
 	List<StationInfo> list();
 	List<StationInfo> findByRouteId(String routeId);
 	List<StationInfo> search(Map<String, Object> searchParams, List<Sort> sortList);
+
+    List<StationInfo> findByRouteIdAndClassify(String routeId, int classify);
 }

+ 11 - 3
common/src/main/java/com/jpsoft/bus/modules/bus/entity/DriverRecordInfo.java

@@ -17,15 +17,23 @@ import java.util.Date;
 public class DriverRecordInfo {
 
     @ApiModelProperty(value = "")
-    private Long id;
+    private String id;
     @ApiModelProperty(value = "司机id")
-    private String driverId;
+    private Long driverId;
     @ApiModelProperty(value = "车牌号")
     private String licensePlateNumber;
     @ApiModelProperty(value = "记录时间")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
     private Date recordTime;
+    @ApiModelProperty(value = "考勤地点")
+    private String place;
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+    @ApiModelProperty(value = "图片")
+    private String imageUrl;
     @ApiModelProperty(value = "创建人")
     private String createBy;
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
@@ -39,6 +47,6 @@ public class DriverRecordInfo {
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
     @ApiModelProperty(value = "是否删除")
-    private Boolean delFlag;
+    private Boolean delFlag = false;
 
 }

+ 1 - 1
common/src/main/java/com/jpsoft/bus/modules/bus/entity/ShiftInfo.java

@@ -45,7 +45,7 @@ public class ShiftInfo {
 	    @ApiModelProperty(value = "更新时间")
     private Date updateTime;
         @ApiModelProperty(value = "是否删除")
-    private Boolean delFlag;
+    private Boolean delFlag = false;
         @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
 	    @ApiModelProperty(value = "是否收班(到达终点站,乘客全部下车)")

+ 11 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/BaiduService.java

@@ -0,0 +1,11 @@
+package com.jpsoft.bus.modules.bus.service;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-4-6 10:00
+ */
+public interface BaiduService {
+
+
+    void faceSearch(String faceImageUrl,String faceType,String groupId) throws Exception;
+}

+ 6 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/ShiftInfoService.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
 import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
 import com.jpsoft.bus.modules.common.dto.Sort;
 
 public interface ShiftInfoService {
@@ -16,4 +17,9 @@ public interface ShiftInfoService {
 	Page<ShiftInfo> pageSearch(Map<String, Object> searchParams,int pageNum,int pageSize,boolean count,List<Sort> sortList);
 
     List<ShiftInfo> findByDriverIdAndStatus(Long driverId, String status);
+
+    List<ShiftInfo> findByVehicleIdAndStatus(String vehicleId, String status);
+
+    void createShift(VehicleInfo vehicleInfo, String driverId, String startStationId, String endStationId) throws Exception;
+
 }

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/StationInfoService.java

@@ -15,4 +15,6 @@ public interface StationInfoService {
 	List<StationInfo> findByRouteId(String routeId);
 	List<StationInfo> list();
 	Page<StationInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+
+    List<StationInfo> findByRouteIdAndClassify(String routeId, int classify);
 }

+ 47 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/BaiduServiceImpl.java

@@ -0,0 +1,47 @@
+package com.jpsoft.bus.modules.bus.service.impl;
+
+import cn.hutool.http.HttpRequest;
+import com.jpsoft.bus.modules.bus.service.BaiduService;
+import com.jpsoft.bus.modules.common.utils.BaiduAuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-4-6 11:05
+ */
+@Transactional
+@Component(value="baiduService")
+public class BaiduServiceImpl implements BaiduService {
+
+    @Autowired
+    private BaiduAuthUtil baiduAuthUtil;
+
+
+    @Override
+    public void faceSearch(String faceImageUrl, String faceType, String groupId) throws Exception {
+
+        // 请求url
+        String url = "https://aip.baidubce.com/rest/2.0/face/v3/search";
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("image",faceImageUrl);
+        map1.put("image_type", faceType);
+        map1.put("group_id_list",groupId);
+        map1.put("max_user_num",3);
+
+        // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
+        String accessToken = baiduAuthUtil.getAuth();
+
+        String body = HttpRequest.post(url+"?access_token="+accessToken)
+                .form(map1)
+                .execute()
+                .body();
+
+
+
+    }
+}

+ 35 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/ShiftInfoServiceImpl.java

@@ -1,9 +1,13 @@
 package com.jpsoft.bus.modules.bus.service.impl;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
+
+import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
+import com.sun.xml.bind.v2.TODO;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.bus.modules.bus.dao.ShiftInfoDAO;
@@ -72,4 +76,35 @@ public class ShiftInfoServiceImpl implements ShiftInfoService {
 	public List<ShiftInfo> findByDriverIdAndStatus(Long driverId, String status) {
 		return shiftInfoDAO.findByDriverIdAndStatus(driverId,status);
 	}
+
+	@Override
+	public List<ShiftInfo> findByVehicleIdAndStatus(String vehicleId, String status) {
+		return shiftInfoDAO.findByVehicleIdAndStatus(vehicleId,status);
+	}
+
+	@Override
+	public void createShift(VehicleInfo vehicleInfo, String driverId, String startStationId, String endStationId) throws Exception {
+		List<ShiftInfo> shiftInfoList = findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
+		if (shiftInfoList.size()>0){
+			for (ShiftInfo shiftInfo : shiftInfoList){
+				shiftInfo.setStatus("2");
+				update(shiftInfo);
+			}
+		}
+		//TODO 根据经纬度查询当前站点
+
+
+		ShiftInfo shiftInfo = new ShiftInfo();
+		shiftInfo.setId(UUID.randomUUID().toString());
+		shiftInfo.setDriverId(Long.valueOf(driverId));
+		shiftInfo.setVehicleId(vehicleInfo.getId());
+		shiftInfo.setRouteId(vehicleInfo.getRouteId());
+		shiftInfo.setStartStationId(startStationId);
+		shiftInfo.setEndStationId(endStationId);
+		shiftInfo.setStatus("1");
+		shiftInfo.setCreateTime(new Date());
+		insert(shiftInfo);
+
+
+	}
 }

+ 12 - 6
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/StationInfoServiceImpl.java

@@ -29,14 +29,14 @@ public class StationInfoServiceImpl implements StationInfoService {
 	public int insert(StationInfo model) {
 		// TODO Auto-generated method stub
 		//model.setId(UUID.randomUUID().toString());
-		
+
 		return stationInfoDAO.insert(model);
 	}
 
 	@Override
 	public int update(StationInfo model) {
 		// TODO Auto-generated method stub
-		return stationInfoDAO.update(model);		
+		return stationInfoDAO.update(model);
 	}
 
 	@Override
@@ -49,10 +49,10 @@ public class StationInfoServiceImpl implements StationInfoService {
 	public boolean exist(String id) {
 		// TODO Auto-generated method stub
 		int count = stationInfoDAO.exist(id);
-		
+
 		return count > 0 ? true : false;
 	}
-	
+
 	@Override
 	public List<StationInfo> list() {
 		// TODO Auto-generated method stub
@@ -63,13 +63,19 @@ public class StationInfoServiceImpl implements StationInfoService {
 	public List<StationInfo> findByRouteId(String routeId){
 		return stationInfoDAO.findByRouteId(routeId);
 	}
-		
+
+
 	@Override
 	public Page<StationInfo> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
         Page<StationInfo> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
             stationInfoDAO.search(searchParams,sortList);
         });
-        
+
         return page;
 	}
+
+	@Override
+	public List<StationInfo> findByRouteIdAndClassify(String routeId, int classify) {
+		return stationInfoDAO.findByRouteIdAndClassify(routeId,classify);
+	}
 }

+ 8 - 4
common/src/main/java/com/jpsoft/bus/modules/common/utils/BaiduAuthUtil.java

@@ -1,6 +1,7 @@
 package com.jpsoft.bus.modules.common.utils;
 
 import cn.hutool.json.JSONObject;
+import com.jpsoft.bus.config.BaiduConfig;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
@@ -24,6 +25,9 @@ public class BaiduAuthUtil {
     @Autowired
     private RedisTemplate redisTemplate;
 
+    @Autowired
+    private BaiduConfig baiduConfig;
+
     /**
      * 获取权限token
      *
@@ -35,9 +39,9 @@ public class BaiduAuthUtil {
      */
     public String getAuth() {
         // 官网获取的 API Key 更新为你注册的
-        String clientId = "FhN3QuocpqH2XNMHZU3GlCun";
+        String clientId = baiduConfig.getKey();
         // 官网获取的 Secret Key 更新为你注册的
-        String clientSecret = "N5Lfz9p8MHn8m0YSwjmT6SWvkboKYa2A";
+        String clientSecret = baiduConfig.getSecret();
         return getAuth(clientId, clientSecret);
     }
 
@@ -78,9 +82,9 @@ public class BaiduAuthUtil {
                 // 获取所有响应头字段
                 Map<String, List<String>> map = connection.getHeaderFields();
                 // 遍历所有的响应头字段
-                for (String key : map.keySet()) {
+                /*for (String key : map.keySet()) {
                     System.err.println(key + "--->" + map.get(key));
-                }
+                }*/
                 // 定义 BufferedReader输入流来读取URL的响应
                 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                 String result = "";

+ 101 - 18
common/src/main/java/com/jpsoft/bus/modules/common/utils/CommonUtil.java

@@ -1,29 +1,112 @@
 package com.jpsoft.bus.modules.common.utils;
 
+import cn.hutool.core.util.StrUtil;
+
 /**
  * @author 墨鱼_mo
  * @date 2020-8-4 17:17
  */
 public class CommonUtil {
 
-    public static String getGoodTypeName(String type){
-        String goodTypeName ="";
-       if ("1".equals(type)){
-           goodTypeName = "校车服务";
-       }
-       if ("2".equals(type)){
-           goodTypeName = "学平险";
-       }
-       if ("3".equals(type)){
-           goodTypeName = "虹膜";
-       }
-       if ("4".equals(type)){
-           goodTypeName = "人工智能";
-       }
-       if ("5".equals(type)){
-           goodTypeName = "移动充值";
-       }
+    public static String getProvinceNum(String carNum) {
+        String provinceNum = "un";
+        String provinceName = StrUtil.sub(carNum, 0, 1);
+        if ("京".equals(provinceName)) {
+            provinceNum = "00";
+        }
+        if ("津".equals(provinceName)) {
+            provinceNum = "01";
+        }
+        if ("沪".equals(provinceName)) {
+            provinceNum = "02";
+        }
+        if ("渝".equals(provinceName)) {
+            provinceNum = "03";
+        }
+        if ("冀".equals(provinceName)) {
+            provinceNum = "04";
+        }
+        if ("豫".equals(provinceName)) {
+            provinceNum = "05";
+        }
+        if ("云".equals(provinceName)) {
+            provinceNum = "06";
+        }
+        if ("辽".equals(provinceName)) {
+            provinceNum = "07";
+        }
+        if ("黑".equals(provinceName)) {
+            provinceNum = "08";
+        }
+        if ("湘".equals(provinceName)) {
+            provinceNum = "09";
+        }
+        if ("皖".equals(provinceName)) {
+            provinceNum = "10";
+        }
+        if ("鲁".equals(provinceName)) {
+            provinceNum = "11";
+        }
+        if ("新".equals(provinceName)) {
+            provinceNum = "12";
+        }
+        if ("苏".equals(provinceName)) {
+            provinceNum = "13";
+        }
+        if ("浙".equals(provinceName)) {
+            provinceNum = "14";
+        }
+        if ("赣".equals(provinceName)) {
+            provinceNum = "15";
+        }
+        if ("桂".equals(provinceName)) {
+            provinceNum = "16";
+        }
+        if ("甘".equals(provinceName)) {
+            provinceNum = "17";
+        }
+        if ("晋".equals(provinceName)) {
+            provinceNum = "18";
+        }
+        if ("蒙".equals(provinceName)) {
+            provinceNum = "19";
+        }
+        if ("陕".equals(provinceName)) {
+            provinceNum = "20";
+        }
+        if ("吉".equals(provinceName)) {
+            provinceNum = "21";
+        }
+        if ("闽".equals(provinceName)) {
+            provinceNum = "22";
+        }
+        if ("贵".equals(provinceName)) {
+            provinceNum = "23";
+        }
+        if ("粤".equals(provinceName)) {
+            provinceNum = "24";
+        }
+        if ("青".equals(provinceName)) {
+            provinceNum = "25";
+        }
+        if ("藏".equals(provinceName)) {
+            provinceNum = "26";
+        }
+        if ("琼".equals(provinceName)) {
+            provinceNum = "27";
+        }
+        if ("鄂".equals(provinceName)) {
+            provinceNum = "28";
+        }
+        if ("川".equals(provinceName)) {
+            provinceNum = "29";
+        }
+        if ("宁".equals(provinceName)) {
+            provinceNum = "30";
+        }
+
+
 
-        return goodTypeName;
+        return provinceNum;
     }
 }

+ 22 - 2
common/src/main/resources/mapper/bus/DriverRecordInfo.xml

@@ -8,6 +8,10 @@
         <result property="driverId" column="driver_id" />
         <result property="licensePlateNumber" column="license_plate_number" />
         <result property="recordTime" column="record_time" />
+        <result property="place" column="place_"/>
+        <result property="latitude" column="latitude_"/>
+        <result property="longitude" column="longitude_"/>
+        <result property="imageUrl" column="image_url"/>
         <result property="createBy" column="create_by" />
         <result property="createTime" column="create_time" />
         <result property="updateBy" column="update_by" />
@@ -22,13 +26,17 @@
         -->
         <![CDATA[
 		insert into bus_driver_record_info
-	    (id,driver_id,license_plate_number,record_time,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,driver_id,license_plate_number,record_time,place_,latitude_,longitude_,image_url,create_by,create_time,update_by,update_time,del_flag)
 		values
 		(
 #{id,jdbcType=VARCHAR}
-,#{driverId,jdbcType=VARCHAR}
+,#{driverId,jdbcType=NUMERIC}
 ,#{licensePlateNumber,jdbcType=VARCHAR}
 ,#{recordTime,jdbcType=TIMESTAMP}
+,#{place,jdbcType=VARCHAR}
+,#{latitude,jdbcType=VARCHAR}
+,#{longitude,jdbcType=VARCHAR}
+,#{imageUrl,jdbcType=VARCHAR}
 ,#{createBy,jdbcType=VARCHAR}
 ,#{createTime,jdbcType= TIMESTAMP }
 ,#{updateBy,jdbcType=VARCHAR}
@@ -52,6 +60,18 @@
             <if test="recordTime!=null">
                 record_time=#{recordTime,jdbcType=TIMESTAMP},
             </if>
+            <if test="place!=null">
+                place_=#{place,jdbcType=VARCHAR},
+            </if>
+            <if test="latitude!=null">
+                latitude_=#{latitude,jdbcType=VARCHAR},
+            </if>
+            <if test="longitude!=null">
+                longitude_=#{longitude,jdbcType=VARCHAR},
+            </if>
+            <if test="imageUrl!=null">
+                image_url = #{imageUrl,jdbcType=VARCHAR},
+            </if>
             <if test="createBy!=null">
                 create_by=#{createBy,jdbcType=VARCHAR},
             </if>

+ 6 - 6
common/src/main/resources/mapper/bus/GpsDataInfo.xml

@@ -6,8 +6,8 @@
     <resultMap id="GpsDataInfoMap" type="com.jpsoft.bus.modules.bus.entity.GpsDataInfo">
         <id property="id" column="id_"/>
         <result property="deviceNo" column="device_no"/>
-        <result property="longitude" column="longitude"/>
-        <result property="latitude" column="latitude"/>
+        <result property="longitude" column="longitude_"/>
+        <result property="latitude" column="latitude_"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
@@ -22,7 +22,7 @@
         -->
         <![CDATA[
 		insert into bus_gps_data_info
-	    (id_,device_no,longitude,latitude,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,device_no,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag)
 		values
 		(
             #{id,jdbcType=VARCHAR}
@@ -47,10 +47,10 @@
                 device_no=#{deviceNo,jdbcType=VARCHAR},
             </if>
             <if test="longitude!=null">
-                longitude=#{longitude,jdbcType=VARCHAR},
+                longitude_=#{longitude,jdbcType=VARCHAR},
             </if>
             <if test="latitude!=null">
-                latitude=#{latitude,jdbcType=VARCHAR},
+                latitude_=#{latitude,jdbcType=VARCHAR},
             </if>
             <if test="createBy!=null">
                 create_by=#{createBy,jdbcType=VARCHAR},
@@ -71,7 +71,7 @@
         where id_=#{id}
     </update>
     <select id="get" parameterType="string" resultMap="GpsDataInfoMap">
-        select id_,device_no,longitude,latitude,create_by,create_time,update_by,update_time,del_flag
+        select id_,device_no,longitude_,latitude_,create_by,create_time,update_by,update_time,del_flag
         from bus_gps_data_info where id_=#{0}
     </select>
     <select id="exist" parameterType="string" resultType="int">

+ 9 - 0
common/src/main/resources/mapper/bus/ShiftInfo.xml

@@ -126,4 +126,13 @@
 		and status_ = #{status}
 		]]>
 	</select>
+
+	<select id="findByVehicleIdAndStatus" resultMap="ShiftInfoMap">
+		<![CDATA[
+		select * from bus_shift_info
+		where del_flag = 0
+		and vehicle_id = #{vehicleId}
+		and status_ = #{status}
+		]]>
+	</select>
 </mapper>

+ 11 - 2
common/src/main/resources/mapper/bus/StationInfo.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.bus.modules.bus.dao.StationInfoDAO">
@@ -86,7 +86,7 @@
 	where id_=#{id}
 	</update>
 	<select id="get" parameterType="string" resultMap="StationInfoMap">
-		select 
+		select
 id_,sort_no,route_id,name_,longitude_,latitude_,classify_,create_by,create_time,update_by,update_time,del_flag		from bus_station_info where id_=#{0}
 	</select>
 	<select id="exist" parameterType="string" resultType="int">
@@ -111,4 +111,13 @@ id_,sort_no,route_id,name_,longitude_,latitude_,classify_,create_by,create_time,
 	        ${sort.name} ${sort.order}
 	 	</foreach>
 	</select>
+
+	<select id="findByRouteIdAndClassify" resultMap="StationInfoMap">
+		<![CDATA[
+		select * from bus_station_info
+		where del_flag = 0
+		and route_id = #{routeId}
+		and classify_ = #{classify}
+		]]>
+	</select>
 </mapper>

+ 2 - 0
web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java

@@ -57,6 +57,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/mobile/passengerApi/validateCode")
 				.excludePathPatterns("/mobile/driverApi/carActivation")
 				.excludePathPatterns("/mobile/driverApi/findByPhone")
+				.excludePathPatterns("/mobile/passengerApi/getShiftInfo")
+				.excludePathPatterns("/mobile/passengerApi/upload")
 				;
 	}
 }

+ 212 - 9
web/src/main/java/com/jpsoft/bus/modules/driver/controller/DriverApiController.java

@@ -1,18 +1,18 @@
 package com.jpsoft.bus.modules.driver.controller;
 
-import com.jpsoft.bus.modules.bus.entity.DriverInfo;
-import com.jpsoft.bus.modules.bus.entity.ShiftInfo;
-import com.jpsoft.bus.modules.bus.entity.VehicleInfo;
-import com.jpsoft.bus.modules.bus.service.DriverInfoService;
-import com.jpsoft.bus.modules.bus.service.ShiftInfoService;
-import com.jpsoft.bus.modules.bus.service.VehicleInfoService;
+import cn.hutool.core.date.DateUtil;
+import com.jpsoft.bus.config.OSSConfig;
+import com.jpsoft.bus.modules.bus.entity.*;
+import com.jpsoft.bus.modules.bus.service.*;
 import com.jpsoft.bus.modules.common.dto.MessageResult;
 import com.jpsoft.bus.modules.common.utils.JwtUtil;
+import com.jpsoft.bus.modules.common.utils.OSSUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.bouncycastle.crypto.signers.ECDSASigner;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,10 +21,10 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author 墨鱼_mo
@@ -39,9 +39,21 @@ public class DriverApiController {
     @Value("${jwt.secret}")
     private String jwtSecret;
 
+    @Autowired
+    private OSSConfig ossConfig;
+
     @Autowired
     private ShiftInfoService shiftInfoService;
 
+    @Autowired
+    private StationInfoService stationInfoService;
+
+    @Autowired
+    private RouteInfoService routeInfoService;
+
+    @Autowired
+    private DriverRecordInfoService driverRecordInfoService;
+
     @Autowired
     private DriverInfoService driverInfoService;
 
@@ -72,6 +84,7 @@ public class DriverApiController {
 
             Map<String,Object> map = new HashMap<>();
             map.put("token",token);
+            map.put("vehicleInfo",vehicleInfo);
             messageResult.setResult(true);
             messageResult.setCode(200);
             messageResult.setData(map);
@@ -120,4 +133,194 @@ public class DriverApiController {
 
     }
 
+    @PostMapping("driverAttendance")
+    @ApiOperation(value = "司机考勤")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "driverId", value = "司机id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "recordTime", value = "考勤时间", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "photoFile", value = "员工照片", required = true, paramType = "form", dataType = "__file"),
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form")
+    })
+    public MessageResult<Map> driverAttendance(String driverId, MultipartFile photoFile, String recordTime, String token, @RequestAttribute String subject) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
+            DriverInfo driverInfo = driverInfoService.get(driverId);
+            if (driverInfo == null){
+                throw new Exception("当前司机不存在");
+            }
+            String retFileUrl = OSSUtil.upload(ossConfig, "/faceImage", driverInfo.getName(), photoFile.getInputStream());
+            DriverRecordInfo driverRecordInfo = new DriverRecordInfo();
+            driverRecordInfo.setId(UUID.randomUUID().toString());
+            driverRecordInfo.setDriverId(driverInfo.getId());
+            driverRecordInfo.setLicensePlateNumber(vehicleInfo.getLicensePlateNumber());
+            driverRecordInfo.setRecordTime(DateUtil.parse(recordTime,"yyyy-MM-dd HH:mm:ss"));
+            driverRecordInfo.setPlace(vehicleInfo.getLatestAddress());
+            driverRecordInfo.setLatitude(vehicleInfo.getLatitude());
+            driverRecordInfo.setLongitude(vehicleInfo.getLongitude());
+            driverRecordInfo.setImageUrl(retFileUrl);
+            driverRecordInfo.setCreateTime(new Date());
+            driverRecordInfoService.insert(driverRecordInfo);
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
+    @PostMapping("busRouteInfo")
+    @ApiOperation(value = "车辆线路信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form")
+    })
+    public MessageResult<Map> busRouteInfo(String token, @RequestAttribute String subject) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
+            if (StringUtils.isBlank(vehicleInfo.getRouteId())){
+                throw new Exception("当前车辆还未分配线路");
+            }
+            RouteInfo routeInfo = routeInfoService.get(vehicleInfo.getRouteId());
+            if (routeInfo == null){
+                throw new Exception("线路错误");
+            }
+            //始发站
+            List<StationInfo> startStationInfoList = stationInfoService.findByRouteIdAndClassify(routeInfo.getId(),1);
+            if (startStationInfoList.size() != 1){
+                throw new Exception("线路的始发站配置错误");
+            }
+            //终点站
+            List<StationInfo> endStationInfoList = stationInfoService.findByRouteIdAndClassify(routeInfo.getId(),3);
+            if (endStationInfoList.size() != 1){
+                throw new Exception("线路的终点站配置错误");
+            }
+
+
+            Map<String,Object> map = new HashMap<>();
+            map.put("startStationId",startStationInfoList.get(0).getId());
+            map.put("startStationName",startStationInfoList.get(0).getName());
+            map.put("endStationId",endStationInfoList.get(0).getId());
+            map.put("endStationName",endStationInfoList.get(0).getName());
+
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("createShift")
+    @ApiOperation(value = "开班")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form"),
+            @ApiImplicitParam(name = "driverId", value = "司机id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "startStationId", value = "始发站id", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "endStationId", value = "终点站id", required = true, paramType = "form")
+
+    })
+    public MessageResult<Map> createShift(String driverId,String startStationId,String endStationId ,String token, @RequestAttribute String subject) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
+            DriverInfo driverInfo = driverInfoService.get(driverId);
+            if (driverInfo == null){
+                throw new Exception("司机不存在");
+            }
+            //始发站
+            StationInfo start = stationInfoService.get(startStationId);
+            //终点站
+            StationInfo end = stationInfoService.get(endStationId);
+            if (start == null || end == null){
+                throw new Exception("站点错误");
+            }
+            if (!start.getRouteId().equals(vehicleInfo.getRouteId()) || !end.getRouteId().equals(vehicleInfo.getRouteId())){
+                throw new Exception("站点错误");
+            }
+            shiftInfoService.createShift(vehicleInfo,driverId,startStationId,endStationId);
+
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("busShiftInfo")
+    @ApiOperation(value = "车辆班次信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form"),
+            @ApiImplicitParam(name = "subject", value = "目标(不传)", paramType = "form")
+    })
+    public MessageResult<Map> busShiftInfo(String token, @RequestAttribute String subject) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            VehicleInfo vehicleInfo = vehicleInfoService.get(subject);
+            if (vehicleInfo == null){
+                throw new Exception("当前车辆不存在");
+            }
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(vehicleInfo.getId(),"1");
+            if (shiftInfoList.size() == 0){
+                throw new Exception("车辆没有相关班次信息");
+            }
+
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+            //始发站
+            StationInfo startStation = stationInfoService.get(shiftInfo.getStartStationId());
+            //终点站
+            StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+
+
+
+
+            Map<String,Object> map = new HashMap<>();
+            /*map.put("startStationId",startStationInfoList.get(0).getId());
+            map.put("startStationName",startStationInfoList.get(0).getName());
+            map.put("endStationId",endStationInfoList.get(0).getId());
+            map.put("endStationName",endStationInfoList.get(0).getName());*/
+
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
 }

+ 148 - 2
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -1,12 +1,15 @@
 package com.jpsoft.bus.modules.mobile.controller;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.symmetric.DES;
 import com.alibaba.fastjson.JSONObject;
-import com.jpsoft.bus.modules.bus.entity.UserInfo;
-import com.jpsoft.bus.modules.bus.service.UserInfoService;
+import com.jpsoft.bus.config.OSSConfig;
+import com.jpsoft.bus.modules.bus.entity.*;
+import com.jpsoft.bus.modules.bus.service.*;
 import com.jpsoft.bus.modules.common.dto.MessageResult;
 import com.jpsoft.bus.modules.common.utils.DES3;
 import com.jpsoft.bus.modules.common.utils.JwtUtil;
+import com.jpsoft.bus.modules.common.utils.OSSUtil;
 import com.jpsoft.bus.modules.common.utils.SMSUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -22,10 +25,12 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 import sun.security.krb5.internal.crypto.Des3;
 
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
@@ -42,12 +47,30 @@ public class PassengerApiController {
     @Value("${jwt.secret}")
     private String jwtSecret;
 
+    @Autowired
+    private OSSConfig ossConfig;
+
+    @Autowired
+    private BaiduService baiduService;
+
     @Autowired
     private RedisTemplate redisTemplate;
 
     @Autowired
     private UserInfoService userInfoService;
 
+    @Autowired
+    private ShiftInfoService shiftInfoService;
+
+    @Autowired
+    private VehicleInfoService vehicleInfoService;
+
+    @Autowired
+    private RouteInfoService routeInfoService;
+
+    @Autowired
+    private StationInfoService stationInfoService;
+
 
     @PostMapping
     @ApiOperation(value = "通过车牌号查询详情")
@@ -183,4 +206,127 @@ public class PassengerApiController {
 
         return messageResult;
     }
+
+
+    @PostMapping("getShiftInfo")
+    @ApiOperation(value = "扫码获取当前班次")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> getShiftInfo(String id) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+
+            List<ShiftInfo> shiftInfoList = shiftInfoService.findByVehicleIdAndStatus(id,"1");
+
+            if (shiftInfoList.size() == 0){
+                throw new Exception("当前车辆没有正运行的班次");
+            }
+
+            //班次信息
+            ShiftInfo shiftInfo = shiftInfoList.get(0);
+
+            //车辆信息
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+
+            //线路
+            RouteInfo routeInfo = routeInfoService.get(shiftInfo.getRouteId());
+
+            //开始站点
+            StationInfo startStation = stationInfoService.get(shiftInfo.getStartStationId());
+            //结束站点
+            StationInfo endStation = stationInfoService.get(shiftInfo.getEndStationId());
+
+
+            Map<String, Object> map = new HashMap<>();
+            map.put("startStation",startStation.getName());
+            map.put("endStation",endStation.getName());
+            map.put("startTime",routeInfo.getStartTime());
+            map.put("endTime",routeInfo.getEndTime());
+            map.put("routeName",routeInfo.getName());
+            map.put("mapPath",routeInfo.getMapPath());
+            map.put("longitude",vehicleInfo.getLongitude());
+            map.put("latitude",vehicleInfo.getLatitude());
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("upload")
+    @ApiOperation(value = "人员照片上传")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "photoName", value = "照片名称", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "photoFile", value = "员工照片", required = true, paramType = "form", dataType = "__file"),
+            @ApiImplicitParam(name = "token", value = "令牌", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "subject", value = "令牌", required = false, paramType = "query")
+    })
+    public MessageResult<String> upload(
+            String photoName, MultipartFile photoFile, String token, @RequestAttribute String subject) {
+        MessageResult<String> messageResult = new MessageResult<>();
+
+        try {
+
+
+            String retFileUrl = OSSUtil.upload(ossConfig, "/faceImage", photoName, photoFile.getInputStream());
+
+            messageResult.setResult(true);
+            messageResult.setData(retFileUrl);
+            messageResult.setCode(200);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            messageResult.setResult(false);
+            messageResult.setMessage(e.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
+    @PostMapping("matchFaceImage")
+    @ApiOperation(value = "匹配照片")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "faceImageUrl", value = "人脸照片", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "id", value = "车辆id", required = true, paramType = "form")
+    })
+    public MessageResult<Map> matchFaceImage(String faceImageUrl,String id) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            //车辆
+            VehicleInfo vehicleInfo = vehicleInfoService.get(id);
+            //人脸库id
+            String groupId = StrUtil.sub(vehicleInfo.getLicensePlateNumber(),1,-1);
+
+          //  baiduService.faceSearch();
+
+
+
+
+
+
+
+
+
+            Map<String, Object> map = new HashMap<>();
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+
 }

+ 7 - 1
web/src/main/resources/application.yml

@@ -163,9 +163,15 @@ oss:
   bucketName: rccs
 #  urlPrefix: http://rccs.oss-cn-hangzhou.aliyuncs.com
   urlPrefix: http://oss.xiaoxinda.com
-  objectPre: bus
+  objectPre: smart-bus
 
 
 gps:
   port: 8866
   key: "a71a4fa458ed085246ea75ebe096bbea"
+
+baidu:
+  key: RUxNy49Ysd5GirjID4Hn7uI5
+  secret: NRof4lmzgV3tVog47Xtd859Em413qHsw
+
+