Compare commits

..

9 Commits

Author SHA1 Message Date
funny 04109205c8 Merge branch 'qms/yf' into qms/develop 2026-05-07 07:56:56 +08:00
曹鹏飞 b06c07dc6c feat(qo): 新增物料查询排序字段支持
- QmsQcMaterialSearchQO中增加sortField和sortOrder字段
- 根据sortField动态选择排序字段,支持多种物料相关字段排序
- 支持sortOrder指定升序或降序,默认降序排序
- QmsQcMaterialMapper.xml中修改SQL实现根据请求参数动态排序
- 默认排序仍为物料编号倒序,兼容无排序参数情况
2026-05-06 19:09:33 +08:00
曹鹏飞 260e533cc0 refactor(request): 统一将“检验单号”字段名修改为“请求单号”
- 将ExternalIncomingInspectionApplyQO和ExternalInventoryInspectionApplyQO中的checkNo字段改为requestNo
- 更新QmsIncomingInspectionTask实体及其对应VO中的checkNo字段为requestNo
- 修改IncomingInspectionTaskControllerService相关代码,使用requestNo替代checkNo
- 调整WmsIncomingInspectionTaskCallbackService中WmsInventoryInspectionTaskCallbackQO的字段为requestNo
- 统一修改各处字段注释,明确请求单号为第三方唯一编号
2026-05-06 18:51:53 +08:00
曹鹏飞 a43523da36 fix(qc-material): 修复父节点路径构建及查询逻辑
- 修改fullPath构建逻辑,避免重复拼接父节点路径
- 调整查询条件,使用ltree类型转换为text进行匹配
- 优化级联查询自身及子孙节点的条件表达式
- 保证查询兼容性与准确性,提高查询性能
2026-05-06 18:34:34 +08:00
曹鹏飞 66f732bf66 fix(repository): 修正质检物料查询排序字段
- 将查询结果排序字段从id改为material_no
- 优化查询逻辑,使排序符合业务需求
- 保持查询条件和结构不变,确保兼容性
2026-05-06 18:22:21 +08:00
曹鹏飞 c9f0e112d6 Merge remote-tracking branch '惠信/qms/develop' into qms/develop 2026-05-06 18:21:47 +08:00
曹鹏飞 4143924357 feat(material): 支持物料类别及子孙类别的展开查询与导出
- 在分页查询接口中增加物料类别编码展开,包含所有子孙类别
- 实现一次查询获取类别及其所有子孙类别编码列表的方法
- 在导出接口中同样支持物料类别编码展开
- Mapper 查询条件支持使用物料类别编码列表进行IN查询
- 修改排序规则,将分页查询结果按物料编号降序排列
- 在请求参数中新增物料类别编码列表字段,由服务层自动填充
2026-05-06 18:21:41 +08:00
曹鹏飞 12d0e0ca71 feat(qms): 新增检验单号字段并完善相关流程支持
- 在QmsIncomingInspectionTask实体及对应Mapper中添加checkNo字段
- 在IncomingInspectionTaskControllerService中设置并保存检验单号
- 在InventoryInspectionTaskCallbackService中传递检验单号信息
- 在ExternalIncomingInspectionApplyQO及ExternalInventoryInspectionApplyQO中新增检验单号校验
- 修改回调参数类WmsInventoryInspectionTaskCallbackQO,增加检验单号字段与检测数量替代送检数量
- 在DepartmentServiceImpl中完善新增和复制部门时的负责人ID与姓名设置
2026-05-06 17:20:51 +08:00
曹鹏飞 ba571b994c refactor(pdf-extract): 移除旧pdfInfo字段,改用独立pdf属性存储位置信息
- 在PositionedTextStripper中添加elements字段的Getter以便外部访问
- 删除QmsInspectionStandard相关类中旧的pdfInfo字段及相关JSON序列化逻辑
- 新增QmsInspectionStandardItemContent、VO、QO类中pdfPageNum、pdfX、pdfY、pdfWidth和pdfHeight属性
- 在QmsInspectionStandardControllerService和QmsInspectionStandardItemControllerService中调整属性赋值逻辑,改用新字段替代pdfInfo
- 优化部分代码导入,移除未使用的JSONUtil和TextPosition引用
2026-05-06 16:51:03 +08:00
19 changed files with 281 additions and 95 deletions

