手动增加仓库调拨明细过滤查询

This commit is contained in:
c
2026-03-06 14:58:54 +08:00
parent 4c4716c151
commit d838d17902
14 changed files with 158 additions and 143 deletions

View File

@@ -64,6 +64,7 @@ public class SystemAuthFactory {
switch (p.getPermissionType()) { switch (p.getPermissionType()) {
case TOP_PAGE_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getButtonAuth(), buttonProp); case TOP_PAGE_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getButtonAuth(), buttonProp);
case TABLE_OPERATOR_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getToolButtonAuth(), buttonProp); case TABLE_OPERATOR_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getToolButtonAuth(), buttonProp);
case TABLE_STATUS_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getStatusButtonAuth(), buttonProp);
case DIALOG_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getDialogButtonAuth(), buttonProp); case DIALOG_BUTTON -> saveInButtonAuthList(menuConfig.getMeta().getDialogButtonAuth(), buttonProp);
} }
} }

View File

@@ -137,6 +137,11 @@ public class RouterConfigRawMeta {
*/ */
private List<ButtonProp> toolButtonAuth = new ArrayList<>(); private List<ButtonProp> toolButtonAuth = new ArrayList<>();
/**
*
*/
private List<ButtonProp> statusButtonAuth = new ArrayList<>();
/** /**
* Dialog Button 权限 * Dialog Button 权限
*/ */

View File

@@ -0,0 +1,13 @@
package com.niuan.erp.module.common.entity;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class DocumentMaterialWithInfo extends DocumentMaterial {
private String productSpecs;
}

View File

@@ -1,7 +1,10 @@
package com.niuan.erp.module.common.mapper; package com.niuan.erp.module.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.niuan.erp.module.common.entity.Document; import com.niuan.erp.module.common.entity.Document;
import com.niuan.erp.module.common.enums.DocumentType;
/** /**
* <p> * <p>
@@ -13,4 +16,9 @@ import com.niuan.erp.module.common.entity.Document;
*/ */
public interface DocumentMapper extends BaseMapper<Document> { public interface DocumentMapper extends BaseMapper<Document> {
IPage<Document> selectPageByPartNumber(Page<?> page,
String searchCode,
String partNumber,
DocumentType documentType);
} }

View File

@@ -2,6 +2,11 @@ package com.niuan.erp.module.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.niuan.erp.module.common.entity.DocumentMaterial; import com.niuan.erp.module.common.entity.DocumentMaterial;
import com.niuan.erp.module.common.entity.DocumentMaterialWithInfo;
import com.niuan.erp.module.common.enums.DocumentType;
import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@@ -13,4 +18,6 @@ import com.niuan.erp.module.common.entity.DocumentMaterial;
*/ */
public interface DocumentMaterialMapper extends BaseMapper<DocumentMaterial> { public interface DocumentMaterialMapper extends BaseMapper<DocumentMaterial> {
List<DocumentMaterialWithInfo> selectByPartNumber(List<Long> documentIds, String partNumber);
} }

View File

@@ -1,6 +1,5 @@
package com.niuan.erp.module.warehouse.controller; package com.niuan.erp.module.warehouse.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.niuan.erp.common.annotation.ApiLog; import com.niuan.erp.common.annotation.ApiLog;
import com.niuan.erp.common.annotation.ModuleLog; import com.niuan.erp.common.annotation.ModuleLog;
@@ -9,20 +8,18 @@ import com.niuan.erp.common.base.BasePageReqParams;
import com.niuan.erp.common.base.BaseResult; import com.niuan.erp.common.base.BaseResult;
import com.niuan.erp.common.base.CommonValidateGroup.*; import com.niuan.erp.common.base.CommonValidateGroup.*;
import com.niuan.erp.common.base.OperationType; import com.niuan.erp.common.base.OperationType;
import com.niuan.erp.module.common.entity.Document;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderSearchParams;
import com.niuan.erp.module.warehouse.service.StockTransferOrderService; import com.niuan.erp.module.warehouse.service.StockTransferOrderService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@@ -39,24 +36,8 @@ public class StockTransferOrderController {
@GetMapping("/getStockTransferOrderPage") @GetMapping("/getStockTransferOrderPage")
@PreAuthorize("hasAuthority('stock_transfer_order:index')") @PreAuthorize("hasAuthority('stock_transfer_order:index')")
public BaseResult<IPage<StockTransferOrderDto>> getStockTransferOrderPage(@Validated BasePageReqParams pageParams, public BaseResult<IPage<StockTransferOrderDto>> getStockTransferOrderPage(@Validated BasePageReqParams pageParams,
@Validated(Get.class) StockTransferOrderDto searchParams) { StockTransferOrderSearchParams searchParams) {
var wrapper = new LambdaQueryWrapper<Document>(); return BaseResult.successWithData(stockTransferOrderService.getStockTransferOrderPage(pageParams, searchParams));
if (searchParams != null) {
if (StringUtils.hasText(searchParams.searchCode())) {
wrapper.like(Document::getFormCode, searchParams.searchCode());
}
}
return BaseResult.successWithData(stockTransferOrderService.getStockTransferOrderPage(pageParams, wrapper));
}
@ApiLog(type = OperationType.ADD, remark = "新增一条StockTransferOrder记录")
@Operation(summary = "新增StockTransferOrder", operationId = "addStockTransferOrder")
@PostMapping("/addStockTransferOrder")
@PreAuthorize("hasAuthority('stock_transfer_order:add')")
public BaseResult<?> addStockTransferOrder(@Validated(Add.class) @RequestBody StockTransferOrderAddDto dto) {
stockTransferOrderService.addStockTransferOrder(dto);
return BaseResult.success();
} }
@ApiLog(type = OperationType.UPDATE, remark = "更新一条StockTransferOrder记录") @ApiLog(type = OperationType.UPDATE, remark = "更新一条StockTransferOrder记录")
@@ -98,27 +79,22 @@ public class StockTransferOrderController {
@ApiLog(type = OperationType.UPDATE, remark = "反审核StockTransferOrder") @ApiLog(type = OperationType.UPDATE, remark = "反审核StockTransferOrder")
@Operation(summary = "反审核StockTransferOrder", operationId = "unapproveStockTransferOrder") @Operation(summary = "反审核StockTransferOrder", operationId = "unapproveStockTransferOrder")
@PostMapping("/unapproveStockTransferOrder") @PostMapping("/rejectStockTransferOrder")
@PreAuthorize("hasAuthority('stock_transfer_order:unapprove')") @PreAuthorize("hasAuthority('stock_transfer_order:reject')")
public BaseResult<?> unapproveStockTransferOrder( public BaseResult<?> rejectStockTransferOrder(
@Parameter(description = "调拨单ID") @RequestParam Long id) { @Parameter(description = "调拨单ID") @RequestParam Long id) {
stockTransferOrderService.unapprove(id); stockTransferOrderService.reject(id);
return BaseResult.success(); return BaseResult.success();
} }
@Operation(summary = "获取StockTransferOrder明细", operationId = "getStockTransferOrderDetail") @Operation(summary = "获取StockTransferOrder明细", operationId = "getStockTransferOrderDetail")
@GetMapping("/getStockTransferOrderDetail") @GetMapping("/getStockTransferOrderItem")
@PreAuthorize("hasAuthority('stocktransferorder:index')") @PreAuthorize("hasAuthority('stock_transfer_order:index')")
public BaseResult<List<StockTransferOrderItemDto>> getStockTransferOrderDetail( public BaseResult<List<StockTransferOrderItemDto>> getStockTransferOrderItem(
@Parameter(description = "调拨单ID") @RequestParam Long id) { @Parameter(description = "调拨单ID")
return BaseResult.successWithData(stockTransferOrderService.getDetail(id)); @RequestParam
} @NotNull(message = "warehouse.stock_transfer_order.validate.order_id.not_null")
Long orderId) {
@Operation(summary = "导入StockTransferOrder明细", operationId = "importStockTransferOrderItems") return BaseResult.successWithData(stockTransferOrderService.getItem(orderId));
@PostMapping("/importStockTransferOrderItems")
@PreAuthorize("hasAuthority('stock_transfer_order:add')")
public BaseResult<List<StockTransferOrderItemDto>> importStockTransferOrderItems(
@Parameter(description = "Excel文件") @RequestParam("file") MultipartFile file) {
return BaseResult.successWithData(stockTransferOrderService.importItems(file));
} }
} }

View File

@@ -1,30 +1,20 @@
package com.niuan.erp.module.warehouse.controller.dto; package com.niuan.erp.module.warehouse.controller.dto;
import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonInclude;
import java.time.LocalDateTime;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
public record StockTransferOrderDto( public record StockTransferOrderDto(
Long id, Long id,
Integer status,
LocalDateTime createDate, LocalDateTime createDate,
Long createUserId,
String createUserName,
LocalDateTime updateDate,
Long updateUserId,
String updateUserName,
Integer storeNo, Integer storeNo,
String storeName, String storeName,
Integer formType,
String formCode,
String formName,
Integer formStatus,
String formMark,
Integer reserve1,
String reserve2,
Integer vendorNo,
String vendorName,
Double totalValue,
Integer outStoreNo, Integer outStoreNo,
String outStoreName, String outStoreName,
Integer groupId, String formCode,
Integer customerId, String formName,
String searchCode) {} String formMark,
Integer formStatus,
List<StockTransferOrderItemDto> orderItems) {}

View File

@@ -0,0 +1,6 @@
package com.niuan.erp.module.warehouse.controller.dto;
public record StockTransferOrderSearchParams(
String searchCode,
String partNumber
) {}

View File

@@ -2,6 +2,7 @@ package com.niuan.erp.module.warehouse.converter;
import com.niuan.erp.module.common.entity.Document; import com.niuan.erp.module.common.entity.Document;
import com.niuan.erp.module.common.entity.DocumentMaterial; import com.niuan.erp.module.common.entity.DocumentMaterial;
import com.niuan.erp.module.common.entity.DocumentMaterialWithInfo;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemAddDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemAddDto;
@@ -17,12 +18,10 @@ public interface StockTransferOrderConverter {
Document toEntity(StockTransferOrderDto dto); Document toEntity(StockTransferOrderDto dto);
Document toEntity(StockTransferOrderAddDto dto); Document toEntity(StockTransferOrderAddDto dto);
StockTransferOrderDto toDto(Document entity); StockTransferOrderDto toDto(Document entity);
List<StockTransferOrderDto> toDtoList(List<Document> entities);
DocumentMaterial toEntity(StockTransferOrderItemAddDto dto); DocumentMaterial toEntity(StockTransferOrderItemAddDto dto);
List<DocumentMaterial> toEntityList(List<StockTransferOrderItemAddDto> dtoList); List<DocumentMaterial> toEntityList(List<StockTransferOrderItemAddDto> dtoList);
@Mapping(target = "productSpec", ignore = true) StockTransferOrderItemDto toItemDto(DocumentMaterialWithInfo entity);
StockTransferOrderItemDto toItemDto(DocumentMaterial entity);
List<StockTransferOrderItemDto> toItemDtoList(List<DocumentMaterial> entities); List<StockTransferOrderItemDto> toItemDtoList(List<DocumentMaterial> entities);
} }

