Commit ca3eb3612859e48b0255e15aabefc5b75726c788
1 parent
dcbf3fe9
养护计划优化提交
Showing
5 changed files
with
108 additions
and
15 deletions
urbanops-framework/urbanops-spring-boot-starter-mybatis/src/main/java/com/zteits/urbanops/framework/mybatis/core/type/StringArrayToListTypeHandler.java
0 → 100644
| 1 | +package com.zteits.urbanops.framework.mybatis.core.type; | ||
| 2 | +import org.apache.ibatis.type.BaseTypeHandler; | ||
| 3 | +import org.apache.ibatis.type.JdbcType; | ||
| 4 | + | ||
| 5 | +import java.sql.*; | ||
| 6 | +import java.util.ArrayList; | ||
| 7 | +import java.util.Collections; | ||
| 8 | +import java.util.List; | ||
| 9 | +import java.util.regex.Pattern; | ||
| 10 | + | ||
| 11 | +public class StringArrayToListTypeHandler extends BaseTypeHandler<List<String>> { | ||
| 12 | + | ||
| 13 | + // 匹配引号(单或双) | ||
| 14 | + private static final Pattern SPLIT_PATTERN = Pattern.compile(",\\s*"); | ||
| 15 | + private static final Pattern TRIM_QUOTES = Pattern.compile("^(['\"])(.*)\\1$"); | ||
| 16 | + | ||
| 17 | + @Override | ||
| 18 | + public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { | ||
| 19 | + if (parameter == null || parameter.isEmpty()) { | ||
| 20 | + ps.setString(i, "[]"); | ||
| 21 | + return; | ||
| 22 | + } | ||
| 23 | + // 统一用双引号序列化为 JSON 格式写入 | ||
| 24 | + StringBuilder sb = new StringBuilder(); | ||
| 25 | + sb.append("["); | ||
| 26 | + for (int idx = 0; idx < parameter.size(); idx++) { | ||
| 27 | + if (idx > 0) sb.append(","); | ||
| 28 | + sb.append("\"").append(parameter.get(idx)).append("\""); | ||
| 29 | + } | ||
| 30 | + sb.append("]"); | ||
| 31 | + ps.setString(i, sb.toString()); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException { | ||
| 36 | + return parse(rs.getString(columnName)); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException { | ||
| 41 | + return parse(rs.getString(columnIndex)); | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { | ||
| 46 | + return parse(cs.getString(columnIndex)); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * 解析 ['a','b'] 或 ["x","y"] 等格式 | ||
| 51 | + */ | ||
| 52 | + private List<String> parse(String value) { | ||
| 53 | + if (value == null || (value = value.trim()).length() == 0 || "null".equalsIgnoreCase(value)) { | ||
| 54 | + return Collections.emptyList(); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + // 去掉首尾的 [ 和 ] | ||
| 58 | + if (!value.startsWith("[") || !value.endsWith("]")) { | ||
| 59 | + return Collections.emptyList(); // 非法格式 | ||
| 60 | + } | ||
| 61 | + value = value.substring(1, value.length() - 1).trim(); | ||
| 62 | + | ||
| 63 | + // 空数组 | ||
| 64 | + if (value.isEmpty()) { | ||
| 65 | + return Collections.emptyList(); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + List<String> result = new ArrayList<>(); | ||
| 69 | + String[] items = SPLIT_PATTERN.split(value); | ||
| 70 | + | ||
| 71 | + for (String item : items) { | ||
| 72 | + item = item.trim(); | ||
| 73 | + if (item.length() == 0) continue; | ||
| 74 | + | ||
| 75 | + // 移除首尾的单引号或双引号 | ||
| 76 | + if ((item.startsWith("'") && item.endsWith("'")) || | ||
| 77 | + (item.startsWith("\"") && item.endsWith("\""))) { | ||
| 78 | + item = item.substring(1, item.length() - 1); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + result.add(item); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + return result; | ||
| 85 | + } | ||
| 86 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanCommitRespVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo; |
| 2 | 2 | ||
| 3 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
| 4 | +import com.zteits.urbanops.framework.mybatis.core.type.StringListTypeHandler; | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.*; | 6 | import lombok.*; |
| 5 | import java.util.*; | 7 | import java.util.*; |
| @@ -57,11 +59,8 @@ public class InspectionPlanCommitRespVO { | @@ -57,11 +59,8 @@ public class InspectionPlanCommitRespVO { | ||
| 57 | 59 | ||
| 58 | @Schema(description = "巡检照片") | 60 | @Schema(description = "巡检照片") |
| 59 | @ExcelProperty("巡检照片") | 61 | @ExcelProperty("巡检照片") |
| 60 | - private String img; | ||
| 61 | - | ||
| 62 | - @Schema(description = "巡检照片") | ||
| 63 | - @ExcelProperty("巡检照片") | ||
| 64 | - private List<String> imgList; | 62 | + @TableField(typeHandler = StringListTypeHandler.class) |
| 63 | + private List<String> img; | ||
| 65 | 64 | ||
| 66 | @Schema(description = "巡检结果: 1:正常;2:异常") | 65 | @Schema(description = "巡检结果: 1:正常;2:异常") |
| 67 | @ExcelProperty("巡检结果: 1:正常;2:异常") | 66 | @ExcelProperty("巡检结果: 1:正常;2:异常") |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/inspectionplan/InspectionPlanCommitDO.java
| 1 | package com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan; | 1 | package com.zteits.urbanops.module.garden.dal.dataobject.inspectionplan; |
| 2 | 2 | ||
| 3 | +import com.zteits.urbanops.framework.mybatis.core.type.StringListTypeHandler; | ||
| 3 | import lombok.*; | 4 | import lombok.*; |
| 4 | import java.time.LocalDateTime; | 5 | import java.time.LocalDateTime; |
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 5 | import com.baomidou.mybatisplus.annotation.*; | 8 | import com.baomidou.mybatisplus.annotation.*; |
| 6 | import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; | 9 | import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; |
| 7 | 10 | ||
| @@ -61,7 +64,8 @@ public class InspectionPlanCommitDO extends BaseDO { | @@ -61,7 +64,8 @@ public class InspectionPlanCommitDO extends BaseDO { | ||
| 61 | /** | 64 | /** |
| 62 | * 巡检照片 | 65 | * 巡检照片 |
| 63 | */ | 66 | */ |
| 64 | - private String img; | 67 | + @TableField(typeHandler = StringListTypeHandler.class) |
| 68 | + private List<String> img; | ||
| 65 | /** | 69 | /** |
| 66 | * 巡检结果: 1:正常;2:异常 | 70 | * 巡检结果: 1:正常;2:异常 |
| 67 | */ | 71 | */ |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/inspectionplan/InspectionPlanCommitServiceImpl.java
| @@ -132,7 +132,7 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | @@ -132,7 +132,7 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | ||
| 132 | .batchNo(inspectionPlanDO.getBatchNo()) | 132 | .batchNo(inspectionPlanDO.getBatchNo()) |
| 133 | .planNo(createReqVO.getPlanNo()).busiLine(inspectionPlanDO.getBusiLine()) | 133 | .planNo(createReqVO.getPlanNo()).busiLine(inspectionPlanDO.getBusiLine()) |
| 134 | .companyId(inspectionPlanDO.getCompanyId()).deptId(inspectionPlanDO.getDeptId()) | 134 | .companyId(inspectionPlanDO.getCompanyId()).deptId(inspectionPlanDO.getDeptId()) |
| 135 | - .roadId(inspectionPlanDO.getRoadId()).img(JSONObject.toJSONString(createReqVO.getImgList())) | 135 | + .roadId(inspectionPlanDO.getRoadId()).img(createReqVO.getImgList()) |
| 136 | .inspectionState(createReqVO.getInspectionState()).transState(createReqVO.getTransState()) | 136 | .inspectionState(createReqVO.getInspectionState()).transState(createReqVO.getTransState()) |
| 137 | .transWorkNo(createReqVO.getTransWorkNo()) | 137 | .transWorkNo(createReqVO.getTransWorkNo()) |
| 138 | .userId(userId).userName(userName) | 138 | .userId(userId).userName(userName) |
| @@ -195,7 +195,7 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | @@ -195,7 +195,7 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | ||
| 195 | IPage<InspectionPlanCommitRespVO> page = inspectionPlanCommitMapper.selectForPage(mpPage, pageReqVO); | 195 | IPage<InspectionPlanCommitRespVO> page = inspectionPlanCommitMapper.selectForPage(mpPage, pageReqVO); |
| 196 | addDataInspectionPlan(page.getRecords()); | 196 | addDataInspectionPlan(page.getRecords()); |
| 197 | // 转换返回 | 197 | // 转换返回 |
| 198 | - return new PageResult<>(imgProcess(page.getRecords()), page.getTotal()); | 198 | + return new PageResult<>(page.getRecords(), page.getTotal()); |
| 199 | } | 199 | } |
| 200 | 200 | ||
| 201 | @Override | 201 | @Override |
| @@ -242,11 +242,11 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | @@ -242,11 +242,11 @@ public class InspectionPlanCommitServiceImpl implements InspectionPlanCommitServ | ||
| 242 | }); | 242 | }); |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | - private List<InspectionPlanCommitRespVO> imgProcess(List<InspectionPlanCommitRespVO> list) { | ||
| 246 | - list.forEach(e -> { | ||
| 247 | - e.setImgList(StrUtils.imgProcess(e.getImg(), "")); | ||
| 248 | - }); | ||
| 249 | - return list; | ||
| 250 | - } | 245 | +// private List<InspectionPlanCommitRespVO> imgProcess(List<InspectionPlanCommitRespVO> list) { |
| 246 | +// list.forEach(e -> { | ||
| 247 | +// e.setImgList(StrUtils.imgProcess(e.getImg(), "")); | ||
| 248 | +// }); | ||
| 249 | +// return list; | ||
| 250 | +// } | ||
| 251 | 251 | ||
| 252 | } | 252 | } |
| 253 | \ No newline at end of file | 253 | \ No newline at end of file |
urbanops-module-garden/src/main/resources/mapper/inspectionplan/InspectionPlanCommitMapper.xml
| @@ -2,6 +2,10 @@ | @@ -2,6 +2,10 @@ | ||
| 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 3 | <mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.inspectionplan.InspectionPlanCommitMapper"> | 3 | <mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.inspectionplan.InspectionPlanCommitMapper"> |
| 4 | 4 | ||
| 5 | + | ||
| 6 | + <resultMap id="BaseResultMap" type="com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanCommitRespVO"> | ||
| 7 | + <result property="img" column="img" typeHandler="com.zteits.urbanops.framework.mybatis.core.type.StringArrayToListTypeHandler"/> | ||
| 8 | + </resultMap> | ||
| 5 | <!-- | 9 | <!-- |
| 6 | 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 | 10 | 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 |
| 7 | 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 | 11 | 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 |
| @@ -9,7 +13,7 @@ | @@ -9,7 +13,7 @@ | ||
| 9 | 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ | 13 | 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ |
| 10 | --> | 14 | --> |
| 11 | <!-- 复杂联表分页查询 --> | 15 | <!-- 复杂联表分页查询 --> |
| 12 | - <select id="selectForPage" resultType="com.zteits.urbanops.module.garden.controller.admin.inspectionplan.vo.InspectionPlanCommitRespVO"> | 16 | + <select id="selectForPage" resultMap="BaseResultMap"> |
| 13 | SELECT | 17 | SELECT |
| 14 | a.plan_no, | 18 | a.plan_no, |
| 15 | b.plan_name, | 19 | b.plan_name, |