View File

@ -4,7 +4,6 @@ import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import model.TextPosition;
import java.util.List;
@ -147,7 +146,7 @@ public class QmsInspectionStandardSaveQO {
/**
* 排序号
*/
private Integer sortNo=0;
private Integer sortNo = 0;
/**
* 检测项名称
@ -165,15 +164,35 @@ public class QmsInspectionStandardSaveQO {
*/
private String legend;
/**
* PDF信息
*/
private TextPosition pdfInfo;
/**
* 判定类型0直接判定1测量值
*/
@NotNull(message = "判定类型不能为空")
private Integer judgmentType;
/**
* PDF页码
*/
private Integer pdfPageNum;
/**
* PDF x轴起始位置
*/
private Float pdfX;
/**
* PDF y轴起始位置
*/
private Float pdfY;
/**
* PDF宽度
*/
private Float pdfWidth;
/**
* PDF高度
*/
private Float pdfHeight;
}
}

View File

@ -1,7 +1,6 @@
package com.nflg.qms.admin.pojo.vo;
import lombok.Data;
import model.TextPosition;
import java.time.LocalDateTime;
@ -36,16 +35,36 @@ public class QmsInspectionStandardItemContentVO {
*/
private String legend;
/**
* PDF信息
*/
private TextPosition pdfInfo;
/**
* 判定类型0直接判定1测量值
*/
private Integer judgmentType;
/**
* PDF页码
*/
private Integer pdfPageNum;
/**
* PDF x轴起始位置
*/
private Float pdfX;
/**
* PDF y轴起始位置
*/
private Float pdfY;
/**
* PDF宽度
*/
private Float pdfWidth;
/**
* PDF高度
*/
private Float pdfHeight;
/**
* 创建人姓名
*/

View File

@ -187,6 +187,7 @@ public class IncomingInspectionTaskControllerService {
// 7. 构建并保存来料检测任务
QmsIncomingInspectionTask task = new QmsIncomingInspectionTask()
.setRequestNo(request.getRequestNo())
.setTaskNo(taskNo)
.setMaterialId(material.getId())
.setInspectionStandardId(standard.getId())
@ -311,6 +312,7 @@ public class IncomingInspectionTaskControllerService {
// 7. 构建并保存库存检测任务存入来料检测任务表dataType=1
QmsIncomingInspectionTask task = new QmsIncomingInspectionTask()
.setRequestNo(request.getRequestNo())
.setTaskNo(taskNo)
.setMaterialId(material.getId())
.setInspectionStandardId(standard.getId())

View File

@ -3,7 +3,6 @@ package com.nflg.qms.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.qms.admin.pojo.qo.QmsPdfExtractRegionQO;
@ -26,7 +25,6 @@ import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import model.DimensionResult;
import model.TextPosition;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import service.PdfExtractionService;
@ -304,9 +302,11 @@ public class QmsInspectionStandardControllerService {
vo.setName(content.getName());
vo.setTestStandard(content.getTestStandard());
vo.setLegend(content.getLegend());
if (StrUtil.isNotBlank(content.getPdfInfo())) {
vo.setPdfInfo(JSONUtil.toBean(content.getPdfInfo(), TextPosition.class));
}
vo.setPdfPageNum(content.getPdfPageNum());
vo.setPdfX(content.getPdfX());
vo.setPdfY(content.getPdfY());
vo.setPdfWidth(content.getPdfWidth());
vo.setPdfHeight(content.getPdfHeight());
vo.setJudgmentType(content.getJudgmentType());
vo.setCreateUserName(content.getCreateUserName());
vo.setCreateTime(content.getCreateTime());
@ -681,11 +681,14 @@ public class QmsInspectionStandardControllerService {
if (qo.getLegend() != null) {
content.setLegend(qo.getLegend());
}
if (qo.getPdfInfo() != null) {
content.setPdfInfo(JSONUtil.toJsonStr(qo.getPdfInfo()));
}
content.setJudgmentType(qo.getJudgmentType());
content.setPdfPageNum(qo.getPdfPageNum());
content.setPdfX(qo.getPdfX());
content.setPdfY(qo.getPdfY());
content.setPdfWidth(qo.getPdfWidth());
content.setPdfHeight(qo.getPdfHeight());
content.setUpdateUserId(userId);
content.setUpdateUserName(userName);
content.setUpdateTime(now);

View File

@ -1,7 +1,5 @@
package com.nflg.qms.admin.service;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.qms.admin.pojo.vo.QmsInspectionStandardItemContentVO;
import com.nflg.wms.repository.entity.QmsInspectionStandardItem;
@ -10,7 +8,6 @@ import com.nflg.wms.repository.service.IQmsInspectionStandardItemContentService;
import com.nflg.wms.repository.service.IQmsInspectionStandardItemService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import model.TextPosition;
import org.springframework.stereotype.Component;
import java.util.List;
@ -62,9 +59,11 @@ public class QmsInspectionStandardItemControllerService {
vo.setName(content.getName());
vo.setTestStandard(content.getTestStandard());
vo.setLegend(content.getLegend());
if (StrUtil.isNotBlank(content.getPdfInfo())) {
vo.setPdfInfo(JSONUtil.toBean(content.getPdfInfo(), TextPosition.class));
}
vo.setPdfPageNum(content.getPdfPageNum());
vo.setPdfX(content.getPdfX());
vo.setPdfY(content.getPdfY());
vo.setPdfWidth(content.getPdfWidth());
vo.setPdfHeight(content.getPdfHeight());
vo.setJudgmentType(content.getJudgmentType());
vo.setCreateUserName(content.getCreateUserName());
vo.setCreateTime(content.getCreateTime());

View File

@ -78,6 +78,11 @@ public class QmsQcMaterialControllerService {
* 分页查询质检物料
*/
public PageData<QmsQcMaterialVO> search(QmsQcMaterialSearchQO request) {
// 若传入了物料类别编码展开为包含当前类别及所有子孙类别的编码列表
if (StrUtil.isNotBlank(request.getMaterialCategoryCode())) {
request.setMaterialCategoryCodes(expandCategoryCodes(request.getMaterialCategoryCode()));
}
IPage<QmsQcMaterialVO> page = qcMaterialMapper.searchPage(
request, new Page<>(request.getPage(), request.getPageSize()));
@ -89,6 +94,41 @@ public class QmsQcMaterialControllerService {
return result;
}
/**
* 展开物料类别编码查询指定编码对应的类别及其所有子孙类别的编码列表一次查询无递归
* <p>
* parentTree 存储完整祖先路径ltree 格式 0.A.B.C子孙节点满足
* parentTree = fullPath OR parentTree LIKE 'fullPath.%'
* </p>
*/
private List<String> expandCategoryCodes(String categoryCode) {
QmsQcMaterialCategory category = qcMaterialCategoryService.lambdaQuery()
.eq(QmsQcMaterialCategory::getCategoryCode, categoryCode)
.one();
if (category == null) {
// 类别不存在原样返回Mapper IN 条件查不到数据
return List.of(categoryCode);
}
// 构建当前节点完整路径parentTree.id parentTree 为空则直接取 id
String fullPath = StrUtil.isBlank(category.getParentTree())
? String.valueOf(category.getId())
: category.getParentTree();
// 一次查询自身 + 直接子节点parentTree=fullPath+ 孙级及更深parentTree LIKE 'fullPath.%'
// parent_tree ltree 类型需显式转为 text 才能与 varchar 比较
return qcMaterialCategoryService.lambdaQuery()
.eq(QmsQcMaterialCategory::getCategoryCode, categoryCode)
.or().apply("parent_tree::text = {0}", fullPath)
.or().apply("parent_tree::text LIKE {0}", fullPath + ".%")
.list()
.stream()
.map(QmsQcMaterialCategory::getCategoryCode)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
}
/**
* 新增质检物料
*/
@ -375,6 +415,10 @@ public class QmsQcMaterialControllerService {
* 导出质检物料不分页
*/
public void exportSearch(HttpServletResponse response, QmsQcMaterialSearchQO request) throws IOException {
// 导出同样支持子孙类别展开
if (StrUtil.isNotBlank(request.getMaterialCategoryCode())) {
request.setMaterialCategoryCodes(expandCategoryCodes(request.getMaterialCategoryCode()));
}
EecExcelUtil.export("质检物料", "质检物料", qcMaterialMapper.searchAll(request), response);
}

View File

@ -104,12 +104,13 @@ public class WmsIncomingInspectionTaskCallbackService {
private void inventory(QmsIncomingInspectionTaskVO taskVO, Short processingResult) {
WmsInventoryInspectionTaskCallbackQO qo = new WmsInventoryInspectionTaskCallbackQO()
.setTaskNo(taskVO.getTaskNo())
.setRequestNo(taskVO.getRequestNo())
.setMaterialNo(taskVO.getMaterialNo())
.setFactory(taskVO.getFactory())
.setWarehouse(taskVO.getWarehouse())
.setStorageLocation(taskVO.getStorageLocation())
.setStorageDays(taskVO.getStorageDays())
.setInspectionQty(taskVO.getInspectionQty())
.setDetectionQty(taskVO.getDetectionQty())
.setQualifiedQty(taskVO.getQualifiedQty())
.setUnqualifiedQty(taskVO.getUnqualifiedQty())
.setInspectionResult(taskVO.getInspectionResult())

View File

@ -1,5 +1,6 @@
package extraction;
import lombok.Getter;
import model.TextElement;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
@ -11,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
public class PositionedTextStripper extends PDFTextStripper {
@Getter
private final List<TextElement> elements = new ArrayList<>();
private int currentPage = 0;
private float currentPageWidth = 0;
@ -53,7 +55,4 @@ public class PositionedTextStripper extends PDFTextStripper {
super.writeString(text, textPositions);
}
public List<TextElement> getElements() {
return elements;
}
}

View File

@ -1,47 +0,0 @@
package model;
import lombok.Data;
@Data
public class TextPosition {
/**
* 页码
*/
private int pageNum;
/**
* x轴起始位置
*/
private float x;
/**
* y轴起始位置
*/
private float y;
/**
* 宽度
*/
private float width;
/**
* 高度
*/
private float height;
/**
* 页宽
*/
private float pageWidth;
/**
* 页高
*/
private float pageHeight;
/**
* 序号
*/
private int sortOrder;
}

View File

@ -11,6 +11,12 @@ import lombok.Data;
@Data
public class ExternalIncomingInspectionApplyQO {
/**
* 请求单号第三方唯一编号
*/
@NotBlank(message = "请求单号不能为空")
private String requestNo;
/**
* 物料编号必填
*/

View File

@ -11,6 +11,12 @@ import lombok.Data;
@Data
public class ExternalInventoryInspectionApplyQO {
/**
* 请求单号第三方唯一编号
*/
@NotBlank(message = "请求单号不能为空")
private String requestNo;
/**
* 物料编号必填
*/

View File

@ -2,6 +2,8 @@ package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import java.util.List;
/**
* 查询质检物料列表 请求参数分页
*/
@ -13,6 +15,11 @@ public class QmsQcMaterialSearchQO extends PageQO {
*/
private String materialCategoryCode;
/**
* 物料类别编码列表内部使用 Service 层自动填充包含当前类别及其所有子孙类别编码
*/
private List<String> materialCategoryCodes;
/**
* 物料编号模糊匹配
*/
@ -27,4 +34,15 @@ public class QmsQcMaterialSearchQO extends PageQO {
* 物料名称模糊匹配
*/
private String materialName;
/**
* 排序字段对应 QmsQcMaterialVO 中的字段名 materialNocreateTime
* 为空时默认按物料编号倒序
*/
private String sortField;
/**
* 排序类型asc=升序desc=降序默认 desc
*/
private String sortOrder;
}

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.experimental.Accessors;
@ -14,6 +15,11 @@ public class WmsInventoryInspectionTaskCallbackQO {
*/
private String taskNo;
/**
* 请求单号第三方唯一编号
*/
private String requestNo;
/**
* 物料编号
*/
@ -40,9 +46,9 @@ public class WmsInventoryInspectionTaskCallbackQO {
private Integer storageDays;
/**
* 检数量
* 数量
*/
private Integer inspectionQty;
private Integer detectionQty;
/**
* 合格数量

View File

@ -17,6 +17,11 @@ public class QmsIncomingInspectionTaskVO {
*/
private String taskNo;
/**
* 请求单号第三方唯一编号
*/
private String requestNo;
/**
* 物料id
*/

View File

@ -37,6 +37,11 @@ public class QmsIncomingInspectionTask implements Serializable {
*/
private String taskNo;
/**
* 请求单号第三方唯一编号
*/
private String requestNo;
/**
* 物料id关联质检物料表
*/

View File

@ -51,16 +51,36 @@ public class QmsInspectionStandardItemContent implements Serializable {
*/
private String legend;
/**
* PDF信息
*/
private String pdfInfo;
/**
* 判定类型0直接判定1测量值
*/
private Integer judgmentType;
/**
* PDF页码
*/
private Integer pdfPageNum;
/**
* PDF x轴起始位置
*/
private Float pdfX;
/**
* PDF y轴起始位置
*/
private Float pdfY;
/**
* PDF宽度
*/
private Float pdfWidth;
/**
* PDF高度
*/
private Float pdfHeight;
/**
* 创建人ID
*/

View File

@ -50,7 +50,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
.setParentId(request.getParentId())
.setEnable(request.getEnable())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
.setCreateTime(LocalDateTime.now())
.setHeadUserId(request.getHeadUserId())
.setHeadUserName(request.getHeadUserName());
save(department);
auditLogService.addInsert(Department.class, department, UserUtil.getUserName());
}
@ -77,7 +79,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
.setEnable(request.getEnable())
.setCreateBy(dept1.getCreateBy())
.setCreateTime(dept1.getCreateTime())
.setSourceId(request.getNo());
.setSourceId(request.getNo())
.setHeadUserId(request.getHeadUserId())
.setHeadUserName(request.getHeadUserName());
//Department dept2 = BeanUtil.copy(dept1, Department.class);

View File

@ -6,6 +6,7 @@
SELECT
t.id,
t.task_no,
t.check_no,
t.material_id,
m.material_no,
m.material_desc,
@ -108,6 +109,7 @@
SELECT
t.id,
t.task_no,
t.check_no,
t.material_id,
m.material_no,
m.material_desc,
@ -180,6 +182,7 @@
<select id="getDetail" resultType="com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskVO">
SELECT t.id,
t.task_no,
t.check_no,
t.material_id,
m.material_no,
m.material_desc,

View File

@ -27,9 +27,17 @@
update_time
FROM qms_qc_material
<where>
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
AND material_category_code = #{request.materialCategoryCode}
</if>
<choose>
<when test="request.materialCategoryCodes != null and !request.materialCategoryCodes.isEmpty()">
AND material_category_code IN
<foreach collection="request.materialCategoryCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
</when>
<when test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
AND material_category_code = #{request.materialCategoryCode}
</when>
</choose>
<if test="request.materialNo != null and request.materialNo != ''">
AND material_no ilike concat('%', #{request.materialNo}, '%')
</if>
@ -40,7 +48,36 @@
AND material_name ilike concat('%', #{request.materialName}, '%')
</if>
</where>
ORDER BY id DESC
ORDER BY
<choose>
<when test="request.sortField != null and request.sortField != ''">
<choose>
<when test="request.sortField == 'id'">id</when>
<when test="request.sortField == 'materialNo'">material_no</when>
<when test="request.sortField == 'materialDesc'">material_desc</when>
<when test="request.sortField == 'materialDescIsUpgrade'">material_desc_is_upgrade</when>
<when test="request.sortField == 'materialCategoryCode'">material_category_code</when>
<when test="request.sortField == 'materialCategoryCodePathName'">material_category_code_path_name</when>
<when test="request.sortField == 'drawingNo'">drawing_no</when>
<when test="request.sortField == 'drawingNoVer'">drawing_no_ver</when>
<when test="request.sortField == 'materialName'">material_name</when>
<when test="request.sortField == 'materialTexture'">material_texture</when>
<when test="request.sortField == 'materialSpecifications'">material_specifications</when>
<when test="request.sortField == 'isStandardMaintained'">is_standard_maintained</when>
<when test="request.sortField == 'createdType'">created_type</when>
<when test="request.sortField == 'createByName'">create_by_name</when>
<when test="request.sortField == 'createTime'">create_time</when>
<when test="request.sortField == 'updateByName'">update_by_name</when>
<when test="request.sortField == 'updateTime'">update_time</when>
<otherwise>material_no</otherwise>
</choose>
<choose>
<when test="request.sortOrder != null and request.sortOrder.equalsIgnoreCase('asc')">ASC</when>
<otherwise>DESC</otherwise>
</choose>
</when>
<otherwise>material_no DESC</otherwise>
</choose>
</select>
<!--
@ -65,9 +102,17 @@
TO_CHAR(create_time, 'YYYY-MM-DD HH24:MI:SS') AS create_time
FROM qms_qc_material
<where>
<if test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
AND material_category_code = #{request.materialCategoryCode}
</if>
<choose>
<when test="request.materialCategoryCodes != null and !request.materialCategoryCodes.isEmpty()">
AND material_category_code IN
<foreach collection="request.materialCategoryCodes" item="code" open="(" separator="," close=")">
#{code}
</foreach>
</when>
<when test="request.materialCategoryCode != null and request.materialCategoryCode != ''">
AND material_category_code = #{request.materialCategoryCode}
</when>
</choose>
<if test="request.materialNo != null and request.materialNo != ''">
AND material_no ilike concat('%', #{request.materialNo}, '%')
</if>
@ -78,7 +123,36 @@
AND material_name ilike concat('%', #{request.materialName}, '%')
</if>
</where>
ORDER BY id DESC
ORDER BY
<choose>
<when test="request.sortField != null and request.sortField != ''">
<choose>
<when test="request.sortField == 'id'">id</when>
<when test="request.sortField == 'materialNo'">material_no</when>
<when test="request.sortField == 'materialDesc'">material_desc</when>
<when test="request.sortField == 'materialDescIsUpgrade'">material_desc_is_upgrade</when>
<when test="request.sortField == 'materialCategoryCode'">material_category_code</when>
<when test="request.sortField == 'materialCategoryCodePathName'">material_category_code_path_name</when>
<when test="request.sortField == 'drawingNo'">drawing_no</when>
<when test="request.sortField == 'drawingNoVer'">drawing_no_ver</when>
<when test="request.sortField == 'materialName'">material_name</when>
<when test="request.sortField == 'materialTexture'">material_texture</when>
<when test="request.sortField == 'materialSpecifications'">material_specifications</when>
<when test="request.sortField == 'isStandardMaintained'">is_standard_maintained</when>
<when test="request.sortField == 'createdType'">created_type</when>
<when test="request.sortField == 'createByName'">create_by_name</when>
<when test="request.sortField == 'createTime'">create_time</when>
<when test="request.sortField == 'updateByName'">update_by_name</when>
<when test="request.sortField == 'updateTime'">update_time</when>
<otherwise>material_no</otherwise>
</choose>
<choose>
<when test="request.sortOrder != null and request.sortOrder.equalsIgnoreCase('asc')">ASC</when>
<otherwise>DESC</otherwise>
</choose>
</when>
<otherwise>material_no DESC</otherwise>
</choose>
</select>
</mapper>