View File

@@ -1,19 +1,20 @@
package com.niuan.erp.module.warehouse.service; package com.niuan.erp.module.warehouse.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.niuan.erp.common.base.BasePageReqParams; import com.niuan.erp.common.base.BasePageReqParams;
import com.niuan.erp.module.common.entity.Document;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto;
import org.springframework.web.multipart.MultipartFile; import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderSearchParams;
import java.util.List; import java.util.List;
public interface StockTransferOrderService { public interface StockTransferOrderService {
IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams, LambdaQueryWrapper<Document> wrapper); IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams,
StockTransferOrderSearchParams searchParams);
List<StockTransferOrderItemDto> getItem(long id);
void addStockTransferOrder(StockTransferOrderAddDto dto); void addStockTransferOrder(StockTransferOrderAddDto dto);
@@ -25,9 +26,6 @@ public interface StockTransferOrderService {
void approve(long id); void approve(long id);
void unapprove(long id); void reject(long id);
List<StockTransferOrderItemDto> getDetail(long id);
List<StockTransferOrderItemDto> importItems(MultipartFile file);
} }

View File

@@ -14,10 +14,7 @@ import com.niuan.erp.module.common.enums.DocumentType;
import com.niuan.erp.module.common.enums.FormStatus; import com.niuan.erp.module.common.enums.FormStatus;
import com.niuan.erp.module.common.mapper.DocumentMapper; import com.niuan.erp.module.common.mapper.DocumentMapper;
import com.niuan.erp.module.common.mapper.DocumentMaterialMapper; import com.niuan.erp.module.common.mapper.DocumentMaterialMapper;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto; import com.niuan.erp.module.warehouse.controller.dto.*;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemAddDto;
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto;
import com.niuan.erp.module.warehouse.converter.StockTransferOrderConverter; import com.niuan.erp.module.warehouse.converter.StockTransferOrderConverter;
import com.niuan.erp.module.warehouse.entity.Stock; import com.niuan.erp.module.warehouse.entity.Stock;
import com.niuan.erp.module.warehouse.entity.WarehouseItem; import com.niuan.erp.module.warehouse.entity.WarehouseItem;
@@ -52,8 +49,41 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
private final StockMapper stockMapper; private final StockMapper stockMapper;
@Override @Override
public IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams, LambdaQueryWrapper<Document> wrapper) { public IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams,
wrapper.eq(Document::getFormType, DocumentType.STOCK_TRANSFER_ORDER); StockTransferOrderSearchParams searchParams) {
var wrapper = new LambdaQueryWrapper<Document>()
.eq(Document::getFormType, DocumentType.STOCK_TRANSFER_ORDER)
.orderByDesc(Document::getCreateDate);
if (searchParams != null) {
if (StringUtils.hasText(searchParams.searchCode())) {
wrapper.like(Document::getFormCode, searchParams.searchCode())
.or().like(Document::getFormName, searchParams.searchCode())
.or().like(Document::getFormMark, searchParams.searchCode());
}
if (StringUtils.hasText(searchParams.partNumber())) {
var orderPage = this.baseMapper.selectPageByPartNumber(
new Page<>(pageParams.page(), pageParams.pageSize()),
searchParams.searchCode(),
searchParams.partNumber(),
DocumentType.STOCK_TRANSFER_ORDER);
var items = documentMaterialMapper.selectByPartNumber(
orderPage.getRecords().stream().map(Document::getId).toList(), searchParams.partNumber());
return orderPage.convert(order -> new StockTransferOrderDto(
order.getId(),
order.getCreateDate(),
order.getStoreNo(),
order.getStoreName(),
order.getOutStoreNo(),
order.getOutStoreName(),
order.getFormCode(),
order.getFormName(),
order.getFormMark(),
order.getFormStatus().getValue(),
items.stream()
.filter(item -> item.getDocumentNo().equals(order.getId().intValue()))
.map(stockTransferOrderConverter::toItemDto).toList()));
}
}
IPage<Document> result = this.baseMapper.selectPage(new Page<>(pageParams.page(), pageParams.pageSize()), wrapper); IPage<Document> result = this.baseMapper.selectPage(new Page<>(pageParams.page(), pageParams.pageSize()), wrapper);
return result.convert(stockTransferOrderConverter::toDto); return result.convert(stockTransferOrderConverter::toDto);
} }
@@ -246,7 +276,7 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
} }
@Override @Override
public void unapprove(long id) { public void reject(long id) {
Document entity = this.baseMapper.selectById(id); Document entity = this.baseMapper.selectById(id);
if (entity == null) { if (entity == null) {
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found"); throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
@@ -330,53 +360,9 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
} }
@Override @Override
public List<StockTransferOrderItemDto> getDetail(long id) { public List<StockTransferOrderItemDto> getItem(long id) {
LambdaQueryWrapper<DocumentMaterial> wrapper = new LambdaQueryWrapper<>(); var items = documentMaterialMapper.selectByPartNumber(List.of(id), null);
wrapper.eq(DocumentMaterial::getDocumentNo, id); return items.stream().map(stockTransferOrderConverter::toItemDto).toList();
List<DocumentMaterial> materials = documentMaterialMapper.selectList(wrapper);
return stockTransferOrderConverter.toItemDtoList(materials);
}
@Override
public List<StockTransferOrderItemDto> importItems(MultipartFile file) {
if (file == null || file.isEmpty()) {
throw new BusinessException("warehouse.stock_transfer_order.exception.file_empty");
}
try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
Sheet sheet = workbook.getSheetAt(0);
List<StockTransferOrderItemDto> items = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
String partNumber = getCellValueAsString(row.getCell(0));
String productSpec = getCellValueAsString(row.getCell(1));
String countStr = getCellValueAsString(row.getCell(2));
if (!StringUtils.hasText(partNumber)) continue;
int productCount = 0;
if (StringUtils.hasText(countStr)) {
try {
productCount = Integer.parseInt(countStr);
} catch (NumberFormatException e) {
productCount = 0;
}
}
StockTransferOrderItemDto item = new StockTransferOrderItemDto(
null, null, null, null, null, null, null, null,
null, partNumber, null, productCount, null, null, null, null, null, null, productSpec
);
items.add(item);
}
return items;
} catch (IOException e) {
throw new BusinessException("warehouse.stock_transfer_order.exception.import_failed");
}
} }
private void validateTransferOrder(StockTransferOrderAddDto dto) { private void validateTransferOrder(StockTransferOrderAddDto dto) {
@@ -408,16 +394,4 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
} }
} }
} }
private String getCellValueAsString(Cell cell) {
if (cell == null) {
return "";
}
return switch (cell.getCellType()) {
case STRING -> cell.getStringCellValue().trim();
case NUMERIC -> String.valueOf((long) cell.getNumericCellValue());
case BOOLEAN -> String.valueOf(cell.getBooleanCellValue());
default -> "";
};
}
} }

