refactor(biz):优化阿里工单查询逻辑并完善测试用例

- 简化 JSON_QUERY 函数调用参数,去除冗余的数组包装操作
-优化 SQL 查询语句中的时间范围过滤条件,提高执行效率- 在 AlibabaWorkOrderMapper 接口中添加 @Mapper 注解以支持 MyBatis 扫描
- 更新单元测试配置文件,适配达梦数据库驱动及连接信息
- 新增工单实体保存测试方法,验证数据插入功能完整性- 移除无效的 Spring Import 注解,精简测试类依赖注入方式
This commit is contained in:
2025-11-14 15:51:11 +08:00
parent d8f0f3e5c0
commit 6ba69a8571
4 changed files with 119 additions and 39 deletions

View File

@@ -1,23 +1,53 @@
package com.jeelowcode.test.alibaba;
import cn.hutool.core.util.IdUtil;
import cn.hutool.db.sql.SqlUtil;
import com.jeelowcode.module.biz.entity.AlibabaWorkOrder;
import com.jeelowcode.module.biz.job.AlibabaWorkOrderJob;
import com.jeelowcode.module.biz.service.impl.AlibabaWorkOrderServiceImpl;
import com.jeelowcode.module.biz.mapper.AlibabaWorkOrderMapper;
import com.jeelowcode.tool.framework.test.core.ut.BaseDbAndRedisUnitTest;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import java.time.LocalDateTime;
@Import({AlibabaWorkOrderServiceImpl.class})
public class WorkOrderSimpleTest extends BaseDbAndRedisUnitTest {
@Resource
private AlibabaWorkOrderServiceImpl workOrderService;
private AlibabaWorkOrderMapper baseMapper;
@Test
public void testBuildSql() {
System.out.println(SqlUtil.formatSql(AlibabaWorkOrderJob.buildSql(null, null)));
}
@Test
public void testSaveWorkOrder() {
AlibabaWorkOrder workOrder = new AlibabaWorkOrder()
.setId(IdUtil.getSnowflakeNextId())
.setWorkOrderId(IdUtil.simpleUUID())
.setCampusId(IdUtil.simpleUUID())
.setCampusName("中国星网雄安总部")
.setWorkOrderLevel("一级工单")
.setCheckArea("网络")
.setCheckItem("网络设备")
.setCheckContent("网络设备异常")
.setCheckPersonId(IdUtil.simpleUUID())
.setCheckPersonName("张三")
.setCheckTime(LocalDateTime.now())
.setCheckQuestion("网络设备异常")
.setCorrectDeadline(LocalDateTime.now())
.setCorrectPersonId(IdUtil.simpleUUID())
.setCorrectPersonName("张三")
.setCorrectAction("网络设备异常")
.setConfirmPersonId(IdUtil.simpleUUID())
.setConfirmPersonName("张三")
.setGmtModified(LocalDateTime.now())
.setGmtSubModified(LocalDateTime.now())
.setGmtRelateModified(LocalDateTime.now())
.setGmtRelateSubModified(LocalDateTime.now());
baseMapper.insert(workOrder);
}
}

View File

@@ -9,22 +9,25 @@ spring:
primary: master
datasource:
master:
# MYSQL数据库 主库,业务库
# 达梦数据库 主库,业务库
name: jeelowcode_pre_master
url: jdbc:dm://127.0.0.1:5236?schema=LOWCODE_MASTER&compatibleMode=oracle&socketTimeout=60000&connectTimeout=30000
username: SYSDBA
password: 83kTnuLWPczi
driver-class-name: dm.jdbc.driver.DmDriver
jeelowcode: # 从库,框架库
name: jeelowcode_pre_frame
url: jdbc:dm://127.0.0.1:5236?schema=LOWCODE_FRAME&compatibleMode=oracle&socketTimeout=60000&connectTimeout=30000
username: SYSDBA
password: 83kTnuLWPczi
driver-class-name: dm.jdbc.driver.DmDriver
slave: # 日志库单独
name: dev_jeelowcode_log
lazy: true # 开启懒加载,保证启动速度
url: jdbc:dm://127.0.0.1:5236?schema=LOWCODE_LOG&compatibleMode=oracle&socketTimeout=60000&connectTimeout=30000
username: SYSDBA
password: 83kTnuLWPczi
driver-class-name: dm.jdbc.driver.DmDriver
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
redis:
host: 127.0.0.1 # 地址

