diff --git a/hiver-admin/test-output/test-report.html b/hiver-admin/test-output/test-report.html
index 60d9cedf..7daf3683 100644
--- a/hiver-admin/test-output/test-report.html
+++ b/hiver-admin/test-output/test-report.html
@@ -35,7 +35,7 @@
Hiver
-¾ÅÔ 21, 2026 15:37:23
+¾ÅÔ 22, 2026 11:55:05
@@ -84,7 +84,7 @@
passTest
-
15:37:24 ÏÂÎç / 0.022 secs
+
11:55:05 ÉÏÎç / 0.025 secs
@@ -92,9 +92,9 @@
#test-id=1
passTest
-
09.21.2026 15:37:24
-
09.21.2026 15:37:24
-
0.022 secs
+
09.22.2026 11:55:05
+
09.22.2026 11:55:05
+
0.025 secs
@@ -104,7 +104,7 @@
| Pass |
- 15:37:24 |
+ 11:55:05 |
Test passed
|
@@ -128,13 +128,13 @@
Started
-
¾ÅÔ 21, 2026 15:37:23
+
¾ÅÔ 22, 2026 11:55:05
Ended
-
¾ÅÔ 21, 2026 15:37:24
+
¾ÅÔ 22, 2026 11:55:05
diff --git a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
index 40d5c47c..411844fd 100644
--- a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
+++ b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
@@ -60,6 +60,7 @@ public class WorkerServiceImpl implements WorkerService {
final Path
createTimeField = root.get("createTime");
//final Path signPersonField = root.get("signPerson");
final Path isOnLineField = root.get("isOnLine");
+ final Path canTransferOrderField = root.get("canTransferOrder");
final Path userIdField = root.get("userId");
@@ -96,6 +97,11 @@ public class WorkerServiceImpl implements WorkerService {
list.add(cb.equal(isOnLineField, worker.getIsOnLine()));
}
+ // 是否允许接中转单
+ if (worker.getCanTransferOrder() != null) {
+ list.add(cb.equal(canTransferOrderField, worker.getCanTransferOrder()));
+ }
+
// 是否接收指派单状态
if (worker.getGetPushOrder() != null) {
list.add(cb.equal(getPushOrderField, worker.getGetPushOrder()));
diff --git a/hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java b/hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java
index ba0e064f..0f346c81 100644
--- a/hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java
+++ b/hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java
@@ -67,6 +67,9 @@ public class WorkerQueryVO extends HiverBasePageQuery {
@ApiModelProperty("上下线状态:0:下线;1:上线")
private Integer isOnLine;
+ @ApiModelProperty(value = "是否可以接中转单:0否 1是")
+ private Integer canTransferOrder;
+
/**
* 联系方式
*/
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java
index 03b99767..fb9a3d10 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java
@@ -4,12 +4,15 @@ import cc.hiver.core.common.redis.RedisTemplateHelper;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.mall.dao.mapper.MallOrderGoodsMapper;
+import cc.hiver.mall.dao.mapper.ProductMapper;
import cc.hiver.mall.dao.mapper.ShopMapper;
import cc.hiver.mall.dao.mapper.ShopTakeawayMapper;
import cc.hiver.mall.entity.*;
import cc.hiver.mall.pojo.dto.ShopCacheDTO;
import cc.hiver.mall.service.mybatis.MallOrderGroupService;
import cc.hiver.mall.service.mybatis.MallOrderService;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -30,6 +33,9 @@ import java.util.stream.Collectors;
@RequestMapping("/hiver/mall/admin/orderGroup")
public class AdminMallOrderGroupController {
+ private static final String MOCK_REGION_ID = "2097949297042657280";
+ private static final String SHOP_CACHE_PREFIX = "SHOP_CACHE:";
+ private static final String SHOP_GROUP_ORDERS_PREFIX = "SHOP_GROUP_ORDERS:";
private static final int GROUP_STATUS_FACE_TO_FACE = 3;
@Autowired
@@ -50,6 +56,9 @@ public class AdminMallOrderGroupController {
@Autowired
private ShopTakeawayMapper shopTakeawayMapper;
+ @Autowired
+ private ProductMapper productMapper;
+
@Data
public static class OrderGroupQuery {
private String shopId;
@@ -98,7 +107,7 @@ public class AdminMallOrderGroupController {
return ResultUtil.error("regionId不能为空");
}
- List groups = listGroupsFromDb(query);
+ List groups = listGroups(query);
groups = filterGroups(groups, query);
Map shopMap = buildShopMap(groups, query.getRegionId());
@@ -111,8 +120,10 @@ public class AdminMallOrderGroupController {
int pageSize = Math.max(query.getPageSize(), 1);
int fromIndex = Math.min((pageNumber - 1) * pageSize, groups.size());
int toIndex = Math.min(fromIndex + pageSize, groups.size());
- List records = groups.subList(fromIndex, toIndex).stream()
- .map(group -> toListVo(group, shopMap.get(group.getShopId())))
+ List pageGroups = groups.subList(fromIndex, toIndex);
+ Map productMap = buildProductMap(pageGroups);
+ List records = pageGroups.stream()
+ .map(group -> toListVo(group, shopMap.get(group.getShopId()), productMap.get(group.getProductId())))
.collect(Collectors.toList());
Page result = new Page<>(pageNumber, pageSize, total);
@@ -120,6 +131,79 @@ public class AdminMallOrderGroupController {
return new ResultUtil>().setData(result);
}
+ private List listGroups(OrderGroupQuery query) {
+ if (MOCK_REGION_ID.equals(query.getRegionId())) {
+ return listGroupsFromCache(query);
+ }
+ return listGroupsFromDb(query);
+ }
+
+ private List listGroupsFromCache(OrderGroupQuery query) {
+ Set shopIds = getRegionShopIds(query);
+ if (shopIds.isEmpty()) {
+ return new ArrayList<>();
+ }
+
+ List groups = new ArrayList<>();
+ for (String shopId : shopIds) {
+ Map