View File

@@ -28,6 +28,7 @@ warehouse.stock_transfer_order.validate.product_spec.not_null=物料型号不能
warehouse.stock_transfer_order.validate.product_count.not_null=调拨数量不能为空 warehouse.stock_transfer_order.validate.product_count.not_null=调拨数量不能为空
warehouse.stock_transfer_order.validate.product_count.min=调拨数量不能小于 1 warehouse.stock_transfer_order.validate.product_count.min=调拨数量不能小于 1
warehouse.stock_transfer_order.validate.part_id.not_null=物料 ID 不能为空 warehouse.stock_transfer_order.validate.part_id.not_null=物料 ID 不能为空
warehouse.stock_transfer_order.validate.order_id.not_null=调拨单 ID 不能为空
# ==========>> 生产管理 # ==========>> 生产管理

View File

@@ -30,4 +30,24 @@
<result column="CustomerId" property="customerId" /> <result column="CustomerId" property="customerId" />
</resultMap> </resultMap>
<select id="selectPageByPartNumber" resultType="Document">
SELECT DISTINCT f.*
FROM productionform f
LEFT JOIN materialinout m ON m.DocumentNo = f.Id
<where>
<if test="searchCode != null and searchCode != ''">
AND (f.FormCode LIKE CONCAT('%', #{searchCode}, '%')
OR f.FormMark LIKE CONCAT('%', #{searchCode}, '%')
OR f.FormName LIKE CONCAT('%', #{searchCode}, '%'))
</if>
<if test="partNumber != null and partNumber != ''">
AND m.PartNumber LIKE CONCAT('%', #{partNumber}, '%')
</if>
<if test="documentType != null">
AND f.FormType = #{documentType}
</if>
</where>
ORDER BY f.CreateDate DESC
</select>
</mapper> </mapper>

View File

@@ -24,4 +24,21 @@
<result column="PartId" property="partId" /> <result column="PartId" property="partId" />
</resultMap> </resultMap>
<select id="selectByPartNumber" resultType="DocumentMaterialWithInfo">
SELECT m.*, p.ProductSpecs
FROM materialinout m
LEFT JOIN product p ON p.PartNumber = m.PartNumber
<where>
<if test="documentIds != null and !documentIds.isEmpty()">
AND m.DocumentNo IN
<foreach collection="documentIds" open="(" separator="," close=")" item="documentId">
#{documentId}
</foreach>
</if>
<if test="partNumber != null and partNumber != ''">
AND m.PartNumber LIKE CONCAT('%', #{partNumber}, '%')
</if>
</where>
</select>
</mapper> </mapper>