|
|
@@ -16,6 +16,9 @@ import org.springblade.land.service.IOrderItemService;
|
|
|
import org.springblade.land.service.IOrderTrackService;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
@@ -41,43 +44,61 @@ public class JobHandler {
|
|
|
|
|
|
@XxlJob("locateJobHandler")
|
|
|
public ReturnT<String> locateJobHandler(String param) throws Exception {
|
|
|
+ // 创建线程池
|
|
|
+ ExecutorService pool = new ThreadPoolExecutor(5, 200, 0L,
|
|
|
+ TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024),
|
|
|
+ Executors.defaultThreadFactory(),
|
|
|
+ new ThreadPoolExecutor.AbortPolicy());
|
|
|
+
|
|
|
try {
|
|
|
JSONObject json = JSON.parseObject(param);
|
|
|
String tenantId = json.getString("tenantId");
|
|
|
String token = getToken(json);
|
|
|
|
|
|
List<OrderItem> itemList = orderItemService.list(new LambdaQueryWrapper<OrderItem>()
|
|
|
+ .select(OrderItem::getId, OrderItem::getPlateNo)
|
|
|
.in(OrderItem::getStatus, 2, 3, 5, 6)
|
|
|
.eq(OrderItem::getKind, 2)
|
|
|
.eq(OrderItem::getIsDeleted, 0)
|
|
|
.eq(OrderItem::getTenantId, tenantId)
|
|
|
);
|
|
|
|
|
|
- // 创建线程池
|
|
|
- ExecutorService newFixedThreadPool = new ThreadPoolExecutor(5, 200, 0L,
|
|
|
- TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024),
|
|
|
- Executors.defaultThreadFactory(),
|
|
|
- new ThreadPoolExecutor.AbortPolicy());
|
|
|
for (OrderItem item : itemList) {
|
|
|
- newFixedThreadPool.execute(() -> {
|
|
|
+ Future<String> result = pool.submit(() -> {
|
|
|
// 业务处理
|
|
|
try {
|
|
|
String data = getData(json, token, item.getPlateNo());
|
|
|
OrderTrack track = JSON.parseObject(data, OrderTrack.class);
|
|
|
if (!ObjectUtil.isEmpty(track)) {
|
|
|
+ // 计算并组装经纬度
|
|
|
+ BigDecimal divisor = new BigDecimal("600000");
|
|
|
+ BigDecimal longitude = new BigDecimal(track.getLon()).divide(divisor, 6, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal latitude = new BigDecimal(track.getLat()).divide(divisor, 6, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
track.setItemId(item.getId());
|
|
|
track.setPlateNo(item.getPlateNo());
|
|
|
+ track.setLongitude(longitude.doubleValue());
|
|
|
+ track.setLatitude(latitude.doubleValue());
|
|
|
+ track.setCreateTime(new Date());
|
|
|
orderTrackService.save(track);
|
|
|
}
|
|
|
+ return null;
|
|
|
} catch (Exception e) {
|
|
|
XxlJobLogger.log(e);
|
|
|
+ return e.getMessage();
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ if (!StringUtil.isEmpty(result.get())) {
|
|
|
+ return new ReturnT<>(ReturnT.FAIL_CODE, result.get());
|
|
|
+ }
|
|
|
}
|
|
|
- return ReturnT.SUCCESS;
|
|
|
+ return new ReturnT<>("获取数据成功");
|
|
|
} catch (Exception e) {
|
|
|
XxlJobLogger.log(e);
|
|
|
- return ReturnT.FAIL;
|
|
|
+ return new ReturnT<>(ReturnT.FAIL_CODE, e.getMessage());
|
|
|
+ } finally {
|
|
|
+ pool.shutdown();
|
|
|
}
|
|
|
}
|
|
|
|