Commit 06c8bb40 authored by lisong's avatar lisong

添加0点里程切分定时任务

parent bd0e3901
......@@ -246,4 +246,17 @@ public class WlCarMileageController {
@DateTimeFormat(pattern = "yyyy-MM") @RequestParam("date") Date date) {
return iWlCarMileageService.getCalender(id, date);
}
/**
* 里程切分
*/
@RequestMapping(value = "/mileageSegmentation", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "里程切分", notes = "里程切分")
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
public void mileageSegmentation() {
iWlCarMileageService.mileageSegmentation();
}
}
......@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.equipmanage.common.entity.WlCarMileage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 车量里程表 Mapper 接口
*
......@@ -13,8 +15,10 @@ import org.apache.ibatis.annotations.Param;
*/
public interface WlCarMileageMapper extends BaseMapper<WlCarMileage> {
Page<WlCarMileage> page(Page<WlCarMileage> page,@Param("wlCarMileage") WlCarMileage wlCarMileage);
Page<WlCarMileage> page(Page<WlCarMileage> page,@Param("wlCarMileage") WlCarMileage wlCarMileage, @Param("mileageParameter") Double mileageParameter);
Double totalMileage(String iotCode);
List<WlCarMileage> list();
}
......@@ -25,4 +25,11 @@ public interface IWlCarMileageService extends IService<WlCarMileage> {
Map<String,Boolean> getCalender(long id,Date date);
/**
* 里程切分(0点若里程未结束,自动切分设置结束信息,并开始新里程)
*/
void mileageSegmentation();
}
......@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeejoin.equipmanage.common.entity.Car;
import com.yeejoin.equipmanage.common.entity.WlCarMileage;
import com.yeejoin.equipmanage.common.utils.CoordinateUtil;
import com.yeejoin.equipmanage.common.utils.HttpUtil;
import com.yeejoin.equipmanage.controller.Coordinate;
import com.yeejoin.equipmanage.fegin.IotFeign;
......@@ -15,7 +16,11 @@ import com.yeejoin.equipmanage.mapper.WlCarMileageMapper;
import com.yeejoin.equipmanage.service.ICarService;
import com.yeejoin.equipmanage.service.IWlCarMileageService;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
......@@ -49,13 +54,20 @@ public class WlCarMileageServiceImpl extends ServiceImpl<WlCarMileageMapper, WlC
@Autowired
ICarService iCarService;
@Value("${mileage.parameter}")
private Double mileageParameter;
protected Log log = LogFactory.getLog(WlCarMileageServiceImpl.class);
private final String GUIDE_KEY = "813684495d9a3981dd2c7694916fe404";
private final String GUIDE_URL = "https://restapi.amap.com/v4/grasproad/driving?";
private final String GUIDE_ADDRESS_URL = "https://restapi.amap.com/v3/geocode/regeo?";
@Override
public Page<WlCarMileage> page(Page<WlCarMileage> page, WlCarMileage wlCarMileage) {
return this.baseMapper.page(page, wlCarMileage);
return this.baseMapper.page(page, wlCarMileage, mileageParameter);
}
@Override
......@@ -261,4 +273,132 @@ public class WlCarMileageServiceImpl extends ServiceImpl<WlCarMileageMapper, WlC
return data;
}
@Override
@Scheduled(cron = "${mileage.segmentation.cron}")
public void mileageSegmentation() {
List<WlCarMileage> list = this.baseMapper.list();
list.forEach(item -> {
Calendar calendar = Calendar.getInstance();
calendar.setTime(item.getDate());
calendar.add(Calendar.DATE, 1);
Date date = calendar.getTime();
if (!ObjectUtils.isEmpty(item.getIotCode()) && item.getIotCode().length() > 8) {
// 查询车辆上报信息
ResponseModel<List<Object>> result = iotFeign.getLiveData(item.getIotCode().substring(0, 8), item.getIotCode().substring(8),
item.getStartTime(), new Date(new Date().getTime() + 2000));
List<Object> list1 = result.getResult();
// 获取最后一个有坐标的数据
JSONObject lastObj = null;
// 过滤空坐标
List<Object> filterList = new ArrayList<Object>();
for (int i = 0; i < list1.size(); i++) {
JSONObject Obj = JSONObject.parseObject(JSONObject.toJSONString(list1.get(i)));
if (Obj.get("FireCar_Longitude") != null && Obj.get("FireCar_Latitude") != null
&& Obj.getDoubleValue("FireCar_Longitude") != 0
&& Obj.getDoubleValue("FireCar_Latitude") != 0) {
filterList.add(list1.get(i));
// 获取第一个不为空的坐标
if (lastObj == null) {
lastObj = Obj;
}
}
}
if (lastObj == null) {
lastObj = new JSONObject();
lastObj.put("FireCar_Longitude", 0.0);
lastObj.put("FireCar_Latitude", 0.0);
lastObj.put("time", 0);
lastObj.put("FireCar_Speed", 0);
}
// 当前坐标
double startLongitude = lastObj.getDoubleValue("FireCar_Longitude");
double startLatitude = lastObj.getDoubleValue("FireCar_Latitude");
// 当前速度
double v = Double.parseDouble(String.valueOf(lastObj.get("FireCar_Speed")));
int ceil = (int) Math.ceil(v);
item.setStartSpeed(ceil);
double travel = 0.0;
// 获取里程
for (int i = 0; i < filterList.size() - 1; i++) {
JSONObject start = JSONObject.parseObject(JSONObject.toJSONString(filterList.get(i)));
JSONObject end = JSONObject.parseObject(JSONObject.toJSONString(filterList.get(i + 1)));
travel += CoordinateUtil.distance(start.getDoubleValue("FireCar_Latitude"),
start.getDoubleValue("FireCar_Longitude"), end.getDoubleValue("FireCar_Latitude"),
end.getDoubleValue("FireCar_Longitude"));
}
// 查询车辆最新位置
String address = getAddress(startLongitude, startLatitude);
// 里程耗时
long takeTime = (date.getTime()) - (item.getStartTime().getTime());
// 修改0点未结束里程记录
item.setEndSpeed(ceil);
item.setEndTime(date);
item.setEndLatitude(startLatitude);
item.setEndLongitude(startLongitude);
item.setEndName(address);
item.setTravel(new BigDecimal(travel / 1000).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
item.setTakeTime(takeTime);
this.getBaseMapper().updateById(item);
// 从0点开启新里程
item.setStartName(address);
item.setDate(date);
item.setId(null);
item.setEndSpeed(null);
item.setEndTime(null);
item.setEndLatitude(null);
item.setEndLongitude(null);
item.setEndName(null);
item.setTravel(null);
item.setTakeTime(null);
item.setStartSpeed(ceil);
item.setStartTime(item.getDate());
item.setStartLongitude(startLongitude);
item.setStartLatitude(startLatitude);
this.baseMapper.insert(item);
}
});
}
private String getAddress(double longitude, double lantitude) {
StringBuilder api = new StringBuilder(GUIDE_ADDRESS_URL);
api.append("key=").append(GUIDE_KEY).append("&location=").append(longitude).append(",").append(lantitude)
.append("&radius=1000").append("&batch=false").append("&extensions=base").append("&roadlevel=0")
.append("&batch=false");
StringBuilder res = new StringBuilder();
BufferedReader in = null;
try {
System.out.println(api.toString());
URL url = new URL(api.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
res.append(line).append("\n");
}
JSONObject object = JSONObject.parseObject(res.toString());
JSONObject regeocode = object.getJSONObject("regeocode");
String address = regeocode.getString("formatted_address");
if ("[]".equals(address)) {
address = "无效坐标";
}
res = new StringBuilder(address);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return res.toString();
}
}
......@@ -129,4 +129,9 @@ system.type=zd
is.open.telemetering=false
# 水池液位相关信号
water.level.indexKey=FHS_FirePoolDevice_WaterLevel,FHS_LevelDetector_WaterLevel,FHS_WirelessliquidDetector_WaterLevel,CAFS_FoamTank_FoamTankLevel,CAFS_WaterTank_WaterTankLevel
\ No newline at end of file
water.level.indexKey=FHS_FirePoolDevice_WaterLevel,FHS_LevelDetector_WaterLevel,FHS_WirelessliquidDetector_WaterLevel,CAFS_FoamTank_FoamTankLevel,CAFS_WaterTank_WaterTankLevel
# 江西电建-车辆里程过滤参数(单位KM)
mileage.parameter=0.5
# 江西电建-车辆里程跨天记录切分(每日0点执行)
mileage.segmentation.cron=0 20 16 * * ?
\ No newline at end of file
......@@ -29,6 +29,7 @@
FROM wl_car_mileage
LEFT JOIN wl_car ON wl_car.iot_code = wl_car_mileage.iot_code
<where>
wl_car_mileage.travel >= #{mileageParameter}
<if test="wlCarMileage.carId != null">
AND wl_car.id = #{wlCarMileage.carId}
</if>
......@@ -43,4 +44,14 @@
</if>
</where>
</select>
<select id="list" resultType="com.yeejoin.equipmanage.common.entity.WlCarMileage">
SELECT
*
FROM
`wl_car_mileage` wcm
WHERE
wcm.date = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
AND wcm.start_time IS NOT NULL
AND wcm.end_time IS NULL
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment