no message

main
HUOJIN\92525 2025-04-27 17:34:27 +08:00
parent 1f2cc6c64c
commit 7adee5771f
22 changed files with 412 additions and 56 deletions

View File

@ -5,6 +5,9 @@ import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.form.
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.vo.InventoryVO;
import net.lab1024.sa.base.common.domain.PageResult;
import java.util.List;
import java.util.Map;
public interface InventoryQueryService {
/**
@ -13,8 +16,15 @@ public interface InventoryQueryService {
PageResult<InventoryVO> queryPage(InventoryQueryForm queryForm);
/**
* @param ItemKeyId
* @param ItemKeyId
* @return InventoryEntity
*/
InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId);
/**
* @param itemIds
* @return InventoryEntity
*/
List<InventoryEntity> queryInventoryByItemIds(List<Long> itemIds);
}

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.imp
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import jakarta.annotation.Resource;
import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity;
import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService;
@ -19,10 +20,13 @@ import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyQueryService;
import net.lab1024.sa.base.common.domain.PageResult;
import net.lab1024.sa.base.common.util.SmartPageUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service
public class InventoryQueryServiceImpl implements InventoryQueryService {
@ -90,7 +94,7 @@ public class InventoryQueryServiceImpl implements InventoryQueryService {
}
/**
* @param ItemKeyId
* @param ItemKeyId
* @return InventoryEntity
*/
public InventoryEntity queryInventoryByItemKeyId(Long ItemKeyId) {
@ -98,4 +102,22 @@ public class InventoryQueryServiceImpl implements InventoryQueryService {
queryWrapper.eq(InventoryEntity::getItemKeyId, ItemKeyId);
return inventoryManager.getOne(queryWrapper);
}
/**
* @param itemIds
* @return List<InventoryEntity>
*/
public List<InventoryEntity> queryInventoryByItemIds(List<Long> itemIds) {
if (CollectionUtils.isEmpty(itemIds)) {
return Collections.emptyList();
}
List<ItemKeyEntity> itemKeys = itemKeyQueryService.queryItemKeys(itemIds);
if (CollectionUtils.isEmpty(itemKeys)) {
return Collections.emptyList();
}
List<Long> itemKeyIds = itemKeys.stream().map(ItemKeyEntity::getItemKeyId).toList();
LambdaQueryWrapper<InventoryEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(InventoryEntity::getItemKeyId, itemKeyIds).apply("quantity - queued_quantity > 0");;
return inventoryManager.list(queryWrapper);
}
}

View File

@ -33,4 +33,13 @@ public interface ItemKeyQueryService {
* @return ItemKeyEntity
*/
ItemKeyEntity queryItemKey(String orderNumber, Long itemId, String propC1);
/**
* ID
*
* @param itemIds
* @return List<ItemKeyEntity>
*/
List<ItemKeyEntity> queryItemKeys(List<Long> itemIds);
}

View File

@ -70,4 +70,14 @@ public class ItemKeyQueryServiceImpl implements ItemKeyQueryService {
}
return itemKeys.get(0);
}
public List<ItemKeyEntity> queryItemKeys(List<Long> itemIds) {
if (CollectionUtils.isEmpty(itemIds)){
return Collections.emptyList();
}
itemIds = itemIds.stream().filter(Objects::nonNull).distinct().toList();
LambdaQueryWrapper<ItemKeyEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ItemKeyEntity::getItemId, itemIds);
return itemKeyManager.list(queryWrapper);
}
}

View File

@ -4,9 +4,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm;
import net.lab1024.sa.admin.module.business.wms.receive.service.ReceiveService;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog;
import org.springframework.web.bind.annotation.PostMapping;

View File

@ -1,8 +1,9 @@
package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form;
package net.lab1024.sa.admin.module.business.wms.receive.form;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data

View File

@ -1,4 +1,4 @@
package net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form;
package net.lab1024.sa.admin.module.business.wms.receive.form;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

View File

