|
@@ -361,50 +361,7 @@ public class PosOrderQsOprateController extends BaseController {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- LambdaQueryWrapper<PosOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- wrapper.eq(PosOrder::getIsDisplay,true);
|
|
|
|
|
- switch (tab) {
|
|
|
|
|
- case "newTask":
|
|
|
|
|
- wrapper.eq(PosOrder::getType, 0L).eq(PosOrder::getDeliveryStatus, 0L)
|
|
|
|
|
- .eq(PosOrder::getState, 0L).eq(PosOrder::getPayStatus, 1L)
|
|
|
|
|
- .eq(PosOrder::getAfterSaleStatus, 0L).isNull(PosOrder::getQsId)
|
|
|
|
|
- .eq(PosOrder::getSelfDelivery, 0);
|
|
|
|
|
- if (longitude != null && latitude != null) {
|
|
|
|
|
- // 距离上限(公里)从字典取,未配置则不过滤
|
|
|
|
|
- Integer limitKm = getNewTaskDistanceLimit();
|
|
|
|
|
- if (limitKm != null) {
|
|
|
|
|
- long limitMeters = limitKm.longValue() * 1000L;
|
|
|
|
|
- wrapper.apply("ST_Distance_Sphere(point(longitude, latitude), point({0}, {1})) <= {2}",
|
|
|
|
|
- longitude, latitude, limitMeters);
|
|
|
|
|
- }
|
|
|
|
|
- wrapper.last("ORDER BY ST_Distance_Sphere(point(longitude, latitude), point(" + longitude + ", " + latitude + ")) ASC");
|
|
|
|
|
- } else {
|
|
|
|
|
- wrapper.orderByDesc(PosOrder::getCretim);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case "toPickup":
|
|
|
|
|
- wrapper.eq(PosOrder::getDeliveryStatus, 1L).eq(PosOrder::getQsId, riderId)
|
|
|
|
|
- .in(PosOrder::getState, 0L, 1L, 2L)
|
|
|
|
|
- .eq(PosOrder::getAfterSaleStatus, 0L).orderByAsc(PosOrder::getCretim);
|
|
|
|
|
- break;
|
|
|
|
|
- case "delivering":
|
|
|
|
|
- wrapper.eq(PosOrder::getDeliveryStatus, 2L).eq(PosOrder::getQsId, riderId)
|
|
|
|
|
- .eq(PosOrder::getState, 2L).eq(PosOrder::getAfterSaleStatus, 0L)
|
|
|
|
|
- .orderByAsc(PosOrder::getCretim);
|
|
|
|
|
- break;
|
|
|
|
|
- //已送达
|
|
|
|
|
- case "completed":
|
|
|
|
|
- wrapper.eq(PosOrder::getDeliveryStatus, 3L).eq(PosOrder::getAfterSaleStatus, 0L).eq(PosOrder::getQsId, riderId).orderByDesc(PosOrder::getCretim);
|
|
|
|
|
- break;
|
|
|
|
|
- case "cancelled":
|
|
|
|
|
- wrapper.eq(PosOrder::getState, 4L).eq(PosOrder::getQsId, riderId).eq(PosOrder::getAfterSaleStatus, 0L).orderByDesc(PosOrder::getCretim);
|
|
|
|
|
- break;
|
|
|
|
|
- case "refund":
|
|
|
|
|
- wrapper.gt(PosOrder::getAfterSaleStatus, 0L).eq(PosOrder::getQsId, riderId).orderByDesc(PosOrder::getCretim);
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ LambdaQueryWrapper<PosOrder> wrapper = orderTabWrapper(tab, riderId, longitude, latitude, true);
|
|
|
|
|
|
|
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PosOrder> pageParam = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size);
|
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PosOrder> pageParam = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size);
|
|
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PosOrder> result = posOrderService.page(pageParam, wrapper);
|
|
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PosOrder> result = posOrderService.page(pageParam, wrapper);
|
|
@@ -448,6 +405,105 @@ public class PosOrderQsOprateController extends BaseController {
|
|
|
return success(org);
|
|
return success(org);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 骑手端订单角标数量:一次返回美食订单 newTask/toPickup/delivering 三个页签的订单数,
|
|
|
|
|
+ * App 无需逐页签切换请求。newTask 过滤条件(含可选距离上限)与 orderList 完全一致;
|
|
|
|
|
+ * 骑手未开通美食配送时 newTask 计 0(列表接口保持原有报错行为)。
|
|
|
|
|
+ */
|
|
|
|
|
+ @Anonymous
|
|
|
|
|
+ @Auth
|
|
|
|
|
+ @GetMapping("/orderCount")
|
|
|
|
|
+ public AjaxResult orderCount(@RequestHeader String token,
|
|
|
|
|
+ @RequestParam(required = false) BigDecimal longitude,
|
|
|
|
|
+ @RequestParam(required = false) BigDecimal latitude) {
|
|
|
|
|
+ JwtUtil jwtUtil = new JwtUtil();
|
|
|
|
|
+ String qsId = jwtUtil.getusid(token);
|
|
|
|
|
+ Long riderId = Long.valueOf(qsId);
|
|
|
|
|
+ InfoUser rider = requireRider(qsId);
|
|
|
|
|
+
|
|
|
|
|
+ long newTaskCount = 0L;
|
|
|
|
|
+ if (rider.supportsDeliveryType("FOOD")) {
|
|
|
|
|
+ newTaskCount = posOrderService.count(orderTabWrapper("newTask", riderId, longitude, latitude, false));
|
|
|
|
|
+ }
|
|
|
|
|
+ long toPickupCount = posOrderService.count(orderTabWrapper("toPickup", riderId, null, null, false));
|
|
|
|
|
+ long deliveringCount = posOrderService.count(orderTabWrapper("delivering", riderId, null, null, false));
|
|
|
|
|
+
|
|
|
|
|
+ JSONObject org = new JSONObject();
|
|
|
|
|
+ org.put("newTask", newTaskCount);
|
|
|
|
|
+ org.put("toPickup", toPickupCount);
|
|
|
|
|
+ org.put("delivering", deliveringCount);
|
|
|
|
|
+ return success(org);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 按页签构建骑手订单查询条件;orderList 分页与 orderCount 计数共用,保证角标数量与列表口径一致。
|
|
|
|
|
+ * withOrder 为 false 时跳过排序子句,仅用于计数。
|
|
|
|
|
+ */
|
|
|
|
|
+ private LambdaQueryWrapper<PosOrder> orderTabWrapper(String tab, Long riderId, BigDecimal longitude,
|
|
|
|
|
+ BigDecimal latitude, boolean withOrder) {
|
|
|
|
|
+ LambdaQueryWrapper<PosOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.eq(PosOrder::getIsDisplay,true);
|
|
|
|
|
+ switch (tab) {
|
|
|
|
|
+ case "newTask":
|
|
|
|
|
+ wrapper.eq(PosOrder::getType, 0L).eq(PosOrder::getDeliveryStatus, 0L)
|
|
|
|
|
+ .eq(PosOrder::getState, 0L).eq(PosOrder::getPayStatus, 1L)
|
|
|
|
|
+ .eq(PosOrder::getAfterSaleStatus, 0L).isNull(PosOrder::getQsId)
|
|
|
|
|
+ .eq(PosOrder::getSelfDelivery, 0);
|
|
|
|
|
+ if (longitude != null && latitude != null) {
|
|
|
|
|
+ // 距离上限(公里)从字典取,未配置则不过滤
|
|
|
|
|
+ Integer limitKm = getNewTaskDistanceLimit();
|
|
|
|
|
+ if (limitKm != null) {
|
|
|
|
|
+ long limitMeters = limitKm.longValue() * 1000L;
|
|
|
|
|
+ wrapper.apply("ST_Distance_Sphere(point(longitude, latitude), point({0}, {1})) <= {2}",
|
|
|
|
|
+ longitude, latitude, limitMeters);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.last("ORDER BY ST_Distance_Sphere(point(longitude, latitude), point(" + longitude + ", " + latitude + ")) ASC");
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (withOrder) {
|
|
|
|
|
+ wrapper.orderByDesc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "toPickup":
|
|
|
|
|
+ wrapper.eq(PosOrder::getDeliveryStatus, 1L).eq(PosOrder::getQsId, riderId)
|
|
|
|
|
+ .in(PosOrder::getState, 0L, 1L, 2L)
|
|
|
|
|
+ .eq(PosOrder::getAfterSaleStatus, 0L);
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.orderByAsc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "delivering":
|
|
|
|
|
+ wrapper.eq(PosOrder::getDeliveryStatus, 2L).eq(PosOrder::getQsId, riderId)
|
|
|
|
|
+ .eq(PosOrder::getState, 2L).eq(PosOrder::getAfterSaleStatus, 0L);
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.orderByAsc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ //已送达
|
|
|
|
|
+ case "completed":
|
|
|
|
|
+ wrapper.eq(PosOrder::getDeliveryStatus, 3L).eq(PosOrder::getAfterSaleStatus, 0L).eq(PosOrder::getQsId, riderId);
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.orderByDesc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "cancelled":
|
|
|
|
|
+ wrapper.eq(PosOrder::getState, 4L).eq(PosOrder::getQsId, riderId).eq(PosOrder::getAfterSaleStatus, 0L);
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.orderByDesc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "refund":
|
|
|
|
|
+ wrapper.gt(PosOrder::getAfterSaleStatus, 0L).eq(PosOrder::getQsId, riderId);
|
|
|
|
|
+ if (withOrder) {
|
|
|
|
|
+ wrapper.orderByDesc(PosOrder::getCretim);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return wrapper;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 返回订单详情,带上store、user信息(返回格式与 orderList 列表项一致,仅返回单条)
|
|
* 返回订单详情,带上store、user信息(返回格式与 orderList 列表项一致,仅返回单条)
|
|
|
* @param token
|
|
* @param token
|