From fcf0c2bbfae0a82d516dfa8b71f97e6ea817e0b4 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 03 二月 2026 09:16:29 +0800
Subject: [PATCH] 任务管理查询明细修正
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java | 33 ++++++++
rsf-admin/src/page/task/TaskList.jsx | 6
rsf-admin/src/page/components/PageDrawer.jsx | 30 ++++++-
rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java | 131 ++++++++++++++++++++++++++++++++
4 files changed, 189 insertions(+), 11 deletions(-)
diff --git a/rsf-admin/src/page/components/PageDrawer.jsx b/rsf-admin/src/page/components/PageDrawer.jsx
index 521ee7e..a92a9f5 100644
--- a/rsf-admin/src/page/components/PageDrawer.jsx
+++ b/rsf-admin/src/page/components/PageDrawer.jsx
@@ -23,26 +23,46 @@
}
}
+ const isOpen = !!drawerVal;
+
return (
<Drawer
variant="persistent"
- open={!!drawerVal}
+ open={isOpen}
anchor="right"
onClose={handleClose}
sx={{
zIndex: 100,
'& .MuiDrawer-paper': {
- top: '86px', // AppBar(50px) + TabsBar(36px)
+ top: '86px', // AppBar(50px) + TabsBar(36px)
+ // 褰撳叧闂椂锛岀‘淇濆唴瀹逛笉鍙仛鐒�
+ ...(isOpen ? {} : {
+ pointerEvents: 'none',
+ visibility: 'hidden',
+ })
}
}}
+ // 瀵逛簬 persistent Drawer锛屼娇鐢� PaperProps 鏉ユ帶鍒跺彲璁块棶鎬�
+ PaperProps={{
+ 'aria-hidden': !isOpen,
+ tabIndex: isOpen ? 0 : -1,
+ }}
>
- {!!drawerVal && (
- <Box pt={2} width={{ xs: '100vW', sm: width }} mt={{ xs: 2, sm: 1 }}>
+ {isOpen && (
+ <Box
+ pt={2}
+ width={{ xs: '100vW', sm: width }}
+ mt={{ xs: 2, sm: 1 }}
+ >
<Stack direction="row" p={2}>
<Typography variant="h6" flex="1">
{title}
</Typography>
- <IconButton onClick={handleClose} size="small">
+ <IconButton
+ onClick={handleClose}
+ size="small"
+ aria-label="鍏抽棴"
+ >
<CloseIcon />
</IconButton>
</Stack>
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 55d5af7..5fdfbb1 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -156,7 +156,7 @@
rowClick={false}
expand={<TaskPanel />}
expandSingle={true}
- omit={['id', 'createTime', 'createBy$', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status','warehType$']}
+ omit={['id', 'createTime', 'createBy$', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status','warehType$', 'orderType', 'order_type', 'orderType$']}
>
<NumberField source="id" />
<TextField source="taskCode" label="table.field.task.taskCode" />
@@ -164,9 +164,9 @@
<NumberField source="taskType$" label="table.field.task.taskType" />
<NumberField source="warehType$" label="table.field.task.warehType" />
<TextField source="orgLoc" label="table.field.task.orgLoc" />
- <TextField source="orgSite" label="table.field.task.orgSite" />
+ <TextField source="orgSite$" label="table.field.task.orgSite" />
<TextField source="targLoc" label="table.field.task.targLoc" />
- <TextField source="targSite" label="table.field.task.targSite" />
+ <TextField source="targSite$" label="table.field.task.targSite" />
<TextField source="barcode" label="table.field.task.barcode" />
<TextField source="robotCode" label="table.field.task.robotCode" />
<NumberField source="exceStatus" label="table.field.task.exceStatus" />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
index 01bb3f2..4c952c0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
@@ -8,7 +8,11 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.DateUtils;
import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@@ -17,6 +21,7 @@
/**
* Created by vincent on 2/13/2024
*/
+@Slf4j
public class PageParam<T, U extends BaseParam> extends Page<T> {
private static final long serialVersionUID = 1L;
@@ -31,6 +36,11 @@
private final boolean isToUnderlineCase;
private final Class<T> cls;
+
+ /**
+ * 棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ */
+ private List<Class<?>> additionalFieldClasses;
public PageParam() {
this(null);
@@ -129,7 +139,13 @@
if (!Cools.isEmpty(where.getOrderBy())) {
if (sortIsSQL(where.getOrderBy())) {
- setOrders(parseOrderSQL(where.getOrderBy()));
+ List<OrderItem> orders = parseOrderSQL(where.getOrderBy());
+ // 濡傛灉鎵�鏈夋帓搴忓瓧娈甸兘鏃犳晥锛屼娇鐢ㄩ粯璁ゆ帓搴�
+ if (orders.isEmpty()) {
+ queryWrapper.orderByDesc("create_time");
+ } else {
+ setOrders(orders);
+ }
}
} else {
// queryWrapper.orderByDesc("create_time");
@@ -221,7 +237,13 @@
if (!Cools.isEmpty(where.getOrderBy())) {
if (sortIsSQL(where.getOrderBy())) {
- setOrders(parseOrderSQL(where.getOrderBy()));
+ List<OrderItem> orders = parseOrderSQL(where.getOrderBy());
+ // 濡傛灉鎵�鏈夋帓搴忓瓧娈甸兘鏃犳晥锛屼娇鐢ㄩ粯璁ゆ帓搴�
+ if (orders.isEmpty()) {
+ queryWrapper.orderByDesc("create_time");
+ } else {
+ setOrders(orders);
+ }
}
} else {
// queryWrapper.orderByDesc("create_time");
@@ -282,10 +304,21 @@
private List<OrderItem> parseOrderSQL(String orderSQL) {
List<OrderItem> orders = new ArrayList<>();
if (!Cools.isEmpty(orderSQL)) {
+ // 鑾峰彇瀹炰綋绫荤殑鏈夋晥瀛楁鍒楄〃
+ Set<String> validColumns = getValidColumns();
+
for (String item : orderSQL.split(",")) {
String[] temp = item.trim().split(" ");
if (!temp[0].isEmpty()) {
String column = this.isToUnderlineCase ? Utils.toSymbolCase(temp[0], '_') : temp[0];
+ // 楠岃瘉瀛楁鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪鍒欒烦杩�
+ if (validColumns != null && !validColumns.isEmpty() && !validColumns.contains(column)) {
+ // 鑾峰彇褰撳墠璇锋眰淇℃伅
+ String requestInfo = getRequestInfo();
+// log.warn("璺宠繃鏃犳晥鐨勬帓搴忓瓧娈�: '{}' (鍘熷鍊�: '{}')锛屽疄浣撶被: {}锛岃姹傚湴鍧�: {}",
+// column, temp[0], cls != null ? cls.getSimpleName() : "null", requestInfo);
+ continue;
+ }
boolean asc = temp.length == 1 || !temp[temp.length - 1].toLowerCase().equals(ORDER_DESC_VALUE);
orders.add(new OrderItem(column, asc));
}
@@ -294,6 +327,100 @@
return orders;
}
+ /**
+ * 鑾峰彇褰撳墠璇锋眰淇℃伅锛堣矾寰勫拰鏂规硶锛�
+ * @return 璇锋眰淇℃伅瀛楃涓诧紝鏍煎紡锛欻TTP鏂规硶 璇锋眰璺緞
+ */
+ private String getRequestInfo() {
+ try {
+ ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ if (attributes != null) {
+ HttpServletRequest request = attributes.getRequest();
+ if (request != null) {
+ String method = request.getMethod();
+ String uri = request.getRequestURI();
+ return String.format("%s %s", method, uri);
+ }
+ }
+ } catch (Exception e) {
+ // 蹇界暐寮傚父锛岄伩鍏嶅奖鍝嶄富娴佺▼
+ log.debug("鑾峰彇璇锋眰淇℃伅澶辫触: {}", e.getMessage());
+ }
+ return "鏈煡";
+ }
+
+ /**
+ * 鑾峰彇瀹炰綋绫荤殑鏈夋晥瀛楁鍒楄〃锛堢敤浜庨獙璇佹帓搴忓瓧娈碉級
+ * 鍖呮嫭锛氬疄浣撶被瀛楁銆佷互鍙婇澶栨寚瀹氱殑DTO/VO绫诲瓧娈�
+ * 娉ㄦ剰锛欱aseParam 鐨勫瓧娈垫槸鏌ヨ鍙傛暟锛屼笉鐢ㄤ簬鏁版嵁搴撳瓧娈甸獙璇�
+ */
+ private Set<String> getValidColumns() {
+ Set<String> columns = new HashSet<>();
+
+ // 1. 鑾峰彇瀹炰綋绫伙紙cls锛夌殑瀛楁
+ if (cls != null) {
+ addFieldsFromClass(cls, columns);
+ }
+
+ // 2. 鑾峰彇棰濆鎸囧畾鐨勭被锛圖TO/VO绛夛級鐨勫瓧娈�
+ if (additionalFieldClasses != null && !additionalFieldClasses.isEmpty()) {
+ for (Class<?> clazz : additionalFieldClasses) {
+ addFieldsFromClass(clazz, columns);
+ }
+ }
+
+ return columns.isEmpty() ? null : columns;
+ }
+
+ /**
+ * 浠庢寚瀹氱被涓彁鍙栧瓧娈靛苟娣诲姞鍒伴泦鍚堜腑
+ * @param clazz 瑕佹彁鍙栧瓧娈电殑绫�
+ * @param columns 瀛楁闆嗗悎
+ */
+ private void addFieldsFromClass(Class<?> clazz, Set<String> columns) {
+ for (Field field : Cools.getAllFields(clazz)) {
+ // 璺宠繃 final銆乻tatic銆乼ransient 瀛楁
+ if (Modifier.isFinal(field.getModifiers())
+ || Modifier.isStatic(field.getModifiers())
+ || Modifier.isTransient(field.getModifiers())) {
+ continue;
+ }
+
+ // 璺宠繃鏍囪涓� exist=false 鐨勫瓧娈碉紙杩欎簺瀛楁涓嶅瓨鍦ㄤ簬鏁版嵁搴撲腑锛�
+ if (field.isAnnotationPresent(TableField.class)) {
+ TableField annotation = field.getAnnotation(TableField.class);
+ if (!annotation.exist()) {
+ continue;
+ }
+ }
+
+ String column = Utils.toSymbolCase(field.getName(), '_');
+ columns.add(column);
+ }
+ }
+
+ /**
+ * 璁剧疆棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ * @param classes 棰濆鐨勭被鍒楄〃
+ * @return 褰撳墠瀹炰緥锛屾敮鎸侀摼寮忚皟鐢�
+ */
+ public PageParam<T, U> setAdditionalFieldClasses(Class<?>... classes) {
+ if (classes != null && classes.length > 0) {
+ this.additionalFieldClasses = Arrays.asList(classes);
+ }
+ return this;
+ }
+
+ /**
+ * 璁剧疆棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ * @param classes 棰濆鐨勭被鍒楄〃
+ * @return 褰撳墠瀹炰緥锛屾敮鎸侀摼寮忚皟鐢�
+ */
+ public PageParam<T, U> setAdditionalFieldClasses(List<Class<?>> classes) {
+ this.additionalFieldClasses = classes;
+ return this;
+ }
+
public Map<String, Object> checkoutMap() {
Map<String, Object> map = where.getMap();
if (!Cools.isEmpty(where.getOrderBy())) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
index eb42464..c5c7be2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -34,7 +34,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.stream.Collectors;
-
+import com.vincent.rsf.server.manager.service.BasStationService;
@Data
@Accessors(chain = true)
@TableName("man_task")
@@ -390,5 +390,36 @@
return null;
}
}
+ /**
+ * 鑾峰彇婧愮珯鐐瑰悕绉帮紙绔欑偣缂栧彿 + 绔欑偣鍚嶇О锛�
+ */
+ public String getOrgSite$(){
+ if (Cools.isEmpty(this.orgSite)) {
+ return this.orgSite;
+ }
+ BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, this.orgSite));
+ if (!Cools.isEmpty(station) && !Cools.isEmpty(station.getStationId())) {
+ return this.orgSite + "(" + station.getStationId() + ")";
+ }
+ return this.orgSite;
+ }
+
+ /**
+ * 鑾峰彇鐩爣绔欑偣鍚嶇О锛堢珯鐐圭紪鍙� + 绔欑偣鍚嶇О锛�
+ */
+ public String getTargSite$(){
+ if (Cools.isEmpty(this.targSite)) {
+ return this.targSite;
+ }
+ BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, this.targSite));
+ if (!Cools.isEmpty(station) && !Cools.isEmpty(station.getStationId())) {
+ return this.targSite + "(" + station.getStationId() + ")";
+ }
+ return this.targSite;
+ }
}
--
Gitblit v1.9.1