@ -1,7 +1,7 @@
package net.lab1024.sa.admin.module.business.wms.receive.service;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm;
import net.lab1024.sa.base.common.domain.ResponseDTO;
public interface ReceiveService {

View File

@ -15,13 +15,13 @@ import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.Inve
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.domain.entity.ItemKeyEntity;
import net.lab1024.sa.admin.module.business.wms.inventory.itemKey.service.ItemKeyService;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.entity.AsnEntity;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.asn.domain.form.BatchReturnForm;
import net.lab1024.sa.admin.module.business.wms.receive.asn.manager.AsnManager;
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.entity.AsnDetailEntity;
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.manager.AsnDetailManager;
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service.AsnDetailQueryService;
import net.lab1024.sa.admin.module.business.wms.receive.asnDetail.service.AsnDetailService;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReceiveForm;
import net.lab1024.sa.admin.module.business.wms.receive.form.BatchReturnForm;
import net.lab1024.sa.admin.module.business.wms.receive.service.ReceiveService;
import net.lab1024.sa.admin.module.business.wms.task.constant.TaskStatusEnum;
import net.lab1024.sa.admin.module.business.wms.task.constant.TaskTypeEnum;

View File

@ -0,0 +1,29 @@
package net.lab1024.sa.admin.module.business.wms.shipping.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm;
import net.lab1024.sa.admin.module.business.wms.shipping.service.ShippingService;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.module.support.operatelog.annotation.OperateLog;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Tag(name = "发货")
public class ShippingController {
@Resource
private ShippingService shippingService;
@Operation(summary = "分配明细 @author 霍锦")
@PostMapping("/shipping/allocationPickDetail")
@SaCheckPermission("shipping:allocationPickDetail")
@OperateLog
public ResponseDTO<String> allocationPickDetail(@RequestBody AllocationForm allocationForm) {
return shippingService.allocationPickDetail(allocationForm);
}
}

View File

@ -0,0 +1,20 @@
package net.lab1024.sa.admin.module.business.wms.shipping.form;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class AllocationForm {
@Schema(description = "出库单", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "出库单 不能为空")
private Long pickId;
@Schema(description = "出库明细", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "出库明细 不能为空")
private List<Long> pickDetailIds;
}

View File

@ -0,0 +1,18 @@
package net.lab1024.sa.admin.module.business.wms.shipping.form;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class BatchReturnForm {
@Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "入库单 不能为空")
private Long asnId;
@Schema(description = "收货明细", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "收货明细 不能为空")
private List<Long> taskIds;
}

View File

@ -1,5 +1,6 @@
package net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.form;
import io.swagger.v3.oas.annotations.media.Schema;
import net.lab1024.sa.base.common.domain.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -15,5 +16,13 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PickQueryForm extends PageParam {
@Schema(description = "客户订单号")
private String customerNumber;
@Schema(description = "状态")
private String status;
@Schema(description = "单据类型")
private String orderType;
}

View File

@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import net.lab1024.sa.base.common.domain.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
/**
*
@ -20,6 +21,7 @@ public class PickDetailQueryForm extends PageParam {
@Schema(description = "出库单")
private Long pickId;
@Schema(description = "物料")
private Long itemId;
@Schema(description = "关键字")
@Length(max = 200, message = "关键字最多200字符")
private String keywords;
}

View File

@ -35,4 +35,10 @@ public interface PickDetailService {
*
*/
ResponseDTO<String> delete(Long pickDetailId);
/**
*
* @param pickId ID
*/
void refreshPick(Long pickId);
}

View File

@ -0,0 +1,14 @@
package net.lab1024.sa.admin.module.business.wms.shipping.service;
import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm;
import net.lab1024.sa.base.common.domain.ResponseDTO;
public interface ShippingService {
/**
*
* @return String
*/
ResponseDTO<String> allocationPickDetail(AllocationForm allocationForm);
}

View File

