|
@@ -32,9 +32,9 @@ import org.springframework.context.annotation.Configuration;
|
|
|
import java.util.function.BiFunction;
|
|
|
|
|
|
/**
|
|
|
- * system 模块的数据权限 Configuration
|
|
|
+ * pms 模块的数据权限 Configuration
|
|
|
*
|
|
|
- * @author 芋道源码
|
|
|
+ * @author ruiqi
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Configuration(proxyBeanMethods = false)
|
|
@@ -76,7 +76,7 @@ public class PmsDataPermissionConfiguration {
|
|
|
rule.addUserColumn(AdminUserDO.class, "id");
|
|
|
rule.addUserColumn(SupplierDO.class, "creator");
|
|
|
|
|
|
- // 为工单主表添加设备责任人条件
|
|
|
+ // 保养工单主表添加设备责任人条件
|
|
|
rule.addDeviceOwnerCondition("rq_iot_main_work_order",
|
|
|
DeviceOwnerConditionBuilder.createConditionGenerator(
|
|
|
new DeviceOwnerConditionBuilder.DeviceOwnerConfig()
|
|
@@ -90,6 +90,29 @@ public class PmsDataPermissionConfiguration {
|
|
|
.devicePersonPersonIdColumn("person_id")
|
|
|
)
|
|
|
);
|
|
|
+
|
|
|
+ // 巡检工单主表添加设备责任人条件
|
|
|
+ rule.addDeviceOwnerCondition("rq_iot_inspect_order",
|
|
|
+ DeviceOwnerConditionBuilder.createConditionGenerator(
|
|
|
+ new DeviceOwnerConditionBuilder.DeviceOwnerConfig()
|
|
|
+ .mainTable("rq_iot_inspect_order")
|
|
|
+ .mainTableIdColumn("id")
|
|
|
+ .bomTable("rq_iot_inspect_order_detail")
|
|
|
+ .bomTableMainIdColumn("order_id")
|
|
|
+ .bomTableDeviceIdColumn("device_id")
|
|
|
+ .devicePersonTable("rq_iot_device_person")
|
|
|
+ .devicePersonIdColumn("device_id")
|
|
|
+ .devicePersonPersonIdColumn("person_id")
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ // 添加设备表直接责任人条件
|
|
|
+ rule.addDeviceOwnerDirectCondition("rq_iot_device",
|
|
|
+ DeviceOwnerDirectBuilder.createConditionGenerator(
|
|
|
+ "rq_iot_device", "id",
|
|
|
+ "rq_iot_device_person", "person_id", "device_id"
|
|
|
+ )
|
|
|
+ );
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -192,4 +215,44 @@ public class PmsDataPermissionConfiguration {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 设备表直接责任人条件构建器
|
|
|
+ public static class DeviceOwnerDirectBuilder {
|
|
|
+ /**
|
|
|
+ * 创建设备表直接责任人条件生成器
|
|
|
+ *
|
|
|
+ * @param deviceTable 设备表名
|
|
|
+ * @param deviceIdColumn 设备ID字段名
|
|
|
+ * @param personTable 责任人表名
|
|
|
+ * @param personIdColumn 责任人ID字段名
|
|
|
+ * @param deviceIdJoinColumn 设备责任人表 设备ID字段名
|
|
|
+ * @return 条件生成函数
|
|
|
+ */
|
|
|
+ public static BiFunction<Alias, Long, Expression> createConditionGenerator(
|
|
|
+ String deviceTable, String deviceIdColumn,
|
|
|
+ String personTable, String personIdColumn, String deviceIdJoinColumn) {
|
|
|
+ return (tableAlias, userId) -> {
|
|
|
+ try {
|
|
|
+ // 处理表别名
|
|
|
+ String tablePrefix = tableAlias != null ? tableAlias.getName() : deviceTable;
|
|
|
+
|
|
|
+ // 构建列名表达式
|
|
|
+ String columnExpression = tablePrefix + "." + deviceIdColumn;
|
|
|
+
|
|
|
+ // 构建SQL条件表达式
|
|
|
+ String expressionSQL = String.format(
|
|
|
+ "%s IN (SELECT %s FROM %s WHERE %s = %d)",
|
|
|
+ columnExpression,
|
|
|
+ deviceIdJoinColumn, personTable, personIdColumn, userId
|
|
|
+ );
|
|
|
+
|
|
|
+ // 解析为JSqlParser表达式
|
|
|
+ return CCJSqlParserUtil.parseCondExpression(expressionSQL);
|
|
|
+ } catch (JSQLParserException e) {
|
|
|
+ log.error("构建设备表直接责任人条件失败", e);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|