View File

@@ -201,15 +201,12 @@ public class AlibabaWorkOrderJob implements JobHandler {
" REPLACE( " +
" JSON_QUERY( " +
" wos.SOP_SCHEMA, " +
" '$[0].sopSchema.componentsTree[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER, " +
" '[', " +
" ']', " +
" ',' " +
" '$[0].sopSchema.componentsTree[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " +
" ), " +
" ']', " +
" '[', " +
" '' " +
" ), " +
" '[', " +
" ']', " +
" '' " +
" ), " +
" ',' " +
@@ -220,17 +217,10 @@ public class AlibabaWorkOrderJob implements JobHandler {
" LISTAGG( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY( " +
" sl.CONTENT, " +
" '$.sopInfo.*' WITH CONDITIONAL WRAPPER, " +
" '[', " +
" ']', " +
" ',' " +
" ), " +
" ']', " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" '[', " +
" '' " +
" ), " +
" '[', " +
" ) ']', " +
" '' " +
" ), " +
" ',' " +
@@ -368,15 +358,12 @@ public class AlibabaWorkOrderJob implements JobHandler {
" REPLACE( " +
" JSON_QUERY( " +
" wos.SOP_SCHEMA, " +
" '$[0].sopSchema.componentsTree[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER, " +
" '[', " +
" ']', " +
" ',' " +
" '$[0].sopSchema.componentsTree[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " +
" ), " +
" ']', " +
" '[', " +
" '' " +
" ), " +
" '[', " +
" ']', " +
" '' " +
" ), " +
" ',' " +
@@ -387,17 +374,10 @@ public class AlibabaWorkOrderJob implements JobHandler {
" LISTAGG( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY( " +
" sl.CONTENT, " +
" '$.sopInfo.*' WITH CONDITIONAL WRAPPER, " +
" '[', " +
" ']', " +
" ',' " +
" ), " +
" ']', " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" '[', " +
" '' " +
" ), " +
" '[', " +
" ) ']', " +
" '' " +
" ), " +
" ',' " +
@@ -438,7 +418,72 @@ public class AlibabaWorkOrderJob implements JobHandler {
" ) rwoe " +
" GROUP BY " +
" rwoe.\"RELATE_WORK_ORDER_ID\" " +
" ) rwoa ON mwoe.WORK_ORDER_ID = rwoa.RELATE_WORK_ORDER_ID ");
" ) rwoa ON mwoe.WORK_ORDER_ID = rwoa.RELATE_WORK_ORDER_ID " +
"WHERE " +
" ( " +
" mwoe.GMT_MODIFIED BETWEEN TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 00:00:00' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" AND TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 23:59:59' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" ) " +
" OR ( " +
" mwoe.SUB_GMT_MODIFIED BETWEEN TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 00:00:00' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" AND TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 23:59:59' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" ) " +
" OR ( " +
" rwoa.GMT_MODIFIED BETWEEN TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 00:00:00' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" AND TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 23:59:59' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" ) " +
" OR ( " +
" rwoa.SUB_GMT_MODIFIED BETWEEN TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 00:00:00' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" AND TO_DATE( " +
" NVL( " +
" '2025-11-11 11:11:11', " +
" TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 23:59:59' " +
" ), " +
" 'YYYY-MM-DD HH24:MI:SS' " +
" ) " +
" )");
// 如果时间参数存在并且合法,则添加时间条件
if (Objects.nonNull(startTime) && Objects.nonNull(endTime) && startTime.isBefore(endTime)) {
String formattedStart = LocalDateTimeUtil.format(startTime, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);

View File

@@ -3,12 +3,14 @@ package com.jeelowcode.module.biz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jeelowcode.module.biz.entity.AlibabaWorkOrder;
import com.jeelowcode.tool.framework.mybatis.core.query.LambdaQueryWrapperX;
import org.apache.ibatis.annotations.Mapper;
import java.time.LocalDateTime;
/**
* 阿里工单Mapper
*/
@Mapper
public interface AlibabaWorkOrderMapper extends BaseMapper<AlibabaWorkOrder> {
/**
@@ -29,4 +31,4 @@ public interface AlibabaWorkOrderMapper extends BaseMapper<AlibabaWorkOrder> {
*/
LocalDateTime selectMaxUpdateTime();
}
}