@ -0,0 +1,182 @@
package net.lab1024.sa.admin.module.business.wms.shipping.service.impl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.admin.module.business.wms.base.item.domain.entity.ItemEntity;
import net.lab1024.sa.admin.module.business.wms.base.item.manager.ItemManager;
import net.lab1024.sa.admin.module.business.wms.base.item.service.ItemQueryService;
import net.lab1024.sa.admin.module.business.wms.base.location.domain.entity.LocationEntity;
import net.lab1024.sa.admin.module.business.wms.base.location.manager.LocationManager;
import net.lab1024.sa.admin.module.business.wms.base.stock.domain.entity.StockEntity;
import net.lab1024.sa.admin.module.business.wms.base.stock.manager.StockManager;
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.domain.entity.InventoryEntity;
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.manager.InventoryManager;
import net.lab1024.sa.admin.module.business.wms.inventory.inventory.service.InventoryQueryService;
import net.lab1024.sa.admin.module.business.wms.shipping.form.AllocationForm;
import net.lab1024.sa.admin.module.business.wms.shipping.pick.domain.entity.PickEntity;
import net.lab1024.sa.admin.module.business.wms.shipping.pick.manager.PickManager;
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.domain.entity.PickDetailEntity;
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.manager.PickDetailManager;
import net.lab1024.sa.admin.module.business.wms.shipping.pickDetail.service.PickDetailService;
import net.lab1024.sa.admin.module.business.wms.shipping.service.ShippingService;
import net.lab1024.sa.admin.module.business.wms.task.constant.TaskStatusEnum;
import net.lab1024.sa.admin.module.business.wms.task.constant.TaskTypeEnum;
import net.lab1024.sa.admin.module.business.wms.task.domain.entity.TaskEntity;
import net.lab1024.sa.admin.module.business.wms.task.manager.TaskManager;
import net.lab1024.sa.admin.module.business.wms.task.service.TaskService;
import net.lab1024.sa.admin.util.JoinerResult;
import net.lab1024.sa.admin.util.ResponseDTOUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO;
import net.lab1024.sa.base.common.util.SmartBigDecimalUtil;
import net.lab1024.sa.base.module.support.datatracer.service.DataTracerService;
import net.lab1024.sa.base.module.support.serialnumber.constant.SerialNumberIdEnum;
import net.lab1024.sa.base.module.support.serialnumber.service.SerialNumberService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class ShippingServiceImpl implements ShippingService {
@Resource
private LocationManager locationManager;
@Resource
private StockManager stockManager;
@Resource
private PickManager pickManager;
@Resource
private PickDetailManager pickDetailManager;
@Resource
private TaskManager taskManager;
@Resource
private InventoryManager inventoryManager;
@Resource
private ItemQueryService itemQueryService;
@Resource
private InventoryQueryService inventoryQueryService;
@Resource
private PickDetailService pickDetailService;
@Resource
private TaskService taskService;
@Resource
private SerialNumberService serialNumberService;
@Resource
private DataTracerService dataTracerService;
/**
*
*
* @param allocationForm
* @return resultMsg
*/
@Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> allocationPickDetail(AllocationForm allocationForm) {
Long startTime = System.currentTimeMillis();
//消息提示
JoinerResult resultMsg = JoinerResult.createJoiner();
//出库单
PickEntity pick = pickManager.getById(allocationForm.getPickId());
//出库单明细
List<PickDetailEntity> pickDetails = pickDetailManager.listByIds(allocationForm.getPickDetailIds());
//查询物料
List<Long> itemIds = pickDetails.stream().map(PickDetailEntity::getItemId).toList();
Map<Long, ItemEntity> itemMap = itemQueryService.queryByItemIdsToMap(itemIds);
//查询库存
List<InventoryEntity> inventoryList = inventoryQueryService.queryInventoryByItemIds(itemIds);
if (inventoryList.isEmpty()) {
List<String> codes = itemMap.values().stream().map(ItemEntity::getItemCode).toList();
resultMsg.getErrorMsg().add(codes + "物料库存不足,请先补充库存!");
return ResponseDTOUtil.buildResponseDTO(resultMsg);
}
List<InventoryEntity> updateToInventory = new ArrayList<>();
List<PickDetailEntity> updateToPickDetail = new ArrayList<>();
List<TaskEntity> createToTask = new ArrayList<>();
for (PickDetailEntity pickDetail : pickDetails) {
//物料
ItemEntity item = itemMap.get(pickDetail.getItemId());
BigDecimal unQty = SmartBigDecimalUtil.subtract(pickDetail.getOrderQuantity(), pickDetail.getAllocatedQuantity(), 2);
if (unQty.compareTo(BigDecimal.ZERO) == 0) {
resultMsg.getErrorMsg().add(item.getItemCode() + "物料已分配,请勿重复操作!");
continue;
}
//分配数量
BigDecimal allocateQty = BigDecimal.ZERO;
//库存
for (InventoryEntity inventory : inventoryList) {
//库存可用数量
allocateQty = SmartBigDecimalUtil.subtract(inventory.getQuantity(), inventory.getQueuedQuantity(), 2);
if (allocateQty.compareTo(BigDecimal.ZERO) <= 0) {
continue;
}
if (unQty.compareTo(allocateQty) < 0) {
allocateQty = unQty;
}
//更新库存占用数量
inventory.setQueuedQuantity(SmartBigDecimalUtil.add(inventory.getQueuedQuantity(), allocateQty, 2));
updateToInventory.add(inventory);
//更新明细分配数量
pickDetail.setAllocatedQuantity(SmartBigDecimalUtil.add(pickDetail.getAllocatedQuantity(), allocateQty, 2));
updateToPickDetail.add(pickDetail);
//容器
StockEntity stock = stockManager.queryStock(inventory.getStockId());
//库位
LocationEntity location = locationManager.queryLocation(inventory.getLocationId());
//生成分配任务
TaskEntity task = taskService.createTask(serialNumberService.generate(SerialNumberIdEnum.TASK), TaskStatusEnum.CREATED.getValue(), TaskTypeEnum.PICK.getValue(), pickDetail.getOrderQuantity(), inventory.getItemKeyId(), null, pickDetail.getPickDetailId(), stock, null, location, null, null, null);
createToTask.add(task);
unQty = SmartBigDecimalUtil.subtract(unQty, allocateQty, 2);
}
if (unQty.compareTo(BigDecimal.ZERO) > 0) {
resultMsg.getErrorMsg().add(item.getItemCode() + "物料库存不足,无法完成分配!");
} else {
resultMsg.getSussMsg().add(item.getItemCode() + "物料分配成功");
}
}
//批量操作
if (CollectionUtils.isNotEmpty(updateToInventory)) {
inventoryManager.updateBatchById(updateToInventory);
}
if (CollectionUtils.isNotEmpty(updateToPickDetail)) {
pickDetailManager.updateBatchById(updateToPickDetail);
}
if (CollectionUtils.isNotEmpty(createToTask)) {
taskManager.saveBatch(createToTask);
}
//刷新出库单
pickDetailService.refreshPick(pick.getPickId());
Long endTime = System.currentTimeMillis();
log.info("分配明细耗时:{}ms", endTime - startTime);
return ResponseDTOUtil.buildResponseDTO(resultMsg);
}
}

View File

@ -28,7 +28,7 @@
<where>
<!--客户订单号-->
<if test="queryForm.customerNumber != null and queryForm.customerNumber != ''">
AND INSTR(t_asn.customer_number,#{queryForm.customerNumber})
AND t_asn.customer_number LIKE CONCAT(#{queryForm.customerNumber},'%')
</if>
<!--单据类型-->
<if test="queryForm.orderType != null and queryForm.orderType != ''">

View File

@ -15,47 +15,23 @@
<!-- 分页查询 -->
<select id="queryPage"
resultType="net.lab1024.sa.admin.module.business.wms.receive.asnDetail.domain.vo.AsnDetailVO">
<choose>
<when test="queryForm.keywords != null and queryForm.keywords != ''">
SELECT
<include refid="base_columns"/>
FROM t_asn_detail
JOIN t_item ON t_asn_detail.item_id = t_item.item_id
<where>
t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%')
<if test="queryForm.asnId != null">
AND t_asn_detail.asn_id = #{queryForm.asnId}
</if>
</where>
UNION ALL
SELECT
<include refid="base_columns"/>
FROM t_asn_detail
JOIN t_item ON t_asn_detail.item_id = t_item.item_id
<where>
t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%')
<if test="queryForm.asnId != null">
AND t_asn_detail.asn_id = #{queryForm.asnId}
</if>
AND NOT EXISTS (
SELECT 1
FROM t_item
WHERE t_item.item_id = t_asn_detail.item_id
AND t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%')
)
</where>
</when>
<otherwise>
SELECT
<include refid="base_columns"/>
FROM t_asn_detail
<where>
<if test="queryForm.asnId != null">
t_asn_detail.asn_id = #{queryForm.asnId}
</if>
</where>
</otherwise>
</choose>
SELECT
<include refid="base_columns"/>
FROM t_asn_detail
<if test="queryForm.keywords != null and queryForm.keywords != ''">
LEFT JOIN t_item ON t_asn_detail.item_id = t_item.item_id
</if>
<where>
<if test="queryForm.asnId != null">
AND t_asn_detail.asn_id = #{queryForm.asnId}
</if>
<if test="queryForm.keywords != null and queryForm.keywords != ''">
AND (
t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%')
OR t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%')
)
</if>
</where>
</select>

View File

@ -27,6 +27,21 @@
SELECT
<include refid="base_columns"/>
FROM t_pick
<where>
<!--客户订单号-->
<if test="queryForm.customerNumber != null and queryForm.customerNumber != ''">
AND t_pick.customer_number LIKE CONCAT(#{queryForm.customerNumber},'%')
</if>
<!--单据类型-->
<if test="queryForm.orderType != null and queryForm.orderType != ''">
AND t_pick.order_type=#{queryForm.orderType}
</if>
<!--状态-->
<if test="queryForm.status != null and queryForm.status != ''">
AND t_pick.status=#{queryForm.status}
</if>
</where>
ORDER BY t_pick.pick_id DESC
</select>

View File

@ -21,6 +21,20 @@
SELECT
<include refid="base_columns"/>
FROM t_pick_detail
<if test="queryForm.keywords != null and queryForm.keywords != ''">
LEFT JOIN t_item ON t_pick_detail.item_id = t_item.item_id
</if>
<where>
<if test="queryForm.pickId != null">
AND t_pick_detail.pick_id = #{queryForm.pickId}
</if>
<if test="queryForm.keywords != null and queryForm.keywords != ''">
AND (
t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%')
OR t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%')
)
</if>
</where>
</select>

View File

@ -32,21 +32,40 @@
SELECT
<include refid="base_columns"/>
FROM t_task
<!--入库单-->
<if test="queryForm.asnId != null ">
LEFT JOIN t_asn_detail on t_asn_detail.asn_detail_id = t_task.asn_detail_id
LEFT JOIN t_item on t_item.item_id = t_asn_detail.item_id
</if>
<!--出库单-->
<if test="queryForm.pickId != null ">
LEFT JOIN t_pick_detail on t_pick_detail.pick_detail_id = t_task.pick_detail_id
LEFT JOIN t_item on t_item.item_id = t_pick_detail.item_id
</if>
<where>
<!--入库单-->
<if test="queryForm.asnId != null ">
AND t_task.asn_detail_id in (select asn_detail_id from t_asn_detail where asn_id = #{queryForm.asnId})
AND t_asn_detail.asn_id= #{queryForm.asnId}
</if>
<!--出库单-->
<if test="queryForm.pickId != null ">
AND t_task.pick_detail_id in (select pick_detail_id from t_pick_detail where pick_id =#{queryForm.pickId})
AND t_pick_detail.pick_id= #{queryForm.pickId}
</if>
<!--任务类型-->
<if test="queryForm.taskType != null and queryForm.taskType != ''">
AND t_task.task_type = #{queryForm.taskType}
</if>
<!--关键字-->
<if test="queryForm.asnId != null and queryForm.keywords !=null and queryForm.keywords!= ''">
AND (t_item.item_code LIKE CONCAT(#{queryForm.keywords}, '%')
OR t_item.item_name LIKE CONCAT(#{queryForm.keywords}, '%')
OR t_task.dst_location_code LIKE CONCAT(#{queryForm.keywords}, '%')
OR t_task.dst_stock_code LIKE CONCAT(#{queryForm.keywords}, '%')
)
</if>
</